diff --git a/UnitTests/VariantAnnotation/AnnotatedPositions/HgvsCodingNomenclatureTests.cs b/UnitTests/VariantAnnotation/AnnotatedPositions/HgvsCodingNomenclatureTests.cs index 2d1635bb..1853a5a6 100644 --- a/UnitTests/VariantAnnotation/AnnotatedPositions/HgvsCodingNomenclatureTests.cs +++ b/UnitTests/VariantAnnotation/AnnotatedPositions/HgvsCodingNomenclatureTests.cs @@ -14,11 +14,13 @@ public sealed class HgvsCodingNomenclatureTests { private readonly ITranscript _forwardTranscript; private readonly ITranscript _reverseTranscript; + private readonly ITranscript _gapTranscript; public HgvsCodingNomenclatureTests() { _forwardTranscript = GetForwardTranscript(); _reverseTranscript = GetReverseTranscript(); + _gapTranscript = GetGapTranscript(); } internal static ITranscript GetForwardTranscript() @@ -91,11 +93,81 @@ internal static ITranscript GetReverseTranscript() return transcript.Object; } + private static ITranscript GetGapTranscript() + { + //NM_000314.4 + var regions = new ITranscriptRegion[] + { + new TranscriptRegion(TranscriptRegionType.Exon, 1, 89623195, 89623860, 1, 666), + new TranscriptRegion(TranscriptRegionType.Gap, 1, 89623861, 89623861, 666, 667), + new TranscriptRegion(TranscriptRegionType.Exon, 1, 89623862, 89624305, 667, 1110), + new TranscriptRegion(TranscriptRegionType.Intron, 1, 89624306, 89653781, 1110, 1111), + new TranscriptRegion(TranscriptRegionType.Exon, 2, 89653782, 89653866, 1111, 1195), + new TranscriptRegion(TranscriptRegionType.Intron, 2, 89653867, 89685269, 1195, 1196), + new TranscriptRegion(TranscriptRegionType.Exon, 3, 89685270, 89685314, 1196, 1240), + new TranscriptRegion(TranscriptRegionType.Intron, 3, 89685315, 89690802, 1240, 1241), + new TranscriptRegion(TranscriptRegionType.Exon, 4, 89690803, 89690846, 1241, 1284), + new TranscriptRegion(TranscriptRegionType.Intron, 4, 89690847, 89692769, 1284, 1285), + new TranscriptRegion(TranscriptRegionType.Exon, 5, 89692770, 89693008, 1285, 1523), + new TranscriptRegion(TranscriptRegionType.Intron, 5, 89693009, 89711874, 1523, 1524), + new TranscriptRegion(TranscriptRegionType.Exon, 6, 89711875, 89712016, 1524, 1665), + new TranscriptRegion(TranscriptRegionType.Intron, 6, 89712017, 89717609, 1665, 1666), + new TranscriptRegion(TranscriptRegionType.Exon, 7, 89717610, 89717776, 1666, 1832), + new TranscriptRegion(TranscriptRegionType.Intron, 7, 89717777, 89720650, 1832, 1833), + new TranscriptRegion(TranscriptRegionType.Exon, 8, 89720651, 89720875, 1833, 2057), + new TranscriptRegion(TranscriptRegionType.Intron, 8, 89720876, 89725043, 2057, 2058), + new TranscriptRegion(TranscriptRegionType.Exon, 9, 89725044, 89728532, 2058, 5546) + }; + + var translation = new Mock(); + translation.SetupGet(x => x.CodingRegion).Returns(new CodingRegion(89624227, 89725229, 1032, 2243, 1212)); + + var rnaEdits = new IRnaEdit[3]; + rnaEdits[0] = new RnaEdit(667, 667, null); + rnaEdits[1] = new RnaEdit(707, 707, "C"); + rnaEdits[2] = new RnaEdit(5548, 5547, "AAAAAAAAAAAAAAAAAAAAAAAAAA"); + + var transcript = new Mock(); + transcript.SetupGet(x => x.Id).Returns(CompactId.Convert("NM_000314", 4)); + transcript.SetupGet(x => x.Chromosome).Returns(ChromosomeUtilities.Chr10); + transcript.SetupGet(x => x.Start).Returns(89623195); + transcript.SetupGet(x => x.End).Returns(89728532); + transcript.SetupGet(x => x.Gene.OnReverseStrand).Returns(false); + transcript.SetupGet(x => x.TranscriptRegions).Returns(regions); + transcript.SetupGet(x => x.Translation).Returns(translation.Object); + transcript.SetupGet(x => x.TotalExonLength).Returns(5546); + transcript.SetupGet(x => x.RnaEdits).Returns(rnaEdits); + return transcript.Object; + } + + [Theory] + [InlineData(89623861, 89623861, "T", "", "T", VariantType.deletion, null)] + [InlineData(89623861, 89623861, "T", "G", "T", VariantType.SNV, null)] + [InlineData(89623901, 89623901, "G", "C", "C", VariantType.SNV, "NM_000314.4:c.-326=")] + [InlineData(89623901, 89623901, "G", "T", "C", VariantType.SNV, "NM_000314.4:c.-326C>T")] + [InlineData(89623861, 89623863, "TGG", "", "GG", VariantType.deletion, "NM_000314.4:c.-365_-364del")] + [InlineData(89623859, 89623861, "GCT", "", "GC", VariantType.deletion, "NM_000314.4:c.-367_-366del")] + [InlineData(89623860, 89623862, "CTG", "", "CG", VariantType.deletion, "NM_000314.4:c.-366_-365del")] + [InlineData(89624304, 89624308, "CTGTA", "", "CT", VariantType.deletion, "NM_000314.4:c.78_79+3del")] + [InlineData(89624308, 89624310, "ATC", "", "ATC", VariantType.deletion, "NM_000314.4:c.79+3_79+5del")] + public void GetHgvscAnnotation_in_intron_gap_substitution(int variantStart, int variantEnd, string reference, string alt, + string transcriptRef, VariantType variantType, string expectedHgvsc) + { + var (startIndex, _) = + MappedPositionUtilities.FindRegion(_gapTranscript.TranscriptRegions, variantStart); + var (endIndex, _) = + MappedPositionUtilities.FindRegion(_gapTranscript.TranscriptRegions, variantEnd); + var variant = new SimpleVariant(ChromosomeUtilities.Chr10, variantStart, variantEnd, reference, alt, variantType); + var observedHgvsc = + HgvsCodingNomenclature.GetHgvscAnnotation(_gapTranscript, variant, null, startIndex, endIndex, transcriptRef, null); + + Assert.Equal(expectedHgvsc, observedHgvsc); + } [Fact] public void GetHgvscAnnotation_substitution_in_3UTR() { var variant = new SimpleVariant(ChromosomeUtilities.Chr1, 1260247, 1260247, "A", "G", VariantType.SNV); - var observedHgvsc = HgvsCodingNomenclature.GetHgvscAnnotation(_forwardTranscript, variant, null, 0, 0); + var observedHgvsc = HgvsCodingNomenclature.GetHgvscAnnotation(_forwardTranscript, variant, null, 0, 0, null, null); Assert.Equal("ENST00000343938.4:c.-311A>G", observedHgvsc); } @@ -104,7 +176,7 @@ public void GetHgvscAnnotation_substitution_in_3UTR() public void GetHgvscAnnotation_substitution_in_intron_before_TSS() { var variant = new SimpleVariant(ChromosomeUtilities.Chr1, 1262210, 1262210, "C", "G", VariantType.SNV); - var observedHgvsc = HgvsCodingNomenclature.GetHgvscAnnotation(_forwardTranscript, variant, null, 1, 1); + var observedHgvsc = HgvsCodingNomenclature.GetHgvscAnnotation(_forwardTranscript, variant, null, 1, 1, null, null); Assert.Equal("ENST00000343938.4:c.-75-6C>G", observedHgvsc); } @@ -116,7 +188,7 @@ public void GetHgvscAnnotation_insertion_in_coding_region() sequence.Setup(x => x.Substring(1262627, 1)).Returns("A"); var variant = new SimpleVariant(ChromosomeUtilities.Chr1, 1262629, 1262628, "", "G", VariantType.insertion); - var observedHgvsc = HgvsCodingNomenclature.GetHgvscAnnotation(_forwardTranscript, variant, sequence.Object, 4, 4); + var observedHgvsc = HgvsCodingNomenclature.GetHgvscAnnotation(_forwardTranscript, variant, sequence.Object, 4, 4, null, null); Assert.Equal("ENST00000343938.4:c.130_131insG", observedHgvsc); } @@ -128,7 +200,7 @@ public void GetHgvscAnnotation_insertion_after_coding_region() sequence.Setup(x => x.Substring(1262627, 1)).Returns("A"); var variant = new SimpleVariant(ChromosomeUtilities.Chr1, 1263159, 1263158, "", "G", VariantType.insertion); - var observedHgvsc = HgvsCodingNomenclature.GetHgvscAnnotation(_forwardTranscript, variant, sequence.Object, 4, 4); + var observedHgvsc = HgvsCodingNomenclature.GetHgvscAnnotation(_forwardTranscript, variant, sequence.Object, 4, 4, null, null); Assert.Equal("ENST00000343938.4:c.*15_*16insG", observedHgvsc); } @@ -140,7 +212,7 @@ public void GetHgvscAnnotation_duplication_in_coding_region() sequence.Setup(x => x.Substring(1262626, 2)).Returns("TA"); var variant = new SimpleVariant(ChromosomeUtilities.Chr1, 1262629, 1262628, "", "TA", VariantType.insertion); - var observedHgvsc = HgvsCodingNomenclature.GetHgvscAnnotation(_forwardTranscript, variant, sequence.Object, 4, 4); + var observedHgvsc = HgvsCodingNomenclature.GetHgvscAnnotation(_forwardTranscript, variant, sequence.Object, 4, 4, null, null); Assert.Equal("ENST00000343938.4:c.129_130dupTA", observedHgvsc); } @@ -180,7 +252,7 @@ public void ApplyDuplicationAdjustments_Coding_Forward() public void GetHgvscAnnotation_Deletion_start_before_transcript() { var variant = new SimpleVariant(ChromosomeUtilities.Chr1, 1260144, 1260148, "ATGTC", "", VariantType.deletion); - var observedHgvsc = HgvsCodingNomenclature.GetHgvscAnnotation(_forwardTranscript, variant, null, -1, 0); + var observedHgvsc = HgvsCodingNomenclature.GetHgvscAnnotation(_forwardTranscript, variant, null, -1, 0, null, null); Assert.Null(observedHgvsc); } @@ -189,16 +261,16 @@ public void GetHgvscAnnotation_Deletion_start_before_transcript() public void GetHgvscAnnotation_Delin_start_from_Exon_end_in_intron() { var variant = new SimpleVariant(ChromosomeUtilities.Chr1, 1262410, 1262414, "ATGTC", "TG", VariantType.indel); - var observedHgvsc = HgvsCodingNomenclature.GetHgvscAnnotation(_forwardTranscript, variant, null, 2, 3); + var observedHgvsc = HgvsCodingNomenclature.GetHgvscAnnotation(_forwardTranscript, variant, null, 2, 3, null, null); - Assert.Equal("ENST00000343938.4:c.120_122+2delATGTCinsTG", observedHgvsc); + Assert.Equal("ENST00000343938.4:c.120_122+2delinsTG", observedHgvsc); } [Fact] public void GetHgvscAnnotation_inversion_start_from_Exon_end_in_intron() { var variant = new SimpleVariant(ChromosomeUtilities.Chr1, 1262410, 1262414, "ATGTC", "GACAT", VariantType.MNV); - var observedHgvsc = HgvsCodingNomenclature.GetHgvscAnnotation(_forwardTranscript, variant, null, 2, 3); + var observedHgvsc = HgvsCodingNomenclature.GetHgvscAnnotation(_forwardTranscript, variant, null, 2, 3, null, null); Assert.Equal("ENST00000343938.4:c.120_122+2invATGTC", observedHgvsc); } @@ -207,7 +279,7 @@ public void GetHgvscAnnotation_inversion_start_from_Exon_end_in_intron() public void GetHgvscAnnotation_Deletion_end_after_transcript() { var variant = new SimpleVariant(ChromosomeUtilities.Chr1, 1260143, 1260148, "ATGTC", "", VariantType.deletion); - var observedHgvsc = HgvsCodingNomenclature.GetHgvscAnnotation(_forwardTranscript, variant, null, -1, 0); + var observedHgvsc = HgvsCodingNomenclature.GetHgvscAnnotation(_forwardTranscript, variant, null, -1, 0, null, null); Assert.Null(observedHgvsc); } @@ -216,7 +288,7 @@ public void GetHgvscAnnotation_Deletion_end_after_transcript() public void GetHgvscAnnotation_Reference_no_hgvsc() { var variant = new SimpleVariant(ChromosomeUtilities.Chr1, 1260138, 1260138, "A", "A", VariantType.reference); - var observedHgvsc = HgvsCodingNomenclature.GetHgvscAnnotation(_forwardTranscript, variant, null, -1, -1); + var observedHgvsc = HgvsCodingNomenclature.GetHgvscAnnotation(_forwardTranscript, variant, null, -1, -1, null, null); Assert.Null(observedHgvsc); } @@ -225,7 +297,7 @@ public void GetHgvscAnnotation_Reference_no_hgvsc() public void GetHgvscAnnotation_substitution_in_intron_of_reverse_gene() { var variant = new SimpleVariant(ChromosomeUtilities.Chr1, 136000, 136000, "A", "G", VariantType.SNV); - var observedHgvsc = HgvsCodingNomenclature.GetHgvscAnnotation(_reverseTranscript, variant, null, 1, 1); + var observedHgvsc = HgvsCodingNomenclature.GetHgvscAnnotation(_reverseTranscript, variant, null, 1, 1, null, null); Assert.Equal("ENST00000423372.3:c.*910-198T>C", observedHgvsc); } @@ -234,7 +306,7 @@ public void GetHgvscAnnotation_substitution_in_intron_of_reverse_gene() public void GetHgvscAnnotation_substitution_after_stopCodon_of_reverse_gene() { var variant = new SimpleVariant(ChromosomeUtilities.Chr1, 138529, 138529, "A", "G", VariantType.SNV); - var observedHgvsc = HgvsCodingNomenclature.GetHgvscAnnotation(_reverseTranscript, variant, null, 2, -1); + var observedHgvsc = HgvsCodingNomenclature.GetHgvscAnnotation(_reverseTranscript, variant, null, 2, -1, null, null); Assert.Equal("ENST00000423372.3:c.*1T>C", observedHgvsc); } @@ -243,9 +315,9 @@ public void GetHgvscAnnotation_substitution_after_stopCodon_of_reverse_gene() public void GetHgvscAnnotation_deletion_of_reverse_gene() { var variant = new SimpleVariant(ChromosomeUtilities.Chr1, 135802, 137619, "ATCGTGGGTTGT", "", VariantType.deletion); - var observedHgvsc = HgvsCodingNomenclature.GetHgvscAnnotation(_reverseTranscript, variant, null, 0, 1); + var observedHgvsc = HgvsCodingNomenclature.GetHgvscAnnotation(_reverseTranscript, variant, null, 0, 1, null, null); - Assert.Equal("ENST00000423372.3:c.*909+2_*910delACAACCCACGAT", observedHgvsc); + Assert.Equal("ENST00000423372.3:c.*909+2_*910del", observedHgvsc); } [Fact] @@ -255,7 +327,7 @@ public void GetHgvscAnnotation_insertion_at_last_position() sequence.Setup(x => x.Substring(70361157-12, 12)).Returns("TATATATATATA"); var variant = new SimpleVariant(ChromosomeUtilities.ChrX, 70361157, 70361156, "", "ACACCAGCAGCA", VariantType.insertion);//right shifted variant - var observedHgvsc = HgvsCodingNomenclature.GetHgvscAnnotation(GetForwardTranscriptWithoutUtr(), variant, sequence.Object, 0, 0); + var observedHgvsc = HgvsCodingNomenclature.GetHgvscAnnotation(GetForwardTranscriptWithoutUtr(), variant, sequence.Object, 0, 0, null, null); Assert.Equal("ENST00000579622.1:n.122_123insACACCAGCAGCA", observedHgvsc); } @@ -267,7 +339,7 @@ public void GetHgvscAnnotation_duplication_at_last_position() sequence.Setup(x => x.Substring(70361156 - 4, 4)).Returns("ACAC"); var variant = new SimpleVariant(ChromosomeUtilities.ChrX, 70361157, 70361156, "", "ACAC", VariantType.insertion);//right shifted variant - var observedHgvsc = HgvsCodingNomenclature.GetHgvscAnnotation(GetForwardTranscriptWithoutUtr(), variant, sequence.Object, 0, 0); + var observedHgvsc = HgvsCodingNomenclature.GetHgvscAnnotation(GetForwardTranscriptWithoutUtr(), variant, sequence.Object, 0, 0, null, null); Assert.Equal("ENST00000579622.1:n.119_122dupACAC", observedHgvsc); } diff --git a/UnitTests/VariantAnnotation/AnnotatedPositions/HgvsProteinNomenclatureTests.cs b/UnitTests/VariantAnnotation/AnnotatedPositions/HgvsProteinNomenclatureTests.cs index 92283936..349fb050 100644 --- a/UnitTests/VariantAnnotation/AnnotatedPositions/HgvsProteinNomenclatureTests.cs +++ b/UnitTests/VariantAnnotation/AnnotatedPositions/HgvsProteinNomenclatureTests.cs @@ -132,7 +132,7 @@ public void GetHgvsProteinAnnotation_no_change() var hgvspNotation = annotatedTranscript.HgvsProtein; - Assert.Equal("ENST00000343938.4:c.10_12delTCGinsAGT(p.(Ser4=))", hgvspNotation); + Assert.Equal("ENST00000343938.4:c.10_12delinsAGT(p.(Ser4=))", hgvspNotation); } [Fact] diff --git a/UnitTests/VariantAnnotation/AnnotatedPositions/HgvsUtilitiesTests.cs b/UnitTests/VariantAnnotation/AnnotatedPositions/HgvsUtilitiesTests.cs index af0c595c..c45a22a1 100644 --- a/UnitTests/VariantAnnotation/AnnotatedPositions/HgvsUtilitiesTests.cs +++ b/UnitTests/VariantAnnotation/AnnotatedPositions/HgvsUtilitiesTests.cs @@ -187,7 +187,7 @@ public void GetAltPeptideSequence_Genomic() public void GetCdnaPositionOffset_Intron_RltL_Reverse() { var transcript = HgvsCodingNomenclatureTests.GetReverseTranscript(); - var po = HgvsUtilities.GetCdnaPositionOffset(transcript, 137619, 1); + var po = HgvsUtilities.GetCdnaPositionOffset(transcript, 137619, 1,true); Assert.NotNull(po); Assert.True(po.HasStopCodonNotation); @@ -214,7 +214,7 @@ public void GetCdnaPositionOffset_Intron_ReqL_Reverse() transcript.SetupGet(x => x.TranscriptRegions).Returns(regions); transcript.SetupGet(x => x.Translation).Returns(translation.Object); - var po = HgvsUtilities.GetCdnaPositionOffset(transcript.Object, 108909672, 0); + var po = HgvsUtilities.GetCdnaPositionOffset(transcript.Object, 108909672, 0, true); Assert.NotNull(po); Assert.False(po.HasStopCodonNotation); @@ -227,7 +227,7 @@ public void GetCdnaPositionOffset_Intron_ReqL_Reverse() public void GetCdnaPositionOffset_Intron_LltR_Reverse() { var transcript = HgvsCodingNomenclatureTests.GetReverseTranscript(); - var po = HgvsUtilities.GetCdnaPositionOffset(transcript, 136000, 1); + var po = HgvsUtilities.GetCdnaPositionOffset(transcript, 136000, 1, true); Assert.NotNull(po); Assert.True(po.HasStopCodonNotation); @@ -256,7 +256,7 @@ public void GetCdnaPositionOffset_Intron_LeqR_Reverse() transcript.SetupGet(x => x.TranscriptRegions).Returns(regions); transcript.SetupGet(x => x.Translation).Returns(translation.Object); - var po = HgvsUtilities.GetCdnaPositionOffset(transcript.Object, 136711, 1); + var po = HgvsUtilities.GetCdnaPositionOffset(transcript.Object, 136711, 1, true); Assert.NotNull(po); Assert.True(po.HasStopCodonNotation); @@ -269,7 +269,7 @@ public void GetCdnaPositionOffset_Intron_LeqR_Reverse() public void GetCdnaPositionOffset_Gap_LeftSide_Forward() { var transcript = GetForwardGapTranscript(); - var po = HgvsUtilities.GetCdnaPositionOffset(transcript, 1101, 1); + var po = HgvsUtilities.GetCdnaPositionOffset(transcript, 1101, 1,false); Assert.NotNull(po); Assert.False(po.HasStopCodonNotation); @@ -282,7 +282,7 @@ public void GetCdnaPositionOffset_Gap_LeftSide_Forward() public void GetCdnaPositionOffset_Gap_RightSide_Forward() { var transcript = GetForwardGapTranscript(); - var po = HgvsUtilities.GetCdnaPositionOffset(transcript, 1102, 1); + var po = HgvsUtilities.GetCdnaPositionOffset(transcript, 1102, 1,true); Assert.NotNull(po); Assert.False(po.HasStopCodonNotation); @@ -295,7 +295,7 @@ public void GetCdnaPositionOffset_Gap_RightSide_Forward() public void GetCdnaPositionOffset_Gap_LeftSide_Reverse() { var transcript = GetReverseGapTranscript(); - var po = HgvsUtilities.GetCdnaPositionOffset(transcript, 1102, 1); + var po = HgvsUtilities.GetCdnaPositionOffset(transcript, 1102, 1,true); Assert.NotNull(po); Assert.False(po.HasStopCodonNotation); @@ -308,7 +308,7 @@ public void GetCdnaPositionOffset_Gap_LeftSide_Reverse() public void GetCdnaPositionOffset_Gap_RightSide_Reverse() { var transcript = GetReverseGapTranscript(); - var po = HgvsUtilities.GetCdnaPositionOffset(transcript, 1103, 1); + var po = HgvsUtilities.GetCdnaPositionOffset(transcript, 1103, 1,false); Assert.NotNull(po); Assert.False(po.HasStopCodonNotation); @@ -321,7 +321,7 @@ public void GetCdnaPositionOffset_Gap_RightSide_Reverse() public void GetCdnaPositionOffset_Intron_RltL_Forward() { var transcript = HgvsCodingNomenclatureTests.GetForwardTranscript(); - var po = HgvsUtilities.GetCdnaPositionOffset(transcript, 1262210, 1); + var po = HgvsUtilities.GetCdnaPositionOffset(transcript, 1262210, 1,true); Assert.NotNull(po); Assert.False(po.HasStopCodonNotation); @@ -334,7 +334,7 @@ public void GetCdnaPositionOffset_Intron_RltL_Forward() public void GetCdnaPositionOffset_Intron_LltR_Forward() { var transcript = HgvsCodingNomenclatureTests.GetForwardTranscript(); - var po = HgvsUtilities.GetCdnaPositionOffset(transcript, 1260583, 1); + var po = HgvsUtilities.GetCdnaPositionOffset(transcript, 1260583, 1,true); Assert.NotNull(po); Assert.False(po.HasStopCodonNotation); @@ -347,7 +347,7 @@ public void GetCdnaPositionOffset_Intron_LltR_Forward() public void GetCdnaPositionOffset_Intron_LeqR_Forward() { var transcript = HgvsCodingNomenclatureTests.GetForwardTranscript(); - var po = HgvsUtilities.GetCdnaPositionOffset(transcript, 1261349, 1); + var po = HgvsUtilities.GetCdnaPositionOffset(transcript, 1261349, 1,true); Assert.NotNull(po); Assert.False(po.HasStopCodonNotation); @@ -360,7 +360,7 @@ public void GetCdnaPositionOffset_Intron_LeqR_Forward() public void GetCdnaPositionOffset_Exon_Forward() { var transcript = HgvsCodingNomenclatureTests.GetForwardTranscript(); - var po = HgvsUtilities.GetCdnaPositionOffset(transcript, 1262627, 4); + var po = HgvsUtilities.GetCdnaPositionOffset(transcript, 1262627, 4,true); Assert.NotNull(po); Assert.False(po.HasStopCodonNotation); @@ -373,7 +373,7 @@ public void GetCdnaPositionOffset_Exon_Forward() public void GetCdnaPositionOffset_Exon_Reverse() { var transcript = HgvsCodingNomenclatureTests.GetReverseTranscript(); - var po = HgvsUtilities.GetCdnaPositionOffset(transcript, 137721, 2); + var po = HgvsUtilities.GetCdnaPositionOffset(transcript, 137721, 2,true); Assert.NotNull(po); Assert.True(po.HasStopCodonNotation); @@ -413,7 +413,7 @@ public void GetCdnaPositionOffset_Gap_Forward_ReturnNull() transcript.SetupGet(x => x.TranscriptRegions).Returns(regions); transcript.SetupGet(x => x.Translation).Returns(translation.Object); - var po = HgvsUtilities.GetCdnaPositionOffset(transcript.Object, 135001, 0); + var po = HgvsUtilities.GetCdnaPositionOffset(transcript.Object, 135001, 0,false); Assert.NotNull(po); Assert.True(po.HasStopCodonNotation); diff --git a/UnitTests/VariantAnnotation/AnnotatedPositions/HgvscNotationTests.cs b/UnitTests/VariantAnnotation/AnnotatedPositions/HgvscNotationTests.cs index 6a463cbc..848f00dd 100644 --- a/UnitTests/VariantAnnotation/AnnotatedPositions/HgvscNotationTests.cs +++ b/UnitTests/VariantAnnotation/AnnotatedPositions/HgvscNotationTests.cs @@ -26,7 +26,7 @@ public void ToString_deletion_one_base() var hgvsc = new HgvscNotation("T", "", "NM_012232.1", GenomicChange.Deletion, startPosOff, endPosOff, true); - Assert.Equal("NM_012232.1:c.19delT", hgvsc.ToString()); + Assert.Equal("NM_012232.1:c.19del", hgvsc.ToString()); } // NM_012232.1:c.19_21delTGC (multiple nucleotide) @@ -38,7 +38,7 @@ public void ToString_deletion_multiple_base() var hgvsc = new HgvscNotation("TGC", "", "NM_012232.1", GenomicChange.Deletion, startPosOff, endPosOff, true); - Assert.Equal("NM_012232.1:c.19_21delTGC", hgvsc.ToString()); + Assert.Equal("NM_012232.1:c.19_21del", hgvsc.ToString()); } // NM_012232.1:c.7dupT (one base duplication) diff --git a/UnitTests/VariantAnnotation/AnnotatedPositions/HgvsgNotationTests.cs b/UnitTests/VariantAnnotation/AnnotatedPositions/HgvsgNotationTests.cs old mode 100644 new mode 100755 index 5cba5471..241dcf6f --- a/UnitTests/VariantAnnotation/AnnotatedPositions/HgvsgNotationTests.cs +++ b/UnitTests/VariantAnnotation/AnnotatedPositions/HgvsgNotationTests.cs @@ -16,8 +16,8 @@ public sealed class HgvsgNotationTests [Theory] [InlineData(5, 5, "G", "T", VariantType.SNV, "NC_012920.1:g.5G>T")] [InlineData(5, 5, "G", "G", VariantType.SNV, "NC_012920.1:g.5=")] - [InlineData(5, 7, "GTG", "", VariantType.deletion, "NC_012920.1:g.5_7delGTG")] - [InlineData(10, 12, "GAC", "", VariantType.deletion, "NC_012920.1:g.12_14delCGA")] + [InlineData(5, 7, "GTG", "", VariantType.deletion, "NC_012920.1:g.5_7del")] + [InlineData(10, 12, "GAC", "", VariantType.deletion, "NC_012920.1:g.12_14del")] [InlineData(16, 15, "", "GATA", VariantType.insertion, "NC_012920.1:g.15_16insGATA")] [InlineData(19, 22, "TGAC", "GTCA", VariantType.MNV, "NC_012920.1:g.19_22invTGAC")] [InlineData(10, 9, "", "GAC", VariantType.insertion, "NC_012920.1:g.12_14dupCGA")] diff --git a/UnitTests/VariantAnnotation/AnnotatedPositions/Transcript/CdnaSequenceTests.cs b/UnitTests/VariantAnnotation/AnnotatedPositions/Transcript/CdnaSequenceTests.cs new file mode 100644 index 00000000..d42a9f33 --- /dev/null +++ b/UnitTests/VariantAnnotation/AnnotatedPositions/Transcript/CdnaSequenceTests.cs @@ -0,0 +1,121 @@ +using UnitTests.TestDataStructures; +using VariantAnnotation.AnnotatedPositions.Transcript; +using VariantAnnotation.Caches.DataStructures; +using VariantAnnotation.Interface.AnnotatedPositions; +using Xunit; + +namespace UnitTests.VariantAnnotation.AnnotatedPositions.Transcript +{ + public sealed class CdnaSequenceTests + { + [Fact] + public void RnaEdits_snv_forward_no_utr() + { + //NR_002754.2 + var genomicSeq = new SimpleSequence("actctggtttctcttcaaatcgtataaatctttcgccttttactaaagatttccgtggagagaaacgagtgtgagtctgaaaccaattttttgaggccttgcgtttattagcagggctt", 11968210); + var codingRegion = new CodingRegion(11968211, 11968329, 1, 119, 119); + + var regions = new ITranscriptRegion[] + { + new TranscriptRegion(TranscriptRegionType.Exon, 1, 11968211, 11968329, 1, 119) + }; + + var rnaEdits = new IRnaEdit[] { new RnaEdit(107,107,"t") }; + const byte startExonPhase = 0; + + var codingSequence = new CdnaSequence(genomicSeq, codingRegion, regions, false, rnaEdits); + + Assert.Equal("actctggtttctcttcaaatcgtataaatctttcgccttttactaaagatttccgtggagagaaacgagtgtgagtctgaaaccaattttttgaggccttgcgttttttagcagggctt", codingSequence.GetCdnaSequence()); + + } + + [Fact] + public void RnaEdits_snv_forward_with_utr() + { + //NM_001144032.2 chr1:148644011-148644795 + var genomicSeq = new SimpleSequence("ACTATAAAGACAGTGAAAAGATCAGTGGTTATCTTTGCAGACGCCACCATCGCTGTGAGCCCTGTACTATCAGCCATGGTCAACTCCGTCGTCTTTTTTGAAATCACCAGGGATGGCAAGCCCTTGGGCCGCATCTCCATCAAACTGTTTGCAGACAAGATTCCAAAGACAGCAGAAAACTTTCGTGCTCTGAGCACTGGAGAGAAAGGATTTCGTTATAAGGGTTCCTGCTTTCACAGAATTATTCCAGGGTTTATGTGTCAGGGTGGTGACTTCACACGCCCTAATGGCACCGGTGACAAGTCCATCTATGGGGAGAAATTTGATGATGAGAACCTCATCCGAAAGCATACAGGTTCTGGCATCTTGTCCATGGCAAATGCTGGACCCAACACAAATGGTTCCCAGTTTTTCATCTGTGCTGCCAAGACTGAGTGGTTGGATGGCAAGCATGTGGCGTTTGGCAAGGTGAAAGAACGTGTGAATATTGTGGAAGCCACGGAGCACTTTGGGTACAGGAATAGCAAGACCAGCAAGAAGATCACCATTGCTGACTGTGGACAATTCTAATGAGTTTGACTTGTGTTTTATTTTCACCACCAGACCCATTCCTTCTGTAGCTCAGGAGAGCACCCCTCCACCACATTTGCTTGCAATATCCTAGAATCTTTGTGCTCTTGCTGCAGTTCCCTTTGGGTTCCATGTTTTCCTTGTTCCCTTCCATGCCTAGCTGGATGGCAGAGTTGAGTTAAGTTTATGATTATGAAATAAAAACTAAGTAACAA", 148644011 - 1); + + var codingRegion = new CodingRegion(148644086, 148644580, 76, 570, 495); + + var regions = new ITranscriptRegion[] + { + new TranscriptRegion(TranscriptRegionType.Exon, 1, 148644011,148644795, 1, 785) + }; + + var rnaEdits = new IRnaEdit[] + { + new RnaEdit(420, 420, "C"), + new RnaEdit(500, 500, "T"), + new RnaEdit(737, 737, "T") + }; + const byte startExonPhase = 0; + + var codingSequence = new CdnaSequence(genomicSeq, codingRegion, regions, false, rnaEdits); + + Assert.Equal("ATGGTCAACTCCGTCGTCTTTTTTGAAATCACCAGGGATGGCAAGCCCTTGGGCCGCATCTCCATCAAACTGTTTGCAGACAAGATTCCAAAGACAGCAGAAAACTTTCGTGCTCTGAGCACTGGAGAGAAAGGATTTCGTTATAAGGGTTCCTGCTTTCACAGAATTATTCCAGGGTTTATGTGTCAGGGTGGTGACTTCACACGCCCTAATGGCACCGGTGACAAGTCCATCTATGGGGAGAAATTTGATGATGAGAACCTCATCCGAAAGCATACAGGTTCTGGCATCTTGTCCATGGCAAATGCTGGACCCAACACAAATGGTTCCCAGTTTTTCATCTGCGCTGCCAAGACTGAGTGGTTGGATGGCAAGCATGTGGCGTTTGGCAAGGTGAAAGAACGTGTGAATATTGTGGAAGCCATGGAGCACTTTGGGTACAGGAATAGCAAGACCAGCAAGAAGATCACCATTGCTGACTGTGGACAATTCTAA", codingSequence.GetCdnaSequence().Substring(codingRegion.CdnaStart-1, codingRegion.Length)); + + } + + [Fact] + public void RnaEdits_in_coding_sequence_reverse_insertion() + { + //NM_000682.6, chrom: chr2:96778623-96781984 + var genomicSeq = new SimpleSequence("CTTATTACAAAATATCCTTTATTGATAAAATAGCTCAGAGTTTAAAAAAAAAAAAAACACCACCTGCATGTCGCAATAAGAGGTCACAGGCAAGAACACTGGGGGTCCCATGGGGCGCACACAAGACCGGCCAGCAGAGGGTCACAGTCAGTCCCTCTCCTGGCCCAGCTCCCCACCACATCCCAGGGCGATACTCTGGCCTCAACAACCCACTGAGGACCAAGCTGGGAAGCCTCCCACACCCCAGGAAGGACTCTTTTTGGTCCCCTCCATTCTCTCTACACCCAGAAAACTCCCTCGGTGCCCTTCCAAATCTAGCAGGTCCATCTGGCCCATTCCCCCGACACCTGCCAAGCTAAGATGCCTACTGGCCCAATGTTGAAGCCAGGCCCTCTCCAAGGGAAGGCCGATAAACCTCCTTTCCACACTTCCAACTGTTCTGGGTGCCAGGTTTTGGGGTGGGACTGAGAACCAGGAAGCAGGGGTCCTCAATGCACAGCCCCATCAGCATTGCGGGGAGCAGCGTGGCTGGGTCCGAGGCAGTCCACAAGCACCCACCTGGGGGGATCAGTTGTGGTTCACAAGGACTCATTTGGGGCTTGGAGACCTGGCCGGGCACTCCAGTGGGAGGCTCCCCTAGGGGCGCACCAGGCTCTGATGCCAGTACCCCACCTGGGGGCGCTGCCACCTGTCACAGGCTCTCATCTTAGACTGTTGCCGAGGTGTGGATATTTTGAGCTGTCTTGGGGAGACAATTTGCCTCCTTGATGACAAAAGACTTATCCCCCACTGGGGAGACCCAAGCCACTAAAAACCCTCTTGGTGTTGCCGGTGAAATGTCGAAACGTTGTCATGTAGCGTAATAACTCAGACCTTTGCAGCCAGAAGAACACATTCTCAAAGAGATCCTTTAACTTGAAATAGTGATTCTGTCTGCCACTCCCGGCTTCCAGTTCGGGGTAGGAATTCACACACCCCAGGGACAGAACAAAAGTCTACAGGAAGACAGGTGGTGGTAAACACAGAGGAAAGGGATTTTTATATCACCATATAATCACATTTTTGGTTCTCTAGTGTGTTCCCCCACAGAGCTCAAAGCTTTCTGCAAAGCCTTTCATCTCCCTGCAGCAAGTAGGCAGTGAGCTATTGTCGCCCCGATTTTTGCAGGGGGTGAATGCCAGTGATCGGGGATCTCCCGTCGAGGCAGAGACCAGGCCTCCAAGACCGCCCCAGCGAGGCATCCACGTGGCCACCCACCTACCGGAGGGGTGCTGGGTAAGGAAGCCGATCCATTGTTCTGGCTTTCAAAGGAACCACAGATCCGAAAACAGGCAAAGGGGGAAAGGAGGGCCCAGAGACGATGCCACCCCATAAGCCCCCATCCCAGCGCCTGCCAGGGACCGCGAGTGCCTAGCGTGGGTGATCAGTCTTCGTTTCTTCCTCCCCCTCAGCAGCAGGCCCCACTGGGAAAAGTGGAAGGCTGGCTCCGTGCTCTTTGTGGGTGGGGGGGAGATGAAAAAGAAACGAAAACACCACAAGCAAGTGACCTGCCAGGAACACAAGGTCCTCAAGAAAGGGAAGCCCAGACATTGGTCTGGAGAGCATGGGGCTCTGGGAAGAAAGTGCTCTCTCTTCTCCTGGTCTTGGCTATGTTCCAGAGGATTTGAACCACCTCCATCGGCCTGTGCTCAGGGAGAGGGTGGAGAAGGGGTCCCCCACAGCTAAGCCGGCAAGGGGAAGCTTCACTGGGACCCTTGCTAGCAGCCCCCCTGCCCACCCCTCCCAAGGGGTTCCTAAGATGAGGCCTACAGGATCTGGGCAGGGAGCAGAAAGCCCAGGGGAGGCAGCCACACACAGCAGGGCAAGAAGCAGGGTGACCCCGGCGCCACCGCACCAACCCCACAGGGGCAGCGCAGGCGGGCTCACCAGGCCGTCTGGGTCCACGGGCGGCACAGGATCCTCCGGAAGGCACGGCGGAAGTCCTGGTTGAAGATGGTGTAGATAACAGGGTTCAGTGAGCTGTTGCAGTAGCCGATCCAGAAGAAGAACTGGAAGAGGCCATGGGGCACCTTGCAGTGCTTCGGGCAGATGGCTCCCAGGCTGTAGCTGAAGAAGAAGGGGAACCAGCAGAGCACAAAAACGCCAATGACCACAGCCAGCACGAAGGTGAAGCGCTTCTCCCGGGTCAGCTGCGCCCGTCGACGCCACCACTGCCCACCTATAGCACCCACGCCCCTGCCCAGGAGCACCTGGCCACGTAGGGTGGCCAGCACCCGGGAGCCCTGTGGCTGCTGCAGCGGGGGGCTGCAAGCTGAGGCCGGAGACACTGGCACTGCCTGGGGTTCACACTCTTCCTCCTCCTCCTCCTCCTCTTCAGCTTCATCCTCTGGAGATGCCCCACAAACACCCTCCTTCTGGCCCTGGCCTGAGTTGGGAAGGGCAGCCCAACTGGGTGGCAAGGCCCGGGTCCCAGTATCTTCAGGGGTCTCCCCCTCCTCCTTCTCCCCAGTGGACTTCGAGTGTCCGTTGACCTCTCTGGCAGAAGCCACAGAGGCCAGGGCTGGCAGTTTGGCTGAGGCCAAAGCCCCACCATGGTCGGGTCGGGGCTGCTTGGACTCACCCTGCCCAGGCCCCCCCTTGGCCCTGGGACCTCTGCGGTTGCTGCGTTTGGCGATCAGGTAGATGCGCAGGTAGACAAGGATCATGATGAGGCAAGGAGCAAAGAAAGATCCGATGCTGGAGGCCAGGATGTACCAGGCCTCCTGGTTGAGCTTGCACTGGGGGCGCCCGCGCGGCTGGGGGCCCTGGTCGCCCTTGTAGATGAGGGGCGGCAGCGAGATGACGGCGGCGATGAGCCACACAGTGAGGATGATGCACTTGATGCGGCGCGGGGTGCGCTTGGAGTTGTACTCCAGCGCGCGGCTCACGGCCCAGTAGCGGTCCAGGCTGATGGCGCACAGGTGCACGATGGACGAGGTGCAGAAGAGCACGTCGAGCGCCAGGTACACCTCGCACCACGTGCGCCGGAAGTACCAGTAGCCCAGCAGCTCGTTGGCCAGCGAGAAAGGGATGATGAGCGTGGCCACCAGGATGTCGGCGGCGGCCAGCGACACCAGGAACAGGTTCTGAGGGGCGCGCAGCGAGCGGCTGGTCAACACAGCCAGGATGACCAGAGCGTTGCCGAAGATGGTAAAGAGAATGAGGAAGGTGATGGCCGCCGCTATGGCCGCTGTGGCCTGCACGGAGTAGGGGTCCTGGTGGTCCATGACGGGGCGGGAGGTGGGCAGAGGGAGCGCTGCCCGCCCAGTGCGCACCGTGGACGACAGCGCTGCCCGGCTCGGCTAGACAAGAGCGTCGCCCCT", 96778623 - 1); + var codingRegion = new CodingRegion(96780545, 96781888, 97, 1449, 1344); + + var regions = new ITranscriptRegion[] + { + new TranscriptRegion(TranscriptRegionType.Exon,1, 96778623,96780986, 1008, 3371), + new TranscriptRegion(TranscriptRegionType.Exon, 1, 96780987,96781984, 1, 998) + }; + + var rnaEdits = new IRnaEdit[] + { + new RnaEdit(999, 998, "AGAGGAGGA") + }; + const byte startExonPhase = 0; + const bool onReverseStrand = true; + var codingSequence = new CdnaSequence(genomicSeq, codingRegion, regions, onReverseStrand, rnaEdits); + + var expectedCodingSeq = "ATGGACCACCAGGACCCCTACTCCGTGCAGGCCACAGCGGCCATAGCGGCGGCCATCACCTTCCTCATTCTCTTTACCATCTTCGGCAACGCTCTGGTCATCCTGGCTGTGTTGACCAGCCGCTCGCTGCGCGCCCCTCAGAACCTGTTCCTGGTGTCGCTGGCCGCCGCCGACATCCTGGTGGCCACGCTCATCATCCCTTTCTCGCTGGCCAACGAGCTGCTGGGCTACTGGTACTTCCGGCGCACGTGGTGCGAGGTGTACCTGGCGCTCGACGTGCTCTTCTGCACCTCGTCCATCGTGCACCTGTGCGCCATCAGCCTGGACCGCTACTGGGCCGTGAGCCGCGCGCTGGAGTACAACTCCAAGCGCACCCCGCGCCGCATCAAGTGCATCATCCTCACTGTGTGGCTCATCGCCGCCGTCATCTCGCTGCCGCCCCTCATCTACAAGGGCGACCAGGGCCCCCAGCCGCGCGGGCGCCCCCAGTGCAAGCTCAACCAGGAGGCCTGGTACATCCTGGCCTCCAGCATCGGATCTTTCTTTGCTCCTTGCCTCATCATGATCCTTGTCTACCTGCGCATCTACCTGATCGCCAAACGCAGCAACCGCAGAGGTCCCAGGGCCAAGGGGGGGCCTGGGCAGGGTGAGTCCAAGCAGCCCCGACCCGACCATGGTGGGGCTTTGGCCTCAGCCAAACTGCCAGCCCTGGCCTCTGTGGCTTCTGCCAGAGAGGTCAACGGACACTCGAAGTCCACTGGGGAGAAGGAGGAGGGGGAGACCCCTGAAGATACTGGGACCCGGGCCTTGCCACCCAGTTGGGCTGCCCTTCCCAACTCAGGCCAGGGCCAGAAGGAGGGTGTTTGTGGGGCATCTCCAGAGGATGAAGCTGAAGAGGAGGAAGAGGAGGAGGAGGAGGAGGAAGAGTGTGAACCCCAGGCAGTGCCAGTGTCTCCGGCCTCAGCTTGCAGCCCCCCGCTGCAGCAGCCACAGGGCTCCCGGGTGCTGGCCACCCTACGTGGCCAGGTGCTCCTGGGCAGGGGCGTGGGTGCTATAGGTGGGCAGTGGTGGCGTCGACGGGCGCAGCTGACCCGGGAGAAGCGCTTCACCTTCGTGCTGGCTGTGGTCATTGGCGTTTTTGTGCTCTGCTGGTTCCCCTTCTTCTTCAGCTACAGCCTGGGAGCCATCTGCCCGAAGCACTGCAAGGTGCCCCATGGCCTCTTCCAGTTCTTCTTCTGGATCGGCTACTGCAACAGCTCACTGAACCCTGTTATCTACACCATCTTCAACCAGGACTTCCGCCGTGCCTTCCGGAGGATCCTGTGCCGCCCGTGGACCCAGACGGCCTGGTGA"; + + var rnaEditLength = rnaEdits[0].Bases.Length; + + Assert.Equal(expectedCodingSeq, codingSequence.GetCdnaSequence().Substring(codingRegion.CdnaStart-1, codingRegion.Length+rnaEditLength)); + + } + + [Fact] + public void With_rnaEdits_reverse_deletion_utr() + { + //NM_001317107.1 chr14:22138125-22139232 + var genomicSeq = new SimpleSequence("ATATGGTATGTAACTTATTCTTTGCAAGGCGCTTCTTTAATTTGGAGCACCACGTATCCTAAGGACGTAGACATTTTCATTTTTCTTCTTTTCTCTCTTTTCTCCCCACTAACTTGTTTAAGGCACTCTTCATTTCTTCATTCCTAAGGGTATAGATAATGGGGTTCAGCAGGGGGGTGACTGCAGTGAAAAACACAGATACTGCCTTGTCCTCTGGGAGGCTGGTGGATGGGCGGGAATAGATGAAGATGCAGTGTCCCAGGAACAGTGTAACTACAGTGAGATGGGCTGCACAGGTGGACAGGGCCTTCCACTTGCCCTTGGAGATCTGCTGCCTCAGACTCACCAGGATGACTGCGTAGGACACCACCAGGACCACAAAACAGACCACGGAGATCAATCCACTGTTGGAGACAATGAGGATCTCAAGGACGTGGGTGTGTCAATGCAGGCCAGCTTGATCACCTGAGGTACATCACAGAAGAAGTTGTCAATCTCATCAGGACCACAGTAGGGCAGCTTGATGGTAAGGGAGGTGAGGGCTATGGAGTGGATGGTCCCTCCTGTCCAGAGGGCCACAGCCAGCAGCACACATACCTTCCAGTTCATCACTATCATGTACTGCAGGGGTTTACAGATGGCCACATACCGATCATAGGCCATGACGGTGAGGAGGAAGATCTCTGTGCAGGCAAAGAGGTGCAGGAAGAACATCTGGGTCACACAGGCATCAAAAGAGATGAGCTTTTCCTCTGACCACACGTCTCTCAGCATCTTGGGGACAGTGACAGTGGAGTGGCAGACATCAATAAAGGACAGGTTGCTGAGGAAGAAATACATGGGAGTATGGAGCCGGTGGTCATAGATAATAGTTATGACAATGAGAACATTCCCAATCAGTGTCAGGACATAAAAAATGAGGAACATGGAAAACATAGCTATCCGTGCCTTATGATTTACAGATAAACCTCTAAGCCGAAAATATGTCACTAAAGAAGTTTGATTGAGTAGGATGGCCTCTTCCATTCTCTTTGTTAGACAACCTGTAAAGAATTAGAAAAAAAGTCTAATATAACACAGTATCTGCATCAATCATTTGGTCATTTAA", 22138125 - 1); + var codingRegion = new CodingRegion(22138201, 22139150, 83, 1030, 948); + + var regions = new ITranscriptRegion[] + { + new TranscriptRegion(TranscriptRegionType.Exon, 1, 22138125,22138561, 670, 1106), + new TranscriptRegion(TranscriptRegionType.Gap, 1, 22138562,22138563, 669, 670), + new TranscriptRegion(TranscriptRegionType.Exon, 1, 22138564,22139232, 1, 669) + }; + + var rnaEdits = new IRnaEdit[] + { + new RnaEdit(905, 905, "T"), + new RnaEdit(796, 796, "C"), + new RnaEdit(679, 679, "A"), + new RnaEdit(670, 671, "") + }; + + const byte startExonPhase = 0; + var codingSequence = new CdnaSequence(genomicSeq, codingRegion, regions, true, rnaEdits); + + var expectedCodingSeq = "ATGGAAGAGGCCATCCTACTCAATCAAACTTCTTTAGTGACATATTTTCGGCTTAGAGGTTTATCTGTAAATCATAAGGCACGGATAGCTATGTTTTCCATGTTCCTCATTTTTTATGTCCTGACACTGATTGGGAATGTTCTCATTGTCATAACTATTATCTATGACCACCGGCTCCATACTCCCATGTATTTCTTCCTCAGCAACCTGTCCTTTATTGATGTCTGCCACTCCACTGTCACTGTCCCCAAGATGCTGAGAGACGTGTGGTCAGAGGAAAAGCTCATCTCTTTTGATGCCTGTGTGACCCAGATGTTCTTCCTGCACCTCTTTGCCTGCACAGAGATCTTCCTCCTCACCGTCATGGCCTATGATCGGTATGTGGCCATCTGTAAACCCCTGCAGTACATGATAGTGATGAACTGGAAGGTATGTGTGCTGCTGGCTGTGGCCCTCTGGACAGGAGGGACCATCCACTCCATAGCCCTCACCTCCCTTACCATCAAGCTGCCCTACTGTGGTCCTGATGAGATTGACAACTTCTTCTGTGATGTACCTCAGGTGATCAAGCTGGCCTGCATTGACACCCACGTCATTGAGATCCTCATTGTCTCCAACAGTGGATTGATCTCCGTGGTCTGTTTTGTGGTCCTGGTGGTGTCCTACGCAGTCATCCTGGTGAGTCTGAGGCAGCAGATCTCCAAGGGCAAGCGGAAGGCCCTGTCCACCTGTGCAGCCCATCTCACTGTAGTTACACTGTTCCTGGGACACTGCATCTTCATCTATTCCCGCCCATCCACCAGCCTCCCAGAGGACAAGGTAGTATCTGTGTTTTTCACTGCAGTCACCCCCCTGCTGAACCCCATTATCTATACCCTTAGGAATGAAGAAATGAAGAGTGCCTTAAACAAGTTAGTGGGGAGAAAAGAGAGAAAAGAAGAAAAATGA"; + + Assert.Equal(expectedCodingSeq, codingSequence.GetCdnaSequence().Substring(codingRegion.CdnaStart-1, codingRegion.Length)); + + } + + + } +} \ No newline at end of file diff --git a/UnitTests/VariantAnnotation/AnnotatedPositions/Transcript/CodingSequenceTests.cs b/UnitTests/VariantAnnotation/AnnotatedPositions/Transcript/CodingSequenceTests.cs index a999d89a..50d6d4dd 100644 --- a/UnitTests/VariantAnnotation/AnnotatedPositions/Transcript/CodingSequenceTests.cs +++ b/UnitTests/VariantAnnotation/AnnotatedPositions/Transcript/CodingSequenceTests.cs @@ -21,17 +21,18 @@ public void Create() var regions = new ITranscriptRegion[] { - new TranscriptRegion(TranscriptRegionType.Exon, 4, 22213728, 22213827, 439, 538), + new TranscriptRegion(TranscriptRegionType.Exon, 4, 22213728, 22213827, 439, 538), new TranscriptRegion(TranscriptRegionType.Intron, 3, 22213828, 22213912, 438, 439), - new TranscriptRegion(TranscriptRegionType.Exon, 3, 22213913, 22214167, 184, 438), + new TranscriptRegion(TranscriptRegionType.Exon, 3, 22213913, 22214167, 184, 438), new TranscriptRegion(TranscriptRegionType.Intron, 2, 22214166, 22214430, 183, 184), - new TranscriptRegion(TranscriptRegionType.Exon, 2, 22214431, 22214559, 55, 183), - new TranscriptRegion(TranscriptRegionType.Intron, 1, 22214560, 22215160, 54, 55), - new TranscriptRegion(TranscriptRegionType.Exon, 1, 22215161, 22215214, 1, 54) + new TranscriptRegion(TranscriptRegionType.Exon, 2, 22214431, 22214559, 55, 183), + new TranscriptRegion(TranscriptRegionType.Intron, 1, 22214560, 22215160, 54, 55), + new TranscriptRegion(TranscriptRegionType.Exon, 1, 22215161, 22215214, 1, 54) }; - const string expectedResults = "NCAGCACAGACCCCCCCACCCCCGCCGGCCGCTGTGGCGGTCGCAGTGACACCAGTGCCCCAGTTCCCAAGAGCCTGCACGGAGGCCGAGTTTGCCTGCCACAGCTACAATGAGTGTGTGGCCCTGGAGTATCGCTGTGACCGGCGGCCCGACTGCAGGGACATGTCTGATGAGCTCAATTGTGAGGAGCCAGTCCTGGGTATCAGCCCCACATTCTCTCTCCTTGTGGAGACGACATCTTTACCGCCCCGGCCAGAGACAACCATCATGCGACAGCCACCAGTCACCCACGCTCCTCAGCCCCTGCTTCCCGGTTCCGTCAGGCCCCTGCCCTGTGGGCCCCAGGAGGCCGCATGCCGCAATGGGCACTGCATCCCCAGAGACTACCTCTGCGACGGACAGGAGGACTGCGAGGACGGCAGCGATGAGCTAGACTGTGGCCCCCCGCCACCCTGTGAGCCCAACGAGTTCCCCTGCGGGAATGGACATTGTGCCCTCAAGCTGTGGCGCTGCGATGGTGACTTTGACTGTGAGGACCG"; - var codingSequence = new CodingSequence(sequence, codingRegion, regions, true, 1, null); + const string expectedResults = + "NCAGCACAGACCCCCCCACCCCCGCCGGCCGCTGTGGCGGTCGCAGTGACACCAGTGCCCCAGTTCCCAAGAGCCTGCACGGAGGCCGAGTTTGCCTGCCACAGCTACAATGAGTGTGTGGCCCTGGAGTATCGCTGTGACCGGCGGCCCGACTGCAGGGACATGTCTGATGAGCTCAATTGTGAGGAGCCAGTCCTGGGTATCAGCCCCACATTCTCTCTCCTTGTGGAGACGACATCTTTACCGCCCCGGCCAGAGACAACCATCATGCGACAGCCACCAGTCACCCACGCTCCTCAGCCCCTGCTTCCCGGTTCCGTCAGGCCCCTGCCCTGTGGGCCCCAGGAGGCCGCATGCCGCAATGGGCACTGCATCCCCAGAGACTACCTCTGCGACGGACAGGAGGACTGCGAGGACGGCAGCGATGAGCTAGACTGTGGCCCCCCGCCACCCTGTGAGCCCAACGAGTTCCCCTGCGGGAATGGACATTGTGCCCTCAAGCTGTGGCGCTGCGATGGTGACTTTGACTGTGAGGACCG"; + var codingSequence = new CodingSequence(sequence, codingRegion, regions, true, 1, null); var observedResults = codingSequence.Substring(0, expectedResults.Length); Assert.Equal(expectedResults, observedResults); @@ -41,30 +42,35 @@ public void Create() public void Length_ReturnTrueLength_WhenGapsArePresent() { const int expectedResults = 720; - - var sequence = new NSequence(); - var codingRegion = new CodingRegion(10051, 12770, 51, 800, 720); + + var sequence = new NSequence(); + var codingRegion = new CodingRegion(10051, 12770, 51, 769, 720); const byte startExonPhase = 1; - + + int naiveCodingRegionLen = codingRegion.CdnaEnd - codingRegion.CdnaStart + 1; + var regions = new ITranscriptRegion[] { - new TranscriptRegion(TranscriptRegionType.Exon, 1, 10001, 10299, 1, 299), + new TranscriptRegion(TranscriptRegionType.Exon, 1, 10001, 10299, 1, 299), new TranscriptRegion(TranscriptRegionType.Intron, 1, 10300, 12300, 229, 331), - new TranscriptRegion(TranscriptRegionType.Exon, 2, 12301, 12970, 331, 1000) + new TranscriptRegion(TranscriptRegionType.Exon, 2, 12301, 12970, 331, 1000) }; - - var codingSequence = new CodingSequence(sequence, codingRegion, regions, false, startExonPhase, null); + + var codingSequence = new CodingSequence(sequence, codingRegion, regions, false, startExonPhase, null); var observedResults = codingSequence.Length; - + Assert.Equal(expectedResults, observedResults); - Assert.NotEqual(expectedResults, codingRegion.End - codingRegion.Start + 1); + Assert.NotEqual(expectedResults, naiveCodingRegionLen); } [Fact] public void RnaEdits_snv_forward_no_utr() { //NR_002754.2 - var genomicSeq = new SimpleSequence("actctggtttctcttcaaatcgtataaatctttcgccttttactaaagatttccgtggagagaaacgagtgtgagtctgaaaccaattttttgaggccttgcgtttattagcagggctt", 11968210); + var genomicSeq = + new SimpleSequence( + "actctggtttctcttcaaatcgtataaatctttcgccttttactaaagatttccgtggagagaaacgagtgtgagtctgaaaccaattttttgaggccttgcgtttattagcagggctt", + 11968210); var codingRegion = new CodingRegion(11968211, 11968329, 1, 119, 119); var regions = new ITranscriptRegion[] @@ -72,26 +78,29 @@ public void RnaEdits_snv_forward_no_utr() new TranscriptRegion(TranscriptRegionType.Exon, 1, 11968211, 11968329, 1, 119) }; - var rnaEdits = new IRnaEdit[] { new RnaEdit(107,107,"t") }; + var rnaEdits = new IRnaEdit[] {new RnaEdit(107, 107, "t")}; const byte startExonPhase = 0; var codingSequence = new CodingSequence(genomicSeq, codingRegion, regions, false, startExonPhase, rnaEdits); - Assert.Equal("actctggtttctcttcaaatcgtataaatctttcgccttttactaaagatttccgtggagagaaacgagtgtgagtctgaaaccaattttttgaggccttgcgttttttagcagggctt", codingSequence.GetCodingSequence()); - + Assert.Equal( + "actctggtttctcttcaaatcgtataaatctttcgccttttactaaagatttccgtggagagaaacgagtgtgagtctgaaaccaattttttgaggccttgcgttttttagcagggctt", + codingSequence.GetCodingSequence()); } [Fact] public void RnaEdits_snv_forward_with_utr() { //NM_001144032.2 chr1:148644011-148644795 - var genomicSeq = new SimpleSequence("ACTATAAAGACAGTGAAAAGATCAGTGGTTATCTTTGCAGACGCCACCATCGCTGTGAGCCCTGTACTATCAGCCATGGTCAACTCCGTCGTCTTTTTTGAAATCACCAGGGATGGCAAGCCCTTGGGCCGCATCTCCATCAAACTGTTTGCAGACAAGATTCCAAAGACAGCAGAAAACTTTCGTGCTCTGAGCACTGGAGAGAAAGGATTTCGTTATAAGGGTTCCTGCTTTCACAGAATTATTCCAGGGTTTATGTGTCAGGGTGGTGACTTCACACGCCCTAATGGCACCGGTGACAAGTCCATCTATGGGGAGAAATTTGATGATGAGAACCTCATCCGAAAGCATACAGGTTCTGGCATCTTGTCCATGGCAAATGCTGGACCCAACACAAATGGTTCCCAGTTTTTCATCTGTGCTGCCAAGACTGAGTGGTTGGATGGCAAGCATGTGGCGTTTGGCAAGGTGAAAGAACGTGTGAATATTGTGGAAGCCACGGAGCACTTTGGGTACAGGAATAGCAAGACCAGCAAGAAGATCACCATTGCTGACTGTGGACAATTCTAATGAGTTTGACTTGTGTTTTATTTTCACCACCAGACCCATTCCTTCTGTAGCTCAGGAGAGCACCCCTCCACCACATTTGCTTGCAATATCCTAGAATCTTTGTGCTCTTGCTGCAGTTCCCTTTGGGTTCCATGTTTTCCTTGTTCCCTTCCATGCCTAGCTGGATGGCAGAGTTGAGTTAAGTTTATGATTATGAAATAAAAACTAAGTAACAA", 148644011 - 1); + var genomicSeq = new SimpleSequence( + "ACTATAAAGACAGTGAAAAGATCAGTGGTTATCTTTGCAGACGCCACCATCGCTGTGAGCCCTGTACTATCAGCCATGGTCAACTCCGTCGTCTTTTTTGAAATCACCAGGGATGGCAAGCCCTTGGGCCGCATCTCCATCAAACTGTTTGCAGACAAGATTCCAAAGACAGCAGAAAACTTTCGTGCTCTGAGCACTGGAGAGAAAGGATTTCGTTATAAGGGTTCCTGCTTTCACAGAATTATTCCAGGGTTTATGTGTCAGGGTGGTGACTTCACACGCCCTAATGGCACCGGTGACAAGTCCATCTATGGGGAGAAATTTGATGATGAGAACCTCATCCGAAAGCATACAGGTTCTGGCATCTTGTCCATGGCAAATGCTGGACCCAACACAAATGGTTCCCAGTTTTTCATCTGTGCTGCCAAGACTGAGTGGTTGGATGGCAAGCATGTGGCGTTTGGCAAGGTGAAAGAACGTGTGAATATTGTGGAAGCCACGGAGCACTTTGGGTACAGGAATAGCAAGACCAGCAAGAAGATCACCATTGCTGACTGTGGACAATTCTAATGAGTTTGACTTGTGTTTTATTTTCACCACCAGACCCATTCCTTCTGTAGCTCAGGAGAGCACCCCTCCACCACATTTGCTTGCAATATCCTAGAATCTTTGTGCTCTTGCTGCAGTTCCCTTTGGGTTCCATGTTTTCCTTGTTCCCTTCCATGCCTAGCTGGATGGCAGAGTTGAGTTAAGTTTATGATTATGAAATAAAAACTAAGTAACAA", + 148644011 - 1); var codingRegion = new CodingRegion(148644086, 148644580, 76, 570, 495); var regions = new ITranscriptRegion[] { - new TranscriptRegion(TranscriptRegionType.Exon, 1, 148644011,148644795, 1, 785) + new TranscriptRegion(TranscriptRegionType.Exon, 1, 148644011, 148644795, 1, 785) }; var rnaEdits = new IRnaEdit[] @@ -104,63 +113,72 @@ public void RnaEdits_snv_forward_with_utr() var codingSequence = new CodingSequence(genomicSeq, codingRegion, regions, false, startExonPhase, rnaEdits); - Assert.Equal("ATGGTCAACTCCGTCGTCTTTTTTGAAATCACCAGGGATGGCAAGCCCTTGGGCCGCATCTCCATCAAACTGTTTGCAGACAAGATTCCAAAGACAGCAGAAAACTTTCGTGCTCTGAGCACTGGAGAGAAAGGATTTCGTTATAAGGGTTCCTGCTTTCACAGAATTATTCCAGGGTTTATGTGTCAGGGTGGTGACTTCACACGCCCTAATGGCACCGGTGACAAGTCCATCTATGGGGAGAAATTTGATGATGAGAACCTCATCCGAAAGCATACAGGTTCTGGCATCTTGTCCATGGCAAATGCTGGACCCAACACAAATGGTTCCCAGTTTTTCATCTGCGCTGCCAAGACTGAGTGGTTGGATGGCAAGCATGTGGCGTTTGGCAAGGTGAAAGAACGTGTGAATATTGTGGAAGCCATGGAGCACTTTGGGTACAGGAATAGCAAGACCAGCAAGAAGATCACCATTGCTGACTGTGGACAATTCTAA", codingSequence.GetCodingSequence()); - + Assert.Equal( + "ATGGTCAACTCCGTCGTCTTTTTTGAAATCACCAGGGATGGCAAGCCCTTGGGCCGCATCTCCATCAAACTGTTTGCAGACAAGATTCCAAAGACAGCAGAAAACTTTCGTGCTCTGAGCACTGGAGAGAAAGGATTTCGTTATAAGGGTTCCTGCTTTCACAGAATTATTCCAGGGTTTATGTGTCAGGGTGGTGACTTCACACGCCCTAATGGCACCGGTGACAAGTCCATCTATGGGGAGAAATTTGATGATGAGAACCTCATCCGAAAGCATACAGGTTCTGGCATCTTGTCCATGGCAAATGCTGGACCCAACACAAATGGTTCCCAGTTTTTCATCTGCGCTGCCAAGACTGAGTGGTTGGATGGCAAGCATGTGGCGTTTGGCAAGGTGAAAGAACGTGTGAATATTGTGGAAGCCATGGAGCACTTTGGGTACAGGAATAGCAAGACCAGCAAGAAGATCACCATTGCTGACTGTGGACAATTCTAA", + codingSequence.GetCodingSequence()); } [Fact] public void RnaEdits_snv_reverse_utr() { //NM_031947.3, chr5:140682196-140683630 - var genomicSeq = new SimpleSequence("TGCATGTACACACAAATGGCTTTATGCAAAGGCCCTGACAGAACGATATTTAGTTTTTCAGATTAGGTACATAGGGCCAACCAGCCCACCCTGTACATTCCAGCAAGTGCAAGAGCAGCAACTTTCCTATTTCAATACAATTATGGGCAGAAATTATATGATGTAAAATAGAGGCCCTTCCATAAAGTTAAGATTTAGGGTAGAAGAAGGGAAGATAAAACCAAAATTCCCATGAAGTCAAAATTAGACAGTGGTCTTGTACTCTGCTGAACCCTGTGATGAACTGTAGTCCTCAAACTCATGGACTCGGATCCAGGTTCACCAAGACACTTCAGTATGCTTCCAACTGTTTCATCATCATCTTCCTGCTGTATTCGTAGGCCACAAACAGTGCCCCATTGGCAGGGATTGCTCGAATCATAGTAGCTTTCAGTCCAGAATATAAGGCTACTATTCCTTCATTTCTCACAACACTTAAGAGGGTACCAATAAATCCTGCCTGTTTCCCATACATGGAAAGAACTTGAATTCTGGATTTAATACAATCCACTGGGAACACGACAAGCCACAGGCAAATTCCAGCAACTCCACCACTTAACATCAAATGGACAGGGCCTAGTTCATCTTTTGATCTCCCTGACGCAAAAAACGATCGGCTCAGTTCATAGCCACCAAAGAAAAAGAAATAACCCGGTACTTCTTGAAGTAGAGTACTCGAGAGTCCATGGTAGAAGCCCAAGGGGCCATCCTTTTTAAGGATACCCTTCACGACAGACCAAATTGTATTATGGCTTTTTGCTATCTTCCCTGACATCTCCATTTCATACATGGTCTGTAGCCGGCACTTCACAAGCTCAGTGGGGCAGAGAGCCAGTGCAGCAAATGCAGAGGCGAAGGACCCCGCGGCTGCAGTCTGGAGATCACTCAGCTTTGCCTGCTTGTCCATTCCAGCCACTTTCCTGACAAACTGCTGGCAGAACCCGTAGCACATGAAGAGGACCGAGTTTTCGGCGACGTAGGCCATAAGTGCCGGGCCGGTGCCCTTGTAGAAGCCCCGGAGACCCACTTGGGCGTATGTCTTCAGGAAGCAGTCGGTGAGGCCCTTGTACAGGTCAGGGAACGTCTGCATCTTCACTTTTATTGTGTCGAAGGGCTGCCCAGTCAGTACACACGCTGTCCCCCCTGCGGCCCCCGCTGTGAGGTCGATGGCGGCTTGGATGCCAGGACCGGACTTCATGTTCGCTCACTCGTCTGAGGGTCCCAGTGGAAGGCGACTAACTCCCCAGAGCGTGAGACCGGCTTTTCACGTCCAGCCGCAGCGAGCGCGGGGAATGGAGTTGGGGGTGGTGGGGTGGCTCTACCGCCTGTTCTGGGCTCTCACCCCAGTGCGGGGGAAGCCGCTCAACCCTACGCTCCGCCGCGGGCCGCCCCCTCC", 140682196 - 1); + var genomicSeq = new SimpleSequence( + "TGCATGTACACACAAATGGCTTTATGCAAAGGCCCTGACAGAACGATATTTAGTTTTTCAGATTAGGTACATAGGGCCAACCAGCCCACCCTGTACATTCCAGCAAGTGCAAGAGCAGCAACTTTCCTATTTCAATACAATTATGGGCAGAAATTATATGATGTAAAATAGAGGCCCTTCCATAAAGTTAAGATTTAGGGTAGAAGAAGGGAAGATAAAACCAAAATTCCCATGAAGTCAAAATTAGACAGTGGTCTTGTACTCTGCTGAACCCTGTGATGAACTGTAGTCCTCAAACTCATGGACTCGGATCCAGGTTCACCAAGACACTTCAGTATGCTTCCAACTGTTTCATCATCATCTTCCTGCTGTATTCGTAGGCCACAAACAGTGCCCCATTGGCAGGGATTGCTCGAATCATAGTAGCTTTCAGTCCAGAATATAAGGCTACTATTCCTTCATTTCTCACAACACTTAAGAGGGTACCAATAAATCCTGCCTGTTTCCCATACATGGAAAGAACTTGAATTCTGGATTTAATACAATCCACTGGGAACACGACAAGCCACAGGCAAATTCCAGCAACTCCACCACTTAACATCAAATGGACAGGGCCTAGTTCATCTTTTGATCTCCCTGACGCAAAAAACGATCGGCTCAGTTCATAGCCACCAAAGAAAAAGAAATAACCCGGTACTTCTTGAAGTAGAGTACTCGAGAGTCCATGGTAGAAGCCCAAGGGGCCATCCTTTTTAAGGATACCCTTCACGACAGACCAAATTGTATTATGGCTTTTTGCTATCTTCCCTGACATCTCCATTTCATACATGGTCTGTAGCCGGCACTTCACAAGCTCAGTGGGGCAGAGAGCCAGTGCAGCAAATGCAGAGGCGAAGGACCCCGCGGCTGCAGTCTGGAGATCACTCAGCTTTGCCTGCTTGTCCATTCCAGCCACTTTCCTGACAAACTGCTGGCAGAACCCGTAGCACATGAAGAGGACCGAGTTTTCGGCGACGTAGGCCATAAGTGCCGGGCCGGTGCCCTTGTAGAAGCCCCGGAGACCCACTTGGGCGTATGTCTTCAGGAAGCAGTCGGTGAGGCCCTTGTACAGGTCAGGGAACGTCTGCATCTTCACTTTTATTGTGTCGAAGGGCTGCCCAGTCAGTACACACGCTGTCCCCCCTGCGGCCCCCGCTGTGAGGTCGATGGCGGCTTGGATGCCAGGACCGGACTTCATGTTCGCTCACTCGTCTGAGGGTCCCAGTGGAAGGCGACTAACTCCCCAGAGCGTGAGACCGGCTTTTCACGTCCAGCCGCAGCGAGCGCGGGGAATGGAGTTGGGGGTGGTGGGGTGGCTCTACCGCCTGTTCTGGGCTCTCACCCCAGTGCGGGGGAAGCCGCTCAACCCTACGCTCCGCCGCGGGCCGCCCCCTCC", + 140682196 - 1); var codingRegion = new CodingRegion(140682527, 140683432, 199, 1104, 906); var regions = new ITranscriptRegion[] { - new TranscriptRegion(TranscriptRegionType.Exon,1, 140682196,140683630, 1, 1435) + new TranscriptRegion(TranscriptRegionType.Exon, 1, 140682196, 140683630, 1, 1435) }; var rnaEdits = new IRnaEdit[] { new RnaEdit(366, 366, "T") }; + const byte startExonPhase = 0; var codingSequence = new CodingSequence(genomicSeq, codingRegion, regions, true, startExonPhase, rnaEdits); - Assert.Equal("ATGAAGTCCGGTCCTGGCATCCAAGCCGCCATCGACCTCACAGCGGGGGCCGCAGGGGGGACAGCGTGTGTACTGACTGGGCAGCCCTTCGACACAATAAAAGTGAAGATGCAGACGTTCCCTGACCTGTACAAGGGCCTCACCGACTGCTTCCTGAAGACATACGCTCAAGTGGGTCTCCGGGGCTTCTACAAGGGCACCGGCCCGGCACTTATGGCCTACGTCGCCGAAAACTCGGTCCTCTTCATGTGCTACGGGTTCTGCCAGCAGTTTGTCAGGAAAGTGGCTGGAATGGACAAGCAGGCAAAGCTGAGTGATCTCCAGACTGCAGCCGCGGGGTCCTTCGCCTCTGCATTTGCTGCACTGGCTCTCTGCCCCACTGAGCTTGTGAAGTGCCGGCTACAGACCATGTATGAAATGGAGATGTCAGGGAAGATAGCAAAAAGCCATAATACAATTTGGTCTGTCGTGAAGGGTATCCTTAAAAAGGATGGCCCCTTGGGCTTCTACCATGGACTCTCGAGTACTCTACTTCAAGAAGTACCGGGTTATTTCTTTTTCTTTGGTGGCTATGAACTGAGCCGATCGTTTTTTGCGTCAGGGAGATCAAAAGATGAACTAGGCCCTGTCCATTTGATGTTAAGTGGTGGAGTTGCTGGAATTTGCCTGTGGCTTGTCGTGTTCCCAGTGGATTGTATTAAATCCAGAATTCAAGTTCTTTCCATGTATGGGAAACAGGCAGGATTTATTGGTACCCTCTTAAGTGTTGTGAGAAATGAAGGAATAGTAGCCTTATATTCTGGACTGAAAGCTACTATGATTCGAGCAATCCCTGCCAATGGGGCACTGTTTGTGGCCTACGAATACAGCAGGAAGATGATGATGAAACAGTTGGAAGCATACTGA", codingSequence.GetCodingSequence()); - + Assert.Equal( + "ATGAAGTCCGGTCCTGGCATCCAAGCCGCCATCGACCTCACAGCGGGGGCCGCAGGGGGGACAGCGTGTGTACTGACTGGGCAGCCCTTCGACACAATAAAAGTGAAGATGCAGACGTTCCCTGACCTGTACAAGGGCCTCACCGACTGCTTCCTGAAGACATACGCTCAAGTGGGTCTCCGGGGCTTCTACAAGGGCACCGGCCCGGCACTTATGGCCTACGTCGCCGAAAACTCGGTCCTCTTCATGTGCTACGGGTTCTGCCAGCAGTTTGTCAGGAAAGTGGCTGGAATGGACAAGCAGGCAAAGCTGAGTGATCTCCAGACTGCAGCCGCGGGGTCCTTCGCCTCTGCATTTGCTGCACTGGCTCTCTGCCCCACTGAGCTTGTGAAGTGCCGGCTACAGACCATGTATGAAATGGAGATGTCAGGGAAGATAGCAAAAAGCCATAATACAATTTGGTCTGTCGTGAAGGGTATCCTTAAAAAGGATGGCCCCTTGGGCTTCTACCATGGACTCTCGAGTACTCTACTTCAAGAAGTACCGGGTTATTTCTTTTTCTTTGGTGGCTATGAACTGAGCCGATCGTTTTTTGCGTCAGGGAGATCAAAAGATGAACTAGGCCCTGTCCATTTGATGTTAAGTGGTGGAGTTGCTGGAATTTGCCTGTGGCTTGTCGTGTTCCCAGTGGATTGTATTAAATCCAGAATTCAAGTTCTTTCCATGTATGGGAAACAGGCAGGATTTATTGGTACCCTCTTAAGTGTTGTGAGAAATGAAGGAATAGTAGCCTTATATTCTGGACTGAAAGCTACTATGATTCGAGCAATCCCTGCCAATGGGGCACTGTTTGTGGCCTACGAATACAGCAGGAAGATGATGATGAAACAGTTGGAAGCATACTGA", + codingSequence.GetCodingSequence()); } [Fact] public void RnaEdits_insertion_in_utr() { //NM_080431.4, chrom: chr1:2938046-2939467 - var genomicSeq = new SimpleSequence("TGGAAGAGGCCTCAGCAGGCCCAGGCCACCTGGAGGGAGAGCAGACCTGCGGCTGAGGATGCAGGGCTCCCGGGCACGGTGCTAGCCCTGCCTTGAGACACCCCGAGAGCTGTGGGAAGAGCTGTGGGATCCCCTATTGCATCACAAAGCGGCCCTGGAGGGCTGGTCTTTATTTTGATGAGGCTGAGAAGGGAAGGCTGCGGGCATGTTTAATCCGCACGCTTTAGACTCCCCGGCTGTGATTTTTGACAATGGCTCGGGGTTCTGCAAAGCGGGCCTGTCTGGGGAGTTTGGACCCCGGCACATGGTCAGCTCCATCGTGGGGCACCTGAAATTCCAGGCTCCCTCAGCAGAGGCCAACCAGAAGAAGTACTTTGTGGGGGAGGAGGCCCTGTACAAGCAGGAGGCCCTGCAGCTGCACTCCCCTTTCGAGCGTGGCCTGATCACAGGGTGGGATGACGTGGAGAGACTCTGGAAGCACCTCTTTGAGTGGGAGCTAGGCGTGAAACCCAGCGACCAGCCCCTGCTTGCAACGGAGCCCTCCCTGAACCCCAGGGAGAACCGTGAGAAGATGGCAGAAGTCATGTTCGAGAACTTCGGCGTGCCCGCTTTCTACCTGTCGGACCAGGCGGTGCTGGCTCTCTACGCCTCTGCCTGTGTCACGGGCCTGGTGGTGGACAGCGGGGATGCGGTCACCTGCACTGTCCCCATCTTTGAGGGTTACTCCCTGCCCCACGCAGTCACCAAGCTCCACGTGGCGGGCAGGGACATCACGGAGCTCCTCATGCAGCTGCTCCTGGCCAGCGGCCACACCTTCCCCTGCCAGCTGGACAAGGGTCTCGTGGACGACATCAAAAAGAAGCTGTGCTACGTGGCCTTGGAGCCCGAGAAGGAGCTTTCCCGGAGGCCGGAGGAGGTCCTGAGGGAGTACAAGCTGCCCGACGGGAACATCATCAGCCTCGGGGACCCGCTGCACCAGGCGCCCGAGGCCCTGTTCGTGCCCCAGCAGCTGGGCAGCCAGAGCCCCGGGCTCTCGAATATGGTCTCCAGCAGCATCACCAAGTGTGATACCGACATCCAGAAGATCCTCTTTGGGGAGATTGTGCTGTCGGGGGGCACTACCCTGTTCCACGGGCTGGATGACCGGCTTCTCAAGGAGCTGGAGCAGCTGGCCTCCAAGGACACCCCCATCAAGATCACGGCTCCCCCCGACCGGTGGTTCTCCACCTGGATTGGAGCCTCCATCGTCACCTCTCTGAGTAGCTTCAAGCAGATGTGGGTCACCGCCGCAGACTTCAAGGAGTTTGGGACCTCCGTGGTGCAGAGAAGATGCTTCTGAAGGCCGCTTCTCGTTGGGTACCGTGGGGGGTGAACCCTAGCCCCAGCTTTGGGAGGATGTTCAATAAAGGACCAATGCCGGAA", 2938046-1); + var genomicSeq = new SimpleSequence( + "TGGAAGAGGCCTCAGCAGGCCCAGGCCACCTGGAGGGAGAGCAGACCTGCGGCTGAGGATGCAGGGCTCCCGGGCACGGTGCTAGCCCTGCCTTGAGACACCCCGAGAGCTGTGGGAAGAGCTGTGGGATCCCCTATTGCATCACAAAGCGGCCCTGGAGGGCTGGTCTTTATTTTGATGAGGCTGAGAAGGGAAGGCTGCGGGCATGTTTAATCCGCACGCTTTAGACTCCCCGGCTGTGATTTTTGACAATGGCTCGGGGTTCTGCAAAGCGGGCCTGTCTGGGGAGTTTGGACCCCGGCACATGGTCAGCTCCATCGTGGGGCACCTGAAATTCCAGGCTCCCTCAGCAGAGGCCAACCAGAAGAAGTACTTTGTGGGGGAGGAGGCCCTGTACAAGCAGGAGGCCCTGCAGCTGCACTCCCCTTTCGAGCGTGGCCTGATCACAGGGTGGGATGACGTGGAGAGACTCTGGAAGCACCTCTTTGAGTGGGAGCTAGGCGTGAAACCCAGCGACCAGCCCCTGCTTGCAACGGAGCCCTCCCTGAACCCCAGGGAGAACCGTGAGAAGATGGCAGAAGTCATGTTCGAGAACTTCGGCGTGCCCGCTTTCTACCTGTCGGACCAGGCGGTGCTGGCTCTCTACGCCTCTGCCTGTGTCACGGGCCTGGTGGTGGACAGCGGGGATGCGGTCACCTGCACTGTCCCCATCTTTGAGGGTTACTCCCTGCCCCACGCAGTCACCAAGCTCCACGTGGCGGGCAGGGACATCACGGAGCTCCTCATGCAGCTGCTCCTGGCCAGCGGCCACACCTTCCCCTGCCAGCTGGACAAGGGTCTCGTGGACGACATCAAAAAGAAGCTGTGCTACGTGGCCTTGGAGCCCGAGAAGGAGCTTTCCCGGAGGCCGGAGGAGGTCCTGAGGGAGTACAAGCTGCCCGACGGGAACATCATCAGCCTCGGGGACCCGCTGCACCAGGCGCCCGAGGCCCTGTTCGTGCCCCAGCAGCTGGGCAGCCAGAGCCCCGGGCTCTCGAATATGGTCTCCAGCAGCATCACCAAGTGTGATACCGACATCCAGAAGATCCTCTTTGGGGAGATTGTGCTGTCGGGGGGCACTACCCTGTTCCACGGGCTGGATGACCGGCTTCTCAAGGAGCTGGAGCAGCTGGCCTCCAAGGACACCCCCATCAAGATCACGGCTCCCCCCGACCGGTGGTTCTCCACCTGGATTGGAGCCTCCATCGTCACCTCTCTGAGTAGCTTCAAGCAGATGTGGGTCACCGCCGCAGACTTCAAGGAGTTTGGGACCTCCGTGGTGCAGAGAAGATGCTTCTGAAGGCCGCTTCTCGTTGGGTACCGTGGGGGGTGAACCCTAGCCCCAGCTTTGGGAGGATGTTCAATAAAGGACCAATGCCGGAA", + 2938046 - 1); var codingRegion = new CodingRegion(2938251, 2939384, 206, 1339, 1134); var regions = new ITranscriptRegion[] { - new TranscriptRegion(TranscriptRegionType.Exon, 1, 2938046,2939467, 1, 1422) + new TranscriptRegion(TranscriptRegionType.Exon, 1, 2938046, 2939467, 1, 1422) }; - var rnaEdits = new IRnaEdit[] { new RnaEdit(1423, 1422, "AAAAAAAAAAAAAAA") }; + var rnaEdits = new IRnaEdit[] {new RnaEdit(1423, 1422, "AAAAAAAAAAAAAAA")}; const byte startExonPhase = 0; var codingSequence = new CodingSequence(genomicSeq, codingRegion, regions, false, startExonPhase, rnaEdits); - const string expectedCodingSeq = "ATGTTTAATCCGCACGCTTTAGACTCCCCGGCTGTGATTTTTGACAATGGCTCGGGGTTCTGCAAAGCGGGCCTGTCTGGGGAGTTTGGACCCCGGCACATGGTCAGCTCCATCGTGGGGCACCTGAAATTCCAGGCTCCCTCAGCAGAGGCCAACCAGAAGAAGTACTTTGTGGGGGAGGAGGCCCTGTACAAGCAGGAGGCCCTGCAGCTGCACTCCCCTTTCGAGCGTGGCCTGATCACAGGGTGGGATGACGTGGAGAGACTCTGGAAGCACCTCTTTGAGTGGGAGCTAGGCGTGAAACCCAGCGACCAGCCCCTGCTTGCAACGGAGCCCTCCCTGAACCCCAGGGAGAACCGTGAGAAGATGGCAGAAGTCATGTTCGAGAACTTCGGCGTGCCCGCTTTCTACCTGTCGGACCAGGCGGTGCTGGCTCTCTACGCCTCTGCCTGTGTCACGGGCCTGGTGGTGGACAGCGGGGATGCGGTCACCTGCACTGTCCCCATCTTTGAGGGTTACTCCCTGCCCCACGCAGTCACCAAGCTCCACGTGGCGGGCAGGGACATCACGGAGCTCCTCATGCAGCTGCTCCTGGCCAGCGGCCACACCTTCCCCTGCCAGCTGGACAAGGGTCTCGTGGACGACATCAAAAAGAAGCTGTGCTACGTGGCCTTGGAGCCCGAGAAGGAGCTTTCCCGGAGGCCGGAGGAGGTCCTGAGGGAGTACAAGCTGCCCGACGGGAACATCATCAGCCTCGGGGACCCGCTGCACCAGGCGCCCGAGGCCCTGTTCGTGCCCCAGCAGCTGGGCAGCCAGAGCCCCGGGCTCTCGAATATGGTCTCCAGCAGCATCACCAAGTGTGATACCGACATCCAGAAGATCCTCTTTGGGGAGATTGTGCTGTCGGGGGGCACTACCCTGTTCCACGGGCTGGATGACCGGCTTCTCAAGGAGCTGGAGCAGCTGGCCTCCAAGGACACCCCCATCAAGATCACGGCTCCCCCCGACCGGTGGTTCTCCACCTGGATTGGAGCCTCCATCGTCACCTCTCTGAGTAGCTTCAAGCAGATGTGGGTCACCGCCGCAGACTTCAAGGAGTTTGGGACCTCCGTGGTGCAGAGAAGATGCTTCTGA"; + var expectedCodingSeq = + "ATGTTTAATCCGCACGCTTTAGACTCCCCGGCTGTGATTTTTGACAATGGCTCGGGGTTCTGCAAAGCGGGCCTGTCTGGGGAGTTTGGACCCCGGCACATGGTCAGCTCCATCGTGGGGCACCTGAAATTCCAGGCTCCCTCAGCAGAGGCCAACCAGAAGAAGTACTTTGTGGGGGAGGAGGCCCTGTACAAGCAGGAGGCCCTGCAGCTGCACTCCCCTTTCGAGCGTGGCCTGATCACAGGGTGGGATGACGTGGAGAGACTCTGGAAGCACCTCTTTGAGTGGGAGCTAGGCGTGAAACCCAGCGACCAGCCCCTGCTTGCAACGGAGCCCTCCCTGAACCCCAGGGAGAACCGTGAGAAGATGGCAGAAGTCATGTTCGAGAACTTCGGCGTGCCCGCTTTCTACCTGTCGGACCAGGCGGTGCTGGCTCTCTACGCCTCTGCCTGTGTCACGGGCCTGGTGGTGGACAGCGGGGATGCGGTCACCTGCACTGTCCCCATCTTTGAGGGTTACTCCCTGCCCCACGCAGTCACCAAGCTCCACGTGGCGGGCAGGGACATCACGGAGCTCCTCATGCAGCTGCTCCTGGCCAGCGGCCACACCTTCCCCTGCCAGCTGGACAAGGGTCTCGTGGACGACATCAAAAAGAAGCTGTGCTACGTGGCCTTGGAGCCCGAGAAGGAGCTTTCCCGGAGGCCGGAGGAGGTCCTGAGGGAGTACAAGCTGCCCGACGGGAACATCATCAGCCTCGGGGACCCGCTGCACCAGGCGCCCGAGGCCCTGTTCGTGCCCCAGCAGCTGGGCAGCCAGAGCCCCGGGCTCTCGAATATGGTCTCCAGCAGCATCACCAAGTGTGATACCGACATCCAGAAGATCCTCTTTGGGGAGATTGTGCTGTCGGGGGGCACTACCCTGTTCCACGGGCTGGATGACCGGCTTCTCAAGGAGCTGGAGCAGCTGGCCTCCAAGGACACCCCCATCAAGATCACGGCTCCCCCCGACCGGTGGTTCTCCACCTGGATTGGAGCCTCCATCGTCACCTCTCTGAGTAGCTTCAAGCAGATGTGGGTCACCGCCGCAGACTTCAAGGAGTTTGGGACCTCCGTGGTGCAGAGAAGATGCTTCTGA"; Assert.Equal(expectedCodingSeq, codingSequence.GetCodingSequence()); - } [Fact] public void RnaEdits_insertion_reverse_in_utr() { //NM_001242659.1, chrom: chr1:1533388-1535476 - var genomicSeq = new SimpleSequence("TCTGTTGGTCTGAGAATGATGGACATTTAGACACTGGCGCCAGGTTTGCGCCTGACCGGCGCCACGCAGGGGTGGGCGGAGCAAAGACACACAGGTGGGCTACAGGTGTCACACGGCACCAGCCAGGGCCCGGGGTGGCTGGGGTGAGGATGGGTGTTTGGCCAGTGACCAGGAGTCAGGTCAAGTCCAGGTGGTCAGTGCCAGGGGCTCCAGGAGGGGAGGGCAGTGCCATAACCCTCCTGGTGTCCAGCGTCACCAGGCGGTCGTCACAGAAAGCAACCTCGGCCCGGGGCCCGGGTCTGCAGCAGGTGGGCAGGGTCAGCTTTTCTTCCATGGCGGGTGGCATTGTCTGGGCCGGATACTGGCTCTCGACCCCTGGGCATGCAAAGGCTAGGGGTGGTGCTGTCAGTCACACCGTTGCCACCAAGGTCCCCTGGGTCGGCTGAGGCTTGGGATCCAGGCAGCGGTGGAAGGTCGGGCTGCTCAAGGCCGGTATCTAAGCTTCTGCCCTGGGACCCAGTGGTGATGGCCGCCATCTGCCCCATTCCCACAGGGACCTAGTCAGAGGTCGCACACACAAAAGGGGTACCTGGCCCTGGAGAACCACCAGCTGCCCGGGGTCTGAGAACACTCACCCTGGCCGCTGGGCCAGGCCTGCCAGGCTCCCGGCTGGTCCAACACCCTAAACGGTACAGAGCGCTGCAGGCCCTCACCTCATGCTTCTGCAGCGCTTGAGGGTGAAGGTGTCTCCAAGGGGACGCTGGCCAGATGCATGGAGAGGCCGGCCAATCTTAGGGCCACAGACCCCCCCTGGACAGCAGAGGGTGTTGGCTCCTGCAGTGGGCCCGAGATACTAAGGCACGAAGCTAACCTAAGCCCAGTGGGGTGGGGCGGGGCAGGACAGGCTTGGAGAGCTGCGCCCCAGGCCTGCAAAGCACAGTGACCGAGCAATGGCGACGGTCTGTCTGGGACAATTCGGCACAGGATGGAGGTGCGGGGTGAGCCGGAGTGCCCATGGCTCTTGCTGGAAGGGGCTCCATGCCCTGGCCGCCTCTATAAAGGCCTGCGGAGAGCGGGGAGAGCCCTGGATGCGGCTGGCACAGCAGCGCAAGCCCAGGGGCCAATCCGGGGCCAGAGTCTGGGAGTCTGACGCCCGGCTGGAAAGGGCGTGTGATGATGCCAAAGTGCCGGAGCCGTCGCCGGCAGGTCCTCCTCCGCGGGGATCTTAAGGAGGCAGCAGGAATGAGGAGAGGAGAGCGGGCGGAGGACCTGGGAGCTCAGGCGCCCTCAGGCAGGTGGCGCAAAGATGGGCGGGCGGCCTCGCGCTTCAGGGGTGTCTGCGCAGGCCGGGGCGCGCGAGGGCCGGGCGCATGAGGTTCTCGGTGATGTAGGCCACCAGCAGGCAGATGACCACCAGCATGACGCAGATGGAGCCGCCCACCGCCGTCATGGCCACCACGATGTCCTGCATGCCGGCCGGCTCGGCGGTGAACTCCACGCACTCGGCCGGCTCGGGGGTCTCTGGCGCGGCGGCGGCGGGCCCAGCGCGCAGCGGCAGCGGCTGCAGGCACAGGCGGTAGAGGACGCTGTCGTGCACGTCGGGCAGCAGGTAGTCGCGGCAGGAGGCCCCGAGGAGCACGCGCTCGCACGGGAAGCGCGTGTAGGCGCCGCGCCACGAGCAGTTGAGCGCGAAGGCGCGCACGCGGCGCGCGGCGGCCGGGGCCAGGCGCCACTGCAGGAGGACGCTGCGGTTGCGCAGGACGCTGGCGCGCAGGGAGCGGCCGGCCGGGGCGTGCAGCACGCAGCCCGGAGCCTGGCAGCGGAAGCCGCGCGCGGGGCTGCGGAAGCACAGGCGCCCGCCGCCCGCCTCGGGGCCCTCGGGCAGCACCTTGTAGGGGCACCAGGGCGCGTCGGGGGTCGGCTCCCAGCCCGGCGGCGTCGGGGCGGCCGCGGCGCAGGGCGGCGGCGCGCAGGCGGCCAGCAGCAGCAGCAGCGGCGGGGCGCGCATCCTGCGGCGGGGCCACGGGGCGCGGCGCTGGGTCACGCGGGCCGCGCCGCCGCCGTCCCCGCTGCCCGCTCCCCGCGATCC", 1533387); + var genomicSeq = new SimpleSequence( + "TCTGTTGGTCTGAGAATGATGGACATTTAGACACTGGCGCCAGGTTTGCGCCTGACCGGCGCCACGCAGGGGTGGGCGGAGCAAAGACACACAGGTGGGCTACAGGTGTCACACGGCACCAGCCAGGGCCCGGGGTGGCTGGGGTGAGGATGGGTGTTTGGCCAGTGACCAGGAGTCAGGTCAAGTCCAGGTGGTCAGTGCCAGGGGCTCCAGGAGGGGAGGGCAGTGCCATAACCCTCCTGGTGTCCAGCGTCACCAGGCGGTCGTCACAGAAAGCAACCTCGGCCCGGGGCCCGGGTCTGCAGCAGGTGGGCAGGGTCAGCTTTTCTTCCATGGCGGGTGGCATTGTCTGGGCCGGATACTGGCTCTCGACCCCTGGGCATGCAAAGGCTAGGGGTGGTGCTGTCAGTCACACCGTTGCCACCAAGGTCCCCTGGGTCGGCTGAGGCTTGGGATCCAGGCAGCGGTGGAAGGTCGGGCTGCTCAAGGCCGGTATCTAAGCTTCTGCCCTGGGACCCAGTGGTGATGGCCGCCATCTGCCCCATTCCCACAGGGACCTAGTCAGAGGTCGCACACACAAAAGGGGTACCTGGCCCTGGAGAACCACCAGCTGCCCGGGGTCTGAGAACACTCACCCTGGCCGCTGGGCCAGGCCTGCCAGGCTCCCGGCTGGTCCAACACCCTAAACGGTACAGAGCGCTGCAGGCCCTCACCTCATGCTTCTGCAGCGCTTGAGGGTGAAGGTGTCTCCAAGGGGACGCTGGCCAGATGCATGGAGAGGCCGGCCAATCTTAGGGCCACAGACCCCCCCTGGACAGCAGAGGGTGTTGGCTCCTGCAGTGGGCCCGAGATACTAAGGCACGAAGCTAACCTAAGCCCAGTGGGGTGGGGCGGGGCAGGACAGGCTTGGAGAGCTGCGCCCCAGGCCTGCAAAGCACAGTGACCGAGCAATGGCGACGGTCTGTCTGGGACAATTCGGCACAGGATGGAGGTGCGGGGTGAGCCGGAGTGCCCATGGCTCTTGCTGGAAGGGGCTCCATGCCCTGGCCGCCTCTATAAAGGCCTGCGGAGAGCGGGGAGAGCCCTGGATGCGGCTGGCACAGCAGCGCAAGCCCAGGGGCCAATCCGGGGCCAGAGTCTGGGAGTCTGACGCCCGGCTGGAAAGGGCGTGTGATGATGCCAAAGTGCCGGAGCCGTCGCCGGCAGGTCCTCCTCCGCGGGGATCTTAAGGAGGCAGCAGGAATGAGGAGAGGAGAGCGGGCGGAGGACCTGGGAGCTCAGGCGCCCTCAGGCAGGTGGCGCAAAGATGGGCGGGCGGCCTCGCGCTTCAGGGGTGTCTGCGCAGGCCGGGGCGCGCGAGGGCCGGGCGCATGAGGTTCTCGGTGATGTAGGCCACCAGCAGGCAGATGACCACCAGCATGACGCAGATGGAGCCGCCCACCGCCGTCATGGCCACCACGATGTCCTGCATGCCGGCCGGCTCGGCGGTGAACTCCACGCACTCGGCCGGCTCGGGGGTCTCTGGCGCGGCGGCGGCGGGCCCAGCGCGCAGCGGCAGCGGCTGCAGGCACAGGCGGTAGAGGACGCTGTCGTGCACGTCGGGCAGCAGGTAGTCGCGGCAGGAGGCCCCGAGGAGCACGCGCTCGCACGGGAAGCGCGTGTAGGCGCCGCGCCACGAGCAGTTGAGCGCGAAGGCGCGCACGCGGCGCGCGGCGGCCGGGGCCAGGCGCCACTGCAGGAGGACGCTGCGGTTGCGCAGGACGCTGGCGCGCAGGGAGCGGCCGGCCGGGGCGTGCAGCACGCAGCCCGGAGCCTGGCAGCGGAAGCCGCGCGCGGGGCTGCGGAAGCACAGGCGCCCGCCGCCCGCCTCGGGGCCCTCGGGCAGCACCTTGTAGGGGCACCAGGGCGCGTCGGGGGTCGGCTCCCAGCCCGGCGGCGTCGGGGCGGCCGCGGCGCAGGGCGGCGGCGCGCAGGCGGCCAGCAGCAGCAGCAGCGGCGGGGCGCGCATCCTGCGGCGGGGCCACGGGGCGCGGCGCTGGGTCACGCGGGCCGCGCCGCCGCCGTCCCCGCTGCCCGCTCCCCGCGATCC", + 1533387); var codingRegion = new CodingRegion(1534715, 1535395, 82, 762, 681); var regions = new ITranscriptRegion[] @@ -168,77 +186,86 @@ public void RnaEdits_insertion_reverse_in_utr() new TranscriptRegion(TranscriptRegionType.Exon, 1, 1533388, 1535476, 1, 2089) }; - var rnaEdits = new IRnaEdit[] { new RnaEdit(2090, 2089, "AAAAAAAAAAAAAAA") }; + var rnaEdits = new IRnaEdit[] {new RnaEdit(2090, 2089, "AAAAAAAAAAAAAAA")}; const byte startExonPhase = 0; var codingSequence = new CodingSequence(genomicSeq, codingRegion, regions, true, startExonPhase, rnaEdits); - const string expectedCodingSeq = "ATGCGCGCCCCGCCGCTGCTGCTGCTGCTGGCCGCCTGCGCGCCGCCGCCCTGCGCCGCGGCCGCCCCGACGCCGCCGGGCTGGGAGCCGACCCCCGACGCGCCCTGGTGCCCCTACAAGGTGCTGCCCGAGGGCCCCGAGGCGGGCGGCGGGCGCCTGTGCTTCCGCAGCCCCGCGCGCGGCTTCCGCTGCCAGGCTCCGGGCTGCGTGCTGCACGCCCCGGCCGGCCGCTCCCTGCGCGCCAGCGTCCTGCGCAACCGCAGCGTCCTCCTGCAGTGGCGCCTGGCCCCGGCCGCCGCGCGCCGCGTGCGCGCCTTCGCGCTCAACTGCTCGTGGCGCGGCGCCTACACGCGCTTCCCGTGCGAGCGCGTGCTCCTCGGGGCCTCCTGCCGCGACTACCTGCTGCCCGACGTGCACGACAGCGTCCTCTACCGCCTGTGCCTGCAGCCGCTGCCGCTGCGCGCTGGGCCCGCCGCCGCCGCGCCAGAGACCCCCGAGCCGGCCGAGTGCGTGGAGTTCACCGCCGAGCCGGCCGGCATGCAGGACATCGTGGTGGCCATGACGGCGGTGGGCGGCTCCATCTGCGTCATGCTGGTGGTCATCTGCCTGCTGGTGGCCTACATCACCGAGAACCTCATGCGCCCGGCCCTCGCGCGCCCCGGCCTGCGCAGACACCCCTGA"; + var expectedCodingSeq = + "ATGCGCGCCCCGCCGCTGCTGCTGCTGCTGGCCGCCTGCGCGCCGCCGCCCTGCGCCGCGGCCGCCCCGACGCCGCCGGGCTGGGAGCCGACCCCCGACGCGCCCTGGTGCCCCTACAAGGTGCTGCCCGAGGGCCCCGAGGCGGGCGGCGGGCGCCTGTGCTTCCGCAGCCCCGCGCGCGGCTTCCGCTGCCAGGCTCCGGGCTGCGTGCTGCACGCCCCGGCCGGCCGCTCCCTGCGCGCCAGCGTCCTGCGCAACCGCAGCGTCCTCCTGCAGTGGCGCCTGGCCCCGGCCGCCGCGCGCCGCGTGCGCGCCTTCGCGCTCAACTGCTCGTGGCGCGGCGCCTACACGCGCTTCCCGTGCGAGCGCGTGCTCCTCGGGGCCTCCTGCCGCGACTACCTGCTGCCCGACGTGCACGACAGCGTCCTCTACCGCCTGTGCCTGCAGCCGCTGCCGCTGCGCGCTGGGCCCGCCGCCGCCGCGCCAGAGACCCCCGAGCCGGCCGAGTGCGTGGAGTTCACCGCCGAGCCGGCCGGCATGCAGGACATCGTGGTGGCCATGACGGCGGTGGGCGGCTCCATCTGCGTCATGCTGGTGGTCATCTGCCTGCTGGTGGCCTACATCACCGAGAACCTCATGCGCCCGGCCCTCGCGCGCCCCGGCCTGCGCAGACACCCCTGA"; Assert.Equal(expectedCodingSeq, codingSequence.GetCodingSequence()); - } + [Fact] - public void RnaEdits_in_coding_sequence_insertion() + public void GetCodingSequence_InsertionGeneModel_InsertionRnaEdit() { - //NM_019119.4, chrom: chr5:140566701-140571111 - var genomicSeq = new SimpleSequence("AGAATGCTACGGAAGTCCTTGACAAAAAGGAAACACTGAGACAGATGGGCTGAGAAGAAGAGCTGTCGAGTCCCTGATTGGGAAAGGAAAAATTAAAAACCCTAGATCTCTGGTACACATAAGTCTGGGTTTGCGATTGCTATTTGTGCTGGGGCAGTGTGATTGAGACTGACATTGAGGAAAGAAGCAGCTATGAAGACCAGGGGGTTCAGCTTTCCAAGACAAAGGCAAGTCCTGTTTCTTTTTCTTTTCTGGGGAGTGTCCTTGGCAGGTTCTGGGTTTGGACGTTATTCGGTGACTGAGGAAACAGAGAAAGGATCCTTTGTGGTCAATCTGGCAAAGGATCTGGGACTAGCAGAGGGGGAGCTGGCTGCAAGGGGAACCAGGGTGGTTTCCGATGATAACAAACAATACCTGCTCCTGGATTCACATACCGGGAATTTGCTCACAAATGAGAAACTGGACCGAGAGAAGCTGTGTGGCCCTAAAGAGCCCTGTATGCTGTATTTCCAAATTTTAATGGATGATCCCTTTCAGATTTACCGGGCTGAGCTGAGAGTCAGGGATATAAATGATCACTCGCCAGTGTTTCGGCACAAAGAGATGGTCTTAAAAATATCAGAAAATACAGCTGAAGGGACAGCATTTAGACTAGAAAGAGCACAGGATCCAGATGAAGGTCATAACAGTATCCAAAACTACACGATCAGCTCCAACTCTTTTTTCCATATTAAAATTAGTGGCAGTGATGAAGGCATGATATATCCAGAGCTAGTGTTGGACAAAGCACTGGATCGGGAGGAGCAGGAAGAGCTCAGCTTAACCCTCACAGCGCTGGATGGTGGGTCTCCATCCAGGTCTGGGACCTCCACTATACGCATTGTGGTCTTGGATGTCAATGACAATGCCCCACAGTTTGCCCAGGCTCTGTATGAGACCCAGGCTCCAGAAAACAGTCCAGTAGGGTCCCTTATTGTTAAAGTGTCTGCAGGAGATGCAGACTCAGGAGTCAATGCAGAAGTATCCTATTCATTTTTTGATGCTTCTGAAGATATTTTAACAACGTTTCAAATCAATCCTTTTTCTGGGGAAATCTTTCTCAGAGAATTGCTTGATTATGAGTTAGTAAATTCTTACAAAATAAATATACAGGCAATGGACGGCGGAGGCCTTTCTGCAAGATGTACAGTTTTGATAAAAGTATTAGATTCCAATGACAATCCTCCTGAACTGATCATATCATCACTTTCCAACTCTGTTGCTGAAAACTCTCCTGGGATAGTATTGGCTGTTTTTAAGATTAAAGACAGAGACTCCGGAGAAAATGGAAAGACATTTGCTATGTTCAAGATAATCTGCCTTTTTTTCTGAAACCGTCTGTTGACAATTTTTACATCCTAATGACTGAAGGTGCACTGGACAGAGAGAGCAAAGCTGAGTACAACATCACCATCACCGTCACTGACTTGGGGACACCCAGGCTGAAAACCGAGCACAGCATAACCCTGCAGGTCTCCGACGTCAATGACAACGCCCCCGCCTTCACCCAAACCTCCTACACCCTGTTCGTCCGGGAGAACAACAGCCCCGCCCTGCACATCGGCAGTGTCAGCGCCACAGACAGAGACTCAGGCACCAACGCCCAGGTCACCTACTCGCTGCTGCCGCCCCAGGACCCACACCTGCCCCTCGCCTCCCTGGTCTCCATCAACGCGGACAATGGCCACCTGTTTGCCCTCAGGTCGCTGGACTACGAGGCCCTGCAGGCTTTCGACTTCCGCGTGGGCGCCTCAGACCGCGGCTCCCCGGCTTTGAGCAGCGAGGCGCTGGTGCGCGTACTGGTGCTGGACGCCAACGACAACTCGCCCTTCGTGCTGTACCCGCTGCAGAACGGCTCCGCGCCCTGCACCGAGCTGGTGCCCCGGGCGGCCGAGCCGGGCTACCTGGTGACCAAGGTGGTGGCGGTGGACGGCGACTCGGGCCAGAACGCCTGGCTGTCGTACCAGCTGCTCAAGGCCACGGAGCCCGGGCTGTTCGGTGTGTGGGCGCACAATGGGGAGGTGCGCACCGCCAGGCTGCTGAGCGAGCGCGACGCAGCCAAGCACAGGCTGGTGGTGCTTGTCAAGGACAATGGCGAGCCTCCTCGCTCGGCCACCGCCACGCTGCACGTGCTCCTGGTGGACGGCTTCTCCCAGCCCTACCTGCCTCTCCCGGAGGCGGCCCCGGCCCAGGCCCAGGCCGACTTGCTCACCGTCTACCTGGTGGTGGCGTTGGCCTCGGTGTCTTCGCTCTTCCTCCTCTCGGTGCTCCTGTTCGTGGCGGTGCGGCTGTGCAGGAGGAGCAGGGCGGCCTCGGTGGGTCGCTGCTCGGTGCCCGAGGGTCCTTTTCCAGGGCATCTGGTGGACGTGAGCGGCACCGGGACCCTGTTCCAGAGCTACCAGTACGAGGTGTGTCTGACTGGAGGTTCAGAGACCGGCGAGTTCAAGTTCTTGAAGCCGATTACCCCCCACCTCCCGCCCCATAGGGGTGGGAAAGAAATAGAGGAAAATTCTACTCTCCCCAATAGCTTTGGATTTAATTATTGAAAGGAACCCACTTAATAAAGACATTTACTTCTTTAATATATTCTTGTTGGCTAACTAAATTGTGTATGCCCACCACAAAGAAGGTACTATTTTTTGTTTGATTCATCTTCAACTTTGCGTATTATGCTTAACTTCACAAGTTAACTTTTTCTTATTTTGTATCCTGATGAGGCATTTCTTACTAGAATCCCATAAGTGAAATATAATATTTTTCAAAGTTGATATCATTTAAAAATTTTTGGTCGTTTTAAATGTCTTTATTGACTTTAAATTCATTGCCTCTACATTATTCATTAGTTCTTCTTTTCCTAAAACTTTTTACTTGTTAAAATAGTCTGCTGCATGTAATATGTGCTTTTACTATTTGATATTTCTTCTATTTTTCTTTTGAAACCGGTGTTCTTATTGGTTTGCCATCCTTGTTCATTACAACTGTTTTTTGTTTGTTTGTTTGTTTTTTGGTTTGTTTGTTTTTTTTTTTTTTGAGACGGAGTCTCGCTCTGTCGCCCAGGCTGGAGTGCAGTGGCGCGATCTCAGCTCACTGCAACCTCCGCCTCCCAGGTTCAAGCGATTCTCCTGCCTCAGCCTCCAGAGTATCTGGGACTACAGTTGCATGTCACCACGTTCGGCTAATTTTTGTATTTTCAGTAGAGACGGGTTTCATCATGGTGGCCAGGATGGTCTATCTCTTGACCTCGTGATCCACCCCACTCAGCCTCCCAAATTGCTGGGATTTACAGGCATGAGCCACCGCACCCAGCCTACAATAATTTTCTTAAACTTTACCTTTTATTTTAAAGTTCTAGTTTCCCGGCATTGATAGTTCCCTATTTGAAATATAATGTTTCTCTTGTAAGTGATATGATAAATAAACCCCTAATTAGCCTTAGAAGAAAAACCACTGCAAGATATTAAGCGTGTGTAAATGGGCTTTAGTCTGGAAACCAAAAAAAAAAAAAAAATTTAGTCATTCTATAGGATCATGTGAAAATATTTAATTTGCTCCTTTTAATTCTGTATAAACAAATCAGAGGTTCCTGAGGTTCCTGTTAAATTTTTAATGGCTAATAGCCCAGTGCCATCCAGTTGAAAAAACAACAGCAATCACAAAGTAGAGGTTTATATTGTGCGGCTTTTATATTCAGCTATTAGAGTGTTATTGGTAGTGTCTAGCCTTTTCCTCCACGACATTCCTTGACTTAATCCATTTGGGCCTATTATAGACAAAATAGAGCTTCTTTCTAGATATAAGGTCTTTGAGGCAGGGCTCAGTGGCTCATTCCTGTAATCCCAGCACTTTGGGAGGCCAAGGCGGGCAGATCACCTTAGGTCACGAGTTTGAGACCAGCCTGACCAACGTTAAGTAACCCCGTCTTTACTAAAAATACAAAATTAGCCAGGCATGGTGGCACATGCTTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCAGGAGGTGGAAGTTGCTTTGAGCCGAGATTGCACCATTGTACTCCAGCCTGGGCAATAAGAGCAAAACTCCATCAAAATAAAATAAAATAAAATATAAAATAACTTAAAAAGAACTTTGAATAAAATTCTATGAAAAAAGACACTAGAATGCTGTTCTTAATTTTAATAGTGTTAAGATAGGTGTTAGTGTGGTCTGTTCTTTACCTCCCTTTATTTGGTGCAGAGAAGTTAGATCCTGCTAAATTTCAATTAAGAGGGGACCTTAAAATAAGGATCAATCTCTTATTTAACCCTGTAAGTTACTTTAAAGCTAATACAAGAAAAACAAAGACAAGTGAAAGTAAGGAAACAGAAATTGC", 140566701 - 1); - var codingRegion = new CodingRegion(140566893, 140569285, 193, 2586, 2393); + // NM_019119.4, chr5:140566701-140571111 + var genomicSeq = new SimpleSequence( + "AGAATGCTACGGAAGTCCTTGACAAAAAGGAAACACTGAGACAGATGGGCTGAGAAGAAGAGCTGTCGAGTCCCTGATTGGGAAAGGAAAAATTAAAAACCCTAGATCTCTGGTACACATAAGTCTGGGTTTGCGATTGCTATTTGTGCTGGGGCAGTGTGATTGAGACTGACATTGAGGAAAGAAGCAGCTATGAAGACCAGGGGGTTCAGCTTTCCAAGACAAAGGCAAGTCCTGTTTCTTTTTCTTTTCTGGGGAGTGTCCTTGGCAGGTTCTGGGTTTGGACGTTATTCGGTGACTGAGGAAACAGAGAAAGGATCCTTTGTGGTCAATCTGGCAAAGGATCTGGGACTAGCAGAGGGGGAGCTGGCTGCAAGGGGAACCAGGGTGGTTTCCGATGATAACAAACAATACCTGCTCCTGGATTCACATACCGGGAATTTGCTCACAAATGAGAAACTGGACCGAGAGAAGCTGTGTGGCCCTAAAGAGCCCTGTATGCTGTATTTCCAAATTTTAATGGATGATCCCTTTCAGATTTACCGGGCTGAGCTGAGAGTCAGGGATATAAATGATCACTCGCCAGTGTTTCGGCACAAAGAGATGGTCTTAAAAATATCAGAAAATACAGCTGAAGGGACAGCATTTAGACTAGAAAGAGCACAGGATCCAGATGAAGGTCATAACAGTATCCAAAACTACACGATCAGCTCCAACTCTTTTTTCCATATTAAAATTAGTGGCAGTGATGAAGGCATGATATATCCAGAGCTAGTGTTGGACAAAGCACTGGATCGGGAGGAGCAGGAAGAGCTCAGCTTAACCCTCACAGCGCTGGATGGTGGGTCTCCATCCAGGTCTGGGACCTCCACTATACGCATTGTGGTCTTGGATGTCAATGACAATGCCCCACAGTTTGCCCAGGCTCTGTATGAGACCCAGGCTCCAGAAAACAGTCCAGTAGGGTCCCTTATTGTTAAAGTGTCTGCAGGAGATGCAGACTCAGGAGTCAATGCAGAAGTATCCTATTCATTTTTTGATGCTTCTGAAGATATTTTAACAACGTTTCAAATCAATCCTTTTTCTGGGGAAATCTTTCTCAGAGAATTGCTTGATTATGAGTTAGTAAATTCTTACAAAATAAATATACAGGCAATGGACGGCGGAGGCCTTTCTGCAAGATGTACAGTTTTGATAAAAGTATTAGATTCCAATGACAATCCTCCTGAACTGATCATATCATCACTTTCCAACTCTGTTGCTGAAAACTCTCCTGGGATAGTATTGGCTGTTTTTAAGATTAAAGACAGAGACTCCGGAGAAAATGGAAAGACATTTGCTATGTTCAAGATAATCTGCCTTTTTTTCTGAAACCGTCTGTTGACAATTTTTACATCCTAATGACTGAAGGTGCACTGGACAGAGAGAGCAAAGCTGAGTACAACATCACCATCACCGTCACTGACTTGGGGACACCCAGGCTGAAAACCGAGCACAGCATAACCCTGCAGGTCTCCGACGTCAATGACAACGCCCCCGCCTTCACCCAAACCTCCTACACCCTGTTCGTCCGGGAGAACAACAGCCCCGCCCTGCACATCGGCAGTGTCAGCGCCACAGACAGAGACTCAGGCACCAACGCCCAGGTCACCTACTCGCTGCTGCCGCCCCAGGACCCACACCTGCCCCTCGCCTCCCTGGTCTCCATCAACGCGGACAATGGCCACCTGTTTGCCCTCAGGTCGCTGGACTACGAGGCCCTGCAGGCTTTCGACTTCCGCGTGGGCGCCTCAGACCGCGGCTCCCCGGCTTTGAGCAGCGAGGCGCTGGTGCGCGTACTGGTGCTGGACGCCAACGACAACTCGCCCTTCGTGCTGTACCCGCTGCAGAACGGCTCCGCGCCCTGCACCGAGCTGGTGCCCCGGGCGGCCGAGCCGGGCTACCTGGTGACCAAGGTGGTGGCGGTGGACGGCGACTCGGGCCAGAACGCCTGGCTGTCGTACCAGCTGCTCAAGGCCACGGAGCCCGGGCTGTTCGGTGTGTGGGCGCACAATGGGGAGGTGCGCACCGCCAGGCTGCTGAGCGAGCGCGACGCAGCCAAGCACAGGCTGGTGGTGCTTGTCAAGGACAATGGCGAGCCTCCTCGCTCGGCCACCGCCACGCTGCACGTGCTCCTGGTGGACGGCTTCTCCCAGCCCTACCTGCCTCTCCCGGAGGCGGCCCCGGCCCAGGCCCAGGCCGACTTGCTCACCGTCTACCTGGTGGTGGCGTTGGCCTCGGTGTCTTCGCTCTTCCTCCTCTCGGTGCTCCTGTTCGTGGCGGTGCGGCTGTGCAGGAGGAGCAGGGCGGCCTCGGTGGGTCGCTGCTCGGTGCCCGAGGGTCCTTTTCCAGGGCATCTGGTGGACGTGAGCGGCACCGGGACCCTGTTCCAGAGCTACCAGTACGAGGTGTGTCTGACTGGAGGTTCAGAGACCGGCGAGTTCAAGTTCTTGAAGCCGATTACCCCCCACCTCCCGCCCCATAGGGGTGGGAAAGAAATAGAGGAAAATTCTACTCTCCCCAATAGCTTTGGATTTAATTATTGAAAGGAACCCACTTAATAAAGACATTTACTTCTTTAATATATTCTTGTTGGCTAACTAAATTGTGTATGCCCACCACAAAGAAGGTACTATTTTTTGTTTGATTCATCTTCAACTTTGCGTATTATGCTTAACTTCACAAGTTAACTTTTTCTTATTTTGTATCCTGATGAGGCATTTCTTACTAGAATCCCATAAGTGAAATATAATATTTTTCAAAGTTGATATCATTTAAAAATTTTTGGTCGTTTTAAATGTCTTTATTGACTTTAAATTCATTGCCTCTACATTATTCATTAGTTCTTCTTTTCCTAAAACTTTTTACTTGTTAAAATAGTCTGCTGCATGTAATATGTGCTTTTACTATTTGATATTTCTTCTATTTTTCTTTTGAAACCGGTGTTCTTATTGGTTTGCCATCCTTGTTCATTACAACTGTTTTTTGTTTGTTTGTTTGTTTTTTGGTTTGTTTGTTTTTTTTTTTTTTGAGACGGAGTCTCGCTCTGTCGCCCAGGCTGGAGTGCAGTGGCGCGATCTCAGCTCACTGCAACCTCCGCCTCCCAGGTTCAAGCGATTCTCCTGCCTCAGCCTCCAGAGTATCTGGGACTACAGTTGCATGTCACCACGTTCGGCTAATTTTTGTATTTTCAGTAGAGACGGGTTTCATCATGGTGGCCAGGATGGTCTATCTCTTGACCTCGTGATCCACCCCACTCAGCCTCCCAAATTGCTGGGATTTACAGGCATGAGCCACCGCACCCAGCCTACAATAATTTTCTTAAACTTTACCTTTTATTTTAAAGTTCTAGTTTCCCGGCATTGATAGTTCCCTATTTGAAATATAATGTTTCTCTTGTAAGTGATATGATAAATAAACCCCTAATTAGCCTTAGAAGAAAAACCACTGCAAGATATTAAGCGTGTGTAAATGGGCTTTAGTCTGGAAACCAAAAAAAAAAAAAAAATTTAGTCATTCTATAGGATCATGTGAAAATATTTAATTTGCTCCTTTTAATTCTGTATAAACAAATCAGAGGTTCCTGAGGTTCCTGTTAAATTTTTAATGGCTAATAGCCCAGTGCCATCCAGTTGAAAAAACAACAGCAATCACAAAGTAGAGGTTTATATTGTGCGGCTTTTATATTCAGCTATTAGAGTGTTATTGGTAGTGTCTAGCCTTTTCCTCCACGACATTCCTTGACTTAATCCATTTGGGCCTATTATAGACAAAATAGAGCTTCTTTCTAGATATAAGGTCTTTGAGGCAGGGCTCAGTGGCTCATTCCTGTAATCCCAGCACTTTGGGAGGCCAAGGCGGGCAGATCACCTTAGGTCACGAGTTTGAGACCAGCCTGACCAACGTTAAGTAACCCCGTCTTTACTAAAAATACAAAATTAGCCAGGCATGGTGGCACATGCTTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCAGGAGGTGGAAGTTGCTTTGAGCCGAGATTGCACCATTGTACTCCAGCCTGGGCAATAAGAGCAAAACTCCATCAAAATAAAATAAAATAAAATATAAAATAACTTAAAAAGAACTTTGAATAAAATTCTATGAAAAAAGACACTAGAATGCTGTTCTTAATTTTAATAGTGTTAAGATAGGTGTTAGTGTGGTCTGTTCTTTACCTCCCTTTATTTGGTGCAGAGAAGTTAGATCCTGCTAAATTTCAATTAAGAGGGGACCTTAAAATAAGGATCAATCTCTTATTTAACCCTGTAAGTTACTTTAAAGCTAATACAAGAAAAACAAAGACAAGTGAAAGTAAGGAAACAGAAATTGC", + 140566701 - 1); + var codingRegion = new CodingRegion(140566893, 140569285, 193, 2586, 2394); var regions = new ITranscriptRegion[] { - new TranscriptRegion(TranscriptRegionType.Exon, 1, 140566701,140568035, 1, 1335), - new TranscriptRegion(TranscriptRegionType.Exon, 1, 140568036,140571111, 1337, 4412) + new TranscriptRegion(TranscriptRegionType.Exon, 1, 140566701, 140568035, 1, 1335), + new TranscriptRegion(TranscriptRegionType.Exon, 1, 140568036, 140571111, 1337, 4412) }; var rnaEdits = new IRnaEdit[] { - new RnaEdit(908, 908, "T"), + new RnaEdit(908, 908, "T"), new RnaEdit(1336, 1335, "A"), new RnaEdit(2096, 2096, "G") }; + const byte startExonPhase = 0; - var codingSequence = new CodingSequence(genomicSeq, codingRegion, regions, false, startExonPhase, rnaEdits); const string expectedCodingSeq = "ATGAAGACCAGGGGGTTCAGCTTTCCAAGACAAAGGCAAGTCCTGTTTCTTTTTCTTTTCTGGGGAGTGTCCTTGGCAGGTTCTGGGTTTGGACGTTATTCGGTGACTGAGGAAACAGAGAAAGGATCCTTTGTGGTCAATCTGGCAAAGGATCTGGGACTAGCAGAGGGGGAGCTGGCTGCAAGGGGAACCAGGGTGGTTTCCGATGATAACAAACAATACCTGCTCCTGGATTCACATACCGGGAATTTGCTCACAAATGAGAAACTGGACCGAGAGAAGCTGTGTGGCCCTAAAGAGCCCTGTATGCTGTATTTCCAAATTTTAATGGATGATCCCTTTCAGATTTACCGGGCTGAGCTGAGAGTCAGGGATATAAATGATCACTCGCCAGTGTTTCGGCACAAAGAGATGGTCTTAAAAATATCAGAAAATACAGCTGAAGGGACAGCATTTAGACTAGAAAGAGCACAGGATCCAGATGAAGGTCATAACAGTATCCAAAACTACACGATCAGCTCCAACTCTTTTTTCCATATTAAAATTAGTGGCAGTGATGAAGGCATGATATATCCAGAGCTAGTGTTGGACAAAGCACTGGATCGGGAGGAGCAGGAAGAGCTCAGCTTAACCCTCACAGCGCTGGATGGTGGGTCTCCATCCAGGTCTGGGACCTCCACTATACGCATTGTGGTCTTGGATGTCAATGACAATGTCCCACAGTTTGCCCAGGCTCTGTATGAGACCCAGGCTCCAGAAAACAGTCCAGTAGGGTCCCTTATTGTTAAAGTGTCTGCAGGAGATGCAGACTCAGGAGTCAATGCAGAAGTATCCTATTCATTTTTTGATGCTTCTGAAGATATTTTAACAACGTTTCAAATCAATCCTTTTTCTGGGGAAATCTTTCTCAGAGAATTGCTTGATTATGAGTTAGTAAATTCTTACAAAATAAATATACAGGCAATGGACGGCGGAGGCCTTTCTGCAAGATGTACAGTTTTGATAAAAGTATTAGATTCCAATGACAATCCTCCTGAACTGATCATATCATCACTTTCCAACTCTGTTGCTGAAAACTCTCCTGGGATAGTATTGGCTGTTTTTAAGATTAAAGACAGAGACTCCGGAGAAAATGGAAAGACAATTTGCTATGTTCAAGATAATCTGCCTTTTTTTCTGAAACCGTCTGTTGACAATTTTTACATCCTAATGACTGAAGGTGCACTGGACAGAGAGAGCAAAGCTGAGTACAACATCACCATCACCGTCACTGACTTGGGGACACCCAGGCTGAAAACCGAGCACAGCATAACCCTGCAGGTCTCCGACGTCAATGACAACGCCCCCGCCTTCACCCAAACCTCCTACACCCTGTTCGTCCGGGAGAACAACAGCCCCGCCCTGCACATCGGCAGTGTCAGCGCCACAGACAGAGACTCAGGCACCAACGCCCAGGTCACCTACTCGCTGCTGCCGCCCCAGGACCCACACCTGCCCCTCGCCTCCCTGGTCTCCATCAACGCGGACAATGGCCACCTGTTTGCCCTCAGGTCGCTGGACTACGAGGCCCTGCAGGCTTTCGACTTCCGCGTGGGCGCCTCAGACCGCGGCTCCCCGGCTTTGAGCAGCGAGGCGCTGGTGCGCGTACTGGTGCTGGACGCCAACGACAACTCGCCCTTCGTGCTGTACCCGCTGCAGAACGGCTCCGCGCCCTGCACCGAGCTGGTGCCCCGGGCGGCCGAGCCGGGCTACCTGGTGACCAAGGTGGTGGCGGTGGACGGCGACTCGGGCCAGAACGCCTGGCTGTCGTACCAGCTGCTCAAGGCCACGGAGCCCGGGCTGTTCGGTGTGTGGGCGCACAATGGGGAGGTGCGCACCGCCAGGCTGCTGAGCGAGCGCGACGCGGCCAAGCACAGGCTGGTGGTGCTTGTCAAGGACAATGGCGAGCCTCCTCGCTCGGCCACCGCCACGCTGCACGTGCTCCTGGTGGACGGCTTCTCCCAGCCCTACCTGCCTCTCCCGGAGGCGGCCCCGGCCCAGGCCCAGGCCGACTTGCTCACCGTCTACCTGGTGGTGGCGTTGGCCTCGGTGTCTTCGCTCTTCCTCCTCTCGGTGCTCCTGTTCGTGGCGGTGCGGCTGTGCAGGAGGAGCAGGGCGGCCTCGGTGGGTCGCTGCTCGGTGCCCGAGGGTCCTTTTCCAGGGCATCTGGTGGACGTGAGCGGCACCGGGACCCTGTTCCAGAGCTACCAGTACGAGGTGTGTCTGACTGGAGGTTCAGAGACCGGCGAGTTCAAGTTCTTGAAGCCGATTACCCCCCACCTCCCGCCCCATAGGGGTGGGAAAGAAATAGAGGAAAATTCTACTCTCCCCAATAGCTTTGGATTTAATTATTGA"; Assert.Equal(expectedCodingSeq, codingSequence.GetCodingSequence()); - } [Fact] public void RnaEdits_in_coding_sequence_reverse_insertion() { //NM_000682.6, chrom: chr2:96778623-96781984 - var genomicSeq = new SimpleSequence("CTTATTACAAAATATCCTTTATTGATAAAATAGCTCAGAGTTTAAAAAAAAAAAAAACACCACCTGCATGTCGCAATAAGAGGTCACAGGCAAGAACACTGGGGGTCCCATGGGGCGCACACAAGACCGGCCAGCAGAGGGTCACAGTCAGTCCCTCTCCTGGCCCAGCTCCCCACCACATCCCAGGGCGATACTCTGGCCTCAACAACCCACTGAGGACCAAGCTGGGAAGCCTCCCACACCCCAGGAAGGACTCTTTTTGGTCCCCTCCATTCTCTCTACACCCAGAAAACTCCCTCGGTGCCCTTCCAAATCTAGCAGGTCCATCTGGCCCATTCCCCCGACACCTGCCAAGCTAAGATGCCTACTGGCCCAATGTTGAAGCCAGGCCCTCTCCAAGGGAAGGCCGATAAACCTCCTTTCCACACTTCCAACTGTTCTGGGTGCCAGGTTTTGGGGTGGGACTGAGAACCAGGAAGCAGGGGTCCTCAATGCACAGCCCCATCAGCATTGCGGGGAGCAGCGTGGCTGGGTCCGAGGCAGTCCACAAGCACCCACCTGGGGGGATCAGTTGTGGTTCACAAGGACTCATTTGGGGCTTGGAGACCTGGCCGGGCACTCCAGTGGGAGGCTCCCCTAGGGGCGCACCAGGCTCTGATGCCAGTACCCCACCTGGGGGCGCTGCCACCTGTCACAGGCTCTCATCTTAGACTGTTGCCGAGGTGTGGATATTTTGAGCTGTCTTGGGGAGACAATTTGCCTCCTTGATGACAAAAGACTTATCCCCCACTGGGGAGACCCAAGCCACTAAAAACCCTCTTGGTGTTGCCGGTGAAATGTCGAAACGTTGTCATGTAGCGTAATAACTCAGACCTTTGCAGCCAGAAGAACACATTCTCAAAGAGATCCTTTAACTTGAAATAGTGATTCTGTCTGCCACTCCCGGCTTCCAGTTCGGGGTAGGAATTCACACACCCCAGGGACAGAACAAAAGTCTACAGGAAGACAGGTGGTGGTAAACACAGAGGAAAGGGATTTTTATATCACCATATAATCACATTTTTGGTTCTCTAGTGTGTTCCCCCACAGAGCTCAAAGCTTTCTGCAAAGCCTTTCATCTCCCTGCAGCAAGTAGGCAGTGAGCTATTGTCGCCCCGATTTTTGCAGGGGGTGAATGCCAGTGATCGGGGATCTCCCGTCGAGGCAGAGACCAGGCCTCCAAGACCGCCCCAGCGAGGCATCCACGTGGCCACCCACCTACCGGAGGGGTGCTGGGTAAGGAAGCCGATCCATTGTTCTGGCTTTCAAAGGAACCACAGATCCGAAAACAGGCAAAGGGGGAAAGGAGGGCCCAGAGACGATGCCACCCCATAAGCCCCCATCCCAGCGCCTGCCAGGGACCGCGAGTGCCTAGCGTGGGTGATCAGTCTTCGTTTCTTCCTCCCCCTCAGCAGCAGGCCCCACTGGGAAAAGTGGAAGGCTGGCTCCGTGCTCTTTGTGGGTGGGGGGGAGATGAAAAAGAAACGAAAACACCACAAGCAAGTGACCTGCCAGGAACACAAGGTCCTCAAGAAAGGGAAGCCCAGACATTGGTCTGGAGAGCATGGGGCTCTGGGAAGAAAGTGCTCTCTCTTCTCCTGGTCTTGGCTATGTTCCAGAGGATTTGAACCACCTCCATCGGCCTGTGCTCAGGGAGAGGGTGGAGAAGGGGTCCCCCACAGCTAAGCCGGCAAGGGGAAGCTTCACTGGGACCCTTGCTAGCAGCCCCCCTGCCCACCCCTCCCAAGGGGTTCCTAAGATGAGGCCTACAGGATCTGGGCAGGGAGCAGAAAGCCCAGGGGAGGCAGCCACACACAGCAGGGCAAGAAGCAGGGTGACCCCGGCGCCACCGCACCAACCCCACAGGGGCAGCGCAGGCGGGCTCACCAGGCCGTCTGGGTCCACGGGCGGCACAGGATCCTCCGGAAGGCACGGCGGAAGTCCTGGTTGAAGATGGTGTAGATAACAGGGTTCAGTGAGCTGTTGCAGTAGCCGATCCAGAAGAAGAACTGGAAGAGGCCATGGGGCACCTTGCAGTGCTTCGGGCAGATGGCTCCCAGGCTGTAGCTGAAGAAGAAGGGGAACCAGCAGAGCACAAAAACGCCAATGACCACAGCCAGCACGAAGGTGAAGCGCTTCTCCCGGGTCAGCTGCGCCCGTCGACGCCACCACTGCCCACCTATAGCACCCACGCCCCTGCCCAGGAGCACCTGGCCACGTAGGGTGGCCAGCACCCGGGAGCCCTGTGGCTGCTGCAGCGGGGGGCTGCAAGCTGAGGCCGGAGACACTGGCACTGCCTGGGGTTCACACTCTTCCTCCTCCTCCTCCTCCTCTTCAGCTTCATCCTCTGGAGATGCCCCACAAACACCCTCCTTCTGGCCCTGGCCTGAGTTGGGAAGGGCAGCCCAACTGGGTGGCAAGGCCCGGGTCCCAGTATCTTCAGGGGTCTCCCCCTCCTCCTTCTCCCCAGTGGACTTCGAGTGTCCGTTGACCTCTCTGGCAGAAGCCACAGAGGCCAGGGCTGGCAGTTTGGCTGAGGCCAAAGCCCCACCATGGTCGGGTCGGGGCTGCTTGGACTCACCCTGCCCAGGCCCCCCCTTGGCCCTGGGACCTCTGCGGTTGCTGCGTTTGGCGATCAGGTAGATGCGCAGGTAGACAAGGATCATGATGAGGCAAGGAGCAAAGAAAGATCCGATGCTGGAGGCCAGGATGTACCAGGCCTCCTGGTTGAGCTTGCACTGGGGGCGCCCGCGCGGCTGGGGGCCCTGGTCGCCCTTGTAGATGAGGGGCGGCAGCGAGATGACGGCGGCGATGAGCCACACAGTGAGGATGATGCACTTGATGCGGCGCGGGGTGCGCTTGGAGTTGTACTCCAGCGCGCGGCTCACGGCCCAGTAGCGGTCCAGGCTGATGGCGCACAGGTGCACGATGGACGAGGTGCAGAAGAGCACGTCGAGCGCCAGGTACACCTCGCACCACGTGCGCCGGAAGTACCAGTAGCCCAGCAGCTCGTTGGCCAGCGAGAAAGGGATGATGAGCGTGGCCACCAGGATGTCGGCGGCGGCCAGCGACACCAGGAACAGGTTCTGAGGGGCGCGCAGCGAGCGGCTGGTCAACACAGCCAGGATGACCAGAGCGTTGCCGAAGATGGTAAAGAGAATGAGGAAGGTGATGGCCGCCGCTATGGCCGCTGTGGCCTGCACGGAGTAGGGGTCCTGGTGGTCCATGACGGGGCGGGAGGTGGGCAGAGGGAGCGCTGCCCGCCCAGTGCGCACCGTGGACGACAGCGCTGCCCGGCTCGGCTAGACAAGAGCGTCGCCCCT", 96778623 - 1); - var codingRegion = new CodingRegion(96780545, 96781888, 97, 1449, 1344); + var genomicSeq = new SimpleSequence( + "CTTATTACAAAATATCCTTTATTGATAAAATAGCTCAGAGTTTAAAAAAAAAAAAAACACCACCTGCATGTCGCAATAAGAGGTCACAGGCAAGAACACTGGGGGTCCCATGGGGCGCACACAAGACCGGCCAGCAGAGGGTCACAGTCAGTCCCTCTCCTGGCCCAGCTCCCCACCACATCCCAGGGCGATACTCTGGCCTCAACAACCCACTGAGGACCAAGCTGGGAAGCCTCCCACACCCCAGGAAGGACTCTTTTTGGTCCCCTCCATTCTCTCTACACCCAGAAAACTCCCTCGGTGCCCTTCCAAATCTAGCAGGTCCATCTGGCCCATTCCCCCGACACCTGCCAAGCTAAGATGCCTACTGGCCCAATGTTGAAGCCAGGCCCTCTCCAAGGGAAGGCCGATAAACCTCCTTTCCACACTTCCAACTGTTCTGGGTGCCAGGTTTTGGGGTGGGACTGAGAACCAGGAAGCAGGGGTCCTCAATGCACAGCCCCATCAGCATTGCGGGGAGCAGCGTGGCTGGGTCCGAGGCAGTCCACAAGCACCCACCTGGGGGGATCAGTTGTGGTTCACAAGGACTCATTTGGGGCTTGGAGACCTGGCCGGGCACTCCAGTGGGAGGCTCCCCTAGGGGCGCACCAGGCTCTGATGCCAGTACCCCACCTGGGGGCGCTGCCACCTGTCACAGGCTCTCATCTTAGACTGTTGCCGAGGTGTGGATATTTTGAGCTGTCTTGGGGAGACAATTTGCCTCCTTGATGACAAAAGACTTATCCCCCACTGGGGAGACCCAAGCCACTAAAAACCCTCTTGGTGTTGCCGGTGAAATGTCGAAACGTTGTCATGTAGCGTAATAACTCAGACCTTTGCAGCCAGAAGAACACATTCTCAAAGAGATCCTTTAACTTGAAATAGTGATTCTGTCTGCCACTCCCGGCTTCCAGTTCGGGGTAGGAATTCACACACCCCAGGGACAGAACAAAAGTCTACAGGAAGACAGGTGGTGGTAAACACAGAGGAAAGGGATTTTTATATCACCATATAATCACATTTTTGGTTCTCTAGTGTGTTCCCCCACAGAGCTCAAAGCTTTCTGCAAAGCCTTTCATCTCCCTGCAGCAAGTAGGCAGTGAGCTATTGTCGCCCCGATTTTTGCAGGGGGTGAATGCCAGTGATCGGGGATCTCCCGTCGAGGCAGAGACCAGGCCTCCAAGACCGCCCCAGCGAGGCATCCACGTGGCCACCCACCTACCGGAGGGGTGCTGGGTAAGGAAGCCGATCCATTGTTCTGGCTTTCAAAGGAACCACAGATCCGAAAACAGGCAAAGGGGGAAAGGAGGGCCCAGAGACGATGCCACCCCATAAGCCCCCATCCCAGCGCCTGCCAGGGACCGCGAGTGCCTAGCGTGGGTGATCAGTCTTCGTTTCTTCCTCCCCCTCAGCAGCAGGCCCCACTGGGAAAAGTGGAAGGCTGGCTCCGTGCTCTTTGTGGGTGGGGGGGAGATGAAAAAGAAACGAAAACACCACAAGCAAGTGACCTGCCAGGAACACAAGGTCCTCAAGAAAGGGAAGCCCAGACATTGGTCTGGAGAGCATGGGGCTCTGGGAAGAAAGTGCTCTCTCTTCTCCTGGTCTTGGCTATGTTCCAGAGGATTTGAACCACCTCCATCGGCCTGTGCTCAGGGAGAGGGTGGAGAAGGGGTCCCCCACAGCTAAGCCGGCAAGGGGAAGCTTCACTGGGACCCTTGCTAGCAGCCCCCCTGCCCACCCCTCCCAAGGGGTTCCTAAGATGAGGCCTACAGGATCTGGGCAGGGAGCAGAAAGCCCAGGGGAGGCAGCCACACACAGCAGGGCAAGAAGCAGGGTGACCCCGGCGCCACCGCACCAACCCCACAGGGGCAGCGCAGGCGGGCTCACCAGGCCGTCTGGGTCCACGGGCGGCACAGGATCCTCCGGAAGGCACGGCGGAAGTCCTGGTTGAAGATGGTGTAGATAACAGGGTTCAGTGAGCTGTTGCAGTAGCCGATCCAGAAGAAGAACTGGAAGAGGCCATGGGGCACCTTGCAGTGCTTCGGGCAGATGGCTCCCAGGCTGTAGCTGAAGAAGAAGGGGAACCAGCAGAGCACAAAAACGCCAATGACCACAGCCAGCACGAAGGTGAAGCGCTTCTCCCGGGTCAGCTGCGCCCGTCGACGCCACCACTGCCCACCTATAGCACCCACGCCCCTGCCCAGGAGCACCTGGCCACGTAGGGTGGCCAGCACCCGGGAGCCCTGTGGCTGCTGCAGCGGGGGGCTGCAAGCTGAGGCCGGAGACACTGGCACTGCCTGGGGTTCACACTCTTCCTCCTCCTCCTCCTCCTCTTCAGCTTCATCCTCTGGAGATGCCCCACAAACACCCTCCTTCTGGCCCTGGCCTGAGTTGGGAAGGGCAGCCCAACTGGGTGGCAAGGCCCGGGTCCCAGTATCTTCAGGGGTCTCCCCCTCCTCCTTCTCCCCAGTGGACTTCGAGTGTCCGTTGACCTCTCTGGCAGAAGCCACAGAGGCCAGGGCTGGCAGTTTGGCTGAGGCCAAAGCCCCACCATGGTCGGGTCGGGGCTGCTTGGACTCACCCTGCCCAGGCCCCCCCTTGGCCCTGGGACCTCTGCGGTTGCTGCGTTTGGCGATCAGGTAGATGCGCAGGTAGACAAGGATCATGATGAGGCAAGGAGCAAAGAAAGATCCGATGCTGGAGGCCAGGATGTACCAGGCCTCCTGGTTGAGCTTGCACTGGGGGCGCCCGCGCGGCTGGGGGCCCTGGTCGCCCTTGTAGATGAGGGGCGGCAGCGAGATGACGGCGGCGATGAGCCACACAGTGAGGATGATGCACTTGATGCGGCGCGGGGTGCGCTTGGAGTTGTACTCCAGCGCGCGGCTCACGGCCCAGTAGCGGTCCAGGCTGATGGCGCACAGGTGCACGATGGACGAGGTGCAGAAGAGCACGTCGAGCGCCAGGTACACCTCGCACCACGTGCGCCGGAAGTACCAGTAGCCCAGCAGCTCGTTGGCCAGCGAGAAAGGGATGATGAGCGTGGCCACCAGGATGTCGGCGGCGGCCAGCGACACCAGGAACAGGTTCTGAGGGGCGCGCAGCGAGCGGCTGGTCAACACAGCCAGGATGACCAGAGCGTTGCCGAAGATGGTAAAGAGAATGAGGAAGGTGATGGCCGCCGCTATGGCCGCTGTGGCCTGCACGGAGTAGGGGTCCTGGTGGTCCATGACGGGGCGGGAGGTGGGCAGAGGGAGCGCTGCCCGCCCAGTGCGCACCGTGGACGACAGCGCTGCCCGGCTCGGCTAGACAAGAGCGTCGCCCCT", + 96778623 - 1); + var codingRegion = new CodingRegion(96780545, 96781888, 97, 1449, 1353); var regions = new ITranscriptRegion[] { - new TranscriptRegion(TranscriptRegionType.Exon,1, 96778623,96780986, 1008, 3371), - new TranscriptRegion(TranscriptRegionType.Exon, 1, 96780987,96781984, 1, 998) + new TranscriptRegion(TranscriptRegionType.Exon, 1, 96778623, 96780986, 1008, 3371), + new TranscriptRegion(TranscriptRegionType.Exon, 1, 96780987, 96781984, 1, 998) }; var rnaEdits = new IRnaEdit[] { new RnaEdit(999, 998, "AGAGGAGGA") }; - const byte startExonPhase = 0; + + const byte startExonPhase = 0; const bool onReverseStrand = true; - var codingSequence = new CodingSequence(genomicSeq, codingRegion, regions, onReverseStrand, startExonPhase, rnaEdits); - const string expectedCodingSeq = "ATGGACCACCAGGACCCCTACTCCGTGCAGGCCACAGCGGCCATAGCGGCGGCCATCACCTTCCTCATTCTCTTTACCATCTTCGGCAACGCTCTGGTCATCCTGGCTGTGTTGACCAGCCGCTCGCTGCGCGCCCCTCAGAACCTGTTCCTGGTGTCGCTGGCCGCCGCCGACATCCTGGTGGCCACGCTCATCATCCCTTTCTCGCTGGCCAACGAGCTGCTGGGCTACTGGTACTTCCGGCGCACGTGGTGCGAGGTGTACCTGGCGCTCGACGTGCTCTTCTGCACCTCGTCCATCGTGCACCTGTGCGCCATCAGCCTGGACCGCTACTGGGCCGTGAGCCGCGCGCTGGAGTACAACTCCAAGCGCACCCCGCGCCGCATCAAGTGCATCATCCTCACTGTGTGGCTCATCGCCGCCGTCATCTCGCTGCCGCCCCTCATCTACAAGGGCGACCAGGGCCCCCAGCCGCGCGGGCGCCCCCAGTGCAAGCTCAACCAGGAGGCCTGGTACATCCTGGCCTCCAGCATCGGATCTTTCTTTGCTCCTTGCCTCATCATGATCCTTGTCTACCTGCGCATCTACCTGATCGCCAAACGCAGCAACCGCAGAGGTCCCAGGGCCAAGGGGGGGCCTGGGCAGGGTGAGTCCAAGCAGCCCCGACCCGACCATGGTGGGGCTTTGGCCTCAGCCAAACTGCCAGCCCTGGCCTCTGTGGCTTCTGCCAGAGAGGTCAACGGACACTCGAAGTCCACTGGGGAGAAGGAGGAGGGGGAGACCCCTGAAGATACTGGGACCCGGGCCTTGCCACCCAGTTGGGCTGCCCTTCCCAACTCAGGCCAGGGCCAGAAGGAGGGTGTTTGTGGGGCATCTCCAGAGGATGAAGCTGAAGAGGAGGAAGAGGAGGAGGAGGAGGAGGAAGAGTGTGAACCCCAGGCAGTGCCAGTGTCTCCGGCCTCAGCTTGCAGCCCCCCGCTGCAGCAGCCACAGGGCTCCCGGGTGCTGGCCACCCTACGTGGCCAGGTGCTCCTGGGCAGGGGCGTGGGTGCTATAGGTGGGCAGTGGTGGCGTCGACGGGCGCAGCTGACCCGGGAGAAGCGCTTCACCTTCGTGCTGGCTGTGGTCATTGGCGTTTTTGTGCTCTGCTGGTTCCCCTTCTTCTTCAGCTACAGCCTGGGAGCCATCTGCCCGAAGCACTGCAAGGTGCCCCATGGCCTCTTCCAGTTCTTCTTCTGGATCGGCTACTGCAACAGCTCACTGAACCCTGTTATCTACACCATCTTCAACCAGGACTTCCGCCGTGCCTTCCGGAGGATCCTGTGCCGCCCGTGGACCCAGACGGCCTGGTGA"; + var codingSequence = new CodingSequence(genomicSeq, codingRegion, regions, onReverseStrand, startExonPhase, + rnaEdits); - Assert.Equal(expectedCodingSeq, codingSequence.GetCodingSequence()); + var expectedCodingSeq = + "ATGGACCACCAGGACCCCTACTCCGTGCAGGCCACAGCGGCCATAGCGGCGGCCATCACCTTCCTCATTCTCTTTACCATCTTCGGCAACGCTCTGGTCATCCTGGCTGTGTTGACCAGCCGCTCGCTGCGCGCCCCTCAGAACCTGTTCCTGGTGTCGCTGGCCGCCGCCGACATCCTGGTGGCCACGCTCATCATCCCTTTCTCGCTGGCCAACGAGCTGCTGGGCTACTGGTACTTCCGGCGCACGTGGTGCGAGGTGTACCTGGCGCTCGACGTGCTCTTCTGCACCTCGTCCATCGTGCACCTGTGCGCCATCAGCCTGGACCGCTACTGGGCCGTGAGCCGCGCGCTGGAGTACAACTCCAAGCGCACCCCGCGCCGCATCAAGTGCATCATCCTCACTGTGTGGCTCATCGCCGCCGTCATCTCGCTGCCGCCCCTCATCTACAAGGGCGACCAGGGCCCCCAGCCGCGCGGGCGCCCCCAGTGCAAGCTCAACCAGGAGGCCTGGTACATCCTGGCCTCCAGCATCGGATCTTTCTTTGCTCCTTGCCTCATCATGATCCTTGTCTACCTGCGCATCTACCTGATCGCCAAACGCAGCAACCGCAGAGGTCCCAGGGCCAAGGGGGGGCCTGGGCAGGGTGAGTCCAAGCAGCCCCGACCCGACCATGGTGGGGCTTTGGCCTCAGCCAAACTGCCAGCCCTGGCCTCTGTGGCTTCTGCCAGAGAGGTCAACGGACACTCGAAGTCCACTGGGGAGAAGGAGGAGGGGGAGACCCCTGAAGATACTGGGACCCGGGCCTTGCCACCCAGTTGGGCTGCCCTTCCCAACTCAGGCCAGGGCCAGAAGGAGGGTGTTTGTGGGGCATCTCCAGAGGATGAAGCTGAAGAGGAGGAAGAGGAGGAGGAGGAGGAGGAAGAGTGTGAACCCCAGGCAGTGCCAGTGTCTCCGGCCTCAGCTTGCAGCCCCCCGCTGCAGCAGCCACAGGGCTCCCGGGTGCTGGCCACCCTACGTGGCCAGGTGCTCCTGGGCAGGGGCGTGGGTGCTATAGGTGGGCAGTGGTGGCGTCGACGGGCGCAGCTGACCCGGGAGAAGCGCTTCACCTTCGTGCTGGCTGTGGTCATTGGCGTTTTTGTGCTCTGCTGGTTCCCCTTCTTCTTCAGCTACAGCCTGGGAGCCATCTGCCCGAAGCACTGCAAGGTGCCCCATGGCCTCTTCCAGTTCTTCTTCTGGATCGGCTACTGCAACAGCTCACTGAACCCTGTTATCTACACCATCTTCAACCAGGACTTCCGCCGTGCCTTCCGGAGGATCCTGTGCCGCCCGTGGACCCAGACGGCCTGGTGA"; + Assert.Equal(expectedCodingSeq, codingSequence.GetCodingSequence()); } [Fact] public void With_rnaEdits_snv_mnv() { //NM_001242659.1 - var genomicSeq = new SimpleSequence("ACTATAAAGACAGTAAAAAGATCAGTGGTTATCTTTGCAGACGCCACCATCXCTGTGAGCCCTGTACTATCAGCCATGGTCAACTCCGTCGTCTTTTTTGACATCACCGTCGACGGCAAGCCCTTGGGCCGCATCTCCATCAAACTGTTTGCAGACAAGATTCXAAAGACAGCXGAAAACTTTCGTGCTCTGAGCACTGGAGAGAAAGGATTTCGTTATAAGGGTTCCTGCTTTCACAGAATTATTCCAGGGTTTATGTGTCAGGGTGGTGACTTCACACGCCXTAATGGCACXGGTGACAAGTCCATCTATGGGGAGAAATTTGATGATGAGAACCTCATCCGAAAGCATACAGGTTCTGGCATCTTGTCCATGGCAAATGCTGGACCCAACACAAATGGTTCCCAGTTTTTCATCTGXXCTGCCAAGACTGAGTGGTTGGATGGCAAGCATGTGGCCTTTGGCAAGGTGAAAGAACGTGTGAATATTGTGGAAGCCATGGAGCACTTTGGGTACAGGAATAGCAAGACCAGCAAGAAGATCACCATTGCTGACTGTGGACAATTCTAATGAGTTTGACTTGTGTTTTATTTTCACCACCAGACCCATTCCTTCTGTAGCTCAGGAGAGCACCCCTCCACCACATTTGCTTGCAATATCCTAGAATCTXXGTGCTCTTGCTGCAGTTCCCTTTGGGTTCCATGTTTTCCTTGTTCCCTTCCATGCCTAGCTGGATTGCAGAGTTGAGTTAAGTTTATGATTATGAAATAAAAACTAAGTAACAA", 149553002); + var genomicSeq = new SimpleSequence( + "ACTATAAAGACAGTAAAAAGATCAGTGGTTATCTTTGCAGACGCCACCATCXCTGTGAGCCCTGTACTATCAGCCATGGTCAACTCCGTCGTCTTTTTTGACATCACCGTCGACGGCAAGCCCTTGGGCCGCATCTCCATCAAACTGTTTGCAGACAAGATTCXAAAGACAGCXGAAAACTTTCGTGCTCTGAGCACTGGAGAGAAAGGATTTCGTTATAAGGGTTCCTGCTTTCACAGAATTATTCCAGGGTTTATGTGTCAGGGTGGTGACTTCACACGCCXTAATGGCACXGGTGACAAGTCCATCTATGGGGAGAAATTTGATGATGAGAACCTCATCCGAAAGCATACAGGTTCTGGCATCTTGTCCATGGCAAATGCTGGACCCAACACAAATGGTTCCCAGTTTTTCATCTGXXCTGCCAAGACTGAGTGGTTGGATGGCAAGCATGTGGCCTTTGGCAAGGTGAAAGAACGTGTGAATATTGTGGAAGCCATGGAGCACTTTGGGTACAGGAATAGCAAGACCAGCAAGAAGATCACCATTGCTGACTGTGGACAATTCTAATGAGTTTGACTTGTGTTTTATTTTCACCACCAGACCCATTCCTTCTGTAGCTCAGGAGAGCACCCCTCCACCACATTTGCTTGCAATATCCTAGAATCTXXGTGCTCTTGCTGCAGTTCCCTTTGGGTTCCATGTTTTCCTTGTTCCCTTCCATGCCTAGCTGGATTGCAGAGTTGAGTTAAGTTTATGATTATGAAATAAAAACTAAGTAACAA", + 149553002); var codingRegion = new CodingRegion(149553003, 149553787, 1, 785, 785); var regions = new ITranscriptRegion[] @@ -248,7 +275,7 @@ public void With_rnaEdits_snv_mnv() var rnaEdits = new IRnaEdit[] { - new RnaEdit(52, 52, "G"), + new RnaEdit(52, 52, "G"), new RnaEdit(164, 164, "C"), new RnaEdit(174, 174, "A"), new RnaEdit(284, 284, "C"), @@ -256,58 +283,66 @@ public void With_rnaEdits_snv_mnv() new RnaEdit(420, 421, "CA"), new RnaEdit(670, 671, "CT") }; + const byte startExonPhase = 0; var codingSequence = new CodingSequence(genomicSeq, codingRegion, regions, false, startExonPhase, rnaEdits); - const string expectedCodingSeq = "ACTATAAAGACAGTAAAAAGATCAGTGGTTATCTTTGCAGACGCCACCATCGCTGTGAGCCCTGTACTATCAGCCATGGTCAACTCCGTCGTCTTTTTTGACATCACCGTCGACGGCAAGCCCTTGGGCCGCATCTCCATCAAACTGTTTGCAGACAAGATTCCAAAGACAGCAGAAAACTTTCGTGCTCTGAGCACTGGAGAGAAAGGATTTCGTTATAAGGGTTCCTGCTTTCACAGAATTATTCCAGGGTTTATGTGTCAGGGTGGTGACTTCACACGCCCTAATGGCACCGGTGACAAGTCCATCTATGGGGAGAAATTTGATGATGAGAACCTCATCCGAAAGCATACAGGTTCTGGCATCTTGTCCATGGCAAATGCTGGACCCAACACAAATGGTTCCCAGTTTTTCATCTGCACTGCCAAGACTGAGTGGTTGGATGGCAAGCATGTGGCCTTTGGCAAGGTGAAAGAACGTGTGAATATTGTGGAAGCCATGGAGCACTTTGGGTACAGGAATAGCAAGACCAGCAAGAAGATCACCATTGCTGACTGTGGACAATTCTAATGAGTTTGACTTGTGTTTTATTTTCACCACCAGACCCATTCCTTCTGTAGCTCAGGAGAGCACCCCTCCACCACATTTGCTTGCAATATCCTAGAATCTCTGTGCTCTTGCTGCAGTTCCCTTTGGGTTCCATGTTTTCCTTGTTCCCTTCCATGCCTAGCTGGATTGCAGAGTTGAGTTAAGTTTATGATTATGAAATAAAAACTAAGTAACAA"; + var expectedCodingSeq = + "ACTATAAAGACAGTAAAAAGATCAGTGGTTATCTTTGCAGACGCCACCATCGCTGTGAGCCCTGTACTATCAGCCATGGTCAACTCCGTCGTCTTTTTTGACATCACCGTCGACGGCAAGCCCTTGGGCCGCATCTCCATCAAACTGTTTGCAGACAAGATTCCAAAGACAGCAGAAAACTTTCGTGCTCTGAGCACTGGAGAGAAAGGATTTCGTTATAAGGGTTCCTGCTTTCACAGAATTATTCCAGGGTTTATGTGTCAGGGTGGTGACTTCACACGCCCTAATGGCACCGGTGACAAGTCCATCTATGGGGAGAAATTTGATGATGAGAACCTCATCCGAAAGCATACAGGTTCTGGCATCTTGTCCATGGCAAATGCTGGACCCAACACAAATGGTTCCCAGTTTTTCATCTGCACTGCCAAGACTGAGTGGTTGGATGGCAAGCATGTGGCCTTTGGCAAGGTGAAAGAACGTGTGAATATTGTGGAAGCCATGGAGCACTTTGGGTACAGGAATAGCAAGACCAGCAAGAAGATCACCATTGCTGACTGTGGACAATTCTAATGAGTTTGACTTGTGTTTTATTTTCACCACCAGACCCATTCCTTCTGTAGCTCAGGAGAGCACCCCTCCACCACATTTGCTTGCAATATCCTAGAATCTCTGTGCTCTTGCTGCAGTTCCCTTTGGGTTCCATGTTTTCCTTGTTCCCTTCCATGCCTAGCTGGATTGCAGAGTTGAGTTAAGTTTATGATTATGAAATAAAAACTAAGTAACAA"; Assert.Equal(expectedCodingSeq, codingSequence.GetCodingSequence()); - } [Fact] public void With_rnaEdits_deletion() { //NM_033089.6, chrom: chr20:278204-280965 - var genomicSeq = new SimpleSequence("GGAGGATGCTGGGAAGGAGGTAAAATGGCCACCGGCGGCGGCGCGGAGGAAGAGAGGAAACGGGGGCGGCCGCAGCTTCTGCCCCCCGCGCGGCCCGCGGCCCGGGGCGAGGAGGCCGACGGCGGCCGCGAGAAGATGGGCTGGGCCCAGGTGGTGAAGAATCTAGCCGAGAAGAAGGGCGAATTCCGCGAGCCGCGGCCGCCGCGGCGGGAGGAGGAAAGCGGCGGCGGTGGAGGGAGCGCCGGGCTCGGCGGCCCCGCGGGCCTGGCGGCGCCGGACCTCGGCGACTTCCCACCGGCTGGCCGCGGGGATCCGAAGGGCCGTCGGAGAGATCCGGCCGGCGAGGCGGTGGACCCCCGCAAAAAGAAGGGCGCTGCGGAGGCGGGCAGGAGGAAGAAGGCCGAGGCGGCGGCGGCCGCCATGGCGACCCCGGCCAGGCCCGGCGAGGCCGAGGACGCGGCCGAGCGGCCCCTCCAGGATGAGCCGGCGGCGGCGGCGGCAGGCCCGGGCAAGGGTCGCTTCCTCGTCCGCATCTGTTTCCAGGGAGACGAGGGCGCCTGCCCGACCCGGGACTTCGTGGTAGGAGCGCTTATCCTGCGCTCCATCGGCATGGACCCGAGCGACATCTACGCGGTCATCCAGATCCCGGGCAGCCGCGAATTCGACGTGAGCTTCCGCTCAGCGGAGAAGCTGGCCCTGTTCCTACGCGTCTACGAGGAGAAGCGGGAGCAGGAGGACTGCTGGGAGAACTTTGTGGTGCTGGGGCGGAGCAAGTCCAGCTTGAAGACGCTCTTCATCCTCTTCCGGAACGAGACGGTGGACGTGGAGGACATTGTGACTTGGCTCAAGCGCCACTGCGACGTGCTGGCCGTGCCGGTGAAAGTGACCGACAGGTTTGGGATCTGGACCGGGGAGTACAAATGCGAGATCGAGCTGCGCCAGGGGGAGGGCGGGGTCAGGCACTTGCCAGGGGCCTTCTTCCTGGGGGCCGAGAGGGGCTACAGCTGGTACAAGGGGCAGCCCAAGACATGCTTTAAATGTGGTTCCCGGACCCACATGAGCGGCAGCTGCACGCAGGACAGGTGCTTCAGGTGCGGGGAGGAGGGGCACCTGAGCCCTTACTGCCGGAAGGGCATCGTGTGCAACCTCTGTGGCAAGCGAGGACACGCCTTTGCCCAGTGTCCCAAAGCAGTGCACAATTCCGTGGCAGCTCAGCTAACCGGCGTGGCCGGGCACTAAACACCCGCCTGCCTGCCAGGGTGAACACACAGCCAGCTTATCCCTCTTAAGTGCCAAAACTTTTTTTTAAACCATTTTTTATCGTTTTTGAAGGAGATCTTTTTAAAACCTACAAGAGACATCTCTCTATGCCTTCTTAAACCGAGTTTACTCCATTTCAGCCTGTTCTGAATTGGTGACTCTGTCACCAATAACGACTGCGGAGAACTGTAGCGTGCAGATGTGTTGCCCCTCCCTTTTAAAATTTTATTTTCGTTTTTCTATTGGGTATTTGTTTTGTTTCTTGTACTTTTTCTCTCTCTCCTTGCCCCCCTCCCGCCCTCCCCGCCCCATACCTTTTCTTCCCCTGGATTTTCACCCTTTGGGCTGCCTTGCTCATCTTTATGCCCCAGCACTAGGTACGGGGCCCAACACGTGGTAGGCACTCCATCAGTGTTTGCTGAATTGAAAACATTGTTGACTGTGGCTTCTATCAGAGTGTCTACCTTTTGCAGCTCTTCCCCTCCCTCATTTAATTTGCTGCTTTTAATCTACGTGGTCTGAGAATTTGTGAAACCAGTGTTGTTAGAAGTGTATATAATCTGAATCAATAAGCTCTGAATGGTGGCCAAGGGCCTCTCTTATGGCACAAAGATGCATGGACTTCATGACAGCTCTTTTGGTGGCTCAGAAGCCATTTTTTATAGAATCATGGAATCTAGAATATTCCTGCTGGAAAGAACCTGAGAGTTGGTTTGGACCAATTCCCTGGTTTTCCAGCAGATGAAACAGGCCCAAAGAGGTTAAATGACTGGGTGAAAATCACATAGCTGTCTGGTGCCAGAGCCAGCCTATAGTAGAGTCCCCTGACCCCAAGCCCGGTGCTCATTCCACTACCTCTCACACTTCACAACAATTTCCTCAACACTTGAGGGCCCAGAAAGTCTGATCTCTCCAGAATGATCAGCCCAGAGGAATGCTGAGAAATCACCTGGAGGAGGGAGCAGAAAGAGAAGGTTTTTAAGGAGGGGCTTCTGAATACTTGGGAGATACGGAACGGACCAAGGACCACACTCCAGGGTGCATTCGTTGCTCCCTGGGGCACCACTTCTGGATTACAGTGTGCCAGGTCCTTTGGAGGCCCTACCCCTTCCCCATTCATTGCCACCAGTGAGAAATGGGGGTGCCCCTGTGTAAAGAAACCTACCAAAGGTTTACATTTGCACCTTAGCCTCAATAGCTACGAACCCTAGAGAAGCAGCTAGCTGGAGCTCATGTGCAACTCCTGATTCTCAGGAGAAAGATGGATTTTAACCCAAAATTATGAGTGAGCTGTTAACTCTAAAATGTACTTGGGAGATAGGCCAAGCGAGAGGTCATGGGCCAACTAAGTGTTATCCAGTAGAAAAGACAGTACACTGCTTTTCTTTTAGTGTTTGCTTTTCCTTTGCTATATGTTTTGCTATTTCCTTGTGGCTTAGAATGTAAAATTGATTGTTAAAAGTTTTGTTCTGAATAAATATTTATCTTTTGTATTGCTAAAA", 278204 - 1); + var genomicSeq = new SimpleSequence( + "GGAGGATGCTGGGAAGGAGGTAAAATGGCCACCGGCGGCGGCGCGGAGGAAGAGAGGAAACGGGGGCGGCCGCAGCTTCTGCCCCCCGCGCGGCCCGCGGCCCGGGGCGAGGAGGCCGACGGCGGCCGCGAGAAGATGGGCTGGGCCCAGGTGGTGAAGAATCTAGCCGAGAAGAAGGGCGAATTCCGCGAGCCGCGGCCGCCGCGGCGGGAGGAGGAAAGCGGCGGCGGTGGAGGGAGCGCCGGGCTCGGCGGCCCCGCGGGCCTGGCGGCGCCGGACCTCGGCGACTTCCCACCGGCTGGCCGCGGGGATCCGAAGGGCCGTCGGAGAGATCCGGCCGGCGAGGCGGTGGACCCCCGCAAAAAGAAGGGCGCTGCGGAGGCGGGCAGGAGGAAGAAGGCCGAGGCGGCGGCGGCCGCCATGGCGACCCCGGCCAGGCCCGGCGAGGCCGAGGACGCGGCCGAGCGGCCCCTCCAGGATGAGCCGGCGGCGGCGGCGGCAGGCCCGGGCAAGGGTCGCTTCCTCGTCCGCATCTGTTTCCAGGGAGACGAGGGCGCCTGCCCGACCCGGGACTTCGTGGTAGGAGCGCTTATCCTGCGCTCCATCGGCATGGACCCGAGCGACATCTACGCGGTCATCCAGATCCCGGGCAGCCGCGAATTCGACGTGAGCTTCCGCTCAGCGGAGAAGCTGGCCCTGTTCCTACGCGTCTACGAGGAGAAGCGGGAGCAGGAGGACTGCTGGGAGAACTTTGTGGTGCTGGGGCGGAGCAAGTCCAGCTTGAAGACGCTCTTCATCCTCTTCCGGAACGAGACGGTGGACGTGGAGGACATTGTGACTTGGCTCAAGCGCCACTGCGACGTGCTGGCCGTGCCGGTGAAAGTGACCGACAGGTTTGGGATCTGGACCGGGGAGTACAAATGCGAGATCGAGCTGCGCCAGGGGGAGGGCGGGGTCAGGCACTTGCCAGGGGCCTTCTTCCTGGGGGCCGAGAGGGGCTACAGCTGGTACAAGGGGCAGCCCAAGACATGCTTTAAATGTGGTTCCCGGACCCACATGAGCGGCAGCTGCACGCAGGACAGGTGCTTCAGGTGCGGGGAGGAGGGGCACCTGAGCCCTTACTGCCGGAAGGGCATCGTGTGCAACCTCTGTGGCAAGCGAGGACACGCCTTTGCCCAGTGTCCCAAAGCAGTGCACAATTCCGTGGCAGCTCAGCTAACCGGCGTGGCCGGGCACTAAACACCCGCCTGCCTGCCAGGGTGAACACACAGCCAGCTTATCCCTCTTAAGTGCCAAAACTTTTTTTTAAACCATTTTTTATCGTTTTTGAAGGAGATCTTTTTAAAACCTACAAGAGACATCTCTCTATGCCTTCTTAAACCGAGTTTACTCCATTTCAGCCTGTTCTGAATTGGTGACTCTGTCACCAATAACGACTGCGGAGAACTGTAGCGTGCAGATGTGTTGCCCCTCCCTTTTAAAATTTTATTTTCGTTTTTCTATTGGGTATTTGTTTTGTTTCTTGTACTTTTTCTCTCTCTCCTTGCCCCCCTCCCGCCCTCCCCGCCCCATACCTTTTCTTCCCCTGGATTTTCACCCTTTGGGCTGCCTTGCTCATCTTTATGCCCCAGCACTAGGTACGGGGCCCAACACGTGGTAGGCACTCCATCAGTGTTTGCTGAATTGAAAACATTGTTGACTGTGGCTTCTATCAGAGTGTCTACCTTTTGCAGCTCTTCCCCTCCCTCATTTAATTTGCTGCTTTTAATCTACGTGGTCTGAGAATTTGTGAAACCAGTGTTGTTAGAAGTGTATATAATCTGAATCAATAAGCTCTGAATGGTGGCCAAGGGCCTCTCTTATGGCACAAAGATGCATGGACTTCATGACAGCTCTTTTGGTGGCTCAGAAGCCATTTTTTATAGAATCATGGAATCTAGAATATTCCTGCTGGAAAGAACCTGAGAGTTGGTTTGGACCAATTCCCTGGTTTTCCAGCAGATGAAACAGGCCCAAAGAGGTTAAATGACTGGGTGAAAATCACATAGCTGTCTGGTGCCAGAGCCAGCCTATAGTAGAGTCCCCTGACCCCAAGCCCGGTGCTCATTCCACTACCTCTCACACTTCACAACAATTTCCTCAACACTTGAGGGCCCAGAAAGTCTGATCTCTCCAGAATGATCAGCCCAGAGGAATGCTGAGAAATCACCTGGAGGAGGGAGCAGAAAGAGAAGGTTTTTAAGGAGGGGCTTCTGAATACTTGGGAGATACGGAACGGACCAAGGACCACACTCCAGGGTGCATTCGTTGCTCCCTGGGGCACCACTTCTGGATTACAGTGTGCCAGGTCCTTTGGAGGCCCTACCCCTTCCCCATTCATTGCCACCAGTGAGAAATGGGGGTGCCCCTGTGTAAAGAAACCTACCAAAGGTTTACATTTGCACCTTAGCCTCAATAGCTACGAACCCTAGAGAAGCAGCTAGCTGGAGCTCATGTGCAACTCCTGATTCTCAGGAGAAAGATGGATTTTAACCCAAAATTATGAGTGAGCTGTTAACTCTAAAATGTACTTGGGAGATAGGCCAAGCGAGAGGTCATGGGCCAACTAAGTGTTATCCAGTAGAAAAGACAGTACACTGCTTTTCTTTTAGTGTTTGCTTTTCCTTTGCTATATGTTTTGCTATTTCCTTGTGGCTTAGAATGTAAAATTGATTGTTAAAAGTTTTGTTCTGAATAAATATTTATCTTTTGTATTGCTAAAA", + 278204 - 1); var codingRegion = new CodingRegion(278228, 279442, 25, 1236, 1212); var regions = new ITranscriptRegion[] { - new TranscriptRegion(TranscriptRegionType.Exon, 1, 278204,278687, 1, 484), - new TranscriptRegion(TranscriptRegionType.Gap, 1, 278688,278690, 484, 485), - new TranscriptRegion(TranscriptRegionType.Exon, 1, 278691,280965, 485, 2759) + new TranscriptRegion(TranscriptRegionType.Exon, 1, 278204, 278687, 1, 484), + new TranscriptRegion(TranscriptRegionType.Gap, 1, 278688, 278690, 484, 485), + new TranscriptRegion(TranscriptRegionType.Exon, 1, 278691, 280965, 485, 2759) }; var rnaEdits = new IRnaEdit[] { - new RnaEdit(485, 487, ""), + new RnaEdit(485, 487, ""), new RnaEdit(2763, 2762, "AAAAAAAAAAAAAA") }; - const byte startExonPhase = 0; + + const byte startExonPhase = 0; const bool onReverseStrand = false; - var codingSequence = new CodingSequence(genomicSeq, codingRegion, regions, onReverseStrand, startExonPhase, rnaEdits); + + var codingSequence = new CodingSequence(genomicSeq, codingRegion, regions, onReverseStrand, startExonPhase, + rnaEdits); //The coding sequence from refseq does not have the deletion from rna edit. That was manually inserted. - const string expectedCodingSeq = "ATGGCCACCGGCGGCGGCGCGGAGGAAGAGAGGAAACGGGGGCGGCCGCAGCTTCTGCCCCCCGCGCGGCCCGCGGCCCGGGGCGAGGAGGCCGACGGCGGCCGCGAGAAGATGGGCTGGGCCCAGGTGGTGAAGAATCTAGCCGAGAAGAAGGGCGAATTCCGCGAGCCGCGGCCGCCGCGGCGGGAGGAGGAAAGCGGCGGCGGTGGAGGGAGCGCCGGGCTCGGCGGCCCCGCGGGCCTGGCGGCGCCGGACCTCGGCGACTTCCCACCGGCTGGCCGCGGGGATCCGAAGGGCCGTCGGAGAGATCCGGCCGGCGAGGCGGTGGACCCCCGCAAAAAGAAGGGCGCTGCGGAGGCGGGCAGGAGGAAGAAGGCCGAGGCGGCGGCGGCCGCCATGGCGACCCCGGCCAGGCCCGGCGAGGCCGAGGACGCGGCCGAGCGGCCCCTCCAGGATGAGCCGGCGGCGGCGGCAGGCCCGGGCAAGGGTCGCTTCCTCGTCCGCATCTGTTTCCAGGGAGACGAGGGCGCCTGCCCGACCCGGGACTTCGTGGTAGGAGCGCTTATCCTGCGCTCCATCGGCATGGACCCGAGCGACATCTACGCGGTCATCCAGATCCCGGGCAGCCGCGAATTCGACGTGAGCTTCCGCTCAGCGGAGAAGCTGGCCCTGTTCCTACGCGTCTACGAGGAGAAGCGGGAGCAGGAGGACTGCTGGGAGAACTTTGTGGTGCTGGGGCGGAGCAAGTCCAGCTTGAAGACGCTCTTCATCCTCTTCCGGAACGAGACGGTGGACGTGGAGGACATTGTGACTTGGCTCAAGCGCCACTGCGACGTGCTGGCCGTGCCGGTGAAAGTGACCGACAGGTTTGGGATCTGGACCGGGGAGTACAAATGCGAGATCGAGCTGCGCCAGGGGGAGGGCGGGGTCAGGCACTTGCCAGGGGCCTTCTTCCTGGGGGCCGAGAGGGGCTACAGCTGGTACAAGGGGCAGCCCAAGACATGCTTTAAATGTGGTTCCCGGACCCACATGAGCGGCAGCTGCACGCAGGACAGGTGCTTCAGGTGCGGGGAGGAGGGGCACCTGAGCCCTTACTGCCGGAAGGGCATCGTGTGCAACCTCTGTGGCAAGCGAGGACACGCCTTTGCCCAGTGTCCCAAAGCAGTGCACAATTCCGTGGCAGCTCAGCTAACCGGCGTGGCCGGGCACTAA"; + var expectedCodingSeq = + "ATGGCCACCGGCGGCGGCGCGGAGGAAGAGAGGAAACGGGGGCGGCCGCAGCTTCTGCCCCCCGCGCGGCCCGCGGCCCGGGGCGAGGAGGCCGACGGCGGCCGCGAGAAGATGGGCTGGGCCCAGGTGGTGAAGAATCTAGCCGAGAAGAAGGGCGAATTCCGCGAGCCGCGGCCGCCGCGGCGGGAGGAGGAAAGCGGCGGCGGTGGAGGGAGCGCCGGGCTCGGCGGCCCCGCGGGCCTGGCGGCGCCGGACCTCGGCGACTTCCCACCGGCTGGCCGCGGGGATCCGAAGGGCCGTCGGAGAGATCCGGCCGGCGAGGCGGTGGACCCCCGCAAAAAGAAGGGCGCTGCGGAGGCGGGCAGGAGGAAGAAGGCCGAGGCGGCGGCGGCCGCCATGGCGACCCCGGCCAGGCCCGGCGAGGCCGAGGACGCGGCCGAGCGGCCCCTCCAGGATGAGCCGGCGGCGGCGGCAGGCCCGGGCAAGGGTCGCTTCCTCGTCCGCATCTGTTTCCAGGGAGACGAGGGCGCCTGCCCGACCCGGGACTTCGTGGTAGGAGCGCTTATCCTGCGCTCCATCGGCATGGACCCGAGCGACATCTACGCGGTCATCCAGATCCCGGGCAGCCGCGAATTCGACGTGAGCTTCCGCTCAGCGGAGAAGCTGGCCCTGTTCCTACGCGTCTACGAGGAGAAGCGGGAGCAGGAGGACTGCTGGGAGAACTTTGTGGTGCTGGGGCGGAGCAAGTCCAGCTTGAAGACGCTCTTCATCCTCTTCCGGAACGAGACGGTGGACGTGGAGGACATTGTGACTTGGCTCAAGCGCCACTGCGACGTGCTGGCCGTGCCGGTGAAAGTGACCGACAGGTTTGGGATCTGGACCGGGGAGTACAAATGCGAGATCGAGCTGCGCCAGGGGGAGGGCGGGGTCAGGCACTTGCCAGGGGCCTTCTTCCTGGGGGCCGAGAGGGGCTACAGCTGGTACAAGGGGCAGCCCAAGACATGCTTTAAATGTGGTTCCCGGACCCACATGAGCGGCAGCTGCACGCAGGACAGGTGCTTCAGGTGCGGGGAGGAGGGGCACCTGAGCCCTTACTGCCGGAAGGGCATCGTGTGCAACCTCTGTGGCAAGCGAGGACACGCCTTTGCCCAGTGTCCCAAAGCAGTGCACAATTCCGTGGCAGCTCAGCTAACCGGCGTGGCCGGGCACTAA"; Assert.Equal(expectedCodingSeq, codingSequence.GetCodingSequence()); - } [Fact] public void With_rnaEdits_reverse_deletion_utr() { //NM_001317107.1 chr14:22138125-22139232 - var genomicSeq = new SimpleSequence("ATATGGTATGTAACTTATTCTTTGCAAGGCGCTTCTTTAATTTGGAGCACCACGTATCCTAAGGACGTAGACATTTTCATTTTTCTTCTTTTCTCTCTTTTCTCCCCACTAACTTGTTTAAGGCACTCTTCATTTCTTCATTCCTAAGGGTATAGATAATGGGGTTCAGCAGGGGGGTGACTGCAGTGAAAAACACAGATACTGCCTTGTCCTCTGGGAGGCTGGTGGATGGGCGGGAATAGATGAAGATGCAGTGTCCCAGGAACAGTGTAACTACAGTGAGATGGGCTGCACAGGTGGACAGGGCCTTCCACTTGCCCTTGGAGATCTGCTGCCTCAGACTCACCAGGATGACTGCGTAGGACACCACCAGGACCACAAAACAGACCACGGAGATCAATCCACTGTTGGAGACAATGAGGATCTCAAGGACGTGGGTGTGTCAATGCAGGCCAGCTTGATCACCTGAGGTACATCACAGAAGAAGTTGTCAATCTCATCAGGACCACAGTAGGGCAGCTTGATGGTAAGGGAGGTGAGGGCTATGGAGTGGATGGTCCCTCCTGTCCAGAGGGCCACAGCCAGCAGCACACATACCTTCCAGTTCATCACTATCATGTACTGCAGGGGTTTACAGATGGCCACATACCGATCATAGGCCATGACGGTGAGGAGGAAGATCTCTGTGCAGGCAAAGAGGTGCAGGAAGAACATCTGGGTCACACAGGCATCAAAAGAGATGAGCTTTTCCTCTGACCACACGTCTCTCAGCATCTTGGGGACAGTGACAGTGGAGTGGCAGACATCAATAAAGGACAGGTTGCTGAGGAAGAAATACATGGGAGTATGGAGCCGGTGGTCATAGATAATAGTTATGACAATGAGAACATTCCCAATCAGTGTCAGGACATAAAAAATGAGGAACATGGAAAACATAGCTATCCGTGCCTTATGATTTACAGATAAACCTCTAAGCCGAAAATATGTCACTAAAGAAGTTTGATTGAGTAGGATGGCCTCTTCCATTCTCTTTGTTAGACAACCTGTAAAGAATTAGAAAAAAAGTCTAATATAACACAGTATCTGCATCAATCATTTGGTCATTTAA", 22138125 - 1); + var genomicSeq = new SimpleSequence( + "ATATGGTATGTAACTTATTCTTTGCAAGGCGCTTCTTTAATTTGGAGCACCACGTATCCTAAGGACGTAGACATTTTCATTTTTCTTCTTTTCTCTCTTTTCTCCCCACTAACTTGTTTAAGGCACTCTTCATTTCTTCATTCCTAAGGGTATAGATAATGGGGTTCAGCAGGGGGGTGACTGCAGTGAAAAACACAGATACTGCCTTGTCCTCTGGGAGGCTGGTGGATGGGCGGGAATAGATGAAGATGCAGTGTCCCAGGAACAGTGTAACTACAGTGAGATGGGCTGCACAGGTGGACAGGGCCTTCCACTTGCCCTTGGAGATCTGCTGCCTCAGACTCACCAGGATGACTGCGTAGGACACCACCAGGACCACAAAACAGACCACGGAGATCAATCCACTGTTGGAGACAATGAGGATCTCAAGGACGTGGGTGTGTCAATGCAGGCCAGCTTGATCACCTGAGGTACATCACAGAAGAAGTTGTCAATCTCATCAGGACCACAGTAGGGCAGCTTGATGGTAAGGGAGGTGAGGGCTATGGAGTGGATGGTCCCTCCTGTCCAGAGGGCCACAGCCAGCAGCACACATACCTTCCAGTTCATCACTATCATGTACTGCAGGGGTTTACAGATGGCCACATACCGATCATAGGCCATGACGGTGAGGAGGAAGATCTCTGTGCAGGCAAAGAGGTGCAGGAAGAACATCTGGGTCACACAGGCATCAAAAGAGATGAGCTTTTCCTCTGACCACACGTCTCTCAGCATCTTGGGGACAGTGACAGTGGAGTGGCAGACATCAATAAAGGACAGGTTGCTGAGGAAGAAATACATGGGAGTATGGAGCCGGTGGTCATAGATAATAGTTATGACAATGAGAACATTCCCAATCAGTGTCAGGACATAAAAAATGAGGAACATGGAAAACATAGCTATCCGTGCCTTATGATTTACAGATAAACCTCTAAGCCGAAAATATGTCACTAAAGAAGTTTGATTGAGTAGGATGGCCTCTTCCATTCTCTTTGTTAGACAACCTGTAAAGAATTAGAAAAAAAGTCTAATATAACACAGTATCTGCATCAATCATTTGGTCATTTAA", + 22138125 - 1); var codingRegion = new CodingRegion(22138201, 22139150, 83, 1030, 948); var regions = new ITranscriptRegion[] { - new TranscriptRegion(TranscriptRegionType.Exon, 1, 22138125,22138561, 670, 1106), - new TranscriptRegion(TranscriptRegionType.Gap, 1, 22138562,22138563, 669, 670), - new TranscriptRegion(TranscriptRegionType.Exon, 1, 22138564,22139232, 1, 669) + new TranscriptRegion(TranscriptRegionType.Exon, 1, 22138125, 22138561, 670, 1106), + new TranscriptRegion(TranscriptRegionType.Gap, 1, 22138562, 22138563, 669, 670), + new TranscriptRegion(TranscriptRegionType.Exon, 1, 22138564, 22139232, 1, 669) }; var rnaEdits = new IRnaEdit[] @@ -321,26 +356,28 @@ public void With_rnaEdits_reverse_deletion_utr() const byte startExonPhase = 0; var codingSequence = new CodingSequence(genomicSeq, codingRegion, regions, true, startExonPhase, rnaEdits); - const string expectedCodingSeq = "ATGGAAGAGGCCATCCTACTCAATCAAACTTCTTTAGTGACATATTTTCGGCTTAGAGGTTTATCTGTAAATCATAAGGCACGGATAGCTATGTTTTCCATGTTCCTCATTTTTTATGTCCTGACACTGATTGGGAATGTTCTCATTGTCATAACTATTATCTATGACCACCGGCTCCATACTCCCATGTATTTCTTCCTCAGCAACCTGTCCTTTATTGATGTCTGCCACTCCACTGTCACTGTCCCCAAGATGCTGAGAGACGTGTGGTCAGAGGAAAAGCTCATCTCTTTTGATGCCTGTGTGACCCAGATGTTCTTCCTGCACCTCTTTGCCTGCACAGAGATCTTCCTCCTCACCGTCATGGCCTATGATCGGTATGTGGCCATCTGTAAACCCCTGCAGTACATGATAGTGATGAACTGGAAGGTATGTGTGCTGCTGGCTGTGGCCCTCTGGACAGGAGGGACCATCCACTCCATAGCCCTCACCTCCCTTACCATCAAGCTGCCCTACTGTGGTCCTGATGAGATTGACAACTTCTTCTGTGATGTACCTCAGGTGATCAAGCTGGCCTGCATTGACACCCACGTCATTGAGATCCTCATTGTCTCCAACAGTGGATTGATCTCCGTGGTCTGTTTTGTGGTCCTGGTGGTGTCCTACGCAGTCATCCTGGTGAGTCTGAGGCAGCAGATCTCCAAGGGCAAGCGGAAGGCCCTGTCCACCTGTGCAGCCCATCTCACTGTAGTTACACTGTTCCTGGGACACTGCATCTTCATCTATTCCCGCCCATCCACCAGCCTCCCAGAGGACAAGGTAGTATCTGTGTTTTTCACTGCAGTCACCCCCCTGCTGAACCCCATTATCTATACCCTTAGGAATGAAGAAATGAAGAGTGCCTTAAACAAGTTAGTGGGGAGAAAAGAGAGAAAAGAAGAAAAATGA"; + var expectedCodingSeq = + "ATGGAAGAGGCCATCCTACTCAATCAAACTTCTTTAGTGACATATTTTCGGCTTAGAGGTTTATCTGTAAATCATAAGGCACGGATAGCTATGTTTTCCATGTTCCTCATTTTTTATGTCCTGACACTGATTGGGAATGTTCTCATTGTCATAACTATTATCTATGACCACCGGCTCCATACTCCCATGTATTTCTTCCTCAGCAACCTGTCCTTTATTGATGTCTGCCACTCCACTGTCACTGTCCCCAAGATGCTGAGAGACGTGTGGTCAGAGGAAAAGCTCATCTCTTTTGATGCCTGTGTGACCCAGATGTTCTTCCTGCACCTCTTTGCCTGCACAGAGATCTTCCTCCTCACCGTCATGGCCTATGATCGGTATGTGGCCATCTGTAAACCCCTGCAGTACATGATAGTGATGAACTGGAAGGTATGTGTGCTGCTGGCTGTGGCCCTCTGGACAGGAGGGACCATCCACTCCATAGCCCTCACCTCCCTTACCATCAAGCTGCCCTACTGTGGTCCTGATGAGATTGACAACTTCTTCTGTGATGTACCTCAGGTGATCAAGCTGGCCTGCATTGACACCCACGTCATTGAGATCCTCATTGTCTCCAACAGTGGATTGATCTCCGTGGTCTGTTTTGTGGTCCTGGTGGTGTCCTACGCAGTCATCCTGGTGAGTCTGAGGCAGCAGATCTCCAAGGGCAAGCGGAAGGCCCTGTCCACCTGTGCAGCCCATCTCACTGTAGTTACACTGTTCCTGGGACACTGCATCTTCATCTATTCCCGCCCATCCACCAGCCTCCCAGAGGACAAGGTAGTATCTGTGTTTTTCACTGCAGTCACCCCCCTGCTGAACCCCATTATCTATACCCTTAGGAATGAAGAAATGAAGAGTGCCTTAAACAAGTTAGTGGGGAGAAAAGAGAGAAAAGAAGAAAAATGA"; Assert.Equal(expectedCodingSeq, codingSequence.GetCodingSequence()); - } [Fact] public void RnaEdits_deletion_reverse_utr() { //NM_001123068.1 chrom: chr1:147954635-147955377 - var genomicSeq = new SimpleSequence("TTGTTACTTAGTTTTTATTTCATAATCATAAACTTAACTCAACTCTGCAATCCAGCTAGGCATGGAAGGGAACAAGGAAAACATGGAACCCAAAGGGAACTGCAGCAAGAGCACAAAGATTCTAGGATATTGCAAGCAAATGTGGTGGAGGGGTGCTCTCCTGAGCTACAGAAGGAATGGGTCTGGTGGTGAAAATAAAACACAAGTCAAACTCATTAGAATTGTCCACAGTCAGCAATGGTGATCTTCTTGCTGGTCTTGCTATTCCTGTACCCAAAGTGCTCCATGGCTTCCACAATATTCACACGTTCTTTCACCTTGCCAAAGGCCACATGCTTGCCATCCAACCACTCAGTCTTGGCAGCACAGATGAAAAACTGGGAACCATTTGTGTTGGGTCCAGCATTTGCCATGGACAAGATGCCAGAACCTGTATGCTTTCGGATGAGGTTCTCATCATCAAATTTCTCCCCATAGATGGACTTGTCACCAGTGCCATTATGGCGTGTGAAGTCACCACCCTGACACATAAACCCTGGAATAATTCTGTGAAAGCAGGAACCCTTATAACGAAATCCTTTCTCTCCAGTGCTCAGAGCACGAAAGTTTTCCGCTGTCTTTAGAATCTTGTCTGCAAACAGTTTGATGGAGATGCGGCCCAAGGGCTTGCCGTCGACGGTGATGTCAAAAAAGACGACGGAGTTGACCATGGCTGATAGTACAGGGCTCACAGTGATGGTGGC", 147954635 - 1); + var genomicSeq = new SimpleSequence( + "TTGTTACTTAGTTTTTATTTCATAATCATAAACTTAACTCAACTCTGCAATCCAGCTAGGCATGGAAGGGAACAAGGAAAACATGGAACCCAAAGGGAACTGCAGCAAGAGCACAAAGATTCTAGGATATTGCAAGCAAATGTGGTGGAGGGGTGCTCTCCTGAGCTACAGAAGGAATGGGTCTGGTGGTGAAAATAAAACACAAGTCAAACTCATTAGAATTGTCCACAGTCAGCAATGGTGATCTTCTTGCTGGTCTTGCTATTCCTGTACCCAAAGTGCTCCATGGCTTCCACAATATTCACACGTTCTTTCACCTTGCCAAAGGCCACATGCTTGCCATCCAACCACTCAGTCTTGGCAGCACAGATGAAAAACTGGGAACCATTTGTGTTGGGTCCAGCATTTGCCATGGACAAGATGCCAGAACCTGTATGCTTTCGGATGAGGTTCTCATCATCAAATTTCTCCCCATAGATGGACTTGTCACCAGTGCCATTATGGCGTGTGAAGTCACCACCCTGACACATAAACCCTGGAATAATTCTGTGAAAGCAGGAACCCTTATAACGAAATCCTTTCTCTCCAGTGCTCAGAGCACGAAAGTTTTCCGCTGTCTTTAGAATCTTGTCTGCAAACAGTTTGATGGAGATGCGGCCCAAGGGCTTGCCGTCGACGGTGATGTCAAAAAAGACGACGGAGTTGACCATGGCTGATAGTACAGGGCTCACAGTGATGGTGGC", + 147954635 - 1); //coding region between 34..528 var codingRegion = new CodingRegion(147954850, 147955344, 34, 528, 495); var regions = new ITranscriptRegion[] { - new TranscriptRegion(TranscriptRegionType.Exon, 1, 147954635,147954669, 704, 738), - new TranscriptRegion(TranscriptRegionType.Gap, 1, 147954670,147954674, 703, 704), - new TranscriptRegion(TranscriptRegionType.Exon, 1, 147954675,147955377, 1, 703) + new TranscriptRegion(TranscriptRegionType.Exon, 1, 147954635, 147954669, 704, 738), + new TranscriptRegion(TranscriptRegionType.Gap, 1, 147954670, 147954674, 703, 704), + new TranscriptRegion(TranscriptRegionType.Exon, 1, 147954675, 147955377, 1, 703) }; var rnaEdits = new IRnaEdit[] @@ -353,44 +390,47 @@ public void RnaEdits_deletion_reverse_utr() new RnaEdit(132, 132, "A"), new RnaEdit(122, 122, "C"), new RnaEdit(104, 104, "A"), - new RnaEdit(49, 49, "A"), - new RnaEdit(10, 10, "G"), - new RnaEdit(4, 4, "G") - + new RnaEdit(49, 49, "A"), + new RnaEdit(10, 10, "G"), + new RnaEdit(4, 4, "G") }; + const byte startExonPhase = 0; var codingSequence = new CodingSequence(genomicSeq, codingRegion, regions, true, startExonPhase, rnaEdits); - const string expectedCodingSeq = "ATGGTCAACTCCGTCATCTTTTTTGACATCACCGTCGACGGCAAGCCCTTGGGCCGCATCTCCATCAAACAGTTTGCAGACAAGATTCCAAAGACAGCAGAAAACTTTCGTGCTCTGAGCACTGGAGAGAAAGGATTTCGTTATAAGGGTTCCTGCTTTCACAGAATTATTCCAGGGTTTATGTGTCAGGGTGGTGACTTCACACACCCTAATGGCACCGGTGACAAGTCCATCTATGGGGAGAAATTTGATGATGAGAACCTCATCCGAAAGCATACAGGTTCTGGCATCTTGTCCATGGCAAATGCTGGACCCAACACAAATGGTTCCCAGTTTTTCATCTGCACTGCCAAGACTGAGTGGTTGGATGGCAAGCATGTGGCCTTTGGCAAGGTGAAAGAACGTGTGAATATTGTGGAAGCCATGGAGCACTTTGGGTACAGGAATAGCAAGACCAGCAAGAAGATCACCATTGCTGACTGTGGACAATTCTAA"; + var expectedCodingSeq = + "ATGGTCAACTCCGTCATCTTTTTTGACATCACCGTCGACGGCAAGCCCTTGGGCCGCATCTCCATCAAACAGTTTGCAGACAAGATTCCAAAGACAGCAGAAAACTTTCGTGCTCTGAGCACTGGAGAGAAAGGATTTCGTTATAAGGGTTCCTGCTTTCACAGAATTATTCCAGGGTTTATGTGTCAGGGTGGTGACTTCACACACCCTAATGGCACCGGTGACAAGTCCATCTATGGGGAGAAATTTGATGATGAGAACCTCATCCGAAAGCATACAGGTTCTGGCATCTTGTCCATGGCAAATGCTGGACCCAACACAAATGGTTCCCAGTTTTTCATCTGCACTGCCAAGACTGAGTGGTTGGATGGCAAGCATGTGGCCTTTGGCAAGGTGAAAGAACGTGTGAATATTGTGGAAGCCATGGAGCACTTTGGGTACAGGAATAGCAAGACCAGCAAGAAGATCACCATTGCTGACTGTGGACAATTCTAA"; Assert.Equal(expectedCodingSeq, codingSequence.GetCodingSequence()); - } + [Fact] public void RnaEdits_big_insertions_reverse() { //Transcript id:NM_032508.3, chrom: chrX:148678216-148713568 - var genomicSeq = new SimpleSequence("TAAAATGAGGAACCGGTTTATTGAACAGCTTAAGGAGAGCAAAAATAGTGGCTTTAGCTACATTTTTTACACACTGAGCAGGAAAGTCTAAACCATCCCGTTCCCCTGTACCCCAAAGAGAACAGGGCTTGCTGGAGGCCAGTGCCAAGGGCGGAGTCGTGCTCGCAGCAGACTTGAATTAACCCCATGTAGGCCGGCGAGCAGTTGCCCGCGTGAAAACACCACCCTCTTCTCCTGGCTGAGAAGATCAAAGCTCTTTTTTTACCCTCTTTTCAGCAAAGGACCTATTTGTTTTCAGGCAGGAGGATGTTAAACTTGCAGCCTCTGACACACGGTGGAACCTGCAGTGCTTGGAGAAACGGCACGCACACGTGAAAACATCATGCCTACTCCAAAGCCTTCTTGTTGCTGGCAGGAGGGAAGCTTGAGACTTTCCCACGCATAGTCGTGACCCGCGTGGCCGTTTCTGCTCTCAGCAACATTCTCTAGTGTTCCGGCTTCAAGCAGCGCTTGTCAGGTTTGAAGCTAGCCACTATTCTGAGAACGTCAGAAAAGCATGGACCATCTCTTGCTTGGTGTTGCCGTTCTGGCAGTAGCAGCTACTACGTACCTGCACGAGTTCCAGGGCAGAAGTGGCAATGTCCCATGAAGGCGTGGCACCCCACGGGGGGGGGGGGAGTGTGCCACGGGCGTCCACTTCTGCAGCAGAAGGCATGTGCCTACAGCACAAGCTTGTAAAAAAATACTTGAACAGAATATGCTGTACAGAACTAGGGGTTAACACCGCATATGAAGATGCTAAAACATTTGTATAAATACTCTGTATACAAGCATGGAGTCACTCCCGTAGAAAGGGCTCATCCGTGAGGCTATGAAAAACTGCTGTCAGCATGCCCAAAGAGAAACTACTTCCACAGTAGGAACAGAAAAAAGGACTGTGCTGTGTCTAAACACGTGGTGCATCAGAGACATAGTTACAGTTCCTACTGACTGCCCCAGCCACGACCTGGGAGTGCTGAGGACCTGGGAGTGCTCAGCGAGCTGCAGGAGGTCAGCCCTGTGGAGAAATACATTTCTAAACAATACTTTTGATTGGGATTTCAGCACCGTATAGACAGATGTTCCTTCTGGGGGCCTGGCAAGCAGCCATCTCCCAGTGGGTCTGACGGGGAAGAGGGGTACCTGGAGCCCCTCCCAGACAGACGGTAATCCCACCCCTGTTCTCACACTCTTCCTGGCATCCGCATCTGCTGGCACACACCCCCGTCACCTGCCACTTCCGCGTCCCGTCGTGGTGAGTGGCTGATAGGCGCTGGATGCAAACAAGGCATGAGATGGACGTACCTGGAGACCCAGCTCCAGTACTGGTTCTGGTCTGCGGGGTGAACGAGGGGGCAGAGGAAGGCGGAGAGAGTGCGTCCCAGTCCACTTAAGCTCTGTCCCCGGAAGTGGCATCTAATCTGGCATTTCGATATTTAATTTGGGAGGTGGGAGCACATACTTCCCAGGGCTCTGGGTAATGACCACCCTGGCCTTCTTTCGAAACATGGGTGCGATTTTAGGGGGCTCCGGAACTGGGGTCTCTTCGGTTTCTTCATTATCTTCGTGATGGAGATCATAGGAAATGTTTCCATATTCTCGTAGAAATGGGAAGATTTCAAGCAGAAACTGACAGAAATCTTTGCGGATACCAAACCACCCTGAAAAATAAGAATTTTTTATTTCACACACGAGGCTCAACTGACCTTCCTGTTAACTTTCTTTCCGTAACAAGAAGTTTCACTCCTACAATGTCATAACATACTTTATCCAGACTCCTGAGTCACAAAGCCTGAACAGGGCTTGAGTACCCAAAATGGGGAAGAAGTGCAAATGCTAGCTCTGTGGTGCTTGGAGTGGGGTTCCCGGACCGGCAGGGACAGCGTCCACGGGGCCTAGTTAGGGATGCCATTCTCGGGCCCCAGCCCAGACCTCCAGAAACTGAGTCGGGCTAGGGTGGGCTCCAGCGGTCCCCTTTTCCTGGCCCTTTTGGGATTCTGCTGGATGCCCAAGTTTGAGAACTACTGCTCCAGTGAGTCTCAAAATATCTGTGGTGCGCAGACTACGGTGTCTTCCGCTAATCTTCTCCAGCCAGGATAAACTCATGGATGACAGTGCCACCCAAGAACAAGATTTCTGTCACCCTCTGGAATCCGTGAGGGCGGTAGTCATGCACGGGTCCTGGCCAGGAGGGGGCCTGAACTCATGGAGCCACCTTAAAGCCACTTTCCCAGTCCCACTACTCCTCTCTGTAGGCTACTGGAGTGTCAGCTCGGTGCAAGCCCTCCCTGCTCCCGGGTGCGGGGTAGGGGGCAGAGGCACAAACAGCAAGCACAGCCCGGGCTGCTGGGCTGCAGTGAGGCCCTGCCCCCAAACCCACTGGCTTTCCGAAGGGCAATGCTCTGGGCTTCCGTGCCATGGAGCCCACAGCCTTGCCAGGAAGGCACCCTCTGCAGAGATCGTTTTGGAAGTGTCTGCCTCAGCAAGCAGGTGGAGGGGAATAGAGTGTTAGCAAGGCAAGACAGGCAAGACTCGGGTGATGGCAGCAAGGATATGGGGGAGGCAGAGAGGCCAACAGGGACCTAGGATGAATCCCAGGTTTGGGTGGGAGATGTGGATTTTCCATCAAACCCTCCCGGGCCTGGGAAGAATCTGTCTTGATCCCCATTTTGCAGAGGAGGGAACGGGATCTCTGAGAGGTTGCCTGCCGTGTCTGGTTCTACCTCAAATGGCAGCGTGCACTGCGAGAAAAGTCCCGGTGCAGGCCAGCAGAACACCAGAGTTACGGCATGCCCTTCCCTTAGAAGGTCCCAGAATTTCCTCAGCCCTCACTTTCCCACACAAGCTTCTAAATTGGGGCCCTCGGGGACTCATCCCTTCCTAGACTTCTATCCGCCCCCCCCCCCACTCCCTGGTCCCCCCCCAGACACACACCAAGGACTTCTGAAATGCTGAGTACATACAGTGGTTTCCTCCCTTCTGTCCAAATGTGGTTGCCATCAGCGTGATCAACGAGAGCCAAAGGGGGACAAAGATCGGGATGCTGGAGAAGGCGTTGTGGCCATCCAGTTTGTGAACCAGCAGAATCTAAAGAAAGAGACATAGTCCCGGTTGATGCCAGCACCGAAAATGGGCAGAGGCGGAAGCCAGACTTCATTAGGCAGTTCCTCCCCACCACCCCACCCCCGCGTGAGCTCCCACAAGAGGGAACATCAGCACCGCCAGAAAAAGGCAGGAAACCACCTATCCCTGGGGAAAGCTCGAAATGAGCTTTTATGTCCCTCTTCAGAGCTCGGCAATAGCCTATCCACTTGAAAAGTTCCCAGTGCCAGCAGTTTTATGGCAAACTCCTCCGGGTGTTTGTTCTAAGGAGTCAACAGCTCCCATTCTAGAATTCTCCACGTGACTCCAATACACAAATCTGACATCCCACTCTGCTTTCCCCAGAGTGGAAACTGGAGCCATACAGAGGCACCATGGCTAAAAAGGTGCACTCTTCTCCCTGCCAGCCCCACGTGCTGCCCCCAAGAGAAAGGAAGGATGCTCTCCTTTCACCGAAGCTCCCTCTCGGAGATGGCTGTGTTCTCTCCCCTCTCCTGGAGTGGGCTCACTGTGAGCTCGAGGGACAGAGGCTGCCTTTCTAGGGGTGCAGAATCCTGTCAGGGGAAGCGCAAGCTTCAGGGGCTGAAGAGGCTTCCCGTGGAACGCTTACCTCAAATGTAAGAAGGGGCACGACGATGGTCATCCAGCTCAGGGCCATGGTTATGTGTGTCCTGCGCTGCTCTGCAATCACATCCATAGAGCGCAAGAACAAGACGGACCACACAATGTAGTAGAGGACCACCAGGCACAGAAAGGACATGAGAATCCACAGCGGGACACACACAACCTGGGGGTGGGTGAGAGAACAGCAAGAGAAGTCTCTTTAGAGCTTCCAACCTGGCCTCTGATGGAAGGCATCTTTAGCACCTTGCTGTGTCTGTCCAGTTAAGGCGGTCCTTCCCGTGAGCCGAATAAGGACCGTTCCATCTCCCAGGACTGCTGGGAGCATCGCTCAGGACAGAAAAGGTATGGTATGTTCACTATGGGGCCTGCTGCCACCAGGGGACACACACGCTCAGTGAGTCATCAGTCCCTCTTCCTTTGGGTGACAGACAGCCCTGCACCTGGCTCCGCAGCCTCTACTCTTCCAGAGGCCCACTCTCCCACACTCTCTCAGGCTCCTCTAGGTTCTGCTGCCATCACAGCTTCCCGGGAAATGGGACACAACTGTCACCCTGTGCACACACACAAGATCTCACCCCAACAGACTCTCTTCACAGGCAACATTCCCACAACCTGCTGGGGGTACTTTGGCAACACAAATGGGAATGGGCTCCCCAGAAAGTCTGGCTGCCTGGGCTCCTAAGGATCCCTAACCTCACCCCTACCAAGTTAGTGAACTTGGCGGGTTGATGCTGGATACAGGTTGATGCTGGATACGTAGCGCTGCCGGGTCCCCGCCTCCACGGCAAGGGCGCATTCCCAGTATGTCCCTGTCGTACCAGGTAGACCTTGTCTCATCCACACACAAGCCCAGAGGACGAGTTCCGGGGGCGCCACTTGGCCAGGCTCCCCTGTGACACGTCTTCGCCCTCCTGCCCTGCCTCCTGGGACGACACTCCTCCGTTCTCCCTTTTTATTAATTATCTATCATACAGTAGGAAAAGTGACCGTCTTCCTTTGGTGTGAGTTCCCTGAGTCTTCACACAAGTAGATTCGCACAGCCGTTGGCAGGATGCAGAAGAGGTCTGTCACCCTGCAAAACTCTCCGTGCTGTCCCTTCACTATCACACCGTCCCCACCATTAGCCCCGGCAAACACTGATCTGTTCTCTGTCACTGTACTTTTGTCTCTGCTGGAACTTTATGTAGATGGCATCGCGAGACAAGTAACCTGTTGAGACTGGCTTCCCGCCATCCACATAATGTCTCTAATGAGATTCATCCAAGTTGTTCCCTCCCTGTATCCACAGGTCGTTCCCTCTCAGTTCTGAGTGGTATTCCATTGTATGGATGCCTACAGTTTATCTGACTGTCCGCTGAGGGTGGTTTGTGAAAACCAAACAAGGCCGCTATCCAAAATGCAAACAAGACTGCTACAAACACTGGTGTGTGGGTTTCTACAAGGCTGCGCGCTTTCACTTCTCTGGGGGTAAATCTTATACCCAGGAGTGGGGCAGCCAAGTCCCACGGGAAGTGCGCTTTTAACTGCATCAGAGATGGCCAAACCATTTTCTACAGTGCCCGTACCACCTGCCTTCCCGCCAGTAACACTGGAGTGTCCCAGTTCCTCTGCATCCTCCCAGGCACGTGGCCTCGTCAGTGTTGCTGAGTTTCACCATTCTGAAGCCATGTGTTTCGGGCCCTCATCCTGGTTGTAGTTTGTCTTCCCTAACCTGTAATGGCGTTGAGCATCTTTTCCTGTGCTTTTTCGCCATGTGTATATCCCCTTCGCAAATTGTCAACTCTTTTGCCAATTTTTAGGTGTTTCTTTTTGCAGTTTTGAGTTTTTAAGAGTTCTCTGTATGTTCTGGGTGCAAGTCAGTGTTTTGATGTGTGCTTTGCAAATATTTTCTCCCAGTCTGTGGCCTGTCTTCATTTCATTTTAATTTTGAGGAAGTCCAAATTTATGATTTCTCTCTCGTATGGACCATATTAACAGTGCCATTTCTAAGTACTCTCTGCCTAATTGCAAACCCCAAAGATTCTGTCCTATGTTATTTCCTAACAGATCTATAGTTTTACATTTTCTTTTAGATCTATGATTTGAGTTGGCATACGAATTTTACTTCTCCTGACCAGTTCTTGATTGTAGGTTTCTCTGCAGAGTCTATGCACAGCCTTTCTTCCCCGTTCCCCATTCTGTGATGAGATTCTCCTTTTTACTGAAGTTCCCTTCATGGGTGGAATGTTAGATCTCAATAGGCTTCCTTGTTTTCTCTTGCTCACTATGGGAAACATGTACTCAGACTGCTTCATCAACTGGGATCTACAGAGGATGAAGGGCAGAAAAAATCTTTCTTCTCATTTGTGGAAAGCTCTCAAAATTACTAATCTTTTTTTTCCCTGACAGTATCTTATACGAAAAAATTTGGTCTTGTTTAGATATGTTTCCTTCACGTCACAACAGAAACAGTTTTGAACCCAATGACCATTCTCCAGATACAGCACTGTGAAGTTGTAGGATGAGTGACTGAATATTTTTTATTATGAATGTTTTATCAAAGACTTTGGGCAGAAGTGATTATTCCCATCTTTAAATATGGAGTATACTTAGGTTCCCTTCATTTCTTCTCTGCTCCCAATTCTTTACTATACTTTTCACTTTTTAAGGGTAGCTATATTTAATACATAAAATATATTGTATGCAAAATTATACATCAAACAACAGAGAAAATAAAACCGAACAAAAACACTAGCATGACCTTACCTCCCAGTGGCAATGGAACTCTTCTGCCTTTAGTCTCCATCTTTTTTCCATGCATTTAATAGTGGAATCTATACTGTGTTCTCTAATTTCTACCTTGCCACTTATCTTTCTATCTCTGCATCCATCTACCCATTTATTCACAGTTAATTTCAACCAAATGCCCAGTAACTGAAGTCACAGTTTAGAAGCATGACATAGATGCCACCACCAGCAAGAGTGTAAATGGGTATGGCTTTTTTTTTTTTTCTTTTGAGACAGGGTCTTGCTACATTGCACAGGTTGGTCTCGAACTCCTGAGCTCAAGTGATCAGCTCACCTCGGCCTCCCAAAGTGCTGGGACTGTAAGTGTAAGCCACTGCGCCTGGCCAGGTATGGCTTTTGGAAAAGCAAGTTGGCAGTGCAGTATACGTATATAGGAATCTCAAATAGTTCCCAACCTCTAGCTCAGTAACACTATTTCTGGACTATTTCCTAAGAAAACAACCAAAAAACAAAAGGCAAAAATTTTAATGCATAAACATATATACTGCAGTATGATTTAAAATCATTCAACACTGGCAACAATGGAAATACCATATTTTAGAAATAAGAGGATGGTCTGATACATGCACTTGAAGAATATTTTGTATCAATTAAACTTTAGAAGTCATGTTTATAAAGACCTTTTATTAACATGATAAAATGTTTATGATACAACATTAAAACAAAAAAATCAGGATACAAAATGGTGCACACAGTTATATCCAAACTGTTTGTATAAAACACAGACATAAAAACACTAACCATGTTATCTCCCCATGGTGGGATTATGGGTGACTATTAGGCTATTACTTCTGCTTGTCCGTCTTTTCCAAGCTTTGTACAGTGAATATGAATTACTTTTATAATAAAAAAGAAGTTTATTTAAGGATTTTAAAAGTTACATACAAGCCAGGGCCAGTGGATGATCTTGTCCAGTCTTAAGGCAATGAATATAAACTGGAGAATGTTGACAGAACACAGGATTTCTAACTAAAAATGAAGAGAAGAATCAGTTAAACAAAGTATAATTTGCATTTAATACTGCAGTAATTTGGTTAACACACTAAAAGACAATACACATTATAATACAGTGTAACTTGTATAATATTATATTGCACTGGAAACTCCTGATTTTCGGTACCAGAGGGGCACAGCAGTATTATGGCAAGGGGAAATGGGGCTCAGCCTGCTGCCTTGCCCCTCTGCTGCCTTGCCCCTCTGCTGCCTTGCCCTTTCTGGCCTGAGGCCTGAGCACAGATGAGAACCTTGTTTCCAGGTTCACTGGGAACACAGGCTAGCTGCAATAGACCACTAAGCTTCCTTCATGTCCCTACCAACAATACTGTCTACTCGAAACCATCCTTGTGCATCCTTCTTCTCATACCTCGGTTTTGCCCTTGGACCCCACCCCTTCCTTTCAGGCTCCTTGAGGACCTTGTCACATCAAGCCATCAACTGTAGATTCCGTACTGTATCTTTAACCCCACCTATTCCATTGATCCCTCCTAGCAGCACAGAAATGACTCCTTCTCATTAAAAACAAAAGCCCCGAAACCAGATAAACCCACCCCATCCTTTGATCCAAGACCCCTCTTAGCCTCAGGTTTCTCTCTGCGAGACAGTAATGAATATGCAAGCCCCTACTATCTCATCTACCATTCCCAGCTTCCTTGTGATCTGGCCTCCACCCCCATGACCACCAGAAGACAGCTTTCATCAAAGTCACCGATAACCGGGAGGCAGCAAAAACACTTCAACTGGCATCCTACTGATACTGTGGATGACTCTTTCCTTTTTGCTCCCCTCCTCCTGGCCATCTAGGATCCCACCATACAGTCTTGGAGCCCTCTGGAGTGTTCTGGTAATTCCTTCTGTCTCCTTTTCCCCCTCCTTAAATGGTGATGCTCCGCAGAGCCACAAACTCAGTCTTCTCTCCCGACTAGGAAGACAGACACACAAACACACATATTTTCACTCACCCGCTGCACCCTGGACTGGGGGAGAAGAAATTTCAACCAGACCCTTGGTCTGCATTATTACCTCCTTCATGGTTAGTTCTCACATCTGTCTCCAACTTAGCCTTCCTGCTGCATAGCAGACCCAGCTGTGCATAGGCCACTCGGCTCTCCTAAAGGCACCTCAAATGAAGCCAGTCCCAAATAGAGATCATTATCGCCTGCACTTAGAACCTTGTATCTCCTCTTTCTATAGCCTCCCATGTCACTTTCTATGGCCTCCCATGTCACTTTCTATGGCCTCCCATGTCACTTTCTATGGCCTCCCATGTCACTTTCTATGGCCTCCCATGTCACTTTCTATAGCCTCCCATGTCACTTTCTATAGCCTCCCATGTCACTTTCTATGGCCTCCCATGTCACTATGGCCTCCCATGTCACTTTCTATGGCCTCCCTTGTCACTTTCTATGGCCTCCCATGTCACTTTCTATGGCCTCCCATGTCACTTTCTATGGCCTCCCATGTCACTTTCTATAGCCTCCCATGTCACTTTCTATAGCCTCCCATGTCACTTGGAGGCACAACAGTGGTCTCATTTCTCAAGCCATGAGCCCGGGAATCACCCTGCATTCTTTTTCCCACACTGTCACGTTCAGTCACCACATCCTGTCCACTGTAAAGTCCAGATTTCTCCTGAATCCCGTGCCCACTTCCTATCCTGATGATGACTGCCTAGTGAGGCCTTCTTCGGCACCATCCGCCTACCACTTCAGCAACCCCTTACTAACCTCCCGCCTCCAGCCCAAACGCCCTGCAGGCTGCTCCTCACTCTGGTAAAGTACATTCTTGCCCACAAAATTGAAATCTGGGACCAGGCCCAGAGCTTCCCAAAAGTTCTCAGTACATAGGTACATGGGGAATTTAGTAATTCCTCCATAGACCTCTAGGCCAAAAGAAATCCCTAATGTGGCTGGGAATGCCAACAGTTGCACTGATTTAAGTAATTACGTCTAACTTAGTAAGTATTTCTAAGTAGCCACCAGAAAAAATAATTCATATAAATCTAAAGAAAAATGTTAATATTATTCTTAAATAACCAAAACTAATTCCCAGTGGGATGCGTGTGCCTGTCAGGTAGCTCACCATTTCCCACGCCTTGGAATCAGACAAGGTGCTCCCACTCGTTACCTGTTCTTCACCCGGATTTTCACACAGCATTAGCCTTTTTTGTTTTCACAGCAACTGCTGAAAACCCAGCTTCTTAAAGATACGACGTCACTGAAAGGAATGCAGTGTGGCCTAAAAATAAACCTGTAAACTATTTCAAGCTAGTAGTTTGTATGGTGTCCCAACAAATGTCAGGTATTACTGTTTTCCTCAAAATGTCCACTATCCCCTGGTGCCCTGTGAGTGCACTGGGGTGCCTGGGGCACTTCAGCACATGCTCTGTGGGCTGAGGACGTGGCCCCTATTTGCCCCAATCCCTCTGTAGAGGCTCCCTCTCTTCTCAACTCCCACAGTTCCTTCCTTTCCACCTTGTGCTCCCGTCGGATCTGAATCGCCACAGTCCACTCAGCTGATGGAGTGTTTCCTGCCTCTAGGCTTCAATGTGTCCCAAAAATGCCATCCCTTCCCTCCCAACACAGGGCTTCCTGGCAGACCCTCAACTCCTCCTTCCCATCTCTGTATGAGCCTACTCCAGACCACCCCCTCACCAACATAGGTACTGTTCTTGCATCACAGGAGGAGGGAGCTCAGCTCCTGGTATGTTGTTTCTTCCAAGGGCAGGAATGCCTAGAGTGTGAATATATGAAAGACTTACTTTCTGTAATTCAGGCCCAATGCAGTCCTAGTCCTTGTATAGTTGTCCCTCAGTATCTGTGGGGGATTGGTTCCAGGACCCCCTGTGGATACCAAAATCCATGGATGCTCAAGTCCCTGATATAAACTGGGAATTGTAGGGAGGGTGAAAGTGGACCATCAGATACTCTCCCTCCACGGCTCACTCCTACCTACCACTATACCCATGCTGTGGCCTTTCCACCAGCATGAAAATCAGGGAATAGCTCCCCTTGTTCAAGGCCAAACCCTTCCTGGTGCTCTAGGTCCCATTCTCCCTGAGTCCCACAGGGCCTTGCTCCATCACCGTCCCTCTGTCTACATACCTTCCCCTCACGCCCATACCTGGGGTCTAGGCTTATATGCCTGACCCACCCTACAGCTGCTATGTTTACTTCCTAAGCCAACTGCAGTCTTCTCCCTTCACTCTTCATCCACACGGCTCAAAACCAGGCATCTACAGCCTCTAGTTCTCCCCTCAACCCATCAGTATTCAGCTTTGGGCCCTCAGCTTCTATGCAGTTATGTAGTTATGTGCCCGGGCTTTAGAGTCGGGCTGACTCAAACGGAATCCTGGTCCTGCCCCTTCACATGTGGCCATGAACAAATGACTTATCTTCTCTGGACCTACCTCACAGAGTTAGTTAGTAAGAAAACTACCACATGTAATGTGCCTCGCACAATGCCTGGCACACAGTAAGTGCTCAATAAACGTTATCTGCAATTACTTTCATTACTATTATTACTAGTCCTGGTATTTTATTCATCTGCATATCCTCTATGCTTAGGGAAAAAGGGCTTGGCATCTAGTAAATACTTGATAAATGTTTATTGAATGAATAAACAAACACAGGGGCACATCAGGATAAGCTAACCAGACAGCAGGGGAGGTGCTAAATCATGGGGTCTGAGGTGGGGAGATGGTCAGTTTTGAGTGTCAACTTGGCTGGGCTATAGTACCCAGTTATTTAATCAAACACTAAGCTTGCTGTTGCAGTGAAGGTACTGACTTTGAATAAAGGAGACTACCCTCCATAGCATGGGTGGGCCTCATGCAATCAGGTGAAGGCCTTAAAAGCAAAAACTGTGGTTTCCTGGAGAGGAAAAAATTCTGTGCCAGGACTGCAGTGTCAACTCCTCCTAGGTCTCCAGCCTGTTCACCTGCCCTGGAGATTTCAGACTTGCCAGCCCCACAGTAATGTGAGCCAGTTCCTTAACTCTCTTTATACATATATCTGTATCTAACCTATCAGTTCTGTTTCTGTCTGATTGATACAGGATGTGAAGCTGGGAGAAGGCTGATGTCCTGGGTGAAAAGCTAGTGTTCTAAGTGAAGAAAGAAAAATTGTTATTTCCATCATCTTTTGTTGCCTTGTTGTCTCATGATGTAGAGTTGGTAATGATCAAGCTCTTCCTAACAAAGGGTAAGAAATTGACATCTGAATAACTGAGCAAAATATTTTACTTTTGAAAACATTCTTTTTTTTTTTTTTTAAGACGGAGTTTCATTCTGTCACCCAGGCTGGAGTGCAATGGTTCAATCTTGGCTCACTGCAACCTCCGCCTCCTGGGTTCAAGAGATTCTCCCGCCTCAGCCTCCGGAGAAGCTGGGATTACTGGCGCATGCCACCACACCCGGCTAATTTTTGTATTATTAGTAGAGACGGGGTTTCACCATGTTGGCCAGGCTGGTCTCAAACTCCTGACCTCAAGTGATCCACCTGCCTTGACCTCCCAAAGTGGAAAACATTCTTAAATATATGAAATCTCACCTCTAGTGACCTGTCATGTCGAAAGCCCCAAACGCAAGCTGCAACAGACACCGGGGAAACAAAGAACAGCGGCATGAAGACCAGGAGCCAGAAATGGCTTCCTCTCTCGATTCTGTCACAGACCAGAACTTCAAACATCAACAAGAGCAAGTGGATGCCCACTGCAATCAACATGGCTTTAAACTCCACACACGTTTCTCCTTCTGCTCTAAAAAAGGGAGAGAAGAAGAAAACACCCTCAGTTCAGAATCTCCACTATAAGCAAGCAGTTCAGGGCAAATACCAACTTATATTTATACTTTGAATTTTACTTGAAAATTTGACAAAAGCAAAGGGAAATCAGGTAGAAAGCTAACTTAAACCTAAGCTTTGGTAGGCAATCTCTGAAACATCGAAGAACTACTACATAATACAAAATGAACATTACAACCAAACCAGAATTTAATGTTTTAACCGTATAAGGATATTCTCAAAAGTAATAGCCAGTTCTTATTTCCCTGACAATGTACATAAACACTTCTGTTCACATCTTTAAATTCAACAACAAGAGTTACTTCCAAGATTATTCAAGCTGATTTGCTTCTGCTGCTAAAACCAGGCAAATACCCCTTAAGTCTCATGATCCTCATTTTTCAAGAAACCATGTAAACCACCCTTCACACAATATTATAAAAATAACTCTAGTTCTATGAACAAGTGCCAGTTATATTTCAAGATAGTAGTAACTATTGTTAGGTGCTATTTTTAAATGCAAATAAAACGTATAAATGATTTTCATTTTCCTTTCTATTCCATTAAGATAAATTAACACCTGCAGATGAAAGAGAAAGAAGAACAAGAGTTAAAACTGTTCTCAAACAAAATCAGTTTAATTAGCTAAGTATCATGCACAATAACCTTAACAGATCTACAATTGAGCAATGGTAAGGCCGCTAATCAGGAAAAGGCTCTATAATGCATCTGAAAGGCCTACAATGTTTATTCAAAATACAGATGAACATTTATGATATACATGTATTGTGGGTGACAAATACACCGGAAGTTAGATCATAGAGAAAATGCTATCAGAGGTTATTCCTGTAGGACCCAACCATGTTCCACTGGTTAATGTTAACATGAGAATGACCACGCCTGTACATTCCTTACATTCAACCCCACATACACAATTCCTTTCCTTGCTCAAAACATCTTAAATAAGACCAACAAAGAGAAGTTTGAATATATTCTAAATATCAATTAGTAGAACCTAAATGTTTATTTAACTTTGCATTCTTTGAGAAGCAATTAATATTAGATATCTGAAAATATCTCATAAAAAAATAAAACACATACAGCCACACAGGTCATCAATCTTTCAAAAAAAATCTAAGAACTCTGAAACAGCTATACATGAATGTCCCTCACCTGCCAAGGCTCTCTGTGTAACTGTTTTACAGTTCTTAGACATGTATGTGATATGTAATTTACACAATCTGAATCATTTTCATATTTAGTAAACAAAAATTTAAAAAGTTGATGTAGTGGCCGGACGTGGTGGCTCACACCTGTAATCCCAGCACTTCAGGAGGCCAAGGCGGGTGGATCACCTGATGTCAGGAGTTCAAAACTAGCCTGGCATGGTGAAACCCTATCTCTACTAAAAATACAAAAAATTAGCTGGGCATGGTGGCAGGTGCCTGTAATCCCAGCTACTCAGGAGGCCGAGGCAGGAGAATCACTTGAACCCGGGATGTGGAGGCTGCAGTGGGCCGAGATCACACCATTGCACTCCAGCCTGGGCAACAAGAGCGAAACTCTGTCTCAAAAAAAAAAAAAAAAAAAAAAAAAAGGTGCGGTAGTTTCAACTTTACACTTTTCCCACATGAGCAGCTGCCTTCTGGGAATTCCTGTACTCCTCATTTTCCCAGTGGAGGTTCATAATAGCCTCCCAGTCTTAAGTCCCCCTTTTTCCCTTTATGTAGTTACAGTCTCTGTGGCAGAGAAGGGAAAGCCTCTCGCAGGTCCCAGCAACAAGCAGGTTGCATGCTGGCGTGAGCCAACTCCCAGGAATTTGGGCCAGCGGAGGCATCCAAGAGCAGGGAGGGCAAGAGTTGGAAACGGTAAAGGGTACCCCTCTCCCCTGCCCCCAAAGGCTCTGCTTTCCTTCTCGGCATCCAATCTTTGACTTTCCTCATTCCCCAGCTGCTGTCTCAGGGACTCATGGTCTCCTGGTCAAGCCACCTCCCCTACACTGCTAATAGTCCTAAAGCTCTGGGACTAGGAGGGTGGGACAAGGGGAGCCCCAGTTCCAAAACTGTATTGGAGAAAGATCTTTCATGACCAAACATAATATGAGTGTCTTTTCCTAAAAACAGGGTGGTTTCATGCTGCTTAGTCTAGTATGGCATACCAGTTCTGTATTTTGGGTGCATTTTGGATTATATAGGCATCTGTGAGCTGGCTGGCAACTTACCCCCAAATGGCACTGCTTTTGTAAGAAAATACATACCAAAGACTAAATTTTCAAAAACACAGAAGAGATCTGTTAGCTTATACTATAGTTCTAAGACCCCAGATAGGTAGAAAATAAAATGGTCCTTACTTCATCAAAAGTGAGAAAAGTCAAGATATTGCTCCCTCATGCTAGAGACCAATGGGTTGTATAAAGCAGTATTACCGATATTGAGGATTTCGTGCCCAGACTCCAGTTCCAACTGAGGCTCCAACAATGACCATTAACTTCCACAGCCATATTGGAGCAAAGACAGCCCAGTAACTCCACTGTATGATGCCATCCAAACGAAGGGCCAGCAGCACAGAGAACAGCAGCAGACAGGCATAGATGAGGAATTTACTAGGAGAAAAGTAAAACGATTAAGAAGGATTCACTTTTACAAATATGTGATACTGAAATGGGGAGTAATAAGAGCCACATTTGTCAGCATGTAAAAGGAGTCACTAACTCAATAATCATTTATTGAAAAGGTCTATGGGGCAGACATAATGTGTTGGGAATAAAAGAAACATAAAGAAGACTAAAATAAGTCTCCTGCTTTCCAAGGCTTCCTCATAGAAGGAAGACCACACAGAAACATATAATACAGCACAATGTTTGTGATGAGAGCTTGGAAGAGGAAATACAGACTGTGTCTGAGGAGGCACTCAGAAGCAGAGATGTGGTGACCCTAGAGCTGGTTCCAGAGGGCAAGTAGGAAGCTGCCAGGCAGGAAAGCAAGTGAGATGAGGAAGTATTCCAGGCAGAAGGAACTAGCTATACCAAGACACAGAGACTGGAAAAGGCTGACATGCTCTGAAAATGGTCAAGTTCTATCACTAACTGATTCTATTTCTAAAAAGGCAGCCATCTGTCATATTCATATGGCATGAACATTTTAGTGTATGTATTATACTTTCCATGAATGAATAAATTACACATACACACATGCTCACGTCTCATATAAAAGGGAATTGCTACAGAGGATGTCCTTGAAATAATTAGAAATTATACTCTTGAGGACCTCTATTTCCAGCCTTGACTTAATAATAGGAATATAATTTACCTTCCCGCCTAAATAAGAAGCTTGATACAGTCTACAAAAGAACAGTTTTCAGACATTGACAACAGGCAGTGGAGAACAGGTGAGAAGGAGGAAATAAAGGAGGTAAACCCTACTATTGCCCCAGTTTGCAGATCAGAGGCAGTTTCCAGGCTGCAGCAAGAAAACAGTTAAAACTCAACCCTGTCAATAACTATATTAAATATAAATGGCCAACTGAAAGACAAAGATGATCAGATTGGATAAGTAAGCAAGACAACTATATGCTGTCTGTAAGAATCCCACTTTATCTATCTATAAAGACACAGATAGATTAAAAGCAAAAGGAAAGAAAAAGTTATACCAAATAAACACTAACCAAAAGAAAGCTGGAATGACTATATTAATATCTGTTTAGTCTTCCATTGCTGCTGTAACAAATTACCACAAACTTAGCAGCTTAAAACAACGTAAATTTATTATCTCACAGTTCTATATGACAAAAGGCGAGACGGGCTTGGTTGGTTTCTCTACTCAGAATCTCACAAGGCTGAAATAAAGATGTCTGTTGGTGGAATGCTTATCAGGGGACTCTGGCAGAATCTACTTCTAAGCTCATTCAGGTTGTTGGCAGAATCCAGTTTCTTGTGGTTGTAGGACTGAGGTATGTGTCTCTTTGCTTGCTGTCACGCAGCAGCTGATCTTGCGATAGTAGGGGCCTCTCCTGGGTCCTTGTAAATAGGCCCCTACATCTCAAAGCCAGTAACAAGCTATAGCATATTCAATCTTTCTCATGCTTGGGATGTTTTCTCACTACTTCTGCCATATCGCTTCTGCTTCCACTGAGAGAAAGTTCTCCGCTTTTAAGAGTTCATGTGATGAAACTGAGTCCACCTGGTTAAGCCAGGCTACTCTCCCTATTTTAAGGTCCATAACTGTGGTTGGTAGGCAGAATTCTAAAGAAGTTTCCCAGGATTCCTGTCCCCTGATTATTCAATCAAACACTAATCTGAGTAATACTGTGAAGGGACTTTGCAGATGGAATTAAGGTTACTAATCAGCTAACTTTACAATAGGAAGATTATACTGGATTATCCAGGTGTGCCCAGTGTAATCCCATAAGCCCTTAAGAAAGCAGAAGAGTAAGTCAGAGAAATGTGGTGGAAGAGAGATGAGGCAGAAGTCAGAGAGATTCCAGACTTGAGAAGGATTCAGCCTGTTACTTCTGGCTTTGAACATGGAGGTAAGGAACCATGAGCCAAGGAATGCAGGCAGGCTTCAGAAGCTGAGAATAACTCGCAGCTGACAGCCAGCAAGGTAAATGGGACCTCAGCCCTACAACCCCAAGGAACTAAATTCTGACAATAGCCCAAATGTGCTTGAAAGCAGATTAATCCCTGGAGGCTCCAGAAAGGAATAGAGCCCTCCTGACACTTTGATTTTGACCCTGTGAAACTAGGCAGAAGACCCATCTGAGTTGTGCTGTACCCGGACTTCTGACCTAAAGAACTGAGAGTAATTTGTCATGGTAACAGCAGAAACGAATGCTAATAAATATAGCTTCAAAGTCCCCTTTGCCATGTAAAATAATAACATATTCACAGGTTTCAGGGCTTAGGGCCTGGGTATCTGTGTATTTGTGGGGGTGGGGCATTCTGCCTACCACAACATAAGACACAGTATATTTTTGAACAAGGACTATTTCCAGGGACAAATAGAGGTAGTTCATAATGATAAAGGGGTCAATTTGTCATATGCCTAATAACAAAGTTTCACAATACATGTAGAAAGTACTGATCAATCTAAAAGGAGAAATAAAAAAATCAAACTGTTATAAATGGAAATTAACATTCCTTTCTTAGTAACTAATAGAACACATAAACAGAAAATTACTAAGGATATATATGATTGTAGCAACACTATCAACCAACTTGACCTAATTAATATTAATGAGTTCCTCCCAACAAAAGCAAAATACAGATTCCTTTCAAACACACACGGAACATTCACCAAGATAGATTGAATTCTGGGCCATAAAACAAAGCTCAACAAATTTAAAAGGACTGAAATCATACAAAGTAAACAAGCACAATGGAGTCAAACTAGAAATCAACAATAGAAAAATATCTGGAAAATTCTCAAAATACTTGAAAATTAAATGCCACACTGCGAAATAATCCATAGGTCAAAGACTATGAAGAAAATTGAAAAATATTTTGGACTAAAGGCAAAAACACAATATACCAAAATTTGTGAGATACACTAAAGCAGTACTTAAGGGAAATTTTAGCATCAAATACTTACATTAGAAAAGATATCAAGTCAATAATCTAAGATTCTATCTTATGAAACTAGAAAGAACATGGAGGTAAGGAACCTCCATGTAAGAAACGGAAGGAAATTTTTAAAAAGTAAATGGAAAGAAGAAAATGATAAATGTAAGCACATTAATCAATAAAATACAGTAAAAAGGGATTAGAGAAAAAAATCAATGAAACTAAAAGCAGTTTCTTTGAGAAAGTAAGAAAATTGGTAAATCTACAGCCAGAATAATCAGTAAAAAAGAGTAGGCTCAAATTACTAATATCAAGAATGAAAACAGGGATATCACTACAAATCCTAATAATACTAAAGGGATAAGTAGGGGATATTATAAACAACTTTATGCCAGGAAATTTCTTGAAACAAAGACATGGAAACTGCAATTCTAGTTAAAACCTTTTTCAGAAAGAAAATGTCAGGCCATGGCAAAATCTACCAAACATTTAATGAGGAAATACCACCAATTCTTCACAAACTCTTGCAAAAAAGATGAGGGGGGAACATTTCCCAATTTATTTTATGAAGCCAGCATTACCCTGATAACAAAACTGACAAAGAAAGAAAACTACAGACCAATATCTCTCATGAACAGAGATGCAAAAATCCTGAAAAGATTTTAGCCAACTGAATTCAGCAATATATAAGGATACTACATTACGACTAGGTGTGGTTTAGCTAGGATTGCAAGATTGCAATCTTGGATTAACATTTGAAAATCAGTTAGCAACCTTCGTGGTATTAGCAGGCTGAAAAAGAAAAATCATATGATCATCTCAATAGTTGTGTAAAAAGCATTTGACGTAATTTGCTACCCATTCAAGTTAAAAGCGTTAAACAAATTAGGAAAAGAAGAGCATCTATGAAAAACCTGCAGTTATAATGCTTAATGGTGAGAGACTCAATACTTTCCCCTTAAGACAGGAAACACAGCAAGTATGTCCACTTCAACACATCTATTCAACATTGTACTAAAGGTCCTAGCCACAACAATAAGATGATAAAAAGAAATTAAAAGAATATAGTTTTAAAAGAAAGAAGTAAACCTGTCATTATCTATAGGCAACATGATATTCCCTGTAGGAAATCCTAAGTAATCTAAAAAAAAGCTAGTAGATCTAGTAAGTGAATTTAACAAAATTGAAGGACACAAGGTAAATTTACAAAAATTATTGCATTTCTATATAGTAGCTATCACAAATTGGAAACAGAAATTTAAAAATATGTATCATTTACTGCAACTTTCCTATAAATTTATAACTATTCAAAAATTAAAAGTTTATGAAAAAATCCACCATTTACAATAGCATCACAAATATAAAACACTTAGGGATAAATGTAACAACATATATGCAAAACCTATATACTGAAACCTACAAAACACTGGTAGGACTGTGGGGAAGCTAATAAACAACAGAAATTTATTCCTCACAGTTCCAGAGGCTGGAAGTTGGAGATCAGGATGCCAGCATGGCTGGGTTCTGGCGAGGGCTGCCTTCTGGGTGGCAGATGGCAGACTTCTCAATACCCTTCACATGGTGAAAAGAGAGTGAGTTAGCTCTCTGGTCTCTTTTTATAAGGGCACTAGTTCCAACCATGAGGGTTCCACCCTCATAACCTAATCACCTCCCAAATGCCCCACCTCCAAATACCATCACACTGGGGACTAGAGTCAACTTGTGATTTTTAAAGGGACACATTCAGTTCATAACTGCCAAGAAAAATTAAAGATCTAAATAAATGGAGACATATACTGTGTTCATAGAACACTCAATACTGTTAAGATTTACATCCTCTGTGTATTAGTTTCCTATGGGTGCTGTAACAAACTACCACAAAATTGGTGACTTAAAATGGCACACATTTATTATCCTGAGGCCAGAGGTCCAAAAAGGGTTTCACTGGGCTAAAACCAAGATGTCAGCAGGACCTACTCCTTCTGGAGACTCTATGGGAGAATCTATTACTTGTTTTTTTCCAGTTTCCAGAGCTGTATTCCCTTGGCTCATGGCCCCTTTCTCTATCATCAAAACCAGCTGCATAAAATCTTCAAATCTCTGTCTCTGTTTCCACCACACTGCCTTCTCCTCTTAATATTATCTCCCTCTTTTAAGGGAACCTGTGATTGATTGCATTTATTGCCCCACTTGGATAACCCCATCATCTCAAGATCTTTAACAGGTTCCATGGAAGTGGGTATCTTTGTGGGTCATGATTTAGCCTACCACACACACCAAATTAACCAAATTATTTTAAAGAATCAATGCAATCCCAGCGAAAATTGGGAGCCAGCAGGTTCTTCTGTAGAAATTGACATACTGACTTTAAAAGTCATATGACAGTGCAAAGGACCTAGAATGGGCAAAACAATTCTGAAAAAGAACAAAGTTGGACAATTTATACTACATGCTTTCAAAGCTTACTATAAAGCTACAGTAATAAACACAATGTAGTACTGGCATAAGAATAGATATATAGAACGTACTAGAGAGTTGGAAAACAGACCCATACATATAGAGTCAGTTAATTTTCCACAAAGGTGCCAAAACAACTCAATGGAGAAATAATTATGTTTCAATAAATGGTGGTACAACTGGATAAATGAGGAAAGTACACCTTGACTCTTAACCTTATAACATATACAAAAATTTATGTGACATGGATCATAGACCTAAATGTCATACACAAAACTATAAAATGTCCAAAACACATATGAAAAAAAAATACTTGCAACCTACGGTTAGGCAAACATTTCTTAGATGGGATATGAAATTGGACTTCTCCAAAATGAAAAACTCTTACTCTCCAAAAGATACCTATCATTAACAAAATGACAGCCAAGCCACAAACTGGGAGACCATACTCTGAAAACACGTATCTGACAAAGTAACCTGTATCCAGTATATAAAAAGGACTTTTACAACTAAAAAAATAAGTGAACAACCCGATTTAAAATGGCCAAAAAATTCAGAGACATCCCATCAAAGAAGGCATACAAAAAGCAAATAAGCACACAAAAAATACTCAGTATTTTCAGATGTTAGGACAATGCAAACTAAAATGACAATGAGATAAGATTACACACACACTAGATCTCTTATATATGCTGGTGGGAATGCAAAATAGTACAGCCACTTTAGAAAACATTTTGGAAGTTTCTTATACAGTTAAGTGTATACTTATTCTATGGCCCAGCAATCCCACACCTAGGTATTTTACTCAAGAAAAAGGAAAACGTATGTCCACACAAAGGCCTGTATTCAAATATTCCAAGAAGCTTTATTCATAATTGCCACTGGTAACAACTCACACATCCATAAACTGGTGAATGGTTAACTGAATTTTGATATATCCGTTCAATGGAATACTAATCAGCAGTAAAAAGTAACAAACTATGGATGACAACAACAACATTGATGAATCTAAAATGCACTATAAGTAAAATAATTCAGATGGAAAACACAAGATAGTGTACAATGCTACTTATTTGACATTCTGGAAAGGGCAAAACTCTAGACACAGAAAAACAGATCAGTGCAGTTACAGATAAGGAACAGAAAGCTCAGATGTTAAATAACTTGTCTAAGAGCTCAGAGTTGGGAGTCAAACCATTTGACTCCAAAATCCTTCTAATTGAGTATTATACTATACCGGCTTTACACTGATAAATGAACATGTTTAGAAAAGCATCTGTATAAATATCTGCTGAGCAGCTAACAGGTCTCCACTCGGGAAGATTAAGGATAGTCTTTATACTCTTTTGCTTATGATATCTGAGTTTTCTGTAAGGTACGTGTACTGTTTTTGTACTATGAAAAATAACATAAGAAACTTCGATTGGAAAAAAGGGAGGAGGGTTGTAAGAAGACTGGACCTACAAAATTAAACTTGGAAGCAAGCCTCCCAGAGAGAAAACTACGCTGGGAAGATCATGAGATTCAGAGGGGTTGCTAAAAAAATATACATAGCATCATTGTGTCATGGTATTCTTACCCATAAAGTTAGGGCAATAATATGTACCTCATAAGGTGGCTACGAATATAAGATAATGAGTATAACAAGTGCTTTGTATAAAGCACTAAATCAGTGGCTCTCAAAGTTTTTAGTATCAAAAATTTTGACGTTTAACTCTTAAAAAGAACTCCTTTTCAGTTCTAACACTTACTGAGGATCCCAAAGAGCTCTGGTTGATATGGGTTATCCCTATTGGTATTTAATATTTACGATACAGTTGTTATTCAAAAAATATCTACTCTTCGAAGGTAATAATAAACACATTACATACTAACATACATAACATTATTTAAAAACATTTCCAAAACCAACACAAATTTAGTGAGAGTAGCGACACTGTTTCTACAGTTTAGCAAAATTTTTAATGTATGATATCATAGAAGACACCTAGATTCTAATATCTATATTTACATTCATTCTGTTGCAATACATTGTTTTGGTTCAAGTATACAAAGAAAATCTGGCCTCACAGAGATCTGTAGTTAGAAAAGAACTATTTTAATAGCTCTTTCAGATAATGGTAGACGTTCTTCAACAGGACACTAAAACTCAACAAGTGGTAGTTTCTTAAAGGTTAACTATGATGTGGAATCTGAAATCGTATCAATGACCTTTTTGTACTCTGCTACACTGAAATCCACTGGTCTCTCTTATACTTTCAATGAATCTTTTATCCCAGCATTATTGTATAATGCAATGTAGGTCGACTGGAAAATATTGGTTTACTGAGTTATAAAGATCTTTCAAATGTTGACACATTTCATATACAATAGCAAAAAAAATCACATTACTTACTATCTTCACCAACTTCATCAGAAATATTTTAATTACTGGGAGGTTGTCAAGCTCATGGTAGCAGATACAACTTTTCAAAAATTCTGGTTTTCCCATGAAAGATCAAATTTTACCATTTACAAAAAATACCATGAGTTGTTTTCCTTGAAGTTTTGCTTCCTGCACTTTCTTTTTTTGTGTGTGTGATAGAAGCATCTTTTATTATAGTATTTTTGTCTTTTTTTTTCTTTTTTTTATTATTATTATACTTTAAGATTTAGGGTACATGTGCACAATGTGCAGGTTAGTTACATATGTATACATGTGCCATGCTGGTGTGCTGCACCCATTAACTCGTCACTTAGCATTAGGTATATCTCCTAATGCTATCCCTCCCCCCAACCCCCACCCCACAACAGTCCCCAGAGTGTGATGTTCCCCTTCCTGTGTCCATGTGTTCTCATTGTTCAATTCCCATCTATGAGTGAGAACATGTGGTGTTTGGTTTTTTGTCCTTGCAATAGTTTACTGAGAATGATGATTTCCAATTTCACCCATGTCCCTACAAAGGACATGAACTCATCATTTTTTATGGCTGTATAGTATTCCATGGTGTATATGTGCCACATTTTCTTGATCCAGTCTATCATTGTTGGACATTTGGGTTGGTTCCAAATCTTTGCTATTGTGAATAGTGCCAGTTAGAATGTCAATCATTAAAAAGTCAGGAAACAACAGGTGCTGGAGAGGATGTGGAGAAATAGGAACACTTTTACACTGTTGGTGGGACTGTAAACTAGTTCAACCGTTGTGGAAGTCAGTGTGGCGATTCCTCAGGGATCTAGAACTAGAAATACCATTTGACCCAGCCATCCCATTACTGGGTATATACCCAAAGGACTATAAATCATGCTGCTATAAAGACACATGCACACGTATGTTTATTGTGGCTTCCTGCATTTTCAAGAAAATGTCTGCCAAACACCATAACACAAATAACCACAGTCTTGTCTGTCAGTTGTCCTTCCAAATAAAAATGATACTCCATGAAAACAGCAGCTTGTAACTCAGGCACACACGTTTTTCCTTGAGTCAACCATTGCACTTCAGCATACAACAGGCCTTTATGCATTCTTCCCATTTCATCACATGGAATATTAAACTAGATGTGCATTCAGGGGTCAAGATTAAATGAGATTAATATTTTTCTGCTTTATCAAGGACATTCGTAAGTGAAGCTGGCATTTTTTTTTTAACTGCAAGTCCAGCACGTGGTGGTGAAGAATCCAGTGACAGAAGACTAGTGCAGCTGGTGCCACTGTCCTGATTTGTGCTCCAGCACCAGCTGTTTGATGCACTACTTTTGTACCACCAGTGCCAATGTCGACCAAGGCAAAGAATGTCTTAGTATTATAATTTTGACTTTGCAGATACCTGGAAAGGGTCTCAAGGCCCACTCCCAAGGTCTGTGGGAAACAGTCTGATAACCAGCGTACTCAATACACATTAGCTAATATTATTAATACTCGAAAACAAAAACAGGCTTTTATAAGCTGCTACAAAGAAAGAACATTTAAAGAAACCAAGATAAAAATGACTTCATCCCTTAGACTTTGGACAAGAAGAGAGCCTGTGTCAAGGTGATTCACAAGTTAATAGAAATGGAGTTATCACCACAATTACAGTACACAATTAGTAGAGGCAGAAGTTTTCTCTCTTAAAGCAGAGGGAAATATTCCAAAATCTAAAAAAATCAGAACCAATTTGTCAACTAAAGCCTGTGGCTACAAATATAATTACCAGAAACAATGGACTTGAAAACAGACTATTTAAAAAAGAAATTAGTGGATTCAAACATTAACAAATGCTAAGATAATGACGACACAGGATTCATATGTAAATTAGATAACATGTACAGGTAATTTTTATCCTAAAGGATTTTCAGACTATAAATAAAAAGTAAATTGGTGGGGGGGGTGGTAAATGCTGTAAGCTAACTTCATTATCCTCTGTAAAACAGTTTCCTTATTTAATAAAAAAAGAGAGTAGTGGAACTAAAGAAAAGAGAAGTACCAAAATGTTTTAAATGTTGGAAAAGGGATTATTTTATGTGGTTTTTGACATAATTTAAAGGAAACTTAAAATTTTATGTCTATTACATGAAAAATAGAAAACAAGATAAACTTACAAAAGGACCCACAAAATATAATTCATGATTCAAATACTAGGGTTAGAAAAATATACATGAGCTGAATGTTCTCTTATTAATTTCCTATTGCTGCCATTCAAAACTGCCACAAACCTAGTGGTTTAAAAAGCATAAACCTAGTGGTTTAAAAGGCATAACCCTTACAATTCTGGAGGTCAGAGTCCAATATGGGTCTCGCTGGGCTAAACTTGAGGTGTCAGCAGGACTATGCTACTGAAGGCTCTAGGAGAGAATGTTTCTTTGCCTTTTCTAGCTCTAGAGGCTGCCACATTCCTTAGCTCATGGCCCCTTCCTCCATCTTCAAAGTCAACAATGGAGAATGCAGTTCTTCTCATACTGAATCACTCTGACCTCCTTTTCTGTCTCCCTCTTCTATATTTAAGGGCCCTGTAATTACATTGGGCTCAGCCAGAGAATCCAGAATAATCTATTTTAAGGTCAGCTGATGAGCAAACTTAATTCCATCTGCTACCTTAATTCCCCTTTGCCATGTAACAGAACATATTCCCTGGTTCCACGGATTAGGATGTGGACATACTTGGGGGCGTCATTATTCTGCCTACCACAGCTCTGTAAAAAGAAAGGTTGCTTCCTAGATTAAGAAAGTAAACCTGTTACATTCAAGAGTTACGCTTGGAACCAAAGTCAAAAGTCGAACCAACTATCAGAAATCAGATGACAGAGGTTTAGCACGCCTGGATGAAGACAAGAGCAACAATTTACTATCTTTAAAATTAGATAAATTAGATTTCAAAGCCGAAAGTATTAAAATGCTAAAAGGACTAATAAGGAAAACCTAAATAACAAAAACCTAACATGACCATGGAATATGGAAATAATTTTACAATTTTTCTTTTTTAAGGATACACAGAAATATTTTAATTGTGGGCTTCCTCATGCTACTCTTAAATCATGACAGATAAAACAGACAAAGTTCCTAAGGAAAATACGGAAATGAACACAAGAGTAGATTTAAAAAACAGCAAGGTTATATGAAGAGAATTAAGTAGCAGAACGAGAAAATTTAAAAAACAGCAAGCTTATATGAAGATAATTACGTAGCAGAACAAGAAAACATACTTGCTTTACATATATATAGTTTTTCCAGGGAGAAAAAAAGGATCATGGGGCAGCAATACACAATAAACACACATCTAATTTACAATTGTTAAAAATATTTGAGTGCCTGAAATGTGTGAGATACATAAAAAGGAGCAACAATGCGTTCGCTCAAGATGCTCAGACTAATAGGAACAGAGGGAGATGATGTATCAACAAGTAACTACATATGGTAAACTAGGGGACTTGGAAGATTAATTTCCCTGAGAGAGATGGGAAGAGAAGTGGAATCTGGGCAACAAGTTGGGAATAAGGAATTCCAGACAAAGGGAATAAGATGTTTTCCAATTTTTTAAAAATTATTTTTATTTATTATGGATACAAAACAGTTGTGCCTATTTATGGGGTACACGTGATACTGTGATGCAAGCATACAATGTGTAATGATCAAATCAGAGTAACTGGGATATCCATCACCTCAAGCACTGATCACTTACTTGTGTTAGGCACATTTCAATTCCACTCTTTTAGTTATTTGCAAATATACATTATTAACTATATTTGCCCTCTTGTGCTACCAAACACTAGATTTATTATTTCTATCTAACTGTATTATTGTACCCATTGCTCATCCCCTCTTTATCCTCCCCTCTCCAATTCCAGCAGACTGGAACACACAGAATACTTTCTATAAATCGTGGTGGGTAGGGTGCTGCAGAGACAGGAGAAAGGGTACTGGGGGGAATAAGCCAGAAGTTGGCTGTGGTAACATGGTAGGGGAATGTGAATATCAAGGTAAAGTCCTTGGAATTTATTAATAGGTAATATGGGGCCACTGCAGATTTTCTCAACAAGAGTGACAGAAGATACATATGAGTGTGTAAGGTAGATTGTAATCAGTAGAGACCAGAGGTTGACATTTTATACAATTCATAAAAACACTGACAAAAAATGGATCATTTTCAATACTGATTTGTTAAGCAGTTTAGTAGAGTTACTAAAATACAATTGAAACATAAAAATACCTGGGCAGCTGCCAAAACAAAACTCAAGAGAAAATGTGTTCATTTAAAATGTTTAAGTAAAAGTAGAAAACAAAGAAAAAAAAAAGAGGCAAAAGAAAACTAGTAAACTGAGTTTCTAAGAAATTTGGGGAAAAAGCCAAAACATGAAAATAATAAAACTAAAAGTAGAAATATAGATATAAAAATGAAACTGATCAGTAATCCCAACAGCTAGCTTTTTAAAAAAATTAAACTACAAAGTTGATCAAGTAAAACAAAGTAATACAATCAGTAAGTTCAAAAGATGTAATTCATACACACTCCTAGTTGGGGAAAGAAAGAATAGTATCTTAACTATATCAATATATTTGCAAGCAAAGTCTAAAAGGTGACTGCATAGCCAAAAGGAAATATCAAGCCTGATTTGCAAAAGAATACACAATAATATGCAATAATACAGTGATAAGAAAATGTATTTACAAAAATAACTTATGGTCATAGCCTAAACTACTTTGAGTTACTTTTCAAGAAACATTCAGACCAGATTCCAAGTATAAAAATAGACTGCTTAATTCTCCACAAACCTGGGAGAAATGGGAGGTTCTGGTTTAACATTAATCACTACTTCTTAAAATTCACTTTTCCAGTTACACCTTTAGAATGGATTTATTCCACTCTCATTTGAATCTGTAGTGTTAGTATACGATGAATCACTAAGTAGTGCTACCTGGGCCAAAGCTAGTATCCTCTCTGAAATTTACATGGAGCTTTCTGCTCAGGCTCAAATTCCCTCTCTCCACTTTGCAGGGTTGGGAGAATAGGGAGGGAGAAAAGGAAGAAGGGAGGGAGAGAGAGAATATACTTAGCAAAGGAATGATGACTCTGAATGTAAAAGTTCTAGTATCTGTTTTCTGCATATCATAAGAATGCAGCTGGACTCTTTTTAGACCTATCAGTTTTTTTCCAGTGGAAGCTGCTGGCTTCACTGGAGCACATACACGCGCATTAACACATGCCTGCATGCACGTACACACGCACAAGCACATACACACACACAAACTTTGGATGGCACATCCCAGTCTAAAGCTTGACAGAATGGCTCCAAATGACAACCTGACATACTCACAAACTATCAAGGGAACTGCCCCTCTTACACCTTATTAACCAAATTTAAAGTCTTTTAGTGGAGACTTTAGCTGGTTTTATTAAGATAAAAAATGTTTAAGAGCATTTAACCAGTAGATACAAAAAAGCACAAAAGCCAAATAAAAGCAGAGCCCAGGCCAGTAGGAAGATCTGCATTTAAGTTCCTCAACTGCCATTCATCAGCGGTGTGGTCTTGGGTGAGTTATTTTCCCCCAGGTCTGTCTCCTCATCTGATTCCTCATATACTGATTCATTAAGACAAGGGTATGTGAAAGCACTGTGTAAATGATACATTTTACCCATTCTAGCTTTAGCAGTATTATGAAAGACAAAAGTTCTGCCACATTGTAGGTAATAATCTCATTTAGCAATCATTGTTGTCACTATTAGGTTGGAGCTGACAAAGTATGAGTCTCCACTTATAAAGCATCTATCTCCAGAGTTCGAGGCTTTTGTCTTAAATTCCAGTCATCTTGTACAGGCATGACATATCAGGCAAAATGATTAGAAAACTCAAGCTCCATATTAAAAAGCTTAACTTCTGGAGTCCTAGGAAACTATCTAAAACTCCTTCAATCCACGGTCTCTCCTGTACAACAAAGACTTCCCAGTGGTAGATGTCTATTTGTACCCAACATCCACTCATTCAGCACGTAATTCAGCACCTCCAAATCCTGGCCCTCAAAGAACACAGCTAAGAACAATGTGTGTGTAATTATCAAGTAATAGGAATGATACTTTTAAAACTGGAAATTATACATTCAAATGAGATTTCTCTCCTTTAACCAGTCCCCTTGGGAGGCAATGCAGTAATTCCAATGGTACTTCATTACTCAAATCATCTTTGAAGCTTTCTTCTTGGAAGCACCTTGAGAACCTGCAGTCTGATCTTCTGACTATCCCAAATGGTGCTAAATTTTCACTGAGGGTGGATTCAAATTTTGGAAATGGCAAACAGTCAGTCAGAGCCAAGGTTAGTGAATAAGATGTGTGATCAAACTAGGTGGAACTATTTTGGTTGAAAATGATAGATGATCATAAAGCAATGAGATGGATCTTCTTATGTGATATGTAAACTGACTTTAAAGGGAATTCCAGATGAGTAACAAGGAGTATGAACAATGGAATAGGTGTATACATTCTCTTTCCCCAAGTAACCTCTTTGAATAACAACACTCATTTGGATGTATAAGCGCCACTAACAGGTTTGTTTTGTTTAATCACTTACAATTTGTAAATAGAGGGTTCCTTAGCATACTGGATCTACAATGTCATGGAGGAAAGGAGTTGTCACTTAACTAGAACTATGGCATGGCACGCAGGAAAGAGCACAGGCTTCATGAGACTGACGTGGATTCGAATGTTGACTTAGATTCTTCCTGCCTATGCAACTTCAGGGAAGTCACAAGCTGTCAAGACTTTAAAATAAGGCTGATACCTAATTTTGCAGGGTTGTTGTAAAGATCATGGATAATGGATGCAAAGCCCCTACATTGGGCCTGGCATGTGGTGGGTACTCAAGAAGTCACAGCTATTATTAACAGCAACATCAGTAAAATCAAGACCATTTTCTGACTGTAGGTGGCTTGAGAGGACAGAACAACAGATAAGCAGTCACTTGAGTGGTAAGTAGTTCATTGACAGTACTGACAGTACACTCGTGCATTAGATACTGCTTTCTTAAAAACAATAACCTGTAAAAACTATTTGCAGTAACTATGTATTTTTAATTCATACGACACATATCATCTGCAGTGCTCATACCACATGGACCTCTTCACTACCTGAACATACCAGGCACTATCATGACCCCATGCCTTTGTGTACTTTGTCCCTTCTGAGATACTGAAAGGGGCCAGCCCCTCCACACCTGTGGGTATTTCTCGTCAGGTGGGACGAGACTGAGAAAAGAAATAAGACACAGAAACAAAGTATAGAGAAAGAACAGTGGGCCCAGGGGACCGGCACTCAGCATACGGAGGACCCGCACCAGCGCTAGCCTCTGAGTTACCTCAGTATTTACTGATCATTATTTTTACTATCTTAGCGAGGGGAGTGTAGCAGGGCAACAGGTGGGGAGAAGGTCAGCAGGGAAACGTGAGCAAAGGAATCTGTATCATGAATAAGTTCAAGGAAAGGTACTGTGCCTGGATGTGCACGCAGGCTAGATTTATGTTTCTCTTTACCCAAACAACTCAGTGTAGCAAAGAGTAACAGAGCAGTATTGCTGCCAGCATACTTCGCCTCCAGCCACAGGGTGGTTTTCTCCTATCTCAGAATAGAACGAATGGGAATGGTCAGCTTTACACAGAGACATTCCATTCCCAGGGATGAGCAGGAGACAGAAGCCTTCCTCTTATCTCAACTGCAAAGAGGCCCCCCTCTTTCACTACTCCTCCTCAGCACAGACACTTTACGGGTGTCGGGCTGGGGGGTGGTAAGGTCTTTCCTTTCCCACAAGGCCATATCTCAGGCTGTCTCAGTGGGGGGAAACCTTGGACAATACCCAGGCTTTCTTGGGCAGATGTCCCTGCGGCCTTCCGCAGTGCACTGTGTCCCTGGTTAATCGAGAATGGAGAATGGCGATGACTTTTACCAAGCATACTGCCTGCAAACATATTGTTAACAAGGTACATCCTGCACAGCCCTAAATCCATTAAACCTTGATTCATTACAGCACAGGTTTCTGTGAGCACAGGGTTGGGACTAAAGTTACAGGTTAACAGCATCTCAAAGCAGAAACAATTTTTCTTAGTACAGATCAAAATGGAGTTTCTTATGTCTTCCTTTTCTACATAGACACAGTAACAATCTGATCTCTCTCTCTCTTCCTCACAAGGTACCCTTCCTACTCTCTGGTCTGATGACAACCCTACAATTCTAGCTCAAAAGTCTGGCTCAAAAGACTAGCTCAATTCAAAATCTAGCTCAAAAGTCATTTCCACTATAGACTCTTCCCTGCCTGCTCGAGACAGAATTAGTAGCTCTGCCATTTGTACTTCTAAGACATTTGGTTTCTTTCACTGTAATGCCTCATACTCTATTGAATTCTTATTTCCCTTTCATTTCTGCTTCTTCCACTAGGCTTACGCATTGAGAGGAGGACTATATTCCTTTATTTTTGTACTTAGAGCACCTAGTACATCACTTGGCACGAGATAGGAATCTAGATGTTTGAGGAATCAATGTTATAATATACTTTGCAAATAACTGTTAGAGGCCAGGTAGCTGACTTTAGTGAACTATATTACCAGCAATCGCATTCCTTTTTCCTGCTTCAAACAAGAGACAAGATAACTTATATGGACTCCAGAATGTCTTCTGAAGATGGAGCATACAGAAGTCTCCAAACACTACTGATCTCATCAGTACCCCATGCCCACAAGTTGGAACCCCCAGAGCAACACTTCTCAGCCTTTGTTCCAGTCTAGCACACCTGAGGGATACACCACACTCCCATCAGGAGCTCACAACAGATGACTAAGAAGGCCCAGCAGAGTTTTCACAGCCTTCCAGTGCCACATGGCTACCAGGGTGGAAGGGCCTTCTCTGAACCAGCAACTCCCCCAAAGTAGCAGAAAATTTCAAGGCTCCATGGTGAGTGCCGGGAGCCCACCTAATGCTACCTACTACCAGATCCCTACCACCTACAATGCCTCAGAATCAGTTTGCCTACTCTAAGAACAGGGCTCTTTCACTGTTAGGAAGCCTCAGGCATTCAAGGAAGGACTTGTTTGTGGGTCCGGTACATCTGTTTCGGCATGTCTTAACCTGCATAACTAAAAAGCAATTATGAAAAGAAGTTCATGATCAACCAGTTCAGTGCCAGATGGAAATAGGTAGAGTGGGTCAGCTGGCAGCCCTGTACATCTGAGTGTTGACACTTGTGAATCATTCTCTGTCACTATAGTTTCCAGAGCCTTGCCAACGCAGCAGTGGGTTCAGACTTACCAAGATCCAAAAGGCTGGAAAGGGGATCTGGAGCCATGACCCATGCCTTGGGACCCACCAAACCATGACAGTGACTATTTCTATGACAAAGACATGCTCTTCAAAGTAAATATAGCCATATTCTGCCTTAGTGCCATGTTCTCTCCCATCTCTCCAAAGCAATGGCTGCACTCTGAAGGTGGGAAGAGTGTGAGAAGAAAGAGAACCAGGCCACAGACCACCAGGAAAGCAGTGATTGAAAGCAGCAGCTCTAGATTTATCTTATAGGCTCTGGAGAGTTATTCAGTTATTTACTCCACAAATATTTATTGAGCCAGGTACTATTCCAAGTATGCAGGCTACGATACTGACACAGTCACGGCCTTGACCCCATGGAGCTTAAAGTTTAGTGGGGGAGGCAGGTATTAATCAAATAAGCATCCAGACAGACACAAGGGTACAAATATGCACTATGATGGAGGAGTAGTAAATACTACAGGAACTGTAGAAACAGGGAGCAGTAAATCTGGTCAGGGAAGTCAGGAATGCTTCCCTTAGCAAGTGCCAAGTGAGGATAAATAGGAGTTCACTAGGTCTGGAGGAGAGGAAAAGAGAGGGAAACATTCCTGGTAAAGAGAACAGTGTGTGACAAGGTCCTGGGGTAGGAGGGAGATGTTGAATTGGTTCAAAAATAGAGGCAGGGAGCAAAGCAGTAGCATCAAGGTTTGAGTCCCCAGCATAAGGTAACTTCCTGTGTACACCCCTCAGTTTTCTTTCTCCTATAGAGAAGGCCTTCCTCAGCATGGAAGGAGACTAAAGCACACTGTCAAAAACTAGGAGTGCTCAGGAGAGGTGAAACACTACCAGCTAAAAAAACAAATCTGATTTACCAATAATACCTGGCCAATGTCCTCTTGAAATATCTGTAAAATTAAGGAACTCACTACCTCTGGCAACAATGAATCAGGAAAATGGCACAGTATAAAAGACCTTTAAACTTTTCAGGTAGAAATACATTTTAATGCAGGTAGAATTAAGAGATTGATGAATATGTTGAGAATTACTATAAATCTGCTTAGATACCAGGTATTTCACTGTAATTTCATATACTAATTTTTTTGGGGGGAAAAGGGCTAAAGGAAAAAACGGTTAAAGGTAGTATCAGTGCAGCACTATTTTGCTTTGGCAACTCTGTTAGCCTGTTTGATCACTTAAGGCAGTTTCTTGAGGCTTCTGAATTCTCTGTCACCTTGCAAACAAGTCACTGTAGCTTTCTATTTGTAAGGCACTTTGTAATCAATCCTTAATTGGCCTCCCTACCCCACTGAGAGATTATACTCATTCTACAGATAAAACAATAGATAAGTGAGTTGCCCAAGGGCACAAAACAATTCAGTTTTTACTTAACTTTCTTATCACCATCTCCAAATAGAAGACATACAGGGCTTGTCCAGCCACAGCACCAACCCTACTACCCTGCAGACCAATCTTAACCCCCTGATGCAGCAGAGGAAGGGACTGCAGTTAGTTCTGTTACCTCCTCTATGCCTTCGAAGCCAACAATGATAATGTCTGCACCGTGTTAGAGACACTGGCACTCCTAACCAGAACATGAACTCAAAGTGGAATAAGAGCACATACAAAGTCACAATGACTCACAAGTTAAAATGTCACCATCCCTAGGGAGACTGCACCCTCAACATACAAATACTCCCCTAAAACTTCCTTTCATCCTCAACAAGCAGCCAAGGCATAGGTCCCCAGAGTTGGCCCCCCCGCAGTACAGCACTGCACAGTACTGTAAGGCATCTTAAGTGTACAAGCCCTTCTTCACCCCATGCTGAGACCGCCAGCATCTAAAGCACCTAGCATAGGTTACAGCACACAAATATTTACTGAGCACGTCTTCCCAACTGGCAAATAAGGGAAACGGATACTCCTTTCGGAGAGTAGTGCATTTAAGAGATCAGTTAGGCCAACTCCTCATTTTACAGAAGGGCCAAAGAAGGGCAGAGAATCACCCAGTTACATATGGCCTCGTCTCCAATCCAAGTCTTTGGGCTCAGTTTAGTTCCACAAACATTTTATATGTGCCTACTATGTGCCAGATACGGTGGGTGGGAGGCGCTGGGGACACTGAGATGAGCAGGAGATGGTCTCAGCTTCAGGGAGCTCACAGCCTGGGGTAAAGAACAGTTACAAAACAGTCGGGCAAGTGCAAGGACAGGCGCTTGAGTGCTTAGCCAGTGTTTTCTCCACACTGTCCACTGGGTGTTCCCCATCTGGAAAAGAAGGACAGCAATATCTACTTCCTGCAAATAAACTTGTAGTGAAGACTGATGAGAAAATGAGTATGGAAAATGATCAGGCTCACCCAGAAATGCATTATATAAGGTATTGCCATACCCCGACACTGACTCCAAGGATTCAACAGTGTTTCAGGTATCCGTTCAACAAAGAAGCAAACAAGAGAGGGATGGGCATAAACCCAAGGAAAACCCCAAGGACTGCGAGGAACTGGAGGAAACAGCTGGGGTGGGGGTAGGGGTGTTGGGTCGAGTGAGACGGCCCTGACGCGGAGAATGGAGGGCCCGCAGCGGCGCAGAAGAGGATGGAACCGAGACGAAGAAGTTGGGACACCAATGAGGGACAGCAAGCAGAAAAGAATGGGGTTCCCTTGGGGCAGGACGGGGCTCGCGGCCGGGCCCTTCCGGCCGTGGCCGGGCAGGGGCTGAAAGCACCGGGCACGGGAGGAGGAAGCGGGCGGGCGCCGAGGCCGACTGTTTTGCCTGGGGACCGCTTGCACCCGCAGGGAGGCTCGGGCAGGCGCCCGGGTCCTCGGGCTGCAGCATCTCGCCCGCCGTGCCTCCCCGGAGCCGAACACCAGCCCGCGCCCGAGCCCGCAGCGCGGACTCCCGGGGGCGCCAACGACGCCGCCTCACCTCGGGTTGAAGTCCTGGAAGAGGCCCCTCAGGTTCATGGCGGAGAACTTCACCGCGGCGTCCTCCTCCTCCTCCCCCGCACCCCGTGCTGCACAGCCTGCGCCTTACAGCGGGTTCATGGCGCCAGCGCCAGCCGCGTCCACGCTGCTGCTCCCGCTACTGCTGCCGTCCCCGCTGCCGTCGCCGTCGCCGTCGCCGCCGCCGCCGCCGCCCGGAGAAACCTGAGCCACCGCCCCCTGCCCCTCCTTCCGGGCTTCCGTACGAGGGCCGCGCATGCGTCCGGAGCCCCGCCCAGAGCGCTCCTCGCTGGGAGGTCCCCATCCTTGTGTCCGCACGCGACCGG", 148678216 - 1); + var genomicSeq = new SimpleSequence( + "TAAAATGAGGAACCGGTTTATTGAACAGCTTAAGGAGAGCAAAAATAGTGGCTTTAGCTACATTTTTTACACACTGAGCAGGAAAGTCTAAACCATCCCGTTCCCCTGTACCCCAAAGAGAACAGGGCTTGCTGGAGGCCAGTGCCAAGGGCGGAGTCGTGCTCGCAGCAGACTTGAATTAACCCCATGTAGGCCGGCGAGCAGTTGCCCGCGTGAAAACACCACCCTCTTCTCCTGGCTGAGAAGATCAAAGCTCTTTTTTTACCCTCTTTTCAGCAAAGGACCTATTTGTTTTCAGGCAGGAGGATGTTAAACTTGCAGCCTCTGACACACGGTGGAACCTGCAGTGCTTGGAGAAACGGCACGCACACGTGAAAACATCATGCCTACTCCAAAGCCTTCTTGTTGCTGGCAGGAGGGAAGCTTGAGACTTTCCCACGCATAGTCGTGACCCGCGTGGCCGTTTCTGCTCTCAGCAACATTCTCTAGTGTTCCGGCTTCAAGCAGCGCTTGTCAGGTTTGAAGCTAGCCACTATTCTGAGAACGTCAGAAAAGCATGGACCATCTCTTGCTTGGTGTTGCCGTTCTGGCAGTAGCAGCTACTACGTACCTGCACGAGTTCCAGGGCAGAAGTGGCAATGTCCCATGAAGGCGTGGCACCCCACGGGGGGGGGGGGAGTGTGCCACGGGCGTCCACTTCTGCAGCAGAAGGCATGTGCCTACAGCACAAGCTTGTAAAAAAATACTTGAACAGAATATGCTGTACAGAACTAGGGGTTAACACCGCATATGAAGATGCTAAAACATTTGTATAAATACTCTGTATACAAGCATGGAGTCACTCCCGTAGAAAGGGCTCATCCGTGAGGCTATGAAAAACTGCTGTCAGCATGCCCAAAGAGAAACTACTTCCACAGTAGGAACAGAAAAAAGGACTGTGCTGTGTCTAAACACGTGGTGCATCAGAGACATAGTTACAGTTCCTACTGACTGCCCCAGCCACGACCTGGGAGTGCTGAGGACCTGGGAGTGCTCAGCGAGCTGCAGGAGGTCAGCCCTGTGGAGAAATACATTTCTAAACAATACTTTTGATTGGGATTTCAGCACCGTATAGACAGATGTTCCTTCTGGGGGCCTGGCAAGCAGCCATCTCCCAGTGGGTCTGACGGGGAAGAGGGGTACCTGGAGCCCCTCCCAGACAGACGGTAATCCCACCCCTGTTCTCACACTCTTCCTGGCATCCGCATCTGCTGGCACACACCCCCGTCACCTGCCACTTCCGCGTCCCGTCGTGGTGAGTGGCTGATAGGCGCTGGATGCAAACAAGGCATGAGATGGACGTACCTGGAGACCCAGCTCCAGTACTGGTTCTGGTCTGCGGGGTGAACGAGGGGGCAGAGGAAGGCGGAGAGAGTGCGTCCCAGTCCACTTAAGCTCTGTCCCCGGAAGTGGCATCTAATCTGGCATTTCGATATTTAATTTGGGAGGTGGGAGCACATACTTCCCAGGGCTCTGGGTAATGACCACCCTGGCCTTCTTTCGAAACATGGGTGCGATTTTAGGGGGCTCCGGAACTGGGGTCTCTTCGGTTTCTTCATTATCTTCGTGATGGAGATCATAGGAAATGTTTCCATATTCTCGTAGAAATGGGAAGATTTCAAGCAGAAACTGACAGAAATCTTTGCGGATACCAAACCACCCTGAAAAATAAGAATTTTTTATTTCACACACGAGGCTCAACTGACCTTCCTGTTAACTTTCTTTCCGTAACAAGAAGTTTCACTCCTACAATGTCATAACATACTTTATCCAGACTCCTGAGTCACAAAGCCTGAACAGGGCTTGAGTACCCAAAATGGGGAAGAAGTGCAAATGCTAGCTCTGTGGTGCTTGGAGTGGGGTTCCCGGACCGGCAGGGACAGCGTCCACGGGGCCTAGTTAGGGATGCCATTCTCGGGCCCCAGCCCAGACCTCCAGAAACTGAGTCGGGCTAGGGTGGGCTCCAGCGGTCCCCTTTTCCTGGCCCTTTTGGGATTCTGCTGGATGCCCAAGTTTGAGAACTACTGCTCCAGTGAGTCTCAAAATATCTGTGGTGCGCAGACTACGGTGTCTTCCGCTAATCTTCTCCAGCCAGGATAAACTCATGGATGACAGTGCCACCCAAGAACAAGATTTCTGTCACCCTCTGGAATCCGTGAGGGCGGTAGTCATGCACGGGTCCTGGCCAGGAGGGGGCCTGAACTCATGGAGCCACCTTAAAGCCACTTTCCCAGTCCCACTACTCCTCTCTGTAGGCTACTGGAGTGTCAGCTCGGTGCAAGCCCTCCCTGCTCCCGGGTGCGGGGTAGGGGGCAGAGGCACAAACAGCAAGCACAGCCCGGGCTGCTGGGCTGCAGTGAGGCCCTGCCCCCAAACCCACTGGCTTTCCGAAGGGCAATGCTCTGGGCTTCCGTGCCATGGAGCCCACAGCCTTGCCAGGAAGGCACCCTCTGCAGAGATCGTTTTGGAAGTGTCTGCCTCAGCAAGCAGGTGGAGGGGAATAGAGTGTTAGCAAGGCAAGACAGGCAAGACTCGGGTGATGGCAGCAAGGATATGGGGGAGGCAGAGAGGCCAACAGGGACCTAGGATGAATCCCAGGTTTGGGTGGGAGATGTGGATTTTCCATCAAACCCTCCCGGGCCTGGGAAGAATCTGTCTTGATCCCCATTTTGCAGAGGAGGGAACGGGATCTCTGAGAGGTTGCCTGCCGTGTCTGGTTCTACCTCAAATGGCAGCGTGCACTGCGAGAAAAGTCCCGGTGCAGGCCAGCAGAACACCAGAGTTACGGCATGCCCTTCCCTTAGAAGGTCCCAGAATTTCCTCAGCCCTCACTTTCCCACACAAGCTTCTAAATTGGGGCCCTCGGGGACTCATCCCTTCCTAGACTTCTATCCGCCCCCCCCCCCACTCCCTGGTCCCCCCCCAGACACACACCAAGGACTTCTGAAATGCTGAGTACATACAGTGGTTTCCTCCCTTCTGTCCAAATGTGGTTGCCATCAGCGTGATCAACGAGAGCCAAAGGGGGACAAAGATCGGGATGCTGGAGAAGGCGTTGTGGCCATCCAGTTTGTGAACCAGCAGAATCTAAAGAAAGAGACATAGTCCCGGTTGATGCCAGCACCGAAAATGGGCAGAGGCGGAAGCCAGACTTCATTAGGCAGTTCCTCCCCACCACCCCACCCCCGCGTGAGCTCCCACAAGAGGGAACATCAGCACCGCCAGAAAAAGGCAGGAAACCACCTATCCCTGGGGAAAGCTCGAAATGAGCTTTTATGTCCCTCTTCAGAGCTCGGCAATAGCCTATCCACTTGAAAAGTTCCCAGTGCCAGCAGTTTTATGGCAAACTCCTCCGGGTGTTTGTTCTAAGGAGTCAACAGCTCCCATTCTAGAATTCTCCACGTGACTCCAATACACAAATCTGACATCCCACTCTGCTTTCCCCAGAGTGGAAACTGGAGCCATACAGAGGCACCATGGCTAAAAAGGTGCACTCTTCTCCCTGCCAGCCCCACGTGCTGCCCCCAAGAGAAAGGAAGGATGCTCTCCTTTCACCGAAGCTCCCTCTCGGAGATGGCTGTGTTCTCTCCCCTCTCCTGGAGTGGGCTCACTGTGAGCTCGAGGGACAGAGGCTGCCTTTCTAGGGGTGCAGAATCCTGTCAGGGGAAGCGCAAGCTTCAGGGGCTGAAGAGGCTTCCCGTGGAACGCTTACCTCAAATGTAAGAAGGGGCACGACGATGGTCATCCAGCTCAGGGCCATGGTTATGTGTGTCCTGCGCTGCTCTGCAATCACATCCATAGAGCGCAAGAACAAGACGGACCACACAATGTAGTAGAGGACCACCAGGCACAGAAAGGACATGAGAATCCACAGCGGGACACACACAACCTGGGGGTGGGTGAGAGAACAGCAAGAGAAGTCTCTTTAGAGCTTCCAACCTGGCCTCTGATGGAAGGCATCTTTAGCACCTTGCTGTGTCTGTCCAGTTAAGGCGGTCCTTCCCGTGAGCCGAATAAGGACCGTTCCATCTCCCAGGACTGCTGGGAGCATCGCTCAGGACAGAAAAGGTATGGTATGTTCACTATGGGGCCTGCTGCCACCAGGGGACACACACGCTCAGTGAGTCATCAGTCCCTCTTCCTTTGGGTGACAGACAGCCCTGCACCTGGCTCCGCAGCCTCTACTCTTCCAGAGGCCCACTCTCCCACACTCTCTCAGGCTCCTCTAGGTTCTGCTGCCATCACAGCTTCCCGGGAAATGGGACACAACTGTCACCCTGTGCACACACACAAGATCTCACCCCAACAGACTCTCTTCACAGGCAACATTCCCACAACCTGCTGGGGGTACTTTGGCAACACAAATGGGAATGGGCTCCCCAGAAAGTCTGGCTGCCTGGGCTCCTAAGGATCCCTAACCTCACCCCTACCAAGTTAGTGAACTTGGCGGGTTGATGCTGGATACAGGTTGATGCTGGATACGTAGCGCTGCCGGGTCCCCGCCTCCACGGCAAGGGCGCATTCCCAGTATGTCCCTGTCGTACCAGGTAGACCTTGTCTCATCCACACACAAGCCCAGAGGACGAGTTCCGGGGGCGCCACTTGGCCAGGCTCCCCTGTGACACGTCTTCGCCCTCCTGCCCTGCCTCCTGGGACGACACTCCTCCGTTCTCCCTTTTTATTAATTATCTATCATACAGTAGGAAAAGTGACCGTCTTCCTTTGGTGTGAGTTCCCTGAGTCTTCACACAAGTAGATTCGCACAGCCGTTGGCAGGATGCAGAAGAGGTCTGTCACCCTGCAAAACTCTCCGTGCTGTCCCTTCACTATCACACCGTCCCCACCATTAGCCCCGGCAAACACTGATCTGTTCTCTGTCACTGTACTTTTGTCTCTGCTGGAACTTTATGTAGATGGCATCGCGAGACAAGTAACCTGTTGAGACTGGCTTCCCGCCATCCACATAATGTCTCTAATGAGATTCATCCAAGTTGTTCCCTCCCTGTATCCACAGGTCGTTCCCTCTCAGTTCTGAGTGGTATTCCATTGTATGGATGCCTACAGTTTATCTGACTGTCCGCTGAGGGTGGTTTGTGAAAACCAAACAAGGCCGCTATCCAAAATGCAAACAAGACTGCTACAAACACTGGTGTGTGGGTTTCTACAAGGCTGCGCGCTTTCACTTCTCTGGGGGTAAATCTTATACCCAGGAGTGGGGCAGCCAAGTCCCACGGGAAGTGCGCTTTTAACTGCATCAGAGATGGCCAAACCATTTTCTACAGTGCCCGTACCACCTGCCTTCCCGCCAGTAACACTGGAGTGTCCCAGTTCCTCTGCATCCTCCCAGGCACGTGGCCTCGTCAGTGTTGCTGAGTTTCACCATTCTGAAGCCATGTGTTTCGGGCCCTCATCCTGGTTGTAGTTTGTCTTCCCTAACCTGTAATGGCGTTGAGCATCTTTTCCTGTGCTTTTTCGCCATGTGTATATCCCCTTCGCAAATTGTCAACTCTTTTGCCAATTTTTAGGTGTTTCTTTTTGCAGTTTTGAGTTTTTAAGAGTTCTCTGTATGTTCTGGGTGCAAGTCAGTGTTTTGATGTGTGCTTTGCAAATATTTTCTCCCAGTCTGTGGCCTGTCTTCATTTCATTTTAATTTTGAGGAAGTCCAAATTTATGATTTCTCTCTCGTATGGACCATATTAACAGTGCCATTTCTAAGTACTCTCTGCCTAATTGCAAACCCCAAAGATTCTGTCCTATGTTATTTCCTAACAGATCTATAGTTTTACATTTTCTTTTAGATCTATGATTTGAGTTGGCATACGAATTTTACTTCTCCTGACCAGTTCTTGATTGTAGGTTTCTCTGCAGAGTCTATGCACAGCCTTTCTTCCCCGTTCCCCATTCTGTGATGAGATTCTCCTTTTTACTGAAGTTCCCTTCATGGGTGGAATGTTAGATCTCAATAGGCTTCCTTGTTTTCTCTTGCTCACTATGGGAAACATGTACTCAGACTGCTTCATCAACTGGGATCTACAGAGGATGAAGGGCAGAAAAAATCTTTCTTCTCATTTGTGGAAAGCTCTCAAAATTACTAATCTTTTTTTTCCCTGACAGTATCTTATACGAAAAAATTTGGTCTTGTTTAGATATGTTTCCTTCACGTCACAACAGAAACAGTTTTGAACCCAATGACCATTCTCCAGATACAGCACTGTGAAGTTGTAGGATGAGTGACTGAATATTTTTTATTATGAATGTTTTATCAAAGACTTTGGGCAGAAGTGATTATTCCCATCTTTAAATATGGAGTATACTTAGGTTCCCTTCATTTCTTCTCTGCTCCCAATTCTTTACTATACTTTTCACTTTTTAAGGGTAGCTATATTTAATACATAAAATATATTGTATGCAAAATTATACATCAAACAACAGAGAAAATAAAACCGAACAAAAACACTAGCATGACCTTACCTCCCAGTGGCAATGGAACTCTTCTGCCTTTAGTCTCCATCTTTTTTCCATGCATTTAATAGTGGAATCTATACTGTGTTCTCTAATTTCTACCTTGCCACTTATCTTTCTATCTCTGCATCCATCTACCCATTTATTCACAGTTAATTTCAACCAAATGCCCAGTAACTGAAGTCACAGTTTAGAAGCATGACATAGATGCCACCACCAGCAAGAGTGTAAATGGGTATGGCTTTTTTTTTTTTTCTTTTGAGACAGGGTCTTGCTACATTGCACAGGTTGGTCTCGAACTCCTGAGCTCAAGTGATCAGCTCACCTCGGCCTCCCAAAGTGCTGGGACTGTAAGTGTAAGCCACTGCGCCTGGCCAGGTATGGCTTTTGGAAAAGCAAGTTGGCAGTGCAGTATACGTATATAGGAATCTCAAATAGTTCCCAACCTCTAGCTCAGTAACACTATTTCTGGACTATTTCCTAAGAAAACAACCAAAAAACAAAAGGCAAAAATTTTAATGCATAAACATATATACTGCAGTATGATTTAAAATCATTCAACACTGGCAACAATGGAAATACCATATTTTAGAAATAAGAGGATGGTCTGATACATGCACTTGAAGAATATTTTGTATCAATTAAACTTTAGAAGTCATGTTTATAAAGACCTTTTATTAACATGATAAAATGTTTATGATACAACATTAAAACAAAAAAATCAGGATACAAAATGGTGCACACAGTTATATCCAAACTGTTTGTATAAAACACAGACATAAAAACACTAACCATGTTATCTCCCCATGGTGGGATTATGGGTGACTATTAGGCTATTACTTCTGCTTGTCCGTCTTTTCCAAGCTTTGTACAGTGAATATGAATTACTTTTATAATAAAAAAGAAGTTTATTTAAGGATTTTAAAAGTTACATACAAGCCAGGGCCAGTGGATGATCTTGTCCAGTCTTAAGGCAATGAATATAAACTGGAGAATGTTGACAGAACACAGGATTTCTAACTAAAAATGAAGAGAAGAATCAGTTAAACAAAGTATAATTTGCATTTAATACTGCAGTAATTTGGTTAACACACTAAAAGACAATACACATTATAATACAGTGTAACTTGTATAATATTATATTGCACTGGAAACTCCTGATTTTCGGTACCAGAGGGGCACAGCAGTATTATGGCAAGGGGAAATGGGGCTCAGCCTGCTGCCTTGCCCCTCTGCTGCCTTGCCCCTCTGCTGCCTTGCCCTTTCTGGCCTGAGGCCTGAGCACAGATGAGAACCTTGTTTCCAGGTTCACTGGGAACACAGGCTAGCTGCAATAGACCACTAAGCTTCCTTCATGTCCCTACCAACAATACTGTCTACTCGAAACCATCCTTGTGCATCCTTCTTCTCATACCTCGGTTTTGCCCTTGGACCCCACCCCTTCCTTTCAGGCTCCTTGAGGACCTTGTCACATCAAGCCATCAACTGTAGATTCCGTACTGTATCTTTAACCCCACCTATTCCATTGATCCCTCCTAGCAGCACAGAAATGACTCCTTCTCATTAAAAACAAAAGCCCCGAAACCAGATAAACCCACCCCATCCTTTGATCCAAGACCCCTCTTAGCCTCAGGTTTCTCTCTGCGAGACAGTAATGAATATGCAAGCCCCTACTATCTCATCTACCATTCCCAGCTTCCTTGTGATCTGGCCTCCACCCCCATGACCACCAGAAGACAGCTTTCATCAAAGTCACCGATAACCGGGAGGCAGCAAAAACACTTCAACTGGCATCCTACTGATACTGTGGATGACTCTTTCCTTTTTGCTCCCCTCCTCCTGGCCATCTAGGATCCCACCATACAGTCTTGGAGCCCTCTGGAGTGTTCTGGTAATTCCTTCTGTCTCCTTTTCCCCCTCCTTAAATGGTGATGCTCCGCAGAGCCACAAACTCAGTCTTCTCTCCCGACTAGGAAGACAGACACACAAACACACATATTTTCACTCACCCGCTGCACCCTGGACTGGGGGAGAAGAAATTTCAACCAGACCCTTGGTCTGCATTATTACCTCCTTCATGGTTAGTTCTCACATCTGTCTCCAACTTAGCCTTCCTGCTGCATAGCAGACCCAGCTGTGCATAGGCCACTCGGCTCTCCTAAAGGCACCTCAAATGAAGCCAGTCCCAAATAGAGATCATTATCGCCTGCACTTAGAACCTTGTATCTCCTCTTTCTATAGCCTCCCATGTCACTTTCTATGGCCTCCCATGTCACTTTCTATGGCCTCCCATGTCACTTTCTATGGCCTCCCATGTCACTTTCTATGGCCTCCCATGTCACTTTCTATAGCCTCCCATGTCACTTTCTATAGCCTCCCATGTCACTTTCTATGGCCTCCCATGTCACTATGGCCTCCCATGTCACTTTCTATGGCCTCCCTTGTCACTTTCTATGGCCTCCCATGTCACTTTCTATGGCCTCCCATGTCACTTTCTATGGCCTCCCATGTCACTTTCTATAGCCTCCCATGTCACTTTCTATAGCCTCCCATGTCACTTGGAGGCACAACAGTGGTCTCATTTCTCAAGCCATGAGCCCGGGAATCACCCTGCATTCTTTTTCCCACACTGTCACGTTCAGTCACCACATCCTGTCCACTGTAAAGTCCAGATTTCTCCTGAATCCCGTGCCCACTTCCTATCCTGATGATGACTGCCTAGTGAGGCCTTCTTCGGCACCATCCGCCTACCACTTCAGCAACCCCTTACTAACCTCCCGCCTCCAGCCCAAACGCCCTGCAGGCTGCTCCTCACTCTGGTAAAGTACATTCTTGCCCACAAAATTGAAATCTGGGACCAGGCCCAGAGCTTCCCAAAAGTTCTCAGTACATAGGTACATGGGGAATTTAGTAATTCCTCCATAGACCTCTAGGCCAAAAGAAATCCCTAATGTGGCTGGGAATGCCAACAGTTGCACTGATTTAAGTAATTACGTCTAACTTAGTAAGTATTTCTAAGTAGCCACCAGAAAAAATAATTCATATAAATCTAAAGAAAAATGTTAATATTATTCTTAAATAACCAAAACTAATTCCCAGTGGGATGCGTGTGCCTGTCAGGTAGCTCACCATTTCCCACGCCTTGGAATCAGACAAGGTGCTCCCACTCGTTACCTGTTCTTCACCCGGATTTTCACACAGCATTAGCCTTTTTTGTTTTCACAGCAACTGCTGAAAACCCAGCTTCTTAAAGATACGACGTCACTGAAAGGAATGCAGTGTGGCCTAAAAATAAACCTGTAAACTATTTCAAGCTAGTAGTTTGTATGGTGTCCCAACAAATGTCAGGTATTACTGTTTTCCTCAAAATGTCCACTATCCCCTGGTGCCCTGTGAGTGCACTGGGGTGCCTGGGGCACTTCAGCACATGCTCTGTGGGCTGAGGACGTGGCCCCTATTTGCCCCAATCCCTCTGTAGAGGCTCCCTCTCTTCTCAACTCCCACAGTTCCTTCCTTTCCACCTTGTGCTCCCGTCGGATCTGAATCGCCACAGTCCACTCAGCTGATGGAGTGTTTCCTGCCTCTAGGCTTCAATGTGTCCCAAAAATGCCATCCCTTCCCTCCCAACACAGGGCTTCCTGGCAGACCCTCAACTCCTCCTTCCCATCTCTGTATGAGCCTACTCCAGACCACCCCCTCACCAACATAGGTACTGTTCTTGCATCACAGGAGGAGGGAGCTCAGCTCCTGGTATGTTGTTTCTTCCAAGGGCAGGAATGCCTAGAGTGTGAATATATGAAAGACTTACTTTCTGTAATTCAGGCCCAATGCAGTCCTAGTCCTTGTATAGTTGTCCCTCAGTATCTGTGGGGGATTGGTTCCAGGACCCCCTGTGGATACCAAAATCCATGGATGCTCAAGTCCCTGATATAAACTGGGAATTGTAGGGAGGGTGAAAGTGGACCATCAGATACTCTCCCTCCACGGCTCACTCCTACCTACCACTATACCCATGCTGTGGCCTTTCCACCAGCATGAAAATCAGGGAATAGCTCCCCTTGTTCAAGGCCAAACCCTTCCTGGTGCTCTAGGTCCCATTCTCCCTGAGTCCCACAGGGCCTTGCTCCATCACCGTCCCTCTGTCTACATACCTTCCCCTCACGCCCATACCTGGGGTCTAGGCTTATATGCCTGACCCACCCTACAGCTGCTATGTTTACTTCCTAAGCCAACTGCAGTCTTCTCCCTTCACTCTTCATCCACACGGCTCAAAACCAGGCATCTACAGCCTCTAGTTCTCCCCTCAACCCATCAGTATTCAGCTTTGGGCCCTCAGCTTCTATGCAGTTATGTAGTTATGTGCCCGGGCTTTAGAGTCGGGCTGACTCAAACGGAATCCTGGTCCTGCCCCTTCACATGTGGCCATGAACAAATGACTTATCTTCTCTGGACCTACCTCACAGAGTTAGTTAGTAAGAAAACTACCACATGTAATGTGCCTCGCACAATGCCTGGCACACAGTAAGTGCTCAATAAACGTTATCTGCAATTACTTTCATTACTATTATTACTAGTCCTGGTATTTTATTCATCTGCATATCCTCTATGCTTAGGGAAAAAGGGCTTGGCATCTAGTAAATACTTGATAAATGTTTATTGAATGAATAAACAAACACAGGGGCACATCAGGATAAGCTAACCAGACAGCAGGGGAGGTGCTAAATCATGGGGTCTGAGGTGGGGAGATGGTCAGTTTTGAGTGTCAACTTGGCTGGGCTATAGTACCCAGTTATTTAATCAAACACTAAGCTTGCTGTTGCAGTGAAGGTACTGACTTTGAATAAAGGAGACTACCCTCCATAGCATGGGTGGGCCTCATGCAATCAGGTGAAGGCCTTAAAAGCAAAAACTGTGGTTTCCTGGAGAGGAAAAAATTCTGTGCCAGGACTGCAGTGTCAACTCCTCCTAGGTCTCCAGCCTGTTCACCTGCCCTGGAGATTTCAGACTTGCCAGCCCCACAGTAATGTGAGCCAGTTCCTTAACTCTCTTTATACATATATCTGTATCTAACCTATCAGTTCTGTTTCTGTCTGATTGATACAGGATGTGAAGCTGGGAGAAGGCTGATGTCCTGGGTGAAAAGCTAGTGTTCTAAGTGAAGAAAGAAAAATTGTTATTTCCATCATCTTTTGTTGCCTTGTTGTCTCATGATGTAGAGTTGGTAATGATCAAGCTCTTCCTAACAAAGGGTAAGAAATTGACATCTGAATAACTGAGCAAAATATTTTACTTTTGAAAACATTCTTTTTTTTTTTTTTTAAGACGGAGTTTCATTCTGTCACCCAGGCTGGAGTGCAATGGTTCAATCTTGGCTCACTGCAACCTCCGCCTCCTGGGTTCAAGAGATTCTCCCGCCTCAGCCTCCGGAGAAGCTGGGATTACTGGCGCATGCCACCACACCCGGCTAATTTTTGTATTATTAGTAGAGACGGGGTTTCACCATGTTGGCCAGGCTGGTCTCAAACTCCTGACCTCAAGTGATCCACCTGCCTTGACCTCCCAAAGTGGAAAACATTCTTAAATATATGAAATCTCACCTCTAGTGACCTGTCATGTCGAAAGCCCCAAACGCAAGCTGCAACAGACACCGGGGAAACAAAGAACAGCGGCATGAAGACCAGGAGCCAGAAATGGCTTCCTCTCTCGATTCTGTCACAGACCAGAACTTCAAACATCAACAAGAGCAAGTGGATGCCCACTGCAATCAACATGGCTTTAAACTCCACACACGTTTCTCCTTCTGCTCTAAAAAAGGGAGAGAAGAAGAAAACACCCTCAGTTCAGAATCTCCACTATAAGCAAGCAGTTCAGGGCAAATACCAACTTATATTTATACTTTGAATTTTACTTGAAAATTTGACAAAAGCAAAGGGAAATCAGGTAGAAAGCTAACTTAAACCTAAGCTTTGGTAGGCAATCTCTGAAACATCGAAGAACTACTACATAATACAAAATGAACATTACAACCAAACCAGAATTTAATGTTTTAACCGTATAAGGATATTCTCAAAAGTAATAGCCAGTTCTTATTTCCCTGACAATGTACATAAACACTTCTGTTCACATCTTTAAATTCAACAACAAGAGTTACTTCCAAGATTATTCAAGCTGATTTGCTTCTGCTGCTAAAACCAGGCAAATACCCCTTAAGTCTCATGATCCTCATTTTTCAAGAAACCATGTAAACCACCCTTCACACAATATTATAAAAATAACTCTAGTTCTATGAACAAGTGCCAGTTATATTTCAAGATAGTAGTAACTATTGTTAGGTGCTATTTTTAAATGCAAATAAAACGTATAAATGATTTTCATTTTCCTTTCTATTCCATTAAGATAAATTAACACCTGCAGATGAAAGAGAAAGAAGAACAAGAGTTAAAACTGTTCTCAAACAAAATCAGTTTAATTAGCTAAGTATCATGCACAATAACCTTAACAGATCTACAATTGAGCAATGGTAAGGCCGCTAATCAGGAAAAGGCTCTATAATGCATCTGAAAGGCCTACAATGTTTATTCAAAATACAGATGAACATTTATGATATACATGTATTGTGGGTGACAAATACACCGGAAGTTAGATCATAGAGAAAATGCTATCAGAGGTTATTCCTGTAGGACCCAACCATGTTCCACTGGTTAATGTTAACATGAGAATGACCACGCCTGTACATTCCTTACATTCAACCCCACATACACAATTCCTTTCCTTGCTCAAAACATCTTAAATAAGACCAACAAAGAGAAGTTTGAATATATTCTAAATATCAATTAGTAGAACCTAAATGTTTATTTAACTTTGCATTCTTTGAGAAGCAATTAATATTAGATATCTGAAAATATCTCATAAAAAAATAAAACACATACAGCCACACAGGTCATCAATCTTTCAAAAAAAATCTAAGAACTCTGAAACAGCTATACATGAATGTCCCTCACCTGCCAAGGCTCTCTGTGTAACTGTTTTACAGTTCTTAGACATGTATGTGATATGTAATTTACACAATCTGAATCATTTTCATATTTAGTAAACAAAAATTTAAAAAGTTGATGTAGTGGCCGGACGTGGTGGCTCACACCTGTAATCCCAGCACTTCAGGAGGCCAAGGCGGGTGGATCACCTGATGTCAGGAGTTCAAAACTAGCCTGGCATGGTGAAACCCTATCTCTACTAAAAATACAAAAAATTAGCTGGGCATGGTGGCAGGTGCCTGTAATCCCAGCTACTCAGGAGGCCGAGGCAGGAGAATCACTTGAACCCGGGATGTGGAGGCTGCAGTGGGCCGAGATCACACCATTGCACTCCAGCCTGGGCAACAAGAGCGAAACTCTGTCTCAAAAAAAAAAAAAAAAAAAAAAAAAAGGTGCGGTAGTTTCAACTTTACACTTTTCCCACATGAGCAGCTGCCTTCTGGGAATTCCTGTACTCCTCATTTTCCCAGTGGAGGTTCATAATAGCCTCCCAGTCTTAAGTCCCCCTTTTTCCCTTTATGTAGTTACAGTCTCTGTGGCAGAGAAGGGAAAGCCTCTCGCAGGTCCCAGCAACAAGCAGGTTGCATGCTGGCGTGAGCCAACTCCCAGGAATTTGGGCCAGCGGAGGCATCCAAGAGCAGGGAGGGCAAGAGTTGGAAACGGTAAAGGGTACCCCTCTCCCCTGCCCCCAAAGGCTCTGCTTTCCTTCTCGGCATCCAATCTTTGACTTTCCTCATTCCCCAGCTGCTGTCTCAGGGACTCATGGTCTCCTGGTCAAGCCACCTCCCCTACACTGCTAATAGTCCTAAAGCTCTGGGACTAGGAGGGTGGGACAAGGGGAGCCCCAGTTCCAAAACTGTATTGGAGAAAGATCTTTCATGACCAAACATAATATGAGTGTCTTTTCCTAAAAACAGGGTGGTTTCATGCTGCTTAGTCTAGTATGGCATACCAGTTCTGTATTTTGGGTGCATTTTGGATTATATAGGCATCTGTGAGCTGGCTGGCAACTTACCCCCAAATGGCACTGCTTTTGTAAGAAAATACATACCAAAGACTAAATTTTCAAAAACACAGAAGAGATCTGTTAGCTTATACTATAGTTCTAAGACCCCAGATAGGTAGAAAATAAAATGGTCCTTACTTCATCAAAAGTGAGAAAAGTCAAGATATTGCTCCCTCATGCTAGAGACCAATGGGTTGTATAAAGCAGTATTACCGATATTGAGGATTTCGTGCCCAGACTCCAGTTCCAACTGAGGCTCCAACAATGACCATTAACTTCCACAGCCATATTGGAGCAAAGACAGCCCAGTAACTCCACTGTATGATGCCATCCAAACGAAGGGCCAGCAGCACAGAGAACAGCAGCAGACAGGCATAGATGAGGAATTTACTAGGAGAAAAGTAAAACGATTAAGAAGGATTCACTTTTACAAATATGTGATACTGAAATGGGGAGTAATAAGAGCCACATTTGTCAGCATGTAAAAGGAGTCACTAACTCAATAATCATTTATTGAAAAGGTCTATGGGGCAGACATAATGTGTTGGGAATAAAAGAAACATAAAGAAGACTAAAATAAGTCTCCTGCTTTCCAAGGCTTCCTCATAGAAGGAAGACCACACAGAAACATATAATACAGCACAATGTTTGTGATGAGAGCTTGGAAGAGGAAATACAGACTGTGTCTGAGGAGGCACTCAGAAGCAGAGATGTGGTGACCCTAGAGCTGGTTCCAGAGGGCAAGTAGGAAGCTGCCAGGCAGGAAAGCAAGTGAGATGAGGAAGTATTCCAGGCAGAAGGAACTAGCTATACCAAGACACAGAGACTGGAAAAGGCTGACATGCTCTGAAAATGGTCAAGTTCTATCACTAACTGATTCTATTTCTAAAAAGGCAGCCATCTGTCATATTCATATGGCATGAACATTTTAGTGTATGTATTATACTTTCCATGAATGAATAAATTACACATACACACATGCTCACGTCTCATATAAAAGGGAATTGCTACAGAGGATGTCCTTGAAATAATTAGAAATTATACTCTTGAGGACCTCTATTTCCAGCCTTGACTTAATAATAGGAATATAATTTACCTTCCCGCCTAAATAAGAAGCTTGATACAGTCTACAAAAGAACAGTTTTCAGACATTGACAACAGGCAGTGGAGAACAGGTGAGAAGGAGGAAATAAAGGAGGTAAACCCTACTATTGCCCCAGTTTGCAGATCAGAGGCAGTTTCCAGGCTGCAGCAAGAAAACAGTTAAAACTCAACCCTGTCAATAACTATATTAAATATAAATGGCCAACTGAAAGACAAAGATGATCAGATTGGATAAGTAAGCAAGACAACTATATGCTGTCTGTAAGAATCCCACTTTATCTATCTATAAAGACACAGATAGATTAAAAGCAAAAGGAAAGAAAAAGTTATACCAAATAAACACTAACCAAAAGAAAGCTGGAATGACTATATTAATATCTGTTTAGTCTTCCATTGCTGCTGTAACAAATTACCACAAACTTAGCAGCTTAAAACAACGTAAATTTATTATCTCACAGTTCTATATGACAAAAGGCGAGACGGGCTTGGTTGGTTTCTCTACTCAGAATCTCACAAGGCTGAAATAAAGATGTCTGTTGGTGGAATGCTTATCAGGGGACTCTGGCAGAATCTACTTCTAAGCTCATTCAGGTTGTTGGCAGAATCCAGTTTCTTGTGGTTGTAGGACTGAGGTATGTGTCTCTTTGCTTGCTGTCACGCAGCAGCTGATCTTGCGATAGTAGGGGCCTCTCCTGGGTCCTTGTAAATAGGCCCCTACATCTCAAAGCCAGTAACAAGCTATAGCATATTCAATCTTTCTCATGCTTGGGATGTTTTCTCACTACTTCTGCCATATCGCTTCTGCTTCCACTGAGAGAAAGTTCTCCGCTTTTAAGAGTTCATGTGATGAAACTGAGTCCACCTGGTTAAGCCAGGCTACTCTCCCTATTTTAAGGTCCATAACTGTGGTTGGTAGGCAGAATTCTAAAGAAGTTTCCCAGGATTCCTGTCCCCTGATTATTCAATCAAACACTAATCTGAGTAATACTGTGAAGGGACTTTGCAGATGGAATTAAGGTTACTAATCAGCTAACTTTACAATAGGAAGATTATACTGGATTATCCAGGTGTGCCCAGTGTAATCCCATAAGCCCTTAAGAAAGCAGAAGAGTAAGTCAGAGAAATGTGGTGGAAGAGAGATGAGGCAGAAGTCAGAGAGATTCCAGACTTGAGAAGGATTCAGCCTGTTACTTCTGGCTTTGAACATGGAGGTAAGGAACCATGAGCCAAGGAATGCAGGCAGGCTTCAGAAGCTGAGAATAACTCGCAGCTGACAGCCAGCAAGGTAAATGGGACCTCAGCCCTACAACCCCAAGGAACTAAATTCTGACAATAGCCCAAATGTGCTTGAAAGCAGATTAATCCCTGGAGGCTCCAGAAAGGAATAGAGCCCTCCTGACACTTTGATTTTGACCCTGTGAAACTAGGCAGAAGACCCATCTGAGTTGTGCTGTACCCGGACTTCTGACCTAAAGAACTGAGAGTAATTTGTCATGGTAACAGCAGAAACGAATGCTAATAAATATAGCTTCAAAGTCCCCTTTGCCATGTAAAATAATAACATATTCACAGGTTTCAGGGCTTAGGGCCTGGGTATCTGTGTATTTGTGGGGGTGGGGCATTCTGCCTACCACAACATAAGACACAGTATATTTTTGAACAAGGACTATTTCCAGGGACAAATAGAGGTAGTTCATAATGATAAAGGGGTCAATTTGTCATATGCCTAATAACAAAGTTTCACAATACATGTAGAAAGTACTGATCAATCTAAAAGGAGAAATAAAAAAATCAAACTGTTATAAATGGAAATTAACATTCCTTTCTTAGTAACTAATAGAACACATAAACAGAAAATTACTAAGGATATATATGATTGTAGCAACACTATCAACCAACTTGACCTAATTAATATTAATGAGTTCCTCCCAACAAAAGCAAAATACAGATTCCTTTCAAACACACACGGAACATTCACCAAGATAGATTGAATTCTGGGCCATAAAACAAAGCTCAACAAATTTAAAAGGACTGAAATCATACAAAGTAAACAAGCACAATGGAGTCAAACTAGAAATCAACAATAGAAAAATATCTGGAAAATTCTCAAAATACTTGAAAATTAAATGCCACACTGCGAAATAATCCATAGGTCAAAGACTATGAAGAAAATTGAAAAATATTTTGGACTAAAGGCAAAAACACAATATACCAAAATTTGTGAGATACACTAAAGCAGTACTTAAGGGAAATTTTAGCATCAAATACTTACATTAGAAAAGATATCAAGTCAATAATCTAAGATTCTATCTTATGAAACTAGAAAGAACATGGAGGTAAGGAACCTCCATGTAAGAAACGGAAGGAAATTTTTAAAAAGTAAATGGAAAGAAGAAAATGATAAATGTAAGCACATTAATCAATAAAATACAGTAAAAAGGGATTAGAGAAAAAAATCAATGAAACTAAAAGCAGTTTCTTTGAGAAAGTAAGAAAATTGGTAAATCTACAGCCAGAATAATCAGTAAAAAAGAGTAGGCTCAAATTACTAATATCAAGAATGAAAACAGGGATATCACTACAAATCCTAATAATACTAAAGGGATAAGTAGGGGATATTATAAACAACTTTATGCCAGGAAATTTCTTGAAACAAAGACATGGAAACTGCAATTCTAGTTAAAACCTTTTTCAGAAAGAAAATGTCAGGCCATGGCAAAATCTACCAAACATTTAATGAGGAAATACCACCAATTCTTCACAAACTCTTGCAAAAAAGATGAGGGGGGAACATTTCCCAATTTATTTTATGAAGCCAGCATTACCCTGATAACAAAACTGACAAAGAAAGAAAACTACAGACCAATATCTCTCATGAACAGAGATGCAAAAATCCTGAAAAGATTTTAGCCAACTGAATTCAGCAATATATAAGGATACTACATTACGACTAGGTGTGGTTTAGCTAGGATTGCAAGATTGCAATCTTGGATTAACATTTGAAAATCAGTTAGCAACCTTCGTGGTATTAGCAGGCTGAAAAAGAAAAATCATATGATCATCTCAATAGTTGTGTAAAAAGCATTTGACGTAATTTGCTACCCATTCAAGTTAAAAGCGTTAAACAAATTAGGAAAAGAAGAGCATCTATGAAAAACCTGCAGTTATAATGCTTAATGGTGAGAGACTCAATACTTTCCCCTTAAGACAGGAAACACAGCAAGTATGTCCACTTCAACACATCTATTCAACATTGTACTAAAGGTCCTAGCCACAACAATAAGATGATAAAAAGAAATTAAAAGAATATAGTTTTAAAAGAAAGAAGTAAACCTGTCATTATCTATAGGCAACATGATATTCCCTGTAGGAAATCCTAAGTAATCTAAAAAAAAGCTAGTAGATCTAGTAAGTGAATTTAACAAAATTGAAGGACACAAGGTAAATTTACAAAAATTATTGCATTTCTATATAGTAGCTATCACAAATTGGAAACAGAAATTTAAAAATATGTATCATTTACTGCAACTTTCCTATAAATTTATAACTATTCAAAAATTAAAAGTTTATGAAAAAATCCACCATTTACAATAGCATCACAAATATAAAACACTTAGGGATAAATGTAACAACATATATGCAAAACCTATATACTGAAACCTACAAAACACTGGTAGGACTGTGGGGAAGCTAATAAACAACAGAAATTTATTCCTCACAGTTCCAGAGGCTGGAAGTTGGAGATCAGGATGCCAGCATGGCTGGGTTCTGGCGAGGGCTGCCTTCTGGGTGGCAGATGGCAGACTTCTCAATACCCTTCACATGGTGAAAAGAGAGTGAGTTAGCTCTCTGGTCTCTTTTTATAAGGGCACTAGTTCCAACCATGAGGGTTCCACCCTCATAACCTAATCACCTCCCAAATGCCCCACCTCCAAATACCATCACACTGGGGACTAGAGTCAACTTGTGATTTTTAAAGGGACACATTCAGTTCATAACTGCCAAGAAAAATTAAAGATCTAAATAAATGGAGACATATACTGTGTTCATAGAACACTCAATACTGTTAAGATTTACATCCTCTGTGTATTAGTTTCCTATGGGTGCTGTAACAAACTACCACAAAATTGGTGACTTAAAATGGCACACATTTATTATCCTGAGGCCAGAGGTCCAAAAAGGGTTTCACTGGGCTAAAACCAAGATGTCAGCAGGACCTACTCCTTCTGGAGACTCTATGGGAGAATCTATTACTTGTTTTTTTCCAGTTTCCAGAGCTGTATTCCCTTGGCTCATGGCCCCTTTCTCTATCATCAAAACCAGCTGCATAAAATCTTCAAATCTCTGTCTCTGTTTCCACCACACTGCCTTCTCCTCTTAATATTATCTCCCTCTTTTAAGGGAACCTGTGATTGATTGCATTTATTGCCCCACTTGGATAACCCCATCATCTCAAGATCTTTAACAGGTTCCATGGAAGTGGGTATCTTTGTGGGTCATGATTTAGCCTACCACACACACCAAATTAACCAAATTATTTTAAAGAATCAATGCAATCCCAGCGAAAATTGGGAGCCAGCAGGTTCTTCTGTAGAAATTGACATACTGACTTTAAAAGTCATATGACAGTGCAAAGGACCTAGAATGGGCAAAACAATTCTGAAAAAGAACAAAGTTGGACAATTTATACTACATGCTTTCAAAGCTTACTATAAAGCTACAGTAATAAACACAATGTAGTACTGGCATAAGAATAGATATATAGAACGTACTAGAGAGTTGGAAAACAGACCCATACATATAGAGTCAGTTAATTTTCCACAAAGGTGCCAAAACAACTCAATGGAGAAATAATTATGTTTCAATAAATGGTGGTACAACTGGATAAATGAGGAAAGTACACCTTGACTCTTAACCTTATAACATATACAAAAATTTATGTGACATGGATCATAGACCTAAATGTCATACACAAAACTATAAAATGTCCAAAACACATATGAAAAAAAAATACTTGCAACCTACGGTTAGGCAAACATTTCTTAGATGGGATATGAAATTGGACTTCTCCAAAATGAAAAACTCTTACTCTCCAAAAGATACCTATCATTAACAAAATGACAGCCAAGCCACAAACTGGGAGACCATACTCTGAAAACACGTATCTGACAAAGTAACCTGTATCCAGTATATAAAAAGGACTTTTACAACTAAAAAAATAAGTGAACAACCCGATTTAAAATGGCCAAAAAATTCAGAGACATCCCATCAAAGAAGGCATACAAAAAGCAAATAAGCACACAAAAAATACTCAGTATTTTCAGATGTTAGGACAATGCAAACTAAAATGACAATGAGATAAGATTACACACACACTAGATCTCTTATATATGCTGGTGGGAATGCAAAATAGTACAGCCACTTTAGAAAACATTTTGGAAGTTTCTTATACAGTTAAGTGTATACTTATTCTATGGCCCAGCAATCCCACACCTAGGTATTTTACTCAAGAAAAAGGAAAACGTATGTCCACACAAAGGCCTGTATTCAAATATTCCAAGAAGCTTTATTCATAATTGCCACTGGTAACAACTCACACATCCATAAACTGGTGAATGGTTAACTGAATTTTGATATATCCGTTCAATGGAATACTAATCAGCAGTAAAAAGTAACAAACTATGGATGACAACAACAACATTGATGAATCTAAAATGCACTATAAGTAAAATAATTCAGATGGAAAACACAAGATAGTGTACAATGCTACTTATTTGACATTCTGGAAAGGGCAAAACTCTAGACACAGAAAAACAGATCAGTGCAGTTACAGATAAGGAACAGAAAGCTCAGATGTTAAATAACTTGTCTAAGAGCTCAGAGTTGGGAGTCAAACCATTTGACTCCAAAATCCTTCTAATTGAGTATTATACTATACCGGCTTTACACTGATAAATGAACATGTTTAGAAAAGCATCTGTATAAATATCTGCTGAGCAGCTAACAGGTCTCCACTCGGGAAGATTAAGGATAGTCTTTATACTCTTTTGCTTATGATATCTGAGTTTTCTGTAAGGTACGTGTACTGTTTTTGTACTATGAAAAATAACATAAGAAACTTCGATTGGAAAAAAGGGAGGAGGGTTGTAAGAAGACTGGACCTACAAAATTAAACTTGGAAGCAAGCCTCCCAGAGAGAAAACTACGCTGGGAAGATCATGAGATTCAGAGGGGTTGCTAAAAAAATATACATAGCATCATTGTGTCATGGTATTCTTACCCATAAAGTTAGGGCAATAATATGTACCTCATAAGGTGGCTACGAATATAAGATAATGAGTATAACAAGTGCTTTGTATAAAGCACTAAATCAGTGGCTCTCAAAGTTTTTAGTATCAAAAATTTTGACGTTTAACTCTTAAAAAGAACTCCTTTTCAGTTCTAACACTTACTGAGGATCCCAAAGAGCTCTGGTTGATATGGGTTATCCCTATTGGTATTTAATATTTACGATACAGTTGTTATTCAAAAAATATCTACTCTTCGAAGGTAATAATAAACACATTACATACTAACATACATAACATTATTTAAAAACATTTCCAAAACCAACACAAATTTAGTGAGAGTAGCGACACTGTTTCTACAGTTTAGCAAAATTTTTAATGTATGATATCATAGAAGACACCTAGATTCTAATATCTATATTTACATTCATTCTGTTGCAATACATTGTTTTGGTTCAAGTATACAAAGAAAATCTGGCCTCACAGAGATCTGTAGTTAGAAAAGAACTATTTTAATAGCTCTTTCAGATAATGGTAGACGTTCTTCAACAGGACACTAAAACTCAACAAGTGGTAGTTTCTTAAAGGTTAACTATGATGTGGAATCTGAAATCGTATCAATGACCTTTTTGTACTCTGCTACACTGAAATCCACTGGTCTCTCTTATACTTTCAATGAATCTTTTATCCCAGCATTATTGTATAATGCAATGTAGGTCGACTGGAAAATATTGGTTTACTGAGTTATAAAGATCTTTCAAATGTTGACACATTTCATATACAATAGCAAAAAAAATCACATTACTTACTATCTTCACCAACTTCATCAGAAATATTTTAATTACTGGGAGGTTGTCAAGCTCATGGTAGCAGATACAACTTTTCAAAAATTCTGGTTTTCCCATGAAAGATCAAATTTTACCATTTACAAAAAATACCATGAGTTGTTTTCCTTGAAGTTTTGCTTCCTGCACTTTCTTTTTTTGTGTGTGTGATAGAAGCATCTTTTATTATAGTATTTTTGTCTTTTTTTTTCTTTTTTTTATTATTATTATACTTTAAGATTTAGGGTACATGTGCACAATGTGCAGGTTAGTTACATATGTATACATGTGCCATGCTGGTGTGCTGCACCCATTAACTCGTCACTTAGCATTAGGTATATCTCCTAATGCTATCCCTCCCCCCAACCCCCACCCCACAACAGTCCCCAGAGTGTGATGTTCCCCTTCCTGTGTCCATGTGTTCTCATTGTTCAATTCCCATCTATGAGTGAGAACATGTGGTGTTTGGTTTTTTGTCCTTGCAATAGTTTACTGAGAATGATGATTTCCAATTTCACCCATGTCCCTACAAAGGACATGAACTCATCATTTTTTATGGCTGTATAGTATTCCATGGTGTATATGTGCCACATTTTCTTGATCCAGTCTATCATTGTTGGACATTTGGGTTGGTTCCAAATCTTTGCTATTGTGAATAGTGCCAGTTAGAATGTCAATCATTAAAAAGTCAGGAAACAACAGGTGCTGGAGAGGATGTGGAGAAATAGGAACACTTTTACACTGTTGGTGGGACTGTAAACTAGTTCAACCGTTGTGGAAGTCAGTGTGGCGATTCCTCAGGGATCTAGAACTAGAAATACCATTTGACCCAGCCATCCCATTACTGGGTATATACCCAAAGGACTATAAATCATGCTGCTATAAAGACACATGCACACGTATGTTTATTGTGGCTTCCTGCATTTTCAAGAAAATGTCTGCCAAACACCATAACACAAATAACCACAGTCTTGTCTGTCAGTTGTCCTTCCAAATAAAAATGATACTCCATGAAAACAGCAGCTTGTAACTCAGGCACACACGTTTTTCCTTGAGTCAACCATTGCACTTCAGCATACAACAGGCCTTTATGCATTCTTCCCATTTCATCACATGGAATATTAAACTAGATGTGCATTCAGGGGTCAAGATTAAATGAGATTAATATTTTTCTGCTTTATCAAGGACATTCGTAAGTGAAGCTGGCATTTTTTTTTTAACTGCAAGTCCAGCACGTGGTGGTGAAGAATCCAGTGACAGAAGACTAGTGCAGCTGGTGCCACTGTCCTGATTTGTGCTCCAGCACCAGCTGTTTGATGCACTACTTTTGTACCACCAGTGCCAATGTCGACCAAGGCAAAGAATGTCTTAGTATTATAATTTTGACTTTGCAGATACCTGGAAAGGGTCTCAAGGCCCACTCCCAAGGTCTGTGGGAAACAGTCTGATAACCAGCGTACTCAATACACATTAGCTAATATTATTAATACTCGAAAACAAAAACAGGCTTTTATAAGCTGCTACAAAGAAAGAACATTTAAAGAAACCAAGATAAAAATGACTTCATCCCTTAGACTTTGGACAAGAAGAGAGCCTGTGTCAAGGTGATTCACAAGTTAATAGAAATGGAGTTATCACCACAATTACAGTACACAATTAGTAGAGGCAGAAGTTTTCTCTCTTAAAGCAGAGGGAAATATTCCAAAATCTAAAAAAATCAGAACCAATTTGTCAACTAAAGCCTGTGGCTACAAATATAATTACCAGAAACAATGGACTTGAAAACAGACTATTTAAAAAAGAAATTAGTGGATTCAAACATTAACAAATGCTAAGATAATGACGACACAGGATTCATATGTAAATTAGATAACATGTACAGGTAATTTTTATCCTAAAGGATTTTCAGACTATAAATAAAAAGTAAATTGGTGGGGGGGGTGGTAAATGCTGTAAGCTAACTTCATTATCCTCTGTAAAACAGTTTCCTTATTTAATAAAAAAAGAGAGTAGTGGAACTAAAGAAAAGAGAAGTACCAAAATGTTTTAAATGTTGGAAAAGGGATTATTTTATGTGGTTTTTGACATAATTTAAAGGAAACTTAAAATTTTATGTCTATTACATGAAAAATAGAAAACAAGATAAACTTACAAAAGGACCCACAAAATATAATTCATGATTCAAATACTAGGGTTAGAAAAATATACATGAGCTGAATGTTCTCTTATTAATTTCCTATTGCTGCCATTCAAAACTGCCACAAACCTAGTGGTTTAAAAAGCATAAACCTAGTGGTTTAAAAGGCATAACCCTTACAATTCTGGAGGTCAGAGTCCAATATGGGTCTCGCTGGGCTAAACTTGAGGTGTCAGCAGGACTATGCTACTGAAGGCTCTAGGAGAGAATGTTTCTTTGCCTTTTCTAGCTCTAGAGGCTGCCACATTCCTTAGCTCATGGCCCCTTCCTCCATCTTCAAAGTCAACAATGGAGAATGCAGTTCTTCTCATACTGAATCACTCTGACCTCCTTTTCTGTCTCCCTCTTCTATATTTAAGGGCCCTGTAATTACATTGGGCTCAGCCAGAGAATCCAGAATAATCTATTTTAAGGTCAGCTGATGAGCAAACTTAATTCCATCTGCTACCTTAATTCCCCTTTGCCATGTAACAGAACATATTCCCTGGTTCCACGGATTAGGATGTGGACATACTTGGGGGCGTCATTATTCTGCCTACCACAGCTCTGTAAAAAGAAAGGTTGCTTCCTAGATTAAGAAAGTAAACCTGTTACATTCAAGAGTTACGCTTGGAACCAAAGTCAAAAGTCGAACCAACTATCAGAAATCAGATGACAGAGGTTTAGCACGCCTGGATGAAGACAAGAGCAACAATTTACTATCTTTAAAATTAGATAAATTAGATTTCAAAGCCGAAAGTATTAAAATGCTAAAAGGACTAATAAGGAAAACCTAAATAACAAAAACCTAACATGACCATGGAATATGGAAATAATTTTACAATTTTTCTTTTTTAAGGATACACAGAAATATTTTAATTGTGGGCTTCCTCATGCTACTCTTAAATCATGACAGATAAAACAGACAAAGTTCCTAAGGAAAATACGGAAATGAACACAAGAGTAGATTTAAAAAACAGCAAGGTTATATGAAGAGAATTAAGTAGCAGAACGAGAAAATTTAAAAAACAGCAAGCTTATATGAAGATAATTACGTAGCAGAACAAGAAAACATACTTGCTTTACATATATATAGTTTTTCCAGGGAGAAAAAAAGGATCATGGGGCAGCAATACACAATAAACACACATCTAATTTACAATTGTTAAAAATATTTGAGTGCCTGAAATGTGTGAGATACATAAAAAGGAGCAACAATGCGTTCGCTCAAGATGCTCAGACTAATAGGAACAGAGGGAGATGATGTATCAACAAGTAACTACATATGGTAAACTAGGGGACTTGGAAGATTAATTTCCCTGAGAGAGATGGGAAGAGAAGTGGAATCTGGGCAACAAGTTGGGAATAAGGAATTCCAGACAAAGGGAATAAGATGTTTTCCAATTTTTTAAAAATTATTTTTATTTATTATGGATACAAAACAGTTGTGCCTATTTATGGGGTACACGTGATACTGTGATGCAAGCATACAATGTGTAATGATCAAATCAGAGTAACTGGGATATCCATCACCTCAAGCACTGATCACTTACTTGTGTTAGGCACATTTCAATTCCACTCTTTTAGTTATTTGCAAATATACATTATTAACTATATTTGCCCTCTTGTGCTACCAAACACTAGATTTATTATTTCTATCTAACTGTATTATTGTACCCATTGCTCATCCCCTCTTTATCCTCCCCTCTCCAATTCCAGCAGACTGGAACACACAGAATACTTTCTATAAATCGTGGTGGGTAGGGTGCTGCAGAGACAGGAGAAAGGGTACTGGGGGGAATAAGCCAGAAGTTGGCTGTGGTAACATGGTAGGGGAATGTGAATATCAAGGTAAAGTCCTTGGAATTTATTAATAGGTAATATGGGGCCACTGCAGATTTTCTCAACAAGAGTGACAGAAGATACATATGAGTGTGTAAGGTAGATTGTAATCAGTAGAGACCAGAGGTTGACATTTTATACAATTCATAAAAACACTGACAAAAAATGGATCATTTTCAATACTGATTTGTTAAGCAGTTTAGTAGAGTTACTAAAATACAATTGAAACATAAAAATACCTGGGCAGCTGCCAAAACAAAACTCAAGAGAAAATGTGTTCATTTAAAATGTTTAAGTAAAAGTAGAAAACAAAGAAAAAAAAAAGAGGCAAAAGAAAACTAGTAAACTGAGTTTCTAAGAAATTTGGGGAAAAAGCCAAAACATGAAAATAATAAAACTAAAAGTAGAAATATAGATATAAAAATGAAACTGATCAGTAATCCCAACAGCTAGCTTTTTAAAAAAATTAAACTACAAAGTTGATCAAGTAAAACAAAGTAATACAATCAGTAAGTTCAAAAGATGTAATTCATACACACTCCTAGTTGGGGAAAGAAAGAATAGTATCTTAACTATATCAATATATTTGCAAGCAAAGTCTAAAAGGTGACTGCATAGCCAAAAGGAAATATCAAGCCTGATTTGCAAAAGAATACACAATAATATGCAATAATACAGTGATAAGAAAATGTATTTACAAAAATAACTTATGGTCATAGCCTAAACTACTTTGAGTTACTTTTCAAGAAACATTCAGACCAGATTCCAAGTATAAAAATAGACTGCTTAATTCTCCACAAACCTGGGAGAAATGGGAGGTTCTGGTTTAACATTAATCACTACTTCTTAAAATTCACTTTTCCAGTTACACCTTTAGAATGGATTTATTCCACTCTCATTTGAATCTGTAGTGTTAGTATACGATGAATCACTAAGTAGTGCTACCTGGGCCAAAGCTAGTATCCTCTCTGAAATTTACATGGAGCTTTCTGCTCAGGCTCAAATTCCCTCTCTCCACTTTGCAGGGTTGGGAGAATAGGGAGGGAGAAAAGGAAGAAGGGAGGGAGAGAGAGAATATACTTAGCAAAGGAATGATGACTCTGAATGTAAAAGTTCTAGTATCTGTTTTCTGCATATCATAAGAATGCAGCTGGACTCTTTTTAGACCTATCAGTTTTTTTCCAGTGGAAGCTGCTGGCTTCACTGGAGCACATACACGCGCATTAACACATGCCTGCATGCACGTACACACGCACAAGCACATACACACACACAAACTTTGGATGGCACATCCCAGTCTAAAGCTTGACAGAATGGCTCCAAATGACAACCTGACATACTCACAAACTATCAAGGGAACTGCCCCTCTTACACCTTATTAACCAAATTTAAAGTCTTTTAGTGGAGACTTTAGCTGGTTTTATTAAGATAAAAAATGTTTAAGAGCATTTAACCAGTAGATACAAAAAAGCACAAAAGCCAAATAAAAGCAGAGCCCAGGCCAGTAGGAAGATCTGCATTTAAGTTCCTCAACTGCCATTCATCAGCGGTGTGGTCTTGGGTGAGTTATTTTCCCCCAGGTCTGTCTCCTCATCTGATTCCTCATATACTGATTCATTAAGACAAGGGTATGTGAAAGCACTGTGTAAATGATACATTTTACCCATTCTAGCTTTAGCAGTATTATGAAAGACAAAAGTTCTGCCACATTGTAGGTAATAATCTCATTTAGCAATCATTGTTGTCACTATTAGGTTGGAGCTGACAAAGTATGAGTCTCCACTTATAAAGCATCTATCTCCAGAGTTCGAGGCTTTTGTCTTAAATTCCAGTCATCTTGTACAGGCATGACATATCAGGCAAAATGATTAGAAAACTCAAGCTCCATATTAAAAAGCTTAACTTCTGGAGTCCTAGGAAACTATCTAAAACTCCTTCAATCCACGGTCTCTCCTGTACAACAAAGACTTCCCAGTGGTAGATGTCTATTTGTACCCAACATCCACTCATTCAGCACGTAATTCAGCACCTCCAAATCCTGGCCCTCAAAGAACACAGCTAAGAACAATGTGTGTGTAATTATCAAGTAATAGGAATGATACTTTTAAAACTGGAAATTATACATTCAAATGAGATTTCTCTCCTTTAACCAGTCCCCTTGGGAGGCAATGCAGTAATTCCAATGGTACTTCATTACTCAAATCATCTTTGAAGCTTTCTTCTTGGAAGCACCTTGAGAACCTGCAGTCTGATCTTCTGACTATCCCAAATGGTGCTAAATTTTCACTGAGGGTGGATTCAAATTTTGGAAATGGCAAACAGTCAGTCAGAGCCAAGGTTAGTGAATAAGATGTGTGATCAAACTAGGTGGAACTATTTTGGTTGAAAATGATAGATGATCATAAAGCAATGAGATGGATCTTCTTATGTGATATGTAAACTGACTTTAAAGGGAATTCCAGATGAGTAACAAGGAGTATGAACAATGGAATAGGTGTATACATTCTCTTTCCCCAAGTAACCTCTTTGAATAACAACACTCATTTGGATGTATAAGCGCCACTAACAGGTTTGTTTTGTTTAATCACTTACAATTTGTAAATAGAGGGTTCCTTAGCATACTGGATCTACAATGTCATGGAGGAAAGGAGTTGTCACTTAACTAGAACTATGGCATGGCACGCAGGAAAGAGCACAGGCTTCATGAGACTGACGTGGATTCGAATGTTGACTTAGATTCTTCCTGCCTATGCAACTTCAGGGAAGTCACAAGCTGTCAAGACTTTAAAATAAGGCTGATACCTAATTTTGCAGGGTTGTTGTAAAGATCATGGATAATGGATGCAAAGCCCCTACATTGGGCCTGGCATGTGGTGGGTACTCAAGAAGTCACAGCTATTATTAACAGCAACATCAGTAAAATCAAGACCATTTTCTGACTGTAGGTGGCTTGAGAGGACAGAACAACAGATAAGCAGTCACTTGAGTGGTAAGTAGTTCATTGACAGTACTGACAGTACACTCGTGCATTAGATACTGCTTTCTTAAAAACAATAACCTGTAAAAACTATTTGCAGTAACTATGTATTTTTAATTCATACGACACATATCATCTGCAGTGCTCATACCACATGGACCTCTTCACTACCTGAACATACCAGGCACTATCATGACCCCATGCCTTTGTGTACTTTGTCCCTTCTGAGATACTGAAAGGGGCCAGCCCCTCCACACCTGTGGGTATTTCTCGTCAGGTGGGACGAGACTGAGAAAAGAAATAAGACACAGAAACAAAGTATAGAGAAAGAACAGTGGGCCCAGGGGACCGGCACTCAGCATACGGAGGACCCGCACCAGCGCTAGCCTCTGAGTTACCTCAGTATTTACTGATCATTATTTTTACTATCTTAGCGAGGGGAGTGTAGCAGGGCAACAGGTGGGGAGAAGGTCAGCAGGGAAACGTGAGCAAAGGAATCTGTATCATGAATAAGTTCAAGGAAAGGTACTGTGCCTGGATGTGCACGCAGGCTAGATTTATGTTTCTCTTTACCCAAACAACTCAGTGTAGCAAAGAGTAACAGAGCAGTATTGCTGCCAGCATACTTCGCCTCCAGCCACAGGGTGGTTTTCTCCTATCTCAGAATAGAACGAATGGGAATGGTCAGCTTTACACAGAGACATTCCATTCCCAGGGATGAGCAGGAGACAGAAGCCTTCCTCTTATCTCAACTGCAAAGAGGCCCCCCTCTTTCACTACTCCTCCTCAGCACAGACACTTTACGGGTGTCGGGCTGGGGGGTGGTAAGGTCTTTCCTTTCCCACAAGGCCATATCTCAGGCTGTCTCAGTGGGGGGAAACCTTGGACAATACCCAGGCTTTCTTGGGCAGATGTCCCTGCGGCCTTCCGCAGTGCACTGTGTCCCTGGTTAATCGAGAATGGAGAATGGCGATGACTTTTACCAAGCATACTGCCTGCAAACATATTGTTAACAAGGTACATCCTGCACAGCCCTAAATCCATTAAACCTTGATTCATTACAGCACAGGTTTCTGTGAGCACAGGGTTGGGACTAAAGTTACAGGTTAACAGCATCTCAAAGCAGAAACAATTTTTCTTAGTACAGATCAAAATGGAGTTTCTTATGTCTTCCTTTTCTACATAGACACAGTAACAATCTGATCTCTCTCTCTCTTCCTCACAAGGTACCCTTCCTACTCTCTGGTCTGATGACAACCCTACAATTCTAGCTCAAAAGTCTGGCTCAAAAGACTAGCTCAATTCAAAATCTAGCTCAAAAGTCATTTCCACTATAGACTCTTCCCTGCCTGCTCGAGACAGAATTAGTAGCTCTGCCATTTGTACTTCTAAGACATTTGGTTTCTTTCACTGTAATGCCTCATACTCTATTGAATTCTTATTTCCCTTTCATTTCTGCTTCTTCCACTAGGCTTACGCATTGAGAGGAGGACTATATTCCTTTATTTTTGTACTTAGAGCACCTAGTACATCACTTGGCACGAGATAGGAATCTAGATGTTTGAGGAATCAATGTTATAATATACTTTGCAAATAACTGTTAGAGGCCAGGTAGCTGACTTTAGTGAACTATATTACCAGCAATCGCATTCCTTTTTCCTGCTTCAAACAAGAGACAAGATAACTTATATGGACTCCAGAATGTCTTCTGAAGATGGAGCATACAGAAGTCTCCAAACACTACTGATCTCATCAGTACCCCATGCCCACAAGTTGGAACCCCCAGAGCAACACTTCTCAGCCTTTGTTCCAGTCTAGCACACCTGAGGGATACACCACACTCCCATCAGGAGCTCACAACAGATGACTAAGAAGGCCCAGCAGAGTTTTCACAGCCTTCCAGTGCCACATGGCTACCAGGGTGGAAGGGCCTTCTCTGAACCAGCAACTCCCCCAAAGTAGCAGAAAATTTCAAGGCTCCATGGTGAGTGCCGGGAGCCCACCTAATGCTACCTACTACCAGATCCCTACCACCTACAATGCCTCAGAATCAGTTTGCCTACTCTAAGAACAGGGCTCTTTCACTGTTAGGAAGCCTCAGGCATTCAAGGAAGGACTTGTTTGTGGGTCCGGTACATCTGTTTCGGCATGTCTTAACCTGCATAACTAAAAAGCAATTATGAAAAGAAGTTCATGATCAACCAGTTCAGTGCCAGATGGAAATAGGTAGAGTGGGTCAGCTGGCAGCCCTGTACATCTGAGTGTTGACACTTGTGAATCATTCTCTGTCACTATAGTTTCCAGAGCCTTGCCAACGCAGCAGTGGGTTCAGACTTACCAAGATCCAAAAGGCTGGAAAGGGGATCTGGAGCCATGACCCATGCCTTGGGACCCACCAAACCATGACAGTGACTATTTCTATGACAAAGACATGCTCTTCAAAGTAAATATAGCCATATTCTGCCTTAGTGCCATGTTCTCTCCCATCTCTCCAAAGCAATGGCTGCACTCTGAAGGTGGGAAGAGTGTGAGAAGAAAGAGAACCAGGCCACAGACCACCAGGAAAGCAGTGATTGAAAGCAGCAGCTCTAGATTTATCTTATAGGCTCTGGAGAGTTATTCAGTTATTTACTCCACAAATATTTATTGAGCCAGGTACTATTCCAAGTATGCAGGCTACGATACTGACACAGTCACGGCCTTGACCCCATGGAGCTTAAAGTTTAGTGGGGGAGGCAGGTATTAATCAAATAAGCATCCAGACAGACACAAGGGTACAAATATGCACTATGATGGAGGAGTAGTAAATACTACAGGAACTGTAGAAACAGGGAGCAGTAAATCTGGTCAGGGAAGTCAGGAATGCTTCCCTTAGCAAGTGCCAAGTGAGGATAAATAGGAGTTCACTAGGTCTGGAGGAGAGGAAAAGAGAGGGAAACATTCCTGGTAAAGAGAACAGTGTGTGACAAGGTCCTGGGGTAGGAGGGAGATGTTGAATTGGTTCAAAAATAGAGGCAGGGAGCAAAGCAGTAGCATCAAGGTTTGAGTCCCCAGCATAAGGTAACTTCCTGTGTACACCCCTCAGTTTTCTTTCTCCTATAGAGAAGGCCTTCCTCAGCATGGAAGGAGACTAAAGCACACTGTCAAAAACTAGGAGTGCTCAGGAGAGGTGAAACACTACCAGCTAAAAAAACAAATCTGATTTACCAATAATACCTGGCCAATGTCCTCTTGAAATATCTGTAAAATTAAGGAACTCACTACCTCTGGCAACAATGAATCAGGAAAATGGCACAGTATAAAAGACCTTTAAACTTTTCAGGTAGAAATACATTTTAATGCAGGTAGAATTAAGAGATTGATGAATATGTTGAGAATTACTATAAATCTGCTTAGATACCAGGTATTTCACTGTAATTTCATATACTAATTTTTTTGGGGGGAAAAGGGCTAAAGGAAAAAACGGTTAAAGGTAGTATCAGTGCAGCACTATTTTGCTTTGGCAACTCTGTTAGCCTGTTTGATCACTTAAGGCAGTTTCTTGAGGCTTCTGAATTCTCTGTCACCTTGCAAACAAGTCACTGTAGCTTTCTATTTGTAAGGCACTTTGTAATCAATCCTTAATTGGCCTCCCTACCCCACTGAGAGATTATACTCATTCTACAGATAAAACAATAGATAAGTGAGTTGCCCAAGGGCACAAAACAATTCAGTTTTTACTTAACTTTCTTATCACCATCTCCAAATAGAAGACATACAGGGCTTGTCCAGCCACAGCACCAACCCTACTACCCTGCAGACCAATCTTAACCCCCTGATGCAGCAGAGGAAGGGACTGCAGTTAGTTCTGTTACCTCCTCTATGCCTTCGAAGCCAACAATGATAATGTCTGCACCGTGTTAGAGACACTGGCACTCCTAACCAGAACATGAACTCAAAGTGGAATAAGAGCACATACAAAGTCACAATGACTCACAAGTTAAAATGTCACCATCCCTAGGGAGACTGCACCCTCAACATACAAATACTCCCCTAAAACTTCCTTTCATCCTCAACAAGCAGCCAAGGCATAGGTCCCCAGAGTTGGCCCCCCCGCAGTACAGCACTGCACAGTACTGTAAGGCATCTTAAGTGTACAAGCCCTTCTTCACCCCATGCTGAGACCGCCAGCATCTAAAGCACCTAGCATAGGTTACAGCACACAAATATTTACTGAGCACGTCTTCCCAACTGGCAAATAAGGGAAACGGATACTCCTTTCGGAGAGTAGTGCATTTAAGAGATCAGTTAGGCCAACTCCTCATTTTACAGAAGGGCCAAAGAAGGGCAGAGAATCACCCAGTTACATATGGCCTCGTCTCCAATCCAAGTCTTTGGGCTCAGTTTAGTTCCACAAACATTTTATATGTGCCTACTATGTGCCAGATACGGTGGGTGGGAGGCGCTGGGGACACTGAGATGAGCAGGAGATGGTCTCAGCTTCAGGGAGCTCACAGCCTGGGGTAAAGAACAGTTACAAAACAGTCGGGCAAGTGCAAGGACAGGCGCTTGAGTGCTTAGCCAGTGTTTTCTCCACACTGTCCACTGGGTGTTCCCCATCTGGAAAAGAAGGACAGCAATATCTACTTCCTGCAAATAAACTTGTAGTGAAGACTGATGAGAAAATGAGTATGGAAAATGATCAGGCTCACCCAGAAATGCATTATATAAGGTATTGCCATACCCCGACACTGACTCCAAGGATTCAACAGTGTTTCAGGTATCCGTTCAACAAAGAAGCAAACAAGAGAGGGATGGGCATAAACCCAAGGAAAACCCCAAGGACTGCGAGGAACTGGAGGAAACAGCTGGGGTGGGGGTAGGGGTGTTGGGTCGAGTGAGACGGCCCTGACGCGGAGAATGGAGGGCCCGCAGCGGCGCAGAAGAGGATGGAACCGAGACGAAGAAGTTGGGACACCAATGAGGGACAGCAAGCAGAAAAGAATGGGGTTCCCTTGGGGCAGGACGGGGCTCGCGGCCGGGCCCTTCCGGCCGTGGCCGGGCAGGGGCTGAAAGCACCGGGCACGGGAGGAGGAAGCGGGCGGGCGCCGAGGCCGACTGTTTTGCCTGGGGACCGCTTGCACCCGCAGGGAGGCTCGGGCAGGCGCCCGGGTCCTCGGGCTGCAGCATCTCGCCCGCCGTGCCTCCCCGGAGCCGAACACCAGCCCGCGCCCGAGCCCGCAGCGCGGACTCCCGGGGGCGCCAACGACGCCGCCTCACCTCGGGTTGAAGTCCTGGAAGAGGCCCCTCAGGTTCATGGCGGAGAACTTCACCGCGGCGTCCTCCTCCTCCTCCCCCGCACCCCGTGCTGCACAGCCTGCGCCTTACAGCGGGTTCATGGCGCCAGCGCCAGCCGCGTCCACGCTGCTGCTCCCGCTACTGCTGCCGTCCCCGCTGCCGTCGCCGTCGCCGTCGCCGCCGCCGCCGCCGCCCGGAGAAACCTGAGCCACCGCCCCCTGCCCCTCCTTCCGGGCTTCCGTACGAGGGCCGCGCATGCGTCCGGAGCCCCGCCCAGAGCGCTCCTCGCTGGGAGGTCCCCATCCTTGTGTCCGCACGCGACCGG", + 148678216 - 1); var codingRegion = new CodingRegion(148679671, 148713263, 333, 1385, 1053); var regions = new ITranscriptRegion[] { - new TranscriptRegion(TranscriptRegionType.Exon, 7, 148678216,148679915, 1141, 2840), - new TranscriptRegion(TranscriptRegionType.Intron, 6, 148679916,148681217, 1140, 1141), - new TranscriptRegion(TranscriptRegionType.Exon, 6, 148681218,148681341, 1017, 1140), - new TranscriptRegion(TranscriptRegionType.Intron, 5, 148681342,148681966, 1016, 1017), - new TranscriptRegion(TranscriptRegionType.Exon, 5, 148681967,148682143, 840, 1016), - new TranscriptRegion(TranscriptRegionType.Intron, 4, 148682144,148685652, 839, 840), - new TranscriptRegion(TranscriptRegionType.Exon, 4, 148685653,148685736, 756, 839), - new TranscriptRegion(TranscriptRegionType.Intron, 3, 148685737,148690313, 755, 756), - new TranscriptRegion(TranscriptRegionType.Exon, 3, 148690314,148690521, 548, 755), - new TranscriptRegion(TranscriptRegionType.Intron, 2, 148690522,148692969, 547, 548), - new TranscriptRegion(TranscriptRegionType.Exon, 2, 148692970,148693146, 371, 547), - new TranscriptRegion(TranscriptRegionType.Intron, 1, 148693147,148713225, 370, 371), - new TranscriptRegion(TranscriptRegionType.Exon, 1, 148713226,148713418, 178, 370), - new TranscriptRegion(TranscriptRegionType.Exon, 1, 148713419,148713568, 1, 150) + new TranscriptRegion(TranscriptRegionType.Exon, 7, 148678216, 148679915, 1141, 2840), + new TranscriptRegion(TranscriptRegionType.Intron, 6, 148679916, 148681217, 1140, 1141), + new TranscriptRegion(TranscriptRegionType.Exon, 6, 148681218, 148681341, 1017, 1140), + new TranscriptRegion(TranscriptRegionType.Intron, 5, 148681342, 148681966, 1016, 1017), + new TranscriptRegion(TranscriptRegionType.Exon, 5, 148681967, 148682143, 840, 1016), + new TranscriptRegion(TranscriptRegionType.Intron, 4, 148682144, 148685652, 839, 840), + new TranscriptRegion(TranscriptRegionType.Exon, 4, 148685653, 148685736, 756, 839), + new TranscriptRegion(TranscriptRegionType.Intron, 3, 148685737, 148690313, 755, 756), + new TranscriptRegion(TranscriptRegionType.Exon, 3, 148690314, 148690521, 548, 755), + new TranscriptRegion(TranscriptRegionType.Intron, 2, 148690522, 148692969, 547, 548), + new TranscriptRegion(TranscriptRegionType.Exon, 2, 148692970, 148693146, 371, 547), + new TranscriptRegion(TranscriptRegionType.Intron, 1, 148693147, 148713225, 370, 371), + new TranscriptRegion(TranscriptRegionType.Exon, 1, 148713226, 148713418, 178, 370), + new TranscriptRegion(TranscriptRegionType.Exon, 1, 148713419, 148713568, 1, 150) }; var rnaEdits = new IRnaEdit[] @@ -398,10 +438,10 @@ public void RnaEdits_big_insertions_reverse() new RnaEdit(2814, 2813, "AAAAAAAAAAAAAAAAAAAAAAAAAAAAA"), new RnaEdit(2227, 2227, "C"), new RnaEdit(1032, 1032, "T"), - new RnaEdit(917, 917, "G"), - new RnaEdit(151, 150, "GCGGCGGCGGCGGCGGCGGCGGCGGCG") - + new RnaEdit(917, 917, "G"), + new RnaEdit(151, 150, "GCGGCGGCGGCGGCGGCGGCGGCGGCG") }; + const byte startExonPhase = 0; var codingSequence = new CodingSequence(genomicSeq, codingRegion, regions, true, startExonPhase, rnaEdits); @@ -409,75 +449,77 @@ public void RnaEdits_big_insertions_reverse() const string expectedCodingSeq = "ATGAACCTGAGGGGCCTCTTCCAGGACTTCAACCCGAGTAAATTCCTCATCTATGCCTGTCTGCTGCTGTTCTCTGTGCTGCTGGCCCTTCGTTTGGATGGCATCATACAGTGGAGTTACTGGGCTGTCTTTGCTCCAATATGGCTGTGGAAGTTAATGGTCATTGTTGGAGCCTCAGTTGGAACTGGAGTCTGGGCACGAAATCCTCAATATCGAGCAGAAGGAGAAACGTGTGTGGAGTTTAAAGCCATGTTGATTGCAGTGGGCATCCACTTGCTCTTGTTGATGTTTGAAGTTCTGGTCTGTGACAGAATCGAGAGAGGAAGCCATTTCTGGCTCCTGGTCTTCATGCCGCTGTTCTTTGTTTCCCCGGTGTCTGTTGCAGCTTGCGTTTGGGGCTTTCGACATGACAGGTCACTAGAGTTAGAAATCCTGTGTTCTGTCAACATTCTCCAGTTTATATTCATTGCCTTAAGACTGGACAAGATCATCCACTGGCCCTGGCTTGTTGTGTGTGTCCCGCTGTGGATTCTCATGTCCTTTCTGTGCCTGGTGGTCCTCTACTACATTGTGTGGTCCGTCTTGTTCTTGCGCTCTATGGATGTGATTGCGGAGCAGCGCAGGACACACATAACCATGGCCCTGAGCTGGATGACCATCGTCGTGCCCCTTCTTACATTTGAGATTCTGCTGGTTCACAAACTGGATGGCCACAACGCCTTCTCCTGCATCCCGATCTTTGTCCCCCTTTGGCTCTCGTTGATCACGCTGATGGCAACCACATTTGGACAGAAGGGAGGAAACCACTGGTGGTTTGGTATCCGCAAAGATTTCTGTCAGTTTCTGCTTGAAATCTTCCCATTTCTACGAGAATATGGAAACATTTCCTATGATCTCCATCACGAAGATAATGAAGAAACCGAAGAGACCCCAGTTCCGGAGCCCCCTAAAATCGCACCCATGTTTCGAAAGAAGGCCAGGGTGGTCATTACCCAGAGCCCTGGGAAGTATGTGCTCCCACCTCCCAAATTAAATATCGAAATGCCAGATTAG"; Assert.Equal(expectedCodingSeq, codingSequence.GetCodingSequence()); - } + //NM_017940.4 [Fact] public void RnaEdits_big_test_reverse() { //Transcript id:NM_017940.4, chrom: chr1: 16888922 - 16940100 - var genomicSeq = new SimpleSequence("TGATAGGCAAAAGCTTTTAATTGTATAGATTAAAATAACTTTGGACAAAAATTAAAACTCAGGCAGAGAATGTTTTTTTTTTCAACAACACACACTAGCAAAAACAAAGGCACAGTAAACATTGAGGCAGAAAGTTTCCAGCGTAGAGATATGAATATAATAATAGACACAGGCAGGGATGATTAATAAATGATAAAATGTTTACAGGATGATCATTGGAATACAGGACATTTCTAATTTTGAAAACCACCCTCCCAAATACTTCATTATAAGTAAGGTGTCTCTAAAAGGGACAGATCTCCTAGACCCCTCCTTAACCAAGTAACCAGTCCTGATATCATGATAATGCTGATGGACAAACTAGACCTTCTCTGCCCGCAGATGGGCTAAGGTTGGAAACTCACAGCATTGTCTCTGCAGTGTTCCCGGCAAAACGTTTAGGCTGAATTTAATCATGAAGACATTTTCAGACAACTTCAGAATGTAGATCATTGAGCCAGAGAGCTGACCTGTCCTCTATAAACAAGTCCATGTCACCACCATCAATGACAACAACAAAAAGATGAGGAAATATTTGGGGTTCAAAATAACTAAAGAAATGCAGCTATATTATCTTTTTACTTTTTTTGAACCCAAAATATCTCTTCTCCTTTTTGTTGTGTGATTTGTGGTGATATGGACTATGTGAAGGAGACAGGTCAGTTGTCCTGCTCAGTGTTCTACATTCTGCAGTTGTCTGGTAATTACCTCCTATGAAACTCAGGCTAAGCGTTTTCTGCAAGAACATGGCGTTGTTCATATTCTGCACCGGCAGAGTCCTGGGTGACATGCTGTCTCCTGCCAGCGGCTCCTGACTCCTGTTCTCTACAGGATGGAATCGAGAGGAGCAGGGCTAAGGCCTCCCAATGCTGTTTGTCCATCTAGCTGTGGTCTTCCTAAGTACTGACACCAATTGGAGGCTGAAGGACTGTGGCTTCTCTAACCAAAGGAGCCTAGCGGGTTAACAATTGTCAAGAGCAGTTGGTGGTTCTGAAATACAATCCTCAGCCAAGGATCCCTCCTGTGTTAAAGATGGATCAGCTAAAACAATTCAACACTGAAGATACAAAGAATGAGGTTAGGTTCATTGAAACCAGGGTAACACCTTTGGATGAGCTAAACACAAAGATGACACTGACCTTGAGCAGGTATAGAAGCTCAGAGACATGACTGCAAAATGAAATCCCTGAGGAACTTTGTAGCTACCCAGAGATAAGTGGTTCAAATTAAAATGTCTGACTGATCACTCCCGGCATGTGCTGCACAGTTATGTGAACGTGTCACACCTAACTTGGGTCCATTGTCTTCAGACTGAGCACAGGGTGCCACTGGCATGGTCTGAGAATAGGAATAGAGCCATGCCCACTGACCCATCCTATGTCTGGGCTTCCAAATGGAACTATAGTTTCATTCAAATCTTCACGTGCCTATAGGTCCTGCCTGCAGGAATGACATCTCTCGGCTTAGTAAGGGCTGCTTACTGTGGGAATATGACTCCCATCTGGAAGACCAGGTGGAGACTTGTTCCCATCAAAGTAAGAAACCTATTGTCCACGTCAAGGGCGAAGCTGATGTGCTGTTCCTCAAATGAGTAAAACACACTTCTGTAGTGCTGGAATGAGTCAGGTAGTTCAAAGTACATTGACGGAGTCGAATAACATCTATCCAGTGAGTCCTGCAAGACTTCAGGCTCTTCCACTTCCATCAGCATGCCGCTGAGCCTGGAAAAGCAGACAAAACTAAAGAAGCAGCCAGGGAAAATCAGACACCACAGAGCCCCACTAGATTTCAGAAGTAACGTAAGGAAGTGGTAAGAAAAGAAAAGGATAGATCCATTAGATCCATTAATGAGGTAAAAAAAAAAAATTATTGCCTTTATGTTGGGATAGAAAAGGGCCAGGTAGAAAACAATGAAAGAGAAAGACAGAGAGACAGAGACAGAGACAGAGACAGAGAGAAAGTGAGCTAGTGAATTGGCCAGGTGACATACTGGTAAGGGAGTAAAAGGACACTCTGAGTTAGTGCCCTCATGACACACAGCACACTGCGATCATGAAAAGAGTGAGCTCAATAGTTTTCCATAAAATATGCTCAAAATTCGATGCAGTGGCCATGAGAGTACAGCTTTTGAAGTATGGTCATCCTATGGTACGTTAGTAAATGATAAGGGGAGGAAGAAATGGAAACCTAAACATCTACTGCAATGAAAACCAACAGCAATGACAGTAGGAGTAATTCAGCCTTCGTTGAAAACATGAAATCAAACACACTCTGGTTTCCCTCAATCTGTTGCCTCCAGGTGTTAACACAGAATTAAGCATCCACAATTGCTGAAAGTTACCTGGGGCATGGTGGGTTTTGATCTTCTTCCCCTTCTTTTCTTCCCCTTCTCCTTCTTTTCTTCGTTGATCTTCTTCCCCTTCTTTTCTTCCCCTTCCCCTTCTTTTCAATTTCTGCAATAAATTCAGACATGGACAGACACATTAAGCTGATTCCCCTACACACATAACAATCCACTGTCTAACCCTCACACAGGGACCTCAGGCTCCTCAGCATAAGAATAGGAGACTGTGAGAGATATATTTCAGGAGGCCTGAAGGCTGGTCATGATAGAAATTCCTCGGTTTTTCTCCCAGAAACTGTGGGTAAAATGTCCCTATTCTAGTAGATCGTTATCCCAATATCATTTGTCCCGAGTTTGTGCAAACAGTTATGCCATATTTTTCCAATCAATTTAAAGCAAATACCCTCAAATGATTTCTAGGAGAAAAACTGCAATATTTAGCCCTGTCTCATCAAATACTCAGATTGTTCATGGTTGTGAGGACTTTAGACACTGAAATTAGAGTGAAAAAGGAAATCTACAAACCCTTGAGTCAAAATCATAGTTCTCTGAATTTGTCACATCTGCCCAGGTCCAATGTCATGAGAGTAGAATCAGAGTGCCACAGGCATGGCCTGAGACTAGGAAGAGAGCCATGCTCACTGACCCATCCCATGTCTGGGCTTCCAGTTAGAACTAGAGTTTCATTCAACCTACATGTGCCTATAGGTCCTCACTGCAGCAATGACATCTCTCAGCTCAGTAATGGCCACTTGGAGCAGGAATATGATCTTTATATGGAAGACTCAGTGGATCCTTATCACCTTCATAGAAAGGTACTCACCTCCCACGTCAAGAGAAAAGCCAACATGTTTTTCCTCCAATGCATAAAAGGAACTTCCATAGGGCAGGCAGGAGTCAGGCTGTTCAAGACAACTGGAAGGAGTTGAATAACATCTATCCAGTGAGTCCTGCAAGACTTCAGGCTCTACTGCCTCCAGCAGCTCCCTGCTGAGCCTGGAAAAGTAGGAAAAAGTAAAGAATAAGCCAGGGGGAATCAGAAACCACACAGCCCCAGCTACATTTCATGGCTAACATAAGGAACTGTTTAAACAGAAAAAGGACAGATCCATTAATGAGGTAATGAATTATTGCCTTTATGTTGGGATAGACCAGGGCCAGGTAGAAAAGAATGAAAGAGAAAGACAGGGAGAGGGAGAGGGAGAGAGAGACAGAGGAGAAAGTGAGCTCAGCGAATTGGCCGGGTGACACACTGACGAAGGGGTCAAAGGACACTCTGAGTTAGTGCCCTCGGGACACACAGAGAACAGTGATCATGAAAAGAGTGGGCTCAATAATTTTCCATAAACTTGCTTAAGATTCCATGCAGTTGCCATACAGCCTTTGAGGTATGGTCAACCTACAGTAAGTTAGTAAATGATAAGGGGAGGAAGAAATGGAAACCTAAACATCTACTGCAAGGAAAACCAACAGCAATGTCAGTAGGAGTAATTCAACCTTCGTTGAAAACATGAAATTGAACATACTCTTGTTTTCCCTGGACCTGGCATCTCCAGGTGTCAACACAGAATTAAGCATCCATAATTGCTCAAAGTTACCTGGGGCATGATGGGTCTTGGTCTTCTTCCACTTCTTGGTACTTTTCAATTTCTGCAATAAGTTCAGACATGGACAGACATATTAAGCTGGTTCTCCTACACACATAACAATCCACTGTCTAATCCTCACGCAGGGACTTCAGGCTCCTCAGCATGAGAATAGGACACTGTGAGAGATCTTCTTCAGGAGGCCTGAAGGCTGATCATGATAGAGATTCCTGGGTTTTTGTCCCAGAAACTGTGGGTAAAATTCCCTATTCTGGTAGATCGTTATCCCAAGATCATTTGTCCCAAGTTTGTGCAAATGGTTATGCCATATTTTTCCAATCGATTTAAAGCAAATGCCCCCAAATGGTTGCTGGGAGAAAAACTGCAATATTCAGCCCTGTCTCATCAAATACTCAGATTCTTCATGGTAGCGAGGATTTTAGATGCTGAAATTAGAGTGAAGGATGAAATCTACAAGATCTACAAAATTGAGACAAAATCAGAGTTGTGTGAATTTGTCACATCTGCCCAGATCCAACATCTTGAGAGTGGGATTAGGGTGCCACAGGCATGGCCTGAGACTAGGAAGAGAGCCCTGCTCACTGACCCATCCCTTGCCTGGGCTTCCAAGTGGAACTAGAGTTTCATTCAACCTACATGTGCCTATAGGTCCTCCCTGTGGCAATGACATCTCTCAGCTCAGTAAGGGCCATTTGCAGTAGGAATATGACCCTAACCAGAAGACTCAGTGGATCCTTATCACCTTCATAGAAAGGTACTCACCATCCATGTCAAGAGCCCAGCCAACACGCTGTTGCTCCAATATGTAAAAGGCACTTCTGTAGGGCTGGCATGAGTCAGTCAGTTCAAGATAACCTGAAGGAGTTGAATAACATCTATCCAGTGAGTCCTGCAAGACTTCAGGCCCTTTCTCATCCAGCAGCTCCCTGCTGAGCCTGGAACAGTGGGAAAAAGTAAAGAATAAGCCAGGGGGAATCAGAAACCACACAGCCCCAGCTAGATTTCATGGCTAACATAAGGAAGAGTTTGAAAAGAAAAAGGACAGATCCATTAATGAGGTAACAAATTATTGCCTTTATATTGGGATAGACTAGGGCCAGGTAGAAAAGGATGAAAGAGAAAGACACACACACACACACACACACACACACACACACACACACACACACAGAGTGAGCTCAGTGAATTGGCCAGGTGACACACTGATGAGGGAGTCAACGGTCATTCTCTATTTGTGCTCTCAGGACACACAGTGAACAGTGATCATGAAAAGCATGGCCTCAATAATTTTGCATAAAATGTGCTCAAGTTTCCCTGCAGCCACCATGAGAATACAGCTTTTGAGGTATGGTCAACCTTCACTAGGTTAGTAAATGATAAGGGTAGGAAGAAATGGAAACCTAAACATTTACTCTAATGAGAACCAAAAAGCAATGTAGTAGGCATAATTTAGACTTGTCTGACAAGACAAAATCATTATTTTCAGCATGTACTGTTTTCCCTGGACTTGGCATCTCCAGGTGTCAACATCAAATTAACTGTCCACAATTTCTCAGACTCACCTGGGACCTGTTGCCTCTTGGTCCTCCTTTTTCACTTGATCCCACCGATGTCCTGCAAATAAATTCAGATGGGGCCTCTTACATTAAGCAGTTCTTCCTTGCACACAGAAACATTCCTCTGTCCAATCCTAACACAGGTACATCAGTCTGGTCAGTGTGAGAACAGGAGACTTTGAGAGAAATATTCCAGCAGGCCTGAGGTCAAGTCTTGAGAAAACTGGCTTGGGTTCTTTCATGAGCCTTGGGCAAAATTACCCTGTTTTGGAATGTTATCTTCCCTATGTGCTCTGTCCTAGGTTTGTGTACACAAATGAGCAACTTTTTCCCCAATAAATTGTAGGCAAATAGTTCTAACACCTCATAGGAGAGATACTTCAATATTAAGCTTTCTCTCATCAAATACCCAGAATTTGATAGTTTATGAGATTGTGGACACAGAGATTTGATGAAGGGGTGCAATGTACCAGCTCTTGAGTCAAAATGAAACTTGGTTCTACACAGAAGCATCAGCTATTATGGCTTTTGTGGGTGAAAAGTCAGCCATTTATCTAGAAAACATACCAGGAACATGACGGACAGATGAGCTAAAGCAAGCGAACTTAGAAGACACAGAAAATGGGAATAAATTCAGTGAAACCTGGGCCACATCTTTCACTGAGAGGTAGACAAGGGTGACACTTGCCTTGGGCAGGTAAAGAACCACACAGACATGCTTTGGGAACAAAACTCATAAGGAATTTTGTAGCTGGCAAGAGACATTTAATTCAGATGAGCTGATCTGACAGACAACTCCTGGTCATGTGCTGCATAGTTTGGTGTGAGCTTGCCACACCTGCCTTGAGTTCAATGTCGTGACAGTCAGTCCAGGTTGGCACGGGCATGGCCTGAGACTAGGAAGAGAGCAAAGCTCACTCACCCACCCCATGCCTGTGCTTCAGACTCGACTCCAGAGTGATTGAAATCTACATTGATATATAGGTTCAGCCCACAGTGATGGCAAATCTCAGCCCAACAAGGGGCACAAGGCCCAAAGATTATGGGGTCTACCTGGGCCATGAACTGGAGCTTTATCACCTTCACAATGGAGTACTCACCGCCTATGTCAACAGCCATGCAGACTTGCTGTTCCTCTAATGAGTGAAATGTGCCGCTGTAAGACTTGTACGAGGCCAACATTTCAGGAGGAATTGAGAGAGTCGAATAACCTTCATCCCAGGACTCCTGGGGGACTTCCTCCTCTTCAGACTCCTGCAGATTCCTGATGAGCCAGGCAGGACAGGGATGATAGAAGATTTAACCAACAGACATTAGACAACAAAACCTCCCAGATGATCTGATGGGAGACAGAATGGAGTGGTCACAGAAACCAAAGGCATTTTTCCTTCAAGAGAAATAAAACTAGCCTTCTAAATACAGGGTGGAGGGTGACTGCTCTGGGGACAGAGCAAAAATGGGCAGCATGTGCTCAGTACATTTGCCACAGATGAGCCAACTCAGGGCACCCAGACTCTCCCTGTAAACTACCATCATGACTTGCAGCACAGAGAACTGACACAGGGCTTCAACTACTTTGCATAAATTGGGTTGAATTTTACATGCAGCATTCAAGTGAAGAGAGTTCTTGACACAGTGCAGACACAGATCTTGTGTATTAAGGGCCCCATTTTCCCAATATTTTGATATAATATATTTACCTTTTCAATTTCTTTTCTTGCAAAAATACTAGCCAACATACTACCAACAGATAGGAAGAAAGCATATATACATCTCTCCCTGGATTTAAACACATGGGAGAGAATAGGCAACACCAAGAAATCCCTGTTTGAGGGTCTGGAGTGGACTTCCAGCAAACTCCAACAGACCTGAAGCTGAGGGACCTGATTGTTAGAAGGAAAACTAACACACAGAAAGGAATAGCATCAACATCAACAAAAAAGACATCCATCCCAAAACCCCATCTGTAGGTCGCCATCATCAAAGACCAAGGGTAGATAAAACCACAAAGGTGGGGAGAAACCAGAGCACAAAAGCTGAAAATTCCAAAAACCTGACATCCCTTCTCCTCCAAAGGATCACAGCTCCTCGCCAGCAATGGAACAAAGCAGGATGGAGAATGACTTTGATGAGCTGACAGAAGTAGGCTTCAGAAAGTCGGTAATAACAAACTTCTCTGAGCTAAAGGAGGATGTGCGAACTCATCGCAAGGAAGCTAAAAACCTTGAAAAAAGATTAGACGAATGGCCAACCAGAATGAACAGTGTAGAGAAGACCTTAAATGACCTGATGGAGCTGAAAACCATGGCACGAGAACTACGTGATGCATGCACAAGCTTCAGTAGTCAATTCGATCAAGTGCAAGAAACGGTATCAGTGATTCAAGATCAAATTAGTGAAATGAAGCGAGAAGAGAAGTTTAGAGAAAAAAGAGTAAAAAGAAATGAACAAGCCTCCAATAAATATGGGACTATGTGGAAAGACCAAATCTACGTTTGATTGGTGCACTGAAAGTGACGGGGAGAATGGAACCAAGCTGGGAAACATTCTTCAGGATATTATCCAGGAGGACTTCCCCAACCTAGCAAGGAAGGCCAACATTCAAATTCAGGAAACACAGAGAACACCATAAAGATACTCCTCGAGAAGAGCAACCCCAAAACACATAATTGTCAGATTCACCAAGGTTGAAATGAAGGAAAAAATGCTAAGTGCAGCCAGAGAGAAAGGTCGGATTACCCACAAAGGGAAGCCCATCAGACTAGCAGCAGATCTCTTGGCACAAACCCTACAAGCCAGAAGAGAGTGGGAGCAATATTCAACATTCTTTTTTTTTTCCATATGTATAGTTTTCCTTTATTATTTTTTGTGTGTATGTATATATATGTATATATATTTTTCAATACTTTAAGTCTTAGGGTACATGTGCACAACGTGCAGGTTAGTTACATATGTATACATGTCCACATTGGTGTGCTTCACCCATTAACTCATCATTTAACATTAGGTATATCTCCTAATGCTACCCCTCCTCCCTCCCCCCACCCTACAACAGGCCCCAGTGTGTGATGTTCCCCTTCCTGTGTCCATGTGTTCTCATTGTTCAATTCCCACCTGTGAGTAAGAACATGCGGTATTTCGTTTTTTGTCCTTGCGATAGTTTGCTGAGAATGATGGTTTCCAGCTTCATCCATGCCCCTACAAAGGACATGAACTCATCATTTTTTATAGCTGCATAGTATTCCATGTTGTATATGTGCCACATTTTCTTAATCCAGTCTATCATTGCTGGATATTTGGCTTGGTTCCAAGTCTTTGCTATTGTGAATAGTGCCACAATAAACATATGTGTGCATGTGTCTTTACAACAGCATGATTTATAATCCTTTGGGTATACACCCAGTAATGGGATGGCTGGGTCAAATGGTATTTCTAGTTCTAGATCCCTGAGGAATTGCCACACTGTCTTCCACAATCGTTGAACTAGTTTACACTCCCACCAACAGTGTAAAAGTGTTCCTATTTCTCCACATCCTCTCCAGCATCTTCAACATTCTTAAAGAAAAGAATTTTCAACCCAGAATTTCATATCCAGCCAAACAAAGCTTCATAAGTGAAGGAGAAATAAATCCTTTACAGAGAAGCAAATGCTGAGAGATTTTGTCACCACCAGGCCTGCCTTACAAGAGCTCCTAAAGGAAGCACTAAACATGGAAAGGAACAACCGGTACCAGCCACTGCAAAAACATGCCAAACTGTAAAGACCATTGACGCTAGGAAGAAACTGCATCAACTAACGGGCGAAATAACCAGCTAACATCATAACGACAGGCTCAAATTCACACATAACAATATTAACCTTAAATGTAAATGGGCTAAATGCCCCAGTTAAAAAACACAGAATGGCAAATTGGACAAAGAGTCAAGACCCATCAGTGTGCTGTACTCAGGAAACCCATCTCACATGCAGAGACACACATAGGCTCAAAATAAAGGGATGGAGGAAGATCTACCAAGCAAATGGAAAGCAAAAAAATGCAGGGGTTGCAATCCTAGTCTCTGATAAAACAGACTTTAAACCAACAAAGATCAAAAGAGACAAAGAAGGCCACTACATAATGGTAAAGGGATCAATTCAACAAGAAGAGTTAACTATCCTAAATATATATGCACCCTATACGGGAGCACCCAGATTCATAAAGCAAGTCCTGAGAGACCTACAAAGAGATTTAGACTCCACACAATCATAATGGGAGACTTTAACACCCCACTGTCAATATTAGACAGATCAATGAGACAGAAGCTTTACAAGGATATCCAGGACTTGAACTCAGCTCTCCACCAAGCAGACCTAAAAGACATCTACAGAACTCTCCACCCCAAATCAACAGAATATACATTCTTCTCAGCACCACATCACACTTATTCCAAAATTGACCACATAGTTGGAGGTAAAGCACTCGTCAGCAAATGTAAAAGAATGGAAACCACAACAAACTGTCAGACCACAGTGCAATCAAATTAGAACTCAGGATTAAGAAACTCACTCAAAACCGCACAACTACATGGAAACTGAACAACCTGCTCCTGAATGACTACTGGGAAAATAACAAAATGAAGGCAGAAATAAAGATGTTCTTTGAAACCAATGAGAACAAAGACACAACATACCAGAATCTCTGGGACACATTTAAAGCAATGTGTAGAGGGAAAATTATAGCACTAAATGCCCACAAGAGAAAGCAGAAAAGATCTAAAATTGACACCCTAACATCACAATTAAAATAACTAGAGAAGCAAAGCAAACAAATTCAAAAGCTAGCAGAAGACAAGAAGTAACTAAGATCAGAGCAGAACTAAAGGAGATAGACACACAAAAAACCCTTCAAAAAATCAATGAATCCAGGGCTGGTTTTTTGAAAAGATCAACAAGAAAACCCTGTTTGGCTAGTTCACCTGGCTCATCTGATGGCAAGTTCCTATCTTGAGAGGACTATGAAATTAAAACCAATACAAGTGCCACAAATAACATACAACATTGTAAATCAGCACAATTTGTAGCTGGGTGAATGGAAGAAATAGTTCTATTCATCACTTCCTCATTTTCCCTAAATCTACAATCTCCAGATGTCACTACTGAATTAACAGCCAACAATTCCACAACATTACCTGGGAGACACTGGCCCTTTTTCTTCCTCTTCCTCATCATCACTTTCATTTTCTGTAAATAAATTCAGAGAAGCAGGTCACATTAAGCAATTCATACTTCACATATGACCAAATCACTGTCCAGTCATAGCACAAGGACATAACTATTCTCAGTGCAAGAATAAGGATTCTGACAGGAATATTCTAGGGTGCCCTAGATTAACTTTGGTGAGAATTAGATGACCCTGCTTTCCAGACCCACAGGCCAAAATCTCCCTCTACGTGTAGACCATAATGCCATATTCCCTGCCTGAGTCAAAGTTAAACAAAATTTTTTCCCCAAAAAAATCTCCAAAAATTGGTCCATTTTCTAAGAGTGTTGCTGCAATACGGACTTATATCACCAGATAACATGGACATTAAATGTTTAGAGGCATCTATACATGAAACACACATGATAGATAAATTTGAACAACTCTTGCTTTAAAAAGAATCTGTGATTTGGGAGGCCAAGACAGGTGAATCATTTGAGGTCATGAGTTCAGGACTACCCTGGCCAATATGGGGAAACCCTGTCTCTACTAAAAATACAAAAATTAGCCAGATGTGATGTTGTGCACCTGTGGTCCCAGCAACTCAGGAGGCTGAGGCAGGAGAATCACTTGAATCTGGGAGGCAGAGGTTGCACCAAGCCAAGATGGTGCAACTGCACTCTAGCCTGGGTGACAGAGCAAGACTCCATCGCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATCCACGATGCTACAAAGAAACATTGGATCAGCCATTGCATTGACAGGGTGGAGAACCAGGGTCCAGCCTTGCTTTATGGAAATATATCAGCAAAGTAAAGAAGAAAAGTTTCCGTCCTGATTTCAGGGTGACTGTGCAGCTAAGCAAGCTGACTTAAAGGAGATCCGGATGAAAGCTGAGAGCAGTGAAGCCTGGGGAACAATATTTCCAAATACAAAGGCAAGGCTGCCAGCTTCCTGAAACAGGCATAGAAACTCCATGGACATTGTTCAGGGACAGATGACTTAATCACAGATGACAAGAGATACTGAATCGAAGCTAGGAGGCCTGACAGATACTGCCTGTGCACCTCCTGCACTCAGGTGACTATGAGATTGTCACACTTGCCTGGGGTCGAGTAACTTGATACTGGGGACTGGCAGACAAAGGCATGACATTAGCTGAGAAGGACAAAAAAACTCCCTGATATCTGTTTAGAAACCCATCATAGTTTTTTATTCAAATGAATTTGTGTTTATAGAGCCTGTCTTCAGAGTTTATCTTCCTCAGCCTAGAGAGAGGTATGAGACACAAGGAAAACAGAGGCTACCTGGGATAATGTGTACAGCATCCTCCCATTCAACATGAGAGGATGAGCCAATGAGAGTTGAGTCGACTTTGTCTTCCTCAAATGTGATTTTGGTTTTCCTATGTGGCTGGTTGGAGTCATAAGGGCCATGGCTATTTGAACAAGTGATGGCACATTCCTCCAGTGAGTCCTCAGGGACTTCCTTTTCTTCAGCCTTCGGCATCTCCCTGATGAGCCAGGTGGGACAGAGATGACAGAAGATTAAACACAGAGGGATTGGACCCCAGGGAGTCCTAGCTGGTTTTGACAGGCGGCATTAAGAGAGTGGTCCCAGAAAGCAAAATGGAGGTTCCCTTTAAGGGGGAACATGCAATCCTGTTCTCTCTGCAACAGAGCATGGCTGCCATGGGAACCAGAGAGGAAGAGAGCAGCTGGTGTTCATTGCAGTGGACAGATAGGAGCTGAGGAGGATGAAGACTCAGCTATCCCTGTATGGTGCAGACATGACACTCGGCACACATAGAGAAACATGACAGCTGCCGCACCCTGTGTCTAAGCTGGGTTATATTTCACATACTGTGGCCAAGCAAATGCGGGTTTTTGGCCCATCATAGATGCCAGAGAGGGTGTACCTCCTAGATATTCTTCATATGTTACCATCCATTACTTGTTCCTGAGTATTCAGTGTTACCTGGGGGCAGACGATTTCTGCACTTTCTCAGCCACCTCAACTTGAACATCTTCATCGTCATCGTTGTCATTTTCTGTAAATACAGAAGTGTTCGTTCAGATATTTCCCACTTCACAGTCTGCAAGCACAGTCAGCCCAATGTGCAACAGAGACATGAACATCTAGGCATGGGTCACCGTTCAACTGAAAACTCTCATGTTTTATCTTTAACAGAATGCCCTGGCATGGTTTCCTGATCCATCAGGCAATGCATTTCTGATCTGGAGGGCCACCATCAAGATGTGGCCAAATATTGAAAAGACCTTTTGCTTCCCATATCACTGGAGGCTTGTGCAGCCTCTCTCTGGACTTTGGCAGCTGTCGCCCCCATCCTGCCAGATCTGATTCCCAGGCACAGGCTTGGTGTCCTGTCACAGTTTGCATTTCAAACCTAATTCTTTCTCTTAGAAGCAGACAAACTTATCCCACAGTCCTCTATGCATCAGAAGATTTCAAGCCTCCAAGTGGCTTCTGCTGTGTTATTCAGGGACATTCTATCCATGGGGAGTGCTCCAGTCTGAAGCACTTCCTACCACGAAACGCCACCACATAAAGTGCCTTCTCCAACATCACACGGCGAGGGGCTTCATCTCATTTTGGAAAGCAGTTTTAAGTGTTCCCACATTTGAATGCTTCAGACCCTTGCAAGAGACAATTTGCCATGGAGAGAGAGAAACTCAGGAAAGACAAGTCATTCAGTCACTGACAGTTACTAAGAACATTGCCGAAAAGACACCCTGGGAACCTTCATTCTTAGTCCAGAGCTCTTTTCACTCTAACAAGCCTGCTCCTATCGCAGCCTCCTTCCTGTCCTTTAAAACTAGATAGATGCTGCCTCTTACTCCAAAGACAACCTTCCATCAAGGGAGGAGGGACAATTGCAATACTGTGACCTCCAACCCCATGGGTTTCCCAACTCCGTTCTTACCCAGGAAGTCCTGGTCATGTCATGGCCACATAAGCTTAGTGGCAAAAAACACCATTGATACAACTGTCATTGTGAAAGTATGGAGGTCTGGAGTCTCTCATAAGCCTGGGGTTTTGGGTCATCAGGGCCTATGGCCACCTTACCTGGGCTGAGCTTTTGGACAAGGTGCTGTGCCAGTCTACACCCCTCAGCCAGCTGTTCTTGGAGGTCCTGCCCCTGGGACTTGTCTGGCTCATCCGGAGTGAGGAGGGCCTGGAGATGCTGATTCAATGAGCAGGAGGCATCTCTCCCTTCCCGTAACTTCTCCCTTAACTGGGTCAGCTCTCGTTCCTGAGAGTGAACCAGGACTTTATATTGCCTAAGGTGAGACGGTAGAGAAAATTTAAGAGTGGAAAGGGTTGAGTGATCCGCTCAAATATTGCAACAGAGATTTCTGAGACAATGTCCTCAAGGAGACCTCCAAGCAGAAGGTCAGCACATGTTGGAAGGAATGTCTGTGGCTAAGAGAAAGAATAGAAAATGGTTTACAGGTTTCCTCTGTATCAGAGAGGGCTCCTGCAAGATCCTCGATGATGTTCCATTCATCTTTCCCTTCTGTAAACAAAAGTAGGTGTCTTCCTAATTCCATTTCAAAAAGACATCCTTTCAGTCCCTCACTCTGGCCATGGACATTTCCATGTGAAAATACACATAGTGCATCTTGCGGCCACTAGATACAAAGCCATGTACAGAAATGAGGCCAGGTGCAGATGGGGCGAATTGAAAAGATGAAAGAAGAAAAGAATGACAGGGTCGAGAAGGCAACATTGATTGAGTGAAAGAATGAGAAGACGCAGTCAGTCAGAAGGTGATTCTCACTAAGGGTAAGTGGGGTGGTGATGGCACACCATTTTGAGTATACTGAATGCTGCTGTGTGGTTCACACTCCTTTGGTTAATTTTGTGTTATGTAAATTTCACATCAACAATTACTTGTTTGAAAAAGAGAAAACAAGGCTCTGAGAAACAACTGCAACCCATAAATTTTTATTATCCTTCTTCTCTGCTTGATAAATACTTGTGTGTTGCGAGCCTGCCATGGCAATTCCTGCCCTTCCCCTGGCCCAGCTTAGTTCTTAAGTCTCCCCACTGAGCTGCTGTACTTCAGAGATTTACACACCTGCCCCCCTGCCTGCCCCCATGGGGTCCCCTCACCTGAGCTCCTCAGCTTGCTTGAGCTGCTCTGCAAGCTTCTCCTCCTTGAACTGTCGCTCATTCCTCAGCATAGATTTTATGAGGTCTTTGCACTCTTCATTTTCTGAGAAAAGACAGACACGCCTGCCTCAGTGGAAGGCTGGACATGCTGCTGTGGTCATTGCCTACAGGGCAGGAGCCAGGTCCATCCCAAGGACAAAACTCTCCCCAGTACCAGGGTCTAGACAGGGATTTCCACATCTTTACTCTTCAGTCTCCTGACTTTCTGGCATCTGATCCTCCAAAATTTAGAGATGAAGAGAACCTCAATGGCACATCAAGGAAGTTGACAAGATGATTCAACCACAACGAAGTGGAGTCAGAATTCACAGCCCCTGAGGTCTGACTCTGAATGCAGGGCCACTTTCCCAAGACTTGCAGCCTCTCCTCTAAAACACTGCACTGGGGCATGAAGTAGTGATTTCTTGTACAGTCGGGAAGGCCCCTAGGACTATGGGACTGATGGTTTCCCTTTTACTGGGAATTTCAAGGACAAGTATGCAAAAGATTTTAAAAATCTTTGATTTTTAAATCATATCTTCAGTTATGATTTTAAGAATCATATCTGAAGCATAAAGTGTGACACATAACACCATAAGGCCATGAAGGAAATATGCCCAAATGTTAATAAAGTTTGTGTTAATTTAGAAACAGCAGAATGAAGAACTAATAGATAGTGTTTACTGTGTGCTAATAAATGTTCTAGGAGATTGACAAGAAATAGCTCATGTAATTCACTGCAGCAATTTACAGAGGTAGGTATTATTGTAGTACCCTCTGAACAGGTGAGGAAACAGGGACAGAAAAGACAAGCAACTTGGATGGAGCCCAGGAGACAGGCCCACGGTCTCTGCTCTGTACACTGCACTGCTATCTCCACACATTCTCGGGTGCGATCTTTCTTCCTCTTTAGGAACAAGACTCTGTGCCCCAGGAAGCAGGACTTCACTCTCACCAAGCTACATTCTGCTTCTTATTCTTATTTTTATTTATCATTATTAGTATTATTTTTTTAACAGTCTTGCCCTGTCGCCCAGGCTGGAGTGCAATGGCAAAATCTTGGCTCACTGCAACCTCAGCCTCCTGGGTTCAAAGGATTCTCCTGCCTCAGCCTCCTGAGCAGGGGTGATTACAGTCACCTGCCACCATGCCCATCTACTTTTTGTATTTTTAGTGGAGATGGGGTTTCTCCATGTTTCCCAGGCTGGTCTCAAACTCCTGACCTCGTGCTCTACCCGCCTCAGCCTCCCAAAGGGCTGGGATTACAGGAGTGAGCCACCATGCACAGCCCCTACTCCCTGCTCTTGATGCTGTCACTTATAGATAGCACAGGTTCTATTAGGAGCAGACTCCTCTTGAAGCCCCTCAGAGCAGGTACTGGCTACTATCACCAAGTTTCCCTCAGAGTCACTAGAACAGAGCTTTGCATATTGGGCCTCAACAGAAACTTGAACTGAATAAAAGTTCACTAGTCTCAGACATTTAGAACAACAGACTAGATGTTATTTGTCTGCAGGATCTTACATGGTACAGAGAGGATTCTTGAAAACATGATTGAGCCTCTTGGAGAAAACAGGTCATTCTGTGCCTGTGTCAGAAATCAATAAATGGCAGTTTAACTCTAGTCCCACCCCCACCTGATTGCAAACATGGAAAGTTGCTAAATATTTTGGGACCTCTGTCTTCCAACTTTAACAAAATGTTAAAATACCCATTTCTGTTTTCCTAGAAGTATGGGGAGGATGACATTATTTTAGATGGAGAGAGCACTTAGTTTCTCAGAGAGAAGACAGGACTTCGTTCATCACTTTCGTGATGGTGAGCCTATAGATCTTACTGTATTTGTTCTGCTGGTTGGCCAGGAAGCAGGCCAGTTGAGTTACAAAACATTTCTCTTTGAGGTTTCTGAACTGCTGTTTCTTCTCTGCCAGCTGGGGATGCAATTTCTCGTTGATTTCTAGAATGTTCATCTCTGCCTTCTCGCTGGACAAAGGGCCGGCTGATACCACCATGCTGACGTTTGTGGCAGAAGAGGTGGGGCCAGGGACTGGGGAGAAGAAAGGCAAACACATGATGGGTTAAAAACTGGTGAAATCAAATAGGTTTAATCACACTGAGGGATGTCAGCGGCAGCCTTGTCTACTTATTTGAAGATGATGTTTCCCTGGTTTCACTCTTGTCATCTCCAGTCTTGATCTCCTTTAAGTCAACTTATCTTAGCTATGCAGTCACCTTGAAACCAGGACATAAACACTTCTACACTTTTCTTGCTTATAAGTTTCTATAAAGCAAGGCTTGGCCCTGAGATTTTTACCCCATGAGTGGCCAATGTTTCTGTGTAGCACAAAAGGTTTCATTTTGCCTTTTTAATTTTTTTCTTTTTTGGTTTTTTGTTTTTTGTTTGAGACGGAGTCTCACTCTGTCACGCAGGCTGCAGTGCAGAGGCACAATCTCAGCTCACTGCCACCTCTGCCTCCCGGGTTCAAGCGATTCTCATCCCTCAGCCTGCCAAACATCTGGGATTACAAGCGCCAAGTAACATGCCAGCTAATTTTTGTATTTTTAGTAGAGATGGGGTTTCGCCATCTTGGACAGGCTGGTTTCGAACTCCTGACCTCAGGTGTTCCGCCCACCTTGGCCTCCCAAAGTGCTGGGATTAAGATGTGAGCCAGCACCCCCGGTCAGAGACTTTTTTTTTTTTTTTTGAGATGGAGTCTCGCTCTGTCTCCCAGGCTGGAGTGCAGTGGCACAATCTAGGCTCACTGCAAACTCCGGTTCCTGGGTTCATGCCATTCTCCTGCCACAGCCTCCCGAGTAGCTGGGACTACAGGTGCCCAACACCGTGCCCAGCTAATTTTTTTTTTTTGTATTTTTAGTAACGACGGGGTTTCACCGTGTTAGCCAGGATGGTCTCGATCTCCTGACCTCGTGATCCACCCGCCCCAGCCTCCGAAAGTTCTGGGATTACATGTGTGAGCCACCGCGCCCGGCCGAGACTTCTTATTAATAGCTAAGACAAGCCAATGAAAAGGAGAGAGAGTCTAGCCTGAGAGGAGTGAACCAGGGTGGGAGGATCGTCTCAGCCGATCCTCCCACCTAAGTCTCCTGAGCAGTTGGGACTAGAGGCACGCAGCACCATGCCTGCCTAATTTTTTGTATTCTTTGTAAAGATGGGTTTCACCATATTGTCCAGGCTGGTCTTCAACTCCTGAACTCAAGTCATCCTCCCACTTGGGCCTTCCAAAGTGCTGTGATTATATGTGTGAGTCACAGAACCTAGCTCCATCCTAGTTTCTGACTAAAACAATATGTGCGTATACAGCCTGTCCTCAGAATTGATCTTCCATAGCCTAGACAGAGGTATGAGACACAAGGAAAATAGAGGCTACCTGGGAGAATGTTTACAGCATCCTGACATTCATCATGAGAGGATTCTCTGTCTACAACCAGAGCTGAGTTGACTTTGTCTTCCTCAAAGGTGATGTTGATGTTCTTGTGAGGCTGGTTGGAGTCACAAGGGCCGTGGCTATTTGAACAAGTGATGGCACATTCCTCCAGTGAGTCCTCAGGGACTTTGCTTTCTTCAGCCTTCTGCACCTCCCTGATGAGCCAGGTGGGACAGAGATGACAGAAGATTAAACACAGAGGGATTGGACCCCAGGGAGTCCTAGCTGGTTTTGACAGGCGGCATTAAGACAGTGGTCCCAGAAAGCAAAATGGAGGTTCCCTTTAAGGGGGAACAGGCAATCCTCTTCTCTCTGCAACAGAGCATGGCTGCCATGGGAGCCAGAGAGGAAGAGAGCAGCTGGTGTTCAGTGCACTGGACAGATAGGAGCTGAGGAGGATGAAGACTCAGCTATCCCTGTATGGTACAGACATGACACTTGGCACACATAGAGAAACACGACAGCTGCCACACCCTGTGTCTAAGCTGGGTTGAATTTCACATACTGTGGCCAAGCGAATGCGGGCTTTTGGCCCATCATAGATGCCAGAGAGGGTGTGCCTCCTAGACATTTTCATATGTTACCACCCATTACTTGCTCCTGAGTATTCAGTGTTACCTGGGGGCAGATGATTCCAGTACTTTCTCAGCCTCCTCAACTTGAACATCTTCATCCTCATCTTCGTCATTTTCTGTAAATACAAAATGTTCGTTCAGATATTTCCCACTTCCCATTCTCCAAGCACAGTCAGCCCAATGTGCACAGAGACATGAACATCTATGTGTGGTTCAGCATTGTACTGAAAACTGTCATGTTTTATCTTTCACAAAATGCCCTGGCATGGTTTCCTGGTCCATCGGGCAATGCATTTCTGATCTGGAGGGCCACCATCAAGATGTGGCCAAATATTGAAAAGACCTTTTGCTTCCCATATCACTGGAGGCTTGTGCAGCCTCTCTCTGGACTTTGGCAGCTGTCTCCCCCATCCTGCCACAGATCTGATTCCCAGGAACAGGTTTGGTGTCCTGTCACAGTTCGCATTTCAAACCTCATTCTTTCTCTTAGGAGAGGACAAACTTGTCCCACAGTCCTCTATGTGTCATGAGACTGCACAGGCCCTCCATGTGGCTTCTGCTGTGTTATTCAGGGACATTCTATCCATGGGGAGTGCTCCAGTCTGAAGCACTTCCTACCACCAAATGCCCCCACATCAAGTGCCTTCTCCAACACCAAACGGAGAGGGGCTGCATCTCATTTTAAAAAGCATTCGTAAGTGTTCCCATATTTGGATGCTTCAGACCCTTGCAAGAGACAATTTGTTTGCCTTTGCAGATGGAGAGAGAGAAACTCTGGAAAGATAAATCACTCACTCACCGACAGTTACTAAGAACATTGCCAAAAAGACAGCCTGGGAACCTTCATTCTTAGCCCAGAGCTCTTTTCACTCCAACAAGCGCCCTCCCATCACAGCCTCCTTCCTGTCCTTTAAAACTAGACAGATGCTGCCTCTTGCTCCAAAGACCACCTTCCATCAAGGAAGGAGGGACACTTGCAATACTGTGACCTCCAACCCCATGGGTTTCCCATCTCTGTTCTTACCCAGGAAGTCCTGGTCATGTCATGGCCACATATGTGTAGCAGAAAATAACCCCACTGATACAACTGTCATTGTGAAAGTATGGAGGTCTGGAGCCTCTCATAAGCCTGGGGTTTTGGGTCATCAGGGCCTATGGCCACCTTACCTGGGCTGAGCTTCTGGAAAAGTTGCTGTGCCAGTCTACACCCCTCAGCCAGCTGTTCTTGGAGGTCCTGCCCCTGGGACTTGTCTGGCTTATCCGGAGTGAGGAGGGCCTGGAGATGCTGATTCAATGAGCGGGAGGCATCTCTCCCTTCCCGTAACTTCTCCCTTAACTGGGTCAGCTCTCGTTCCTGAGAGTGAACCAGGACTTTATATTGCCTAAGGTGAGACGGTAGAGAAAATTTAAGAGTGGAAAGGGTTGAGTGATCCGTTCAAATATTGCAACAGAGATTTCTGAGACAATGTCCTCAAGGAGACCTCCAAGCAGAAGGTCAGCACATGTTGAAAGGAATGACTGTGGCCAAGAGAAATAATAGAAAATGGTTTACAGGCTTCCTCTGTATCAGAGAGGGCTCCTGCAAGATCCTCGATGATGTTCCATTCATCTTTCCCTTCTGTAAACAAAAGTAGGTGTCTTCCTAATTCCGTTTCAAAAAGACATCCTTTCAGTTCCTCACTCTGGCCATGGACATTTCCATGTGAAAATACACATAGTGCAACTTGCAGCCACTAGATACAAAGCCATGTACAGAAATGAGGCCAGGTGCAGATGGGGCGAATTGAAAAGACGAAAGAAGAAAAGAATGACAGGGTCAAGAAGGCAACATTGATTGAGTGAAAGAATGAGAAGACGCAGTCAGTCAGAAGGTGGTTCTCACTAAGGGTAAGTGGGGTGGTGATGGCACACCATTTTGAGTATACTGAGTGCTGCTGTGTGGTTCACACTCCTTTGGTTAATTTTGTGTTATGTAAATTTCACATCAACAATTACTTGTTTGAAAAAGAGAAAACAAGGCTCTAAGAAACAACTGCAACCCATAAATTTTTATTATCCTTCTTCTCTGCTTGATAAATACTTGTGTGTTGCGAGCCTGCCATGGCAATTCCTGCCCTTCCCCTGGCCCAGCTTAGCTCTTACGTCTCCCCACCGAGCTGCTGTACTTCAGAGATTTACACAGCTGCTCCCCCACCTGCCCCCATGGGGTCCCCTCACCTGAGCTCCTCAGCTTGCTTGAGCTGCTCTGCAAGCTTCTCCTCCTTGAACTGTCGCTCATTCCTCAGCATAGATTTTATGAGGTCTTTGCACTCTTCATATTCTGAGAAAAGACAGACACGCCTGCCTCAGTGGAAGGCTGGACATGCTGCTGTGGTCATTGCCTACAGGGCAGGAGCCAGGTCCATCCCAAGGACAAAACTCTCCCCAGTACCAGGGTCTAGACAGGGATTTCCACATCTTTACTCTTCAGTCTCCTGACTTTCTGGCATCTGATCCTCCAAAATTTAGAGATGAAGAAAGGGAACCTCAAGGGCACATCAAGGAAGTTGACAAGATGATTCAACCACAACGAAGTGGAGTCAGAATTCACAGCCCCTGAGGTCTGACTCTGAATGCAGGGCCACTTTCCCAAGACTTGCAGCCTCTCCTCTAAAACACTGCACTGGGGCATGAAGTAGTGATTTCTTGTACAGTCGGGAAGGCCCCTAGGACTATGGGACTGACGGTTTCCCTTTTACTGGGAATTTCAAAGACAAGTATGCGAAAGATTTTAAAAATCTTTGATTTTTAAATCATATCTTCAGTTATGATTTTAAGAATCATATCTGAAGCATAAAGTGTGACACATAACACCATAAGGTCATGAAGGAAATATGCCCAAATGCTAATAAAGTTTGTGTTAATTTAGAAACAGCAGAATGAAGAACTAATAGATAGTGTTTACTGTGTGCCAATAAATGTTCTAGGAGATTGACAAGAAATAGCTCATGTAATTCACTGCAGCAATTTACAGAGGTAGGTATTATTGTAGTACCCTCTGAACAGGTGAGGAAACTGAGGGACAGACAAGACAAGCAACTTGGATGGAGCCCAGGAGACAGGCCCACGGTCTCTGCTCTGTACACTGCACTGCTACCTCCACACATTCTCAGGTGCGATCTTTCTTCCTCTTTAGGAACAAGACTCTGTGCCCCAGGAAGCAGGACTTCACTCTCACCAAGCTACACTCTGCTTCTTATTCTTATTTTTATTTATCATTATTATTATTATTATTATTATTATTATTTTTACCAGTCTTGCCCTGTCACCCAGAGTGGAGTGCAATGGCAAAATCTTGGCTCACTGCAACCTCAGCCTCCTGGGTTCAAAGGATTCTCCTGCCTCAGCCTCCTGAGCAGGGGTGATTACAGTCACCTGCCACCATGCCCATCTACTTTTTGTATTTTTAGTGGAGATGGGGTTTCTCCATGTTGCCCAGGCTGGTCTCAAACTCCTGACCTTGTGATCTGCCCGCCTCAGCCTCCCAAAGGGCTGGGATTACAGGAGTGAGCCACCATGCACAGCCCCTACTCCCTGCTCTTGATGCTGTCACTTATAGATAGCACAGGTTCTATTAGGAGCAGACTCCTCTTGAAGCCCCTCAGAGCGGGTACTGGCTACTATCACCAAGTTTCCCTCAGAGTCACTAGAACAGAGCTGTGCCTGTTGGGCCTCAACAGAAACTTGAACTGAATAAAAGTTCACTAGTCTCAGACATTTAGAACAACAGACTAGATGTTATTTGTCTGCAGGATCTTACATGGTACAGAGAGGATTCTTGGAAACATGATTGAGCCTCTTGGAGAAAACAGGTCATTCTGTGCCTGTGTCAGAAATCAATAAATGGCAGTTTAACTCTAGTCCCACCCCCACCTGATTGCAAACATGGAAAGTTGCTAAATACTTTGGTACCTCTCTCTTCCAACTTTAACAAAATGTTAAAATACCCATTTCTGTTTTCCTAGAAGTATGGGGAGGATGACATTATTTTAGATGGAGAGAGCACTTAGTTTCTCAGAGAGAAGACAGGACTTCGTTCATCACTTTCGTGATGGTGAGCCTATAGATCTTACTGTATTTGTTCTGCTGGTTGGCCAGGAAGCAGGCCAGTTGAGTTACAAAACATTTCTCTTTGAGGTTTCTGAACTGCTGTTTCTTCTCTGCCAGCTGGGGATGCAATTTCTCGTTGATTTCTAGAATGTTCATCTCTGCCTTCTCGCTGGACAAAGGGCCGGCTGATACCACCATGCTGACGTTTGTGGCAGAAGAGGTGGGGCCAGGGACTGGGGAGAAGAAAGGCAAACACATGATGGGTTAAAAACTGGTGAAATCAAATAGGTTTAATCACACTGAGGGATGTCAGTGGCAGCCTTGTCTACTTATTTGAAAATGTTGTTTCCCTGGTTTCACTCTTGTCATCTCCAGTCTTGATCTCCTTTAAGTCAACTTGTCTTAGCTATGCAGTCACCTTGAAACCAGGACATAAACACTTCTACACTTTTCTTGCTTATAAGTTTCTATAAAGCAAGGCTGGGCCCTGAGATTTTTACCCCATGAGTGGCCAATGTTTCTGTGTAGCACAAAAGATTGCATTTTCCTTTTTCGATATTTTTCTCTTTTGGTTTTTTGTTTTTTGTTTGAGACGGAGTCTCACTCTGTCACGCAGGCTGCAGTGCAGTGGCGCAATCTCAGCTCACTGCCACCTCTGCCTCCCGGGTTCAAGTGATTCTCATCCCTCAGCCTGCCAAACATCTGGGATTACAAGCGCCAAGTAACATGCCAGCTAATTTTTGCATTTTTAGTAGAGATTGGGTTTCGCCATCTTGGACAGGCTGGTTTCGAACTCCTGACCTCAGGTGTTCCGCCCACCTTGGCCTCCCAAAGTGCTGGGATTAAGATGTGAGCCAGCACCCCCGGTCAGAGACTTTTTTTTTTTTTTTTTTTGAGATGGAGTCTCGCTCTGTCTCCCAGGCTGGAGTGCAGTGGCACAATCTAGGCTCACTGCAAGCTCCGGTTCCTGGGTTCATGCCATTCTCCTGCCACAGCCTCCCGAGTAGCTGGGACTACAGGCGCCCAACACCGTGCCCAGCTAATTTTTTTTTTTTGTATTTTTAGTAACGACGGGGTTTCACCGTGTTAGCCAGGATGGTCTCGATCTCCTGACCTCGTGATCCACCCGCCCCGGCCTCCCAAAGTGCTGGGATTACATGTGTGAGCCACCGCGCCCGGCCGAGACTTCTTATTAATAGCTAAGACAAGCCAATGAAAAGGAGAGAGAGTCTAGCCTGAGAGGAGTGAACCAGGGTGGGAGGATCGTCTCAGCCGATCCTCCCACCTAAGTCTCCTGAGCAGTTGGGACTAGAGGCACGCAGCACCATGCCTGCCTAATTTTTTGTATTCTTTGTAAAGATGGGTTTCACCATATTGTCCAGGCTGGTCTTCAACTCCTGAACTCAAGTCATCCTCCCACTTGGGCCTTCCAAAGTGCTGTGATTATATGTGTGAGTCACAGAACCTAGCTCCATCCTAGTTTCTGACTAAAAGAATAACAATATGTGTATATACAGCCTGTCCTCAGAATTGATCTTCCATAGCCTAGACAGAGGTATGAGACACAAGGAAAATAGAGGCTACCTGGGAGAATGTTTACAGCATCCTGACATTCATCATGAGAGGATTCTCTGTCTACAACCAGAGTTGAGTTGACTTTGTCTTCCTCAAAGGTGATGTTGATGTTCTTGTGAGGCTGGTTGGAGTCACAAGGGCTGTGGCTATTTGAACAAGTGATGGCACATTCCTCCAGTGAGTCCTCAGGGACTTTGCTTTCTTCAGCCTTCTGCACCTCCCTGATGAGCCAGGTGGGACAGAGATGACAGAAGATTAAACACAGAGGGATTGGACCCCAGGGAGTCCTAGCTGGTTTTGACAGGCGGCATTAAGACAGTGGTCCCAGAAAGCAAAATGGAGGTTCCCTTTAAGGGGGAACAGGCAATCCTCTTCTCTCTGCAACAGAGCATGGCTGCCATGGGAGCCAGAGAGGAAGAGAGCAGCTGGTGTTCAGTGCACTGGACAGATAGGAGCTGAGGAGGATGAAGACTCAGCTATCCCTGTATGGTACAGACATGACACTTGGCACACATAGAGAAACACGACAGCTGCCGCACCCTGTGTCTAAGCTGGGTTGAATTTCACATACTGTGGCCAAGCGAATGCGGGCTTTTGGCCCATCATAGATGCCAGAGAGGGTGTGCCTCCTACACATTTTCATATGTTACCACCCATTACTTGCTCCCGAGTATTCAGTGTTACCTGGGGGCAGATGATTCCAGTACTTTCTCAGCCTCCTCAACTTGAACATCTTCATCCTCATCTTCGTCATTTTCTGTAAATACAAAATGTTCGTTCAGATATTTCCCACTTCACATTCTGCAAGCACAGTCAGCCCAATGTGCACAGAGACATGAACATCTATGTATGGTTCAGCACTGTACTGAAAACTGTCATATTTTATCTTTCACAAAATGCCCTGGCATGGTTTCCTGGTCCATCGGGCAATGCATTTCTGATCTGGAGGGCCACCATCAAGATGTGGTCAAATATTGAAAAGACCTTTTGCTTCCCATATCACTGGAGGCTTGTGCAGCCTCTCTCTGGACTTTGGCAGCTGTCGCCCCCATCCTGCCACATATCTGATTCCCAGGAACAGGCTTGGTGTCCTGTCACAGTTCGCATTTCAAACCTCATTCTTTCTCTTAGGAGAGGACAAACTTGTCCCACAGTCCTCTATGCATCATGAGACTGCACAGGCCCTCCATGTGGCTTCTGCTGTGTTATTCAGGGACATTCTATCCACGGGGAGTGCTCCAGTCTGAAGCACTTCCTACCACCAAATGCCCCTACACCAAGTGCCTTCTCCAACACCAAACGGAGAGGGGCTTCATCTCATTTTAAAAAGCATTCGTAAGTGTTCCCATATTTGGATGCTTCAGACCCTTGCAAGAGACAATTTGTTTGCCTTTGCAGATGGAGAGAGAGAAACTCTGGAAAGATAAATCACTCACTCACCGACAGTTACTAAGAACATTGTCAAAAAGACAGCCTGGGAACCTTCATTCTTAGCCCAGAGCTCTTTTCACTCCAACAAGCGCCCTCCCATCACAGCCTCCTTCCTGTCCTTTAAAACTAGACAGATGCTGCCTCTTGCTCCAAAGACCACCTTCCATCAAGGAAGGAGGGACACTTGCAATACTGTGACCTCCAACCCCATGGGTTTCCCATCTCTGTTCTTACCCAGGAAGTCCTGGTCATGTCATGGCCACATATGTATAGCAGAAAAAAACCCCACTGATACAACTGTCATTGTGAAAGTATGGAGGTCTGGAGCCTCTCATAAGCCTGGGGTTTTGGGTCATCAGGGCCTATGGCCACCTTACCTGGGCTGAGCTTCTGGAAAAGTTGCTGTGCCAGTCTACACCCCTCAGCCAGCTGTTCTTGGAGGTCCTGCCCCTGGGACTTGTCTGGCTTATCCGGAGTGAGGAGGGCCTGGAGATGCTGATTCAATGAGCGGGAGGCATCTCTCCCTTCCCGTAACTTCTCCCTTAACTGGGTCAGCTCTCGTTCCTGAGAGTGAACCAGGACTTTATATTGCCTAAGGTGAGACGGTAGAGAAAATTTAAGAGTGGAAAGGGTTGAGTGATCCGTTCAAATATTGCAACAGAGATTTCTGAGACAATGTCCTCAAGGAGACCTCCAAGCAGAAGGTCAGCACATGTTGAAAGGAATGACTGTGGCCAAGAGAAAGAATAGAAAATGGTTTACAGGCTTCCTCTGTATCAGAGAGGGCTCCTGCAAGATCCTCGATGATGTTCCATTCATCTTTCCCTTCTGTAAACAAAAGTAGGTGTCTTCCTAATTCCGTTTCAAAAAGACATCCTTTCAGTTCCTCACTCTGGCCATGGACATTTCCATGTGAAAATACACATAGTGCATCTTGCGGCCACTAGATACAAAGCCATGTACAGAAATGAGGCCAGGTGCAGATGGGGCGAATTGAAAAGACGAAAGAAGAAAAGAATGACAGGGTCGAGAAGGCAACATTGATTGAGTGAAAGAATGAGAAGACGCAGTCAGTCAGAAGGTGATTCTCACTAAGGGTAAGTGGGGTGGCGATGGCACACCATTTTGAGTATACTGAATGCTGCTGTGTGGTTCACACTCCTTTGGTTAATTTTGTGTTATGTAAATTTCACATCAACAATTACTTGTTTGAAAAAGAGAAAACAAGGCTCTAAGAAACAACTGCAACCCATAAATTTTTATTATCCTTCTTCTCTGCTTGATAAATACTTGTGTGTTGCGAGCCTGCCATGGCAATTCCTGCCCTTCCCCTGGCCCAGCTTAGCTCTTACGTCTCCCCACCGAGCTGCTGTACTTCAGAGATTTACACAGCTGCTCCCCTGCCTGCCCCCATGGGGTCCCCTCACCTGAGCTCCTCAGCTTGCTTGAGCTGCTCTGCAAGCTTCTCCTCCTTGAACTGTCGCTCATTCCTCAGCATAAATTTTATGAGGTCTTTACACTCTTCATACTCTGAGAAAAGACAGACACGCCTGCCTCAGTGGAAGGCTGGACATGCTGCTGTGGTCACTGCCTACAGGGCAGAAGCCAGGTCCATCCCAAGGACAAAACTGTCCCCCGTACCAGGCTCTAGGCAGGGATTTCCACATCTTTACTCTTCAGTCTCCTGACTTTCTGGCATCTTATCCTCCAAAATTTAAAGACGAAGAAAGAGAAATTCAAGGCACATCAAGGAAGTTGACAAGATGATTCAACCACAACGAAGTGGAGTCAGAACTCACAGCCCCTGAGGTCTGACTCTGAATGCGGGGCCACTTTCCCAAGACTTGCAGCCTCTCCTCTGAAACACTGCACTGGGGCATGAAGTAGTGATTTCTTGTACAGTTGGGAAGGCCCCTAGGACTATGGGACTGACGGTTTCCCTTTTACTGGGAATTTCAAAGACAAGTATGCGAAAGATTTTAAAAATCTTTGATTTTTAAATCATATCTTCAGTTATGATTTTAAGAATCATATCTGAAGCATAAAGTGTGACACATAACACCATAAGGCCATGAAGGAAATATGCCCAAATATTTTATTAGTATGACAGGCAGCATCAAGATTTAGATTAGTTGTGTTAATTTAGAAACAGCATAAGATTAGTTTGTGTTAATTTAGAAACATCAGAATGAAGAACTAATAGATAGTGTTTACACTGTGCCAATTAATGTTCAAGGAGATTGACAGGAAATACCTCATGTAATTCATTGCAGCAATTTACAGAGGTAGGTATTATTGTAGTACCCTCTGAACAGATGAGGAAACTGAGGGACAGACAAGACAAGCAACTTGGATGGAGCCCAGGAGACAGGCTGAGGGTCCCTGCTTTGCACACTGCACTGCTGCTTCCACACATTCTCGGGTGTGATCTTTCTTCCTCTTTAGGAACAAGAGCCTGTGCACCAGGAAGCAGGACTTCACTCTCACCAAGGTACTCTCTGCTTTTTATTTTTATTTTTGTTTTATTTATCTTTTTGTTTGTTTGTTTTTTGATGAGTCTTGCCCTGTCACCCATGCTGGAGTGCAATAGTGCAATCTTGGCTCACTGCAACATCTGCCTGCTGGGTTCAAAGGATTCTTCTGCCTCAGCCTCCCGATTAGTGGTGATTACAGTTGCCCGCCACGACGCCCATCTACTTTTTGTATTTTTAGTGGAGATGGGGTTTCTCCATGTTGCCCAGGCTAGTCTCAAACTCCTCACCTCGTGCTCTGCCCGCCTCAGCCTCCCAAAGTGCTGAGATTACAGGAGTGAGCCACGTTGCACGGCCCCTACTCCCTGCTCTTGATGCTGTCACTTATAGATAGCACAGGTTCTATTAGGAGCAGACTCCTCTTGAAGCCCCTCAGAGCAGGTACTGGCTACTATCACCAAGTTTCCCTCAGAGTCACTAGAACAGAGCCTTGCCTGTTGGGCCTCAACAGAAACTTGAACTGAATAAAAGTTCACTAGTCTCAGACATTTAGAACAACAGACTAGATGTTATTTGTCTGCAGGATCTTATATGGTACAGAGAGGATTCTTGAAAACATGATTGAGCCTCTTGGAGAAAACAGGTCGTTCTGTGTCTGTGTTAGAAATCAATAACTGTGAGTTTAACTCTAGTCCCACCCCCACCTGATTGCAAACATGGAAAGTTGCTAAATACTTTGGTACCTCTGTCTTCCAACTTTAACAAAATGTTAAAATACCCATTTCTGTTTTCCTAGAAGTACAGGAAGGATGAAATTATTTTTGATGGAGAGAGCATTTAGTGTCTCAGAGAGAAGACAGGACATCATTCATCACTTTCATGATGGTGAGCCTATAGATCTTACTGTATTTCTTCTGTCGGTTGGCCAGGAAGCCGGCCAGTTGAGTTACAAAACATTTCTCTTTGAGGTTTCTGAACTGCTGTTTGTTCTCTGCCAGCTGGGGGCGCAATTTCTCGTTGATTTCTAAAATGTTCGTCTCTGCCTTCTCGCTGGACCAAGGGCCAGCTGATACCACCATGCTGACGTTTGTGGCAGAAGAGGTGGAGCCAGGGACTGGGGAGAAGAAACCCAAACATATGATGGGTTAAAAACTGGTGAAATCAAATAGGTTTAATCAGGACTGAGGGATGTCAGTAACTGAAATTCTTAACTTACTGTTGTGAAAAATGTGATCACTCCCCACAGCACTTTAGGATCCTTCACCACAAAAACAAGGTTCGAGGTGCCTGAACTCAGAGCTGAAAGCACTGCCAGTAGCTCAGACTCTGATAAGAGTGAGGTAGACTGTGGCCAGCGTGCCAGGTAACCGTCTGCAGTTGCAATAACAGAATTAGAAGGTGGGGGTGTCATGGAATCTTAGGAGCCCTGCATTCCAATTGCCCAGGCTTTCCTGAAACACAGGCACCCTAGTCTCACCTGAGGGTCACCACCAATGGGGATCATTCCTTCAGCATTCACTCTCAGTATTCGTGTACCCTTGTGATGATGCCACAGACCCGTGTCTTTCCCAATACATCTAAGCATATTCCTCACTGTTTATCTCTTGTCTGTACAACATCATCAAGGCAGAAACAGTTTCCCAACAGGTTGTATTTTCTTAATGGTAGTCATGAAGTCACCCCACCTGCTCTCAGTTAAAACAGAGCTTAAGGCCTTTCCACAGGTGTAAGATATCAAACTTTTAGCCTGCCCTGATTTCCTCTGGGTCTTCTGCAGTTTTGTCTGTATCCACTAGAAAGTGAATGAATAATTCATTTGTAAAAAATGTTGTCTTTCCTGTCTCAGTATTCTTCTTGCTGTTTCCCATTGTTATGTTGATTTCTTTTTTCTCACTGGGGCACCATCTTTGCTTTTCATTACACTCTAGACCAGTTTGACATCCCTATGTCCAGAGCTCTTCCTCTATGTGGGTTGATTTGGTTTTTGATGTCACTGAGCGCTACATTTTATACTTGTCACTTATGGATGTCATTCTAGTGTCACAAGAGCTCTTTTCAAGGTATCAAGTGATCAAAATCATTTATATAGAGATCTCCTGAAAACATGTGTGACCATCTATCTTGGGAAGTTTCATAAACCTGATGCTATTTTGTTGTTTCCATTTTGTTTTCCCATATACTGAAAAGAACAGGGCCATGAGCGGTTCTTATGCAATATGGTTTGATATATATTTTGTTGAGATGACCTAACACCATTGATTTTGGGTTGCATTCCACTAACAGAACATGGCAAGATCAAGGTTATGGTCACGGTTGGTTGGTGATCCTCAGTGTTGCAGTAGAAGGTGAGTTTGAGATGAGAGGAATGAGTAGGAAAGAGTGATCCCCTGAACCACCTCCTCGCTTTCTCAGCTTTCACCCCACCTAGGTTTTGTGAGCCTGGAACTTGGGAGACTGTTCTGTAGCCCAGGTCTCCTAAGATTGGCTGCTGGACTTGCCTGAGTTGAGGGTGCGGTGGGTTGACCCTGGGCTGCCCAGCATTCATGTGGTAGTGAAGGAAGGAGGACTGGATCAATCCCATTTCAAAGCATGTCTCTCTGCACTCCACACTGTCCTCCAATGACACTGTAAGGAAACCGCTTTAAGACGTATCAACGGCTTTAAGTAAATGTATTTTCTGGCATCTGGGAGACCTGACATTCTGTGTCATAATGAAAATCTGTCATGTTTCTTTATTTTAAAAATGATAAAACTGCAGGTTCACAGAGTTACATGGCTTACTTGAGGTCACACGGGGATGAGTTTTCAGCACTGCCAATAAAAGCAATCACATGAATTATTCAGTAATTATTCATAGGATCCATATAATTCAGTAAATATTCACATAATTATTTACTAGTTGTTCATTGACCAATTCGTACAAGGCATTTTGCTCAAAACTGTGTTTATATTTGGACATTGTATCTTCATCATAATCCTGTGGTAATGCTGTTATCCGTAAGTAACAGGTAAGAAACCTGAAGAGGAGGGATAGCAAATCATGTATTTGGACATATTTCCTTTTTTTTTTTTTGGTTTTTGTGATGCTGGAAGAATGACCAGAATGAGTCATAGGAAGAGTATACATTCCTGTAGTATTTTCCAGGACAGAGGTGTGACCTCCTAGAGTACTGGGACCAAAATTCCCAAGTGTCTGCAACCTTGCTTTAACAGTATGGGAGATCACCTCTATCACCTGGAATTCCCCTGGAACTCTGGAATATACAAGAGAAGTATGAGACTTGGGTCTTCCCTTGGCTGTGTTTAATTCACTCTTCTATGGAATACCAATGATTCTCACTAAGACTGGCCTTTTCATAAGCACAATGTGCATTTTATGGAGAAGATTTTACACTTTGCTCTATTTAGAAAGAATAAATATGAGCAGTGGTTTAGGTTTTATGCCCTGGACTTAATATGTTTCTGATTCCTGTTTTGAGATTAAATTCTCATGTAAATAGAAAAATACTTATTATTTCTCATAAGGCCAAGTTTGTTATTAGTTTGAGTTTTTGAAGATGAAGCACAAACTTTTGATTTTATCTTTGTCTGTCTCTGTCAGCGCCACTCGTTGTCTCTCAGTATGACCTGGACTTGCCCCTGCACTTACCCTTGTCCTGCTGAACCATCTCCATGCACTGTCCAATTCCATCAGTGATTCGGGCTCCTTCCAAGGCTCCCTGAAAAGGGCACAGAGATCAGGACATTAGGCACATTCCGGACACAAAGGCAACCCATACTGTAGAGTGGGCAGCTGTGTTTCCACTTCCCTAATATTCCAGTGATGTCCTCAAACTGAAAGGAACACTTTCCCTTTTTAGGGGTCTGTTCTTCATGTCTCAGTGCCTCTGATCTAGTCAACACAACTGTCCTGAATGTGAAAGAACTTGCTAAATTTCTAGTTTCTTGTTAGGTGGCTAAAATAGATTTATAAGACTTCCTTACTTACCCATGACTGCTGAAGTTTGAATTCTTAGCAGTACGATTCGTTTTCTTGTAAGGTGAGCAGCTTAGGAAAGATTGGCCATCTTCCTGTGCAAAAAGAGGCAAACTTAATTTCTACTCAAAGCATGCTTGAATTTGGAATCAGGGCTTCCACTCTTCCGAAGTTGGAGTGTCACTGCGACAGGCATGTGTCCCGAAGGGCTCGTGTCTCTGCTATACTCAAAGTTTAAATGGAGCCCAGCAAGCCAGATGTCCTTTACTTCTAGGTTCCCTCAACAGTTTCTCCTCCGCTTTAGAGACCGCATTGAAAATATTCTTGTTCTGCTGTTGTGTTTTGGCTTTGGAATGATGTGATGCAGCTCAATGGGTCCCACCCCCAACTTGATCAAAGTAAGAAACAGCTGGGAAAGTCAGTGCAAATACAAGTTCATTGTCCTCCTTGCAGGGATTCTGATTCAGAGGGCTCAGGTGGGGCCTGGAATGTTTGTTAACATGACTCAGATGTGCAGTCAATTTGGGGACTCACTGACAGCATTGACCTTACAGTTTATGGGATGATTCTTTCTGTTTGGTGATGAAGAAACTGAGGCACACAGAGTCTGTAACTTGCCCAAGTTCCCCTTGTTGTAAGTCCTGGAGCCAGATCTCAGGTGGACCAGTGCTTCTCTCCCCTATACCTCATTTCTGAGAAAAGGAAATCTTCTGCAATTTGACTTCTTTCATCTAACACATTTCCTCACAACATGCAGCCAGCATCATATTTTGGCCACTTACTATTAAAGTGAGATGCTTTTTTTTTTTTTTTTTTGAGACAGGGTCTTATTCTGTCACCCAGGGTGGAGTGCACTGGTGATTATAGATCACGGCAATCTTGAACTTCTGGGCTCAAGCGATCCTCCTGCCTCAGCTTTCCAAGTAGTTGGAACTATAGGCACACATCACCATTTCTGGCTAATTTTATATTTTTCATAGAGACAAGGTCTTGCTATGTTGCTCAGGCTGGTTTTGAACTTCTGGCCTCAAGCGATCCTCCCACCTAGGCCTCCAAAAGTGCTGGGATTACAGAAGTTAGCCACTGAACCTGGCCCTGAAATGCTTTTATTTCTTTCTTTTTTTTAATGAAAATACTGGACATGGAGATGTGGAAAGACACCTTGCTTTATTACTTTTGTTGTTATTATTATTTCTACAGTAGAATTTATACATCACAAAATTCACCATTTTTAAGCATACATTTCAGTGTCTTTTACCATATTCCAAAACTTTCGCAACCATCGCCACTACCTAATTCCAGAATATTTTCATAATGCCAAAAAGCATGCCTGTACCTATGGGCAGACACTCTCCAATTCCCCCCTTCTTGCGCTCTCTGACAACCACTAATCTACCTTCTCTATATATTGATGTACTTGTTCTGGGCACTTCCTCTATATGGAATAACAAAGTGTGGTATTTTCTATCTGCTTCTTAGAATATTGTTCTCAAGTTTCATCCTTTCTAGCCTGCGTCAGTACTTCAACTTTTTATGGCCAGATAATATTCCACTATATGGTTATACCACATTTTGTTTATTCATCAACTCATGGTGGTTTAAGATGTTTCCACTTTTTAACTATTAGGAATAATGCTGCTGTGAACAGCTTTGTACAGGTTTTTGAGTGAACATCTGTTTTTCATTTTCTTGGTTATAAACCTAGGAGTGCAATTGCTGCATCATATGTCACTTTATGTTTCACTTTTTGAGGAACTCACACACTGTTTACTAACTTCAGTAGCTATATCATTTTAGATTCCCAATAGTAATATATGAGAATTCCATATTCTCCATCACTTTTGAAACATGTGTTGTCTTTATTTTTTTCTTAAGTCATACTGCTGGGTGTGAAGTGGTATCTCATTTTGGTTTAAATTTACATTTTCCTAATGACGAAAAACATTGAACATCTTTGCATGTGCTTCTTGGCCATTTGTGTGTTTCCTTTAGAGAAACCTCTACTCACAGCTTTTTTTCCCCATTGTTAAATGTGGTTGTCGTTTATTGCTCAGTTATATGAATTCCTTATACACTCTAGGTACTAGACCTGTGTCAAACATACAATTTGGAAATAGTTCTCCCATTATGTGGATTATCTTTTCACTTCCTTGACAGTGTCCTTTGAAGCATACAAGTTTTTTATTTTAATGAAGTCCATTTATCTATTTTTCGGTTGTTTGTGCCTACTTAAAAAATGTCTAATCCAAAATCACAAAGATTTGTACCTAGGTTTCCTTCAAGACATCGTCTTTTGAATGAGAACTTTCCTGGGTTTTAGAGGAGGGTGGACATTGTTTATTGATGCCTCCTGTCCATTACCGATGTTTCTCTTGATTGTTATTCATATGCTCACCACCCCTCCATGGAGCATCCATGGCCTGTGACAGAGCTCTGGGGACTGATATCCTTCCACTGACTTTGGCGCTGGTGAGAGCCCTGGTCATGTGATTCAGCTTGGCCTTAACCCGACCCAGTTGCACATATTCCTCAGGCCCTTTAGAGTTGAAGTCGAGACCTCTCTGAGAACGCTTGCCAGCCCATGCTCTTCTAAGGCTGGAGCAAACTTCCTCCATCTATTCCAGACAGAGGGGACTGCAGGGGTTGGACTCACTCAAGATATCTCTGGTGTTAGAAAGAAGACCTGTTTCAGGCTTTGGGGAAGATTGTTCAATATGAACTAGGTCCTCTCTAATTATTTTTACCGTATGTGTGACTTCTTTCTAGAAACAAGGGAAGAATATTTATGTTAGAACATTTTGTCTATTCTTTGTCAATTGTTGTTTATCTACAATTTTAACATGGATAAAGGAGAGTTCAGTGTCAATATATTCTTAACAACTAATTACGGCTCATGTCCACCGCCATGCGATCATATTTAAATCTGTCAACTATCCTGTTACTTAGGTATTATCCTGTTCCTGATGAGAAAACAAACTCAGAAAGATTGCAAAATTTCCCTAGGTCACAAAACTAGTGAGGAGAGGAGTAAGAATTAGATATCCGTTCCTTTTGGCCTTCAAAGCTAACCTTGTACCATTAGATCAAACTGATTTACATACTTTTGCTGGAATTAGTCTCAGACTTGTGGTTCTCACTTGATTTTCCCAAGGAAACAGTGTGCCACTTTAATATCATTTCAAACTTTGAAATTTAAAACTCTTTTTATTATACTTTTTTGTCTTTGTTCTATTCCGTTGCTTTTGGTTTCTTCTCAACGGATCCCTCTTATTTATATGCTAAATATTTGTTACCTATTTTCTGTCAATTTTCACCTTTTTGAGTGTTTGTTATCTGTCTGTTGTATGCTAACAGTTTTTCACTGAGGTAAAATTTGCGTAGAGTATACTGCAAAAAAACCTAAAGGCACAGCTTAATAAATTTTAATATAATTATAATTGTAAAGTAACACCCAGTTAAAGACAGAGAACATTTTCCCCCATGCCACAAAGTTCTGATGTGGTCCTTGCCAGTCAATACTCATCCCCCAAATGAAGAATATATTCTGAATGTTGTCACTGCCTTAGCCCCTTTGTGTTGCTGGAAAGGAATACCAGAGGCTGGGTAAGTTATCAAGACAAGAGGTGCCTTTTGCTCATAGTTCTGCAGGCTGTACAAGAAGCATGGCCCCCGCATCTGCTCCTAATGAGGGCCTGAGGCTGCTTCCACTTGCAGCAGAAGGTGAAAAGGAACCAGGGTGTGCAGAGATCATATGGCGAGAGAGGAAGCAAAAGAGAGCAAGGAAAGGTGAGAGGCACTTTTTAATAACCAGCTCCTACAGGAACTAAGAGAGTGAGAATTCACTCACTACCTTCTCCCAGGGTGGGGATTCATCTATTCATGAGGGATCCACTCCCATGACCCAAACACCTCCCATTTACCCCCACCTCCAACACTGGGGACCACATTTGAACATGTGATTTGGAGGGGACCAATATTTAAACTTAGCAGCCACCATAGATTCATTTTGCTTGATCATGTGCTTCATAAAAATGGAATCATTTTGGCTGGGCCTGGTGGCTCATGCCTGTAATCCCAAGACTTTGCAAGGCTGAGGCGGGCAGATCACCTGAGGTCAGGCGTTCAAGACCAGCCTGGCCAACATGGTAAAACCCTGCCTCTACTGAAAATACAAAAAATTAGCCAGGCATGGTGGCCGGTGCCTGTAATCCCAGGCACCAGATATGTACTGGTATCTCATATGTACAGGACATGTACTGGTATCTCATTGTTGTATTGATTGATGTTCCTGATGGCTAAACTGTAGAGCATCTTTTCCTATGCTAATTGACCATTCATGTATCTTCTTTTCTTAAGTACCTATTCAAGTCTTTTGAGAAATTGTTTCATTGTGCTGTTTATCTTATTAAACTTATATATATATACATACATATATATACAAATACACTCTAAAAAACCCCTTTGTTGGAAATAAATATATCTCCTATATTGTGGTTTCTTTTAATGTTCTCTTAATGTTCCCTGTTTGGAGATAACGATAGATAATCTTCAAAAAGGTGAATATACACACCCACACCCACCCACACACATACACACACACACACACACACACACACACACACACGTGAGCCACCGGATCCAGCCTGTTGAATTTATTTCTAAGCACAACATGTATTTAGATGTTACTTGAAATGAAATTGTATTTTTATTTCATTTTCCAAATGCTCATTGCTAATACACAGAAATACAAAAGACTACTTCTATTGAGCTTATATTCTGCAACATTACCAAACTCACTAATTACTTTTGGCAGATTTTTATAGATTTCTAGGATTATTAACATACACAGTCATTATCTGTGAATAAAGACAGCTTCAATTCTTTCTTTTCAATCTTTTCAATACTTTTATTTTTCTTACTTTATTGCATTGATTTAGATCTCTAGTATAATGCTGAATTGAAAGAATAACAACAGATATTCTACTTTTTTCTCTGATTTAATAGAAAAGCATTCAATCCTATGCCATTTAATATAATGTTACCTCTGAGTTTTTTTCAAATCTACCCTTAATAGGGTTGAAAGTGTTGCCTTCTCTTCTTATCATGCTGAGAGTTTTCTGGGGTTTGTTTTTATAAATCATGAAAAAAGTTTTCAATTGTGCCAAATGCTTTTACTGTGTATGACAAGGTAATCATATGGTTTTTCTCTTTTGCCCTGATAATACATAACATTACATTTTCTTAAATATAAAAAAGATTTCTTGAATCAAGCTAGGACAGTTTTTTTAATTATAAACTTTTAACAAATATATTGAAATATAACTTACATGCAATTGAGATGCATGAAAGTGTATAATCATTAAAGTGTATAATTTTAAGAGTTTGAGCACACTATACACGAGTCAAAGAGAAAGGACAGAAAATACTAACGATGGCTCAGCACATGTGGTCTATCTTGCTGAATGCTCTATGTGAGTTTGAGAAGAGTTATTTGTTAGCTGTTCTTAGATGTATTTTGCTTAAATATCGACCTGGCTAACATGTGTCATTGATTGTGTGAATTAATTTTGTTCTAGTGGGCAGTAAAATTACTGTCTGATCACTTTGGACTTATGTGGACTGGTTCATGTTTTATTACAACGGATTCATGGAAAGCCCACAGCATTTCCCAAGACCCTCTAATTTGGCAGGACTCAATCACCAATCCACCCCTTTGTGAATTTGTCAGGGTTTGCTTTTAGGCTTTAGCAGGTTGGTCTACAATAGGCCTTATTGAAAAGTGTGACACTTATTCCTAAAGCACATCCATTCTAGTGTCTCAGTTGGATACCTGGGTGCTAATGAGGTGTGCATGAGTTCTTCCCACCATGGATGGCAGAAACTCCATCATACATTCCCCAACCCTCCTCCACCTCAAGTACCTCTGGTCCAAACTCAATTTCATAGCAGCCACCCCTCTGTTAAATCTGTTAGTCTTTTCCTTGTGCAGGTAGAGTCCACTCCTTGATAAGTATGCACATGGAACCCCACATAGACTTTGAGAGCTGCACCTTTGATCAGCTGTCTCCTCACTGGTGCCCTGCCCTGCAGATTGCAGTTGCTTCAGCCGTCTTGAACTCTGATCTCTGCCTTCTCAGCTCAGTGAGCTGCCCTGCCCTGAGTGGACTCTAGCTCACTATGCAGCTGCTGAGAAATTCTCCCCAAACAACTAGGAAATCATGGGGCTTCCCCCTTAAGTTTTCTCTTGGACTGCCTGTTGTACACTGCTGAAAACAATTTTACGTTTGTTTATGGAGGCAGGGTTAGTCTGATATGATTTATTCTAACAGACAGAAGCAGAAATCTGTTATACTCTTTTAATTACTGTGTCTTTATAATATTATGGTAGACAGAATCCTAAGATGACCCCCAGTGATCTTTGCTCTTATATAATCACTTCCTCCTGAGTGTAGACAAAGCTACTGAGGAGATGTCACTCCTGTGATTGTGTTACAATTTATGGCAAAAACAAGTTAACAGATGTAATCGAGATCCCAAATCGGTCCAATTTAAGATAGACAGATTATCTGATGAGCTTGACCTAGTGAACGTGAGTTCCTTGGAGGGACTGAGGACTTCCTGGAGAGATGTGAAGTGCAGGAGGGTTTCCATGCAGGGCGATCCTCCTCTGCTGGCTGGAGGAAGCATGCAGTGGGAACATGGGAGGCCTCTAGGAGCAGCGAGAGGCCCCTGGCTGACAGCCAGCAAGAAAACAGAGATCTCAGTCCTACAGTCACAAGGAACTGAACTCAGCTGACAACCTGAGGAAACTTGAGAGGAAGTTCTTCCCCAGAACCTCCAGAAAGAAACCCAGCCTAATTTCAGCCTGTGAGGCCCTGAGAAGAAGACCCAGAGAATCCAGGCCTGAACTTCTGATCTGTGGACACTGCAAGAAAATAAATCATTCTTATTTTACGCCGCTAATGCTTGCAGTAATTTAGTATGCAGCAATAGAAAATTAATACAAATAAAATGGAGAAGGCTTTGGAGTGGGGACAAGAAGGAAACGGTGGGAGAGGGATGCCTGTATGCTGATATGGTTGATGCCTGTATGGTTGAATTGGGTCTACCGTTCCTCATCTAATTAGCTATGGTCTATTAAGGTGCATAGCTACACACAAATATTGGTACTACGTTCAATTCAGAGGAATAAGATATTGCATTCTTGACAGTAGACAAGAACACCCTGAATTTGGGGTCACTGTATCATAAGTCATGTTATCAGGTCCCTCTAGGAAGGCTTAGAGGAAGATTTCCAGGATACACTTGTGACAACATTGAAGGCTTCTTTTTTCCCCAAAGGGACCCGATCTCCCCTCAGTCGAGAAGCTCCAAGTCTCTGAACTGGATGCCAGGTTATAAATTCCCCCTATACTGACTCCATCAGGCTTCTGTCCTCAGAACTAGAGTTTATCAGTAAAAGATAGACTCATGGGAGTCTAGGCATTTATTCTCTTATTTTATATAAATCAGTTAATGTGCAGGAACAAAACAGACTTTGAAGAAAGACACTCACAGTTGCCACAGGAAAACACCTTCAACATCCTCATGAGTCATCATGGGTGTTCTGTTGGGAGGACTTGATAGGAGGCTTTCCTCCTCACGGGCTAGTGCAGATCCAGGGGAAATGTCATCAAGTCCTCCATTCGGAGGGTAGCAGCTGAGGCTGCTGATTCGTTAGGCCTCCTGCAGCTGGAGATGCAAGTAGTGCATTTTCATGGCCACCGCAGGGCCCTCAGTTTAGCATTCTTCAGAGCCAGCATCCAACAAGCCACAGAAGCTCTGAGTATTTCCCTTTCTTCAGTCACCCACATAAATGGCTTCAGGGCCTTCTGGGGAAGGCCTGAAGGAAGATTTACAGCATACACTTGTGGCAGCATTGAAGGCTTCACTCTTCCTCAAGGGATCCAATCTCCCCTCAGTCAAGAAGCTCCAGGTATCTGAACTGGATGCCAGGTCATAAATTCCCACTATGGTGACTCCATCAGGTCTCTGTCCTCAGAACTAGAGCTTTTCTAAGTGTAACGTAAGTTGATTTCTTAGTAGATGTCCCATCCATTACATTCCCAGACACCTCACAATGATTCGAATGATTAGTAACCACCACATATCCCTGCCTCTCAGGGAAATCCCTCCCGCCTTGTCTCTAGATGGCCAAGTCCCACGGCCTGTCCTCTACTCTTCCAGAACCCTGTTGTTCTCACTGACAGCAGGGAGGGCAAATCCATGCAGCAGCTCCCGCCATGACCTCCAGCCTGCAGAGGATGGGCGCCACAGGACTTTTAAACGCATGCCGCTGTTCCCCTCACCTGTGCATTTCTTAACGCCTTGGTGAGGAGAATGTCTCTGGATCTTCCTTGATGGGAGCTAAAGGAACAAAGGTAAATAATGCTATGGGACCCACTGAGAACTGGGGCTGTGGAAGAGTGGCCACTGAAGTAATAGACAGATGCAGCTATTGCCAGATACTCAGTGCCAGAGCAGGGAGGGACAGGGAAGAAATACGGACCTCACCTTCCTCTCACTTCCAGGATCCATCGGGGGCCCTCCATTGCTAAACCTAACTAGAAGTGTGCACGCACGGGAGCCAGGGATGCATTCTAGGAGGGACGAGCCCCGAGTGGCATGAGACAGGATGGAAATGAGTGGACAGTGGATCTGTGGGAAGAAGGAGGGGATGTTATGGGAAAACAAAAGGAGAATACTAGCTAAGAACGCTAGGTGACATTAATATTCCGAAGTCTGTGCTCATATTCAGCAAAGAAAGTTCAGCATAAAGCACTAAATAAGGAGTCAAGATATTGTACTTCCAACTGTTGTTCCAACAGCTGTATTATGAAGGGCCACTTTATTTCATGCCTTTCTAATTTGACCTAAAGTGCCAGGTGGCACTGGGGCTGGCACAGCCTTGCTCAATTATGTGTTGCAGAGTACACAGAGACTGCCAGGCTGAGGGAAGATGCAAGAGAATAGAAGAGATGCTCTCAGGGAACAAGAGACCACATGGCCCCAGAGTCAGGGGCAGCATCAGCCACTGTCAGCTGCTCATTTTCCCAGACAGAGCCCACAAGCCTCAGCCATGCTTTGCTTCTGCAAGACGCTTCTTCACCTTTTCAATAAACCTGCCTGAATTTAAGCTGACAGGGTTTATTTCTCCTTCATCATAAATGAAATTCTTCACCACAACAATCTCCAATGAATTTTGGGCACAGCAGGCAGGCCCATTTCTGCTTCTGTTCCACTATCTCTCCTGTAGGTTGAAAAGGAGGAGGTACTGAATTACCTCCAAATGTTCCTCTGGCTCTGATATTCTGTTATTCTGGTTCCTTTTTGGCTACTTTGTTTTTGGTAGCGTGTATCCTAAGGCGTCCAGTTGAACAACTTTTGTCTACTGTGTCCAGGCATTCCTGGTGGTATTTCAGATAAGACTCTCTTGGGTTGCTGAACTCACAACCACTGAACCAATTCTATGACCATCTGTTTCATGGCCACATGTTTGCTCATTTTATATGTACATAAAGGGAGGGGACAGACAGCAAACTTGCGTGTTACAAATTGTATCATCTTAAAAAGGAAACAAGGCAACACTTTGCAATAAAACCTTAAGATGCATGAAATTTGAGCCTAATGCAATAAAGGATGCCCATAAAATTCTTATCTAAAGAATGTTTCGAAAATTGTTGTACAAGGACATCATCATTTAAAGTGATATGAAGAAACCTTCTCAGCTAAGCATATGGGCTAGATTAGAGAGAAAAATAAAGGACCCATCTCTGCCCTGGAAAAACTGCTGGTAGCATCTTTCAAAAAGCTCTCTGTGTTTGAGTACGCACCTTGATCCATAGGCTCACATTTGATCCCAACTGGCAGCTGCTTCTTGGCATTAACATTGGATTCCCAACTAGTAAATCTTACCAAGATCTGACTTTCTGCAGATATAATATTATTTTGTTTGACCATCCTTATCTTCAAGGGCTACCAAGAAGGAACCAAGAATTTATTTACCTCCCCAAGGGAAAAGGTTTTACCAATGAGACCCTTTCTCACCATGACCCCAGGACCCCATATGCCCTGTTCACTTGAGTGCCCTGTGTGGCCTGATAGAAGCTCATGCTGGTCACAGGATTCCTTATATGACTAGCCTCCTTCCTGAATCCCAATTTCATGGTGGTGGTCATGACAGGTGTCCTGTATCCCATGCTCATGTCCCTGAAGTCACCAGCCTATCTCCAGTTAGAAAAAATTACATGTATATAGAGAGGCCTCTTTGGAAGGAGCAAAAGCTTTCTCACCTTCGTACACTAATGGTTGGAAGGTACAACAGCATATGCACTTTGGGAAAAAATATCTGGCATATTCTTACAGAAACAAACAACTACCTATTCTATGACTCAGTAATTCCTAAGCATTTATCCAAGAGAAACTAAAACCTATGTCCAGAAAATGACTTATACAAGAATGTTCATAGCAGTTTTATTCATAATACAAAAAACTGGAAACATTCAAGTATCTGTCAATACAAGAATGGATCAATAAACTGTGATACACTCATTCCATGGAATGGCTAAAGGAACAAACTGGTGACACACAGAACAACATGGATGAATCTCAAAAACATTTGGAGTGCGATAGAAGCCATACCCAAAAAAGTGTGAGAAAAAAAGATAAATAATAATGGTTCCAAGAAATGCACAGCAGACAGCCCAGAGGCAAAGACCCACAGGACGGCGGGCCGGTCCCAGGCTGTCGATCCTAATTAAGAAACTTCTGCTGGATTTTGCCCAGCTCCATTTCCAAACTATTTTGGGTCAGTGACTTCTTTATCCCTTCCATGTTGCCTCATTTTGAACTAGAATCACTGTAAGTGTTATTCTATGTCTGTCACATCATTCCACAGTAGGGGCAGATAAGCTGTTTAGAATGGCTAAAATTCAAAAAGGTGAACACACCAAATGCTGTCAAAGATGAGGAGCAACCAGAACTTTCCATCGCTAGTGGAAATCAAAAGGGTACAGTCACTTTGGAAAACTTAAGTTCACTCAAAATCCTGCACAGAAGTACTTACAGCAATTTTATTCATCATCGCCAAAACTTGGAAGTGCCCAAGATGTCTTTCACCAAGCGAAAGAATAAACAAACTGTTGTAGCCATACAAGGAAATCTGATTCACTGATTTTAAAAAACAAGTTATCAAGCCATGAAAAGACATGAAGGAACTTAAAGTACATAATGCTAGAAAGAAGCCAGTCTGGAAACCCACATACTGTACCACTCCAACTCTAGGACATTCTTGGAAAGTCAAAAAGATAGAAGTAGTAAAATGGTGAGTGGTTGTCAGGGGTGGAGGAGAGGAGGACGCGTGAAATGGTGAAGCACAGGGAATTTTCAGCAGTGAAACTCTTTCGCATGATGCTGTATTGGGGATTTAGGACATTATGTAATTGCCAAAACCCATAATCTGTGAAACTCAAAGAATGACCTCTAATGTAAACTATGGACTTTAGTTGATAATGACGTATCAACAGTGGTTCATCAATTGTAATGAATGGACCACACTAATACAACATACTAGTAGGGAAAATTGTGTGCTGGAGGACAGGGGAGCCTAGGAGAACTCTCTGTATTATCCACTCAAGTTTTCTGTAAACCTAGAACTGTTCTAAAAAATAATGTCTATTAACTGTTTTTTTAATTAGGATGCAGCAGCCCCATATCAAGGTTTTGGTGGCATCCTGTAATTGTGTGGTTAGTACTTGGCATTGAAGTGCACCAACCTGGAGTCAGAGCAGTTGGAGATTTCAAGGCCTGTGCCATTTACCTCTAACCCTGGGGTGCCCCTGGAATACAGATAGCAGATCGGTTAAGGAGAAGCAGCCTCAGCAATCTAGACAGTGCAGGTTTCTGGTGAGGACAGGTAAAAACCATCTGGGTGGGCAGAACTTGGTGAAGACCAGAAACCACTGAGACTCAGCAGCTGCCGCAGTGGCACCCACAAATCAAAGGAGGGGGCTGGGAAGAGCTAAGGGCTACTGGATGAGCTCTCTGCCTGCAAGACAGAAGCAGATCCAGAGATTTTGGAAAATAATGTAGGTTTCAGTACAGTGTGATCTCTTCAAAAAAGTAGAGAGAATGAAAAGGAAAGAAAAAGAGAGAGCATGAGAGAGAAAGAAGAAGAAAAGAAGAAAGGAAGAAAGGAAAGAAGGGAGGGAAGGAGGGAAGGAGGAAGGAAGGGAGGGATGGAGGGCGGGTGGGAAGGAGGGAAAGAATAAAAAGAGAGAGAAAGAGAGTTGGAGGGAAGTAGGGAAGGAAGGAAGGAAGGAAGGAAATGAACAAATTTACATGAAGATGAGAACAGTGGGGAAACTTACACCACCAATATTTTCCATTAACAGGAACACGCTAAGTAGTTATTAGAGAAAGACACGCTACTGTAAAACAATATACTGTTTCCATGGGGTACAACAACCCCTTCCTCCTCCTCTGAAACACATTCTATCTCTGGCTCACTGTTGCCAGAGACACTGAGTCTTGTCTTTGGATACGTTCTGGTGCCCACAAGAATGAGATGAGACAGTGGATCCCAGAACACCAGGCCACGAACTTCCCTGTTGCTCCTTGTCCACTCCAGAAGCTACCCAGCTGCAGTTGGGGACCTCAGCCCCTGGGTCTGATGTCATCCATTTGCCTTTCTCAATGGACTTCTCTCCTTGCACTGGCTCCTACTCCCCCAGGACCTGTGGGTGACCACATGAGAAGAACACAAACAGGCCATGCCCCTTTCTTTCTCCCCCTCTCAATGCCTGCAGTAGTGGGTTCCATGGGGTAGTGACCTGAGATTTACTCATTGTGGGGCCTCTAGCCCAGAGCAGGGCCTACTACCTCACAGTCACCCCATGAATGCTCAGTGAAAGAAGACGTCCACCACAAGGTCCTGGGGAACCAAGAATTCCACTGTGGCCCATAAATTCTAAGTCTACAGGATTCTGGAATGGGAGATGGGAAAGGCCTTCAAAAGTGGCCACTTTTAACCCATTATACTGGCAACTGAGCCATGTTTCCCCATCCTGGACACATCCAGAGGGCACTGCCTAAAACCAGACACATCTCCCCACCCAGGACAGTGTAGGAGCCTTAGCCTGGGGGATGCAGGTGGACAGGGAGGGGGTGAGCCACCAAAGCTGAAGAGCAGAAAGCAGGTGAAAGGGGACAGCAGGGTGGAAACAGAGAGAAATGGGGGCAGAGAATGGGGGGTGAGAGGGGAAGAGTGAGGAGAGGGATGCAGATCTAGCTAGTAAGGAAAAGTCCTGGAGAGAACACTGTCCTCTCCTGAAGTAAAATCACTTCTACCTGACCACGGCACTGCAGCTCATGGGCAGCACATGCTGTGGATATTTGTTCATTCATTTAACAAATATTTATTTAATATCTGTTGCATGCCAAGCAAGGCCCTGCAATGTTTAGGGACCTTGACATCTTCCCTTCACATCTGAGTCATAATACAAAGAGGACTCTCTGACCCCACTGAGCTGGCAATGCCTCGGGATTTTTACCTGTTGGATCTGGCAGCTCTTGATGTCAGCCCACACCATGTGAGGCTGCTCTTGGTGCACCCAATGGGGAAGTTTCTACATCAGGGCCTCGGAGAATCCACTGGAAGCCCTGGACAGTGGGAGTCAGCGGCATCCCCAGTGTGGAGGCCAAGAGCACACAGTGCTTAAGCTCCAGGCACCCTCAGGAGGACGGCAAGGGACAATTGGCTGGTGAGAGCCCGGGTCACCGGGAACCTTCGCCTGGGTCTAAACAGGATTTGCCTTCAGATTGCCTGTGAGATAAAAGAGAGAAATCAAGGTTAACGTTGAGATTTAGGGCTTCGGTAACTTGAAGGATGGAGCTGCCATTTACGGAGACTGGGAAGACCCAGGGAAGAGCAGATTGAAAGGTGGTGGGAACTAGAGGTGGTTGGGTTTCTGTCATATGTAATCAACAGTCCTGACCAGCCTGGGCAACATAGTAAGACCCCGTCTGGGAAAAGAAAAAAGGAAAAATAAGCTGAGCATGGTGGTGCACACTTGTAGTCTCAGCTACTTGGGAGGCTGAGGCAGGAGGATTCCTTGAGCCTTCAGTTAGCGGTTAGTGAGCTATGATGGCACCACTGTACTCCAGCCTGGGGGGAAAAAAATAAAGAGTCCTGACTAAATACTAGAGTAGCCAGGGAAGTTTTCACAAAGTAAGTAATATTTGAGGCAGATCTTAGTGAACAAGAATTCCATTATTTCTGTTAGGGAATTAAGAGAGTGTGGGTGTCGTTAGTTAATGCTTATTAAAGTAGCTTTGGAATCTCATCTACTGGTCTAGCTGGTCTATCTGTACACGTATATTGTATATGCTGTCTCTCTGAGCTTTCGCTAGGTTATGCTACGGTAACAAAAGCCCCAAAATCTTAGCAGCTACACATACGAAGGTTTATTTTTCATTGACATGTCCTTTTATGGCAGGTTGACTGTGACTCTACTCTATACAAGCTACTTTATTTGTTAGATGGTGAAAACTGTGATACTCGGAGGTTGTTGAATATGGTATTAGTATGTTCATTCATTCATTCATTTAAGAAATATTTATTCAATATCTGTTTCATGCCAGGCAAGGTCAAGTACTGAGAATACACTGGTGAATCAAAGAGACAAAATCTCTAATTGCCAGGAGCTTATATTGAAAATCAGATTAAACACATACAAAATCATCATAATAACAACAATGAATACTATATTCATAAATAATAGCTGTAAGAGATTTTAGTACATCTTTTAAATTAGAAAAATATAAAAATTATTAAAACTAAAATGGCCAGGTGTGATGGCTCATGCCTGTGATCCCAACACTTTGGGATGCCAAGGTGGGAGGATCATTTCAGCCCAGGAGTTTGAAACCAGTCTGGGCACTACAGGAAAACCCTGTCTACAAAAAGGAGAAAATTAGCCGGGCACAGTGGTGCATGCCTGTAGACCCAGCTACTAAGGAGGCTGAGGTGGGAGGAGTGCTTGAGCCTGAGAGATCAAGGCTGCAGAGAGCCATGATCATACCACTGCACTCCAGCCTGGGCGACAGAGCGAGACACTGTCTCAAGAAAAAAAAAAAAATTATTTGATGTAGTCCTAAAACTATTATGTAGAATACTATTGTTTATATCACAGCACGTGAGCCCCTTAAATGGCTTAACACTTATTTAGGTATGATCCATAAAGCTTTTCTGGTAATTAAGTATACTTAAGAACAATTAAGTATAAAAGAGTTACTGCCTTGACAGGAAGATTGTAAAAATTTTAAAAAGACAAATAAATAAAAGAGTAAAAACTGTAGCTCTGTGAGGCTCAAATAACATCTAATTCAAGTCACAATGAACATCTAGCAATCATTCTGAACACCATATAATTCACTTAATACGTTTTGCCTGAACACCCAACACATCTGAATTACCAACACCCATATGTAGCCAAGAAACTGGCAATCATTTATAAATTATCACCTATGACTCCATCTGCTCTACGCACTTATTTTTTAAATTTTATTCATTTATTTATTATTTTTATTTGTTGTAGAGATGGGATCTCACTATGTTACCCAAGTTGGTCCAGAAACAGAAACAGACCCACACTAATTTCATAAATCAGATGACCATACAGTCATTCGATTTATGAAAAAAAGTGCCACATGGTGCGGAAGGAAAAGGATGGTCTTTTCAATAAATGGTGCTGGATCAAGCAGACACATCCATGTAGTAAAAAGTGAATCATAGCCAGGTGGGGTGGCTCACACCTGTAATTCCAGCACTCTGGGAGGCTGAAGCGGGCAGATTACTTGAGCCCAGGAGTTCGAGACCAACCTGGGAAACATGTTGAATCCCCATCTCTACAAAAAATATGAAAATTAGCCAGGCATGGTGGCACATGCCTATAGTCGCAGCTACTCAGGAGGCTGAGGTGGGAGGATCACTTGAGCCAGGAGATGGAGGTTGAGTGAGCTGAGATCCTGCCACCACACTCTAGCCTGGGCAATAATAGACTGAGGCCCTGTCTGAAAAAAAAAAAAAGCAAAAACTAAAATAAAATCGTTATAAGGTTAACACAGAAAAATGTGTTCATACTCTTAGGTTAGGCATTGATTTCTTAAACAGGACACAAAAAACAGTAACCATAAAGGAAAAGATTAATAAAGTATAATTTCATTAAAATGAAGAATCTCAGGCTGGGTGCAGTGGCTCATGCCTGTAATCCCAACCCTTTGGGAGGCCGAGGCAGGTGTATCACTTGAGCCTAGGAATTCCAGACCAGCCTATGCAACGTGGCAAAACCCATCTCTACTAAAAATACAGAAAACAGCTGAGTGTGGTGGTACTCCCCTGTAGGTCCCAGCTACTTGGGGGCTGAGGCAGGGGGATCACCTGAGCCTTGTGAGGTCAAGGTTGCAGTGAGCTGTGATTGTGCCACTGCACTCCAGCCTGGGCGATGGAGTGAGATCCTGTCTCAAAAAGAAAAAAAAAAAAAGAGAATCTCCCTTCATGAAAAAACACCATAAAAGAGTGAAAACGCAAGCTACAGATTGAAAAAAGGGAAATGCAATACATATAAATCCTAGAAAGGAGGCATATCCAGAATAAAGTATTACAAATCAACAGGAAAACAAGCATATCAATGAAAACTGGATAAAAAGATTTAACAGGCACGTCACAAAAGAGGACATATAAATGGCAATAAAAGATACTCAATCTCAATGAAACCACACTGATATATTACTGCACCCCTACTAGAATGGCAAAATAATTTTTAACTGACAGGTATCAGCGAAGATGTGGGGTAACCAGCATATCCCTGCTAAATGGTACAACTACTTTGGGAAAATGTTCAACAATATGTAATACTAAAGTTTTATCATTCATATACCTCTAAAACCAACAATGCCACCCCTACAAATATACCCCAGACTAGTAATGTTCAATTTCTTGATCTGTGGTGGTTCACTTGGTAAAAATTCATTACTTTTTTTTTTTTTTTTTTGAGACAGGGTCTCACTCTGCCATCCAGGTCGGAGTGCACTGCCATGATCACGGCTCACTGCAATCTCAACCTCCCGGGCTCTGGTGATCCTCCCAACTCAGCCTACCGGGTAGCTGGGACTACAGGCACACGCCACCACACACAGCTAACTTCTGTATTTTTAGTAGAGAAAGGGTTTTGCCACATTGCCCAGGCTGGTCTGGAAATCCTGGGCTCAAGTGATCTACCCACCTTGGCGTCCCAAAGTGCTGGGATTACAGGTGTGATCACTGCGCCCGGGCCACCTGCACATGTAAAATTGTGAACTTCTGTATACTTCAGTAACTTTTCCAAGATTTCTTTGACGCAAAGTTCTCAGAAATCTTAAAGCTAGCATTTCAGAATAGAAAAAGTAGCTTCTGGTTCACTAGTGAAATTTTACCAATAGAATTTAAAAACAAAAAGCTACTAACGCATATCAGCTCAGAACACTACCAGCAGATCTTTTCTTTAACTTCCTGAAGCACTGGGATTCATTCTTTTGGCAAAGAAAGGATGAACAACACTGTAACCCAAAGAAAAGATACCACTGCCAGAAAAGACTTCTTTTCGAAAGCAGCTCTAAGCAAAAGATAGGAGGAAAACAAGGAAGCCAGGCCAAACGTCTTGGTTAACTCTCCGCTGAAAGGACGCCACATGAGATGATCTAAGAAGCCAGCCAGCCAGCCAGACGCAGGGAAATCACAGCAACTCTTTGGAGTGCAAACAGCAACCCCACAATCCAATCTACCCGAAATCCTGCGGTTCATTTGAGGCTTGCCCCGCTAGTCAGGAGGTGATTCAGTGATGGCTACAAATGCTGCTCATGTGCATCCTGGAGCTGGCACACCTGGCTTGCCCATCACCAGCCTGGAGACACCGCCAGGAGCAGAAGCCCGGAGGCCAGTAAAGACCCCAACTTTGCAAGTCAGGGGCGCGAGCGCGCTCGCCTCTCAGGTCCGCAGAGGGAACGGATTTCTGGCCTGGAGGGTGGGGTGCGGGGTCAGTGTCCTCTACAGGATATAGGAGGACGTGCCCCCGAAGCTGCTCCGTCCCTCCACCCCCTGGGATGCCACAGAACACCCGCCAGCGAGTTTCTTCCCCAGCGCCCACGAGAGTTGGGCTGCGGGCGGCAGCGGCAGGCGAAGAATCCAGCGCGGGGAACTCAGGCCCCGGCGGTGCACGACCCCCCACAGCCCCCACCCGCCCCCGCGCTCGCGCAACAAAACTTGCCACGGCCGCGCCTCGACCCAGCTGTGCGCCCGCGGGTCCCGGATTCACCGCCCGCCCAGCCTGGCGCGGCGCCCTCACCTCAGAAACGCTGGGTGGACTTCGCGTAACTTCCCATTCACAGGGCAGCCGGCAGCCGCGCCGCCGCGCCTCGGCCCAGCTCCTGGCGCCGCAGATCGCCCGTCCCGCGTTCCCAAAAGCACCGCGCTCGCTCAGAAGCTCGGGCAGCCTCGCGACCCTCACCTACGCCTCCCAGTACCGCCGCTGTCTCAACCGCCACCCAGCCCCTCGCCTGCGCCTGCGCCTGCAGCCCACTGGCTCCTCAGGATCCCGATGGGCGTGTCAGGAT", 16888922 - 1); + var genomicSeq = new SimpleSequence( + "TGATAGGCAAAAGCTTTTAATTGTATAGATTAAAATAACTTTGGACAAAAATTAAAACTCAGGCAGAGAATGTTTTTTTTTTCAACAACACACACTAGCAAAAACAAAGGCACAGTAAACATTGAGGCAGAAAGTTTCCAGCGTAGAGATATGAATATAATAATAGACACAGGCAGGGATGATTAATAAATGATAAAATGTTTACAGGATGATCATTGGAATACAGGACATTTCTAATTTTGAAAACCACCCTCCCAAATACTTCATTATAAGTAAGGTGTCTCTAAAAGGGACAGATCTCCTAGACCCCTCCTTAACCAAGTAACCAGTCCTGATATCATGATAATGCTGATGGACAAACTAGACCTTCTCTGCCCGCAGATGGGCTAAGGTTGGAAACTCACAGCATTGTCTCTGCAGTGTTCCCGGCAAAACGTTTAGGCTGAATTTAATCATGAAGACATTTTCAGACAACTTCAGAATGTAGATCATTGAGCCAGAGAGCTGACCTGTCCTCTATAAACAAGTCCATGTCACCACCATCAATGACAACAACAAAAAGATGAGGAAATATTTGGGGTTCAAAATAACTAAAGAAATGCAGCTATATTATCTTTTTACTTTTTTTGAACCCAAAATATCTCTTCTCCTTTTTGTTGTGTGATTTGTGGTGATATGGACTATGTGAAGGAGACAGGTCAGTTGTCCTGCTCAGTGTTCTACATTCTGCAGTTGTCTGGTAATTACCTCCTATGAAACTCAGGCTAAGCGTTTTCTGCAAGAACATGGCGTTGTTCATATTCTGCACCGGCAGAGTCCTGGGTGACATGCTGTCTCCTGCCAGCGGCTCCTGACTCCTGTTCTCTACAGGATGGAATCGAGAGGAGCAGGGCTAAGGCCTCCCAATGCTGTTTGTCCATCTAGCTGTGGTCTTCCTAAGTACTGACACCAATTGGAGGCTGAAGGACTGTGGCTTCTCTAACCAAAGGAGCCTAGCGGGTTAACAATTGTCAAGAGCAGTTGGTGGTTCTGAAATACAATCCTCAGCCAAGGATCCCTCCTGTGTTAAAGATGGATCAGCTAAAACAATTCAACACTGAAGATACAAAGAATGAGGTTAGGTTCATTGAAACCAGGGTAACACCTTTGGATGAGCTAAACACAAAGATGACACTGACCTTGAGCAGGTATAGAAGCTCAGAGACATGACTGCAAAATGAAATCCCTGAGGAACTTTGTAGCTACCCAGAGATAAGTGGTTCAAATTAAAATGTCTGACTGATCACTCCCGGCATGTGCTGCACAGTTATGTGAACGTGTCACACCTAACTTGGGTCCATTGTCTTCAGACTGAGCACAGGGTGCCACTGGCATGGTCTGAGAATAGGAATAGAGCCATGCCCACTGACCCATCCTATGTCTGGGCTTCCAAATGGAACTATAGTTTCATTCAAATCTTCACGTGCCTATAGGTCCTGCCTGCAGGAATGACATCTCTCGGCTTAGTAAGGGCTGCTTACTGTGGGAATATGACTCCCATCTGGAAGACCAGGTGGAGACTTGTTCCCATCAAAGTAAGAAACCTATTGTCCACGTCAAGGGCGAAGCTGATGTGCTGTTCCTCAAATGAGTAAAACACACTTCTGTAGTGCTGGAATGAGTCAGGTAGTTCAAAGTACATTGACGGAGTCGAATAACATCTATCCAGTGAGTCCTGCAAGACTTCAGGCTCTTCCACTTCCATCAGCATGCCGCTGAGCCTGGAAAAGCAGACAAAACTAAAGAAGCAGCCAGGGAAAATCAGACACCACAGAGCCCCACTAGATTTCAGAAGTAACGTAAGGAAGTGGTAAGAAAAGAAAAGGATAGATCCATTAGATCCATTAATGAGGTAAAAAAAAAAAATTATTGCCTTTATGTTGGGATAGAAAAGGGCCAGGTAGAAAACAATGAAAGAGAAAGACAGAGAGACAGAGACAGAGACAGAGACAGAGAGAAAGTGAGCTAGTGAATTGGCCAGGTGACATACTGGTAAGGGAGTAAAAGGACACTCTGAGTTAGTGCCCTCATGACACACAGCACACTGCGATCATGAAAAGAGTGAGCTCAATAGTTTTCCATAAAATATGCTCAAAATTCGATGCAGTGGCCATGAGAGTACAGCTTTTGAAGTATGGTCATCCTATGGTACGTTAGTAAATGATAAGGGGAGGAAGAAATGGAAACCTAAACATCTACTGCAATGAAAACCAACAGCAATGACAGTAGGAGTAATTCAGCCTTCGTTGAAAACATGAAATCAAACACACTCTGGTTTCCCTCAATCTGTTGCCTCCAGGTGTTAACACAGAATTAAGCATCCACAATTGCTGAAAGTTACCTGGGGCATGGTGGGTTTTGATCTTCTTCCCCTTCTTTTCTTCCCCTTCTCCTTCTTTTCTTCGTTGATCTTCTTCCCCTTCTTTTCTTCCCCTTCCCCTTCTTTTCAATTTCTGCAATAAATTCAGACATGGACAGACACATTAAGCTGATTCCCCTACACACATAACAATCCACTGTCTAACCCTCACACAGGGACCTCAGGCTCCTCAGCATAAGAATAGGAGACTGTGAGAGATATATTTCAGGAGGCCTGAAGGCTGGTCATGATAGAAATTCCTCGGTTTTTCTCCCAGAAACTGTGGGTAAAATGTCCCTATTCTAGTAGATCGTTATCCCAATATCATTTGTCCCGAGTTTGTGCAAACAGTTATGCCATATTTTTCCAATCAATTTAAAGCAAATACCCTCAAATGATTTCTAGGAGAAAAACTGCAATATTTAGCCCTGTCTCATCAAATACTCAGATTGTTCATGGTTGTGAGGACTTTAGACACTGAAATTAGAGTGAAAAAGGAAATCTACAAACCCTTGAGTCAAAATCATAGTTCTCTGAATTTGTCACATCTGCCCAGGTCCAATGTCATGAGAGTAGAATCAGAGTGCCACAGGCATGGCCTGAGACTAGGAAGAGAGCCATGCTCACTGACCCATCCCATGTCTGGGCTTCCAGTTAGAACTAGAGTTTCATTCAACCTACATGTGCCTATAGGTCCTCACTGCAGCAATGACATCTCTCAGCTCAGTAATGGCCACTTGGAGCAGGAATATGATCTTTATATGGAAGACTCAGTGGATCCTTATCACCTTCATAGAAAGGTACTCACCTCCCACGTCAAGAGAAAAGCCAACATGTTTTTCCTCCAATGCATAAAAGGAACTTCCATAGGGCAGGCAGGAGTCAGGCTGTTCAAGACAACTGGAAGGAGTTGAATAACATCTATCCAGTGAGTCCTGCAAGACTTCAGGCTCTACTGCCTCCAGCAGCTCCCTGCTGAGCCTGGAAAAGTAGGAAAAAGTAAAGAATAAGCCAGGGGGAATCAGAAACCACACAGCCCCAGCTACATTTCATGGCTAACATAAGGAACTGTTTAAACAGAAAAAGGACAGATCCATTAATGAGGTAATGAATTATTGCCTTTATGTTGGGATAGACCAGGGCCAGGTAGAAAAGAATGAAAGAGAAAGACAGGGAGAGGGAGAGGGAGAGAGAGACAGAGGAGAAAGTGAGCTCAGCGAATTGGCCGGGTGACACACTGACGAAGGGGTCAAAGGACACTCTGAGTTAGTGCCCTCGGGACACACAGAGAACAGTGATCATGAAAAGAGTGGGCTCAATAATTTTCCATAAACTTGCTTAAGATTCCATGCAGTTGCCATACAGCCTTTGAGGTATGGTCAACCTACAGTAAGTTAGTAAATGATAAGGGGAGGAAGAAATGGAAACCTAAACATCTACTGCAAGGAAAACCAACAGCAATGTCAGTAGGAGTAATTCAACCTTCGTTGAAAACATGAAATTGAACATACTCTTGTTTTCCCTGGACCTGGCATCTCCAGGTGTCAACACAGAATTAAGCATCCATAATTGCTCAAAGTTACCTGGGGCATGATGGGTCTTGGTCTTCTTCCACTTCTTGGTACTTTTCAATTTCTGCAATAAGTTCAGACATGGACAGACATATTAAGCTGGTTCTCCTACACACATAACAATCCACTGTCTAATCCTCACGCAGGGACTTCAGGCTCCTCAGCATGAGAATAGGACACTGTGAGAGATCTTCTTCAGGAGGCCTGAAGGCTGATCATGATAGAGATTCCTGGGTTTTTGTCCCAGAAACTGTGGGTAAAATTCCCTATTCTGGTAGATCGTTATCCCAAGATCATTTGTCCCAAGTTTGTGCAAATGGTTATGCCATATTTTTCCAATCGATTTAAAGCAAATGCCCCCAAATGGTTGCTGGGAGAAAAACTGCAATATTCAGCCCTGTCTCATCAAATACTCAGATTCTTCATGGTAGCGAGGATTTTAGATGCTGAAATTAGAGTGAAGGATGAAATCTACAAGATCTACAAAATTGAGACAAAATCAGAGTTGTGTGAATTTGTCACATCTGCCCAGATCCAACATCTTGAGAGTGGGATTAGGGTGCCACAGGCATGGCCTGAGACTAGGAAGAGAGCCCTGCTCACTGACCCATCCCTTGCCTGGGCTTCCAAGTGGAACTAGAGTTTCATTCAACCTACATGTGCCTATAGGTCCTCCCTGTGGCAATGACATCTCTCAGCTCAGTAAGGGCCATTTGCAGTAGGAATATGACCCTAACCAGAAGACTCAGTGGATCCTTATCACCTTCATAGAAAGGTACTCACCATCCATGTCAAGAGCCCAGCCAACACGCTGTTGCTCCAATATGTAAAAGGCACTTCTGTAGGGCTGGCATGAGTCAGTCAGTTCAAGATAACCTGAAGGAGTTGAATAACATCTATCCAGTGAGTCCTGCAAGACTTCAGGCCCTTTCTCATCCAGCAGCTCCCTGCTGAGCCTGGAACAGTGGGAAAAAGTAAAGAATAAGCCAGGGGGAATCAGAAACCACACAGCCCCAGCTAGATTTCATGGCTAACATAAGGAAGAGTTTGAAAAGAAAAAGGACAGATCCATTAATGAGGTAACAAATTATTGCCTTTATATTGGGATAGACTAGGGCCAGGTAGAAAAGGATGAAAGAGAAAGACACACACACACACACACACACACACACACACACACACACACACACAGAGTGAGCTCAGTGAATTGGCCAGGTGACACACTGATGAGGGAGTCAACGGTCATTCTCTATTTGTGCTCTCAGGACACACAGTGAACAGTGATCATGAAAAGCATGGCCTCAATAATTTTGCATAAAATGTGCTCAAGTTTCCCTGCAGCCACCATGAGAATACAGCTTTTGAGGTATGGTCAACCTTCACTAGGTTAGTAAATGATAAGGGTAGGAAGAAATGGAAACCTAAACATTTACTCTAATGAGAACCAAAAAGCAATGTAGTAGGCATAATTTAGACTTGTCTGACAAGACAAAATCATTATTTTCAGCATGTACTGTTTTCCCTGGACTTGGCATCTCCAGGTGTCAACATCAAATTAACTGTCCACAATTTCTCAGACTCACCTGGGACCTGTTGCCTCTTGGTCCTCCTTTTTCACTTGATCCCACCGATGTCCTGCAAATAAATTCAGATGGGGCCTCTTACATTAAGCAGTTCTTCCTTGCACACAGAAACATTCCTCTGTCCAATCCTAACACAGGTACATCAGTCTGGTCAGTGTGAGAACAGGAGACTTTGAGAGAAATATTCCAGCAGGCCTGAGGTCAAGTCTTGAGAAAACTGGCTTGGGTTCTTTCATGAGCCTTGGGCAAAATTACCCTGTTTTGGAATGTTATCTTCCCTATGTGCTCTGTCCTAGGTTTGTGTACACAAATGAGCAACTTTTTCCCCAATAAATTGTAGGCAAATAGTTCTAACACCTCATAGGAGAGATACTTCAATATTAAGCTTTCTCTCATCAAATACCCAGAATTTGATAGTTTATGAGATTGTGGACACAGAGATTTGATGAAGGGGTGCAATGTACCAGCTCTTGAGTCAAAATGAAACTTGGTTCTACACAGAAGCATCAGCTATTATGGCTTTTGTGGGTGAAAAGTCAGCCATTTATCTAGAAAACATACCAGGAACATGACGGACAGATGAGCTAAAGCAAGCGAACTTAGAAGACACAGAAAATGGGAATAAATTCAGTGAAACCTGGGCCACATCTTTCACTGAGAGGTAGACAAGGGTGACACTTGCCTTGGGCAGGTAAAGAACCACACAGACATGCTTTGGGAACAAAACTCATAAGGAATTTTGTAGCTGGCAAGAGACATTTAATTCAGATGAGCTGATCTGACAGACAACTCCTGGTCATGTGCTGCATAGTTTGGTGTGAGCTTGCCACACCTGCCTTGAGTTCAATGTCGTGACAGTCAGTCCAGGTTGGCACGGGCATGGCCTGAGACTAGGAAGAGAGCAAAGCTCACTCACCCACCCCATGCCTGTGCTTCAGACTCGACTCCAGAGTGATTGAAATCTACATTGATATATAGGTTCAGCCCACAGTGATGGCAAATCTCAGCCCAACAAGGGGCACAAGGCCCAAAGATTATGGGGTCTACCTGGGCCATGAACTGGAGCTTTATCACCTTCACAATGGAGTACTCACCGCCTATGTCAACAGCCATGCAGACTTGCTGTTCCTCTAATGAGTGAAATGTGCCGCTGTAAGACTTGTACGAGGCCAACATTTCAGGAGGAATTGAGAGAGTCGAATAACCTTCATCCCAGGACTCCTGGGGGACTTCCTCCTCTTCAGACTCCTGCAGATTCCTGATGAGCCAGGCAGGACAGGGATGATAGAAGATTTAACCAACAGACATTAGACAACAAAACCTCCCAGATGATCTGATGGGAGACAGAATGGAGTGGTCACAGAAACCAAAGGCATTTTTCCTTCAAGAGAAATAAAACTAGCCTTCTAAATACAGGGTGGAGGGTGACTGCTCTGGGGACAGAGCAAAAATGGGCAGCATGTGCTCAGTACATTTGCCACAGATGAGCCAACTCAGGGCACCCAGACTCTCCCTGTAAACTACCATCATGACTTGCAGCACAGAGAACTGACACAGGGCTTCAACTACTTTGCATAAATTGGGTTGAATTTTACATGCAGCATTCAAGTGAAGAGAGTTCTTGACACAGTGCAGACACAGATCTTGTGTATTAAGGGCCCCATTTTCCCAATATTTTGATATAATATATTTACCTTTTCAATTTCTTTTCTTGCAAAAATACTAGCCAACATACTACCAACAGATAGGAAGAAAGCATATATACATCTCTCCCTGGATTTAAACACATGGGAGAGAATAGGCAACACCAAGAAATCCCTGTTTGAGGGTCTGGAGTGGACTTCCAGCAAACTCCAACAGACCTGAAGCTGAGGGACCTGATTGTTAGAAGGAAAACTAACACACAGAAAGGAATAGCATCAACATCAACAAAAAAGACATCCATCCCAAAACCCCATCTGTAGGTCGCCATCATCAAAGACCAAGGGTAGATAAAACCACAAAGGTGGGGAGAAACCAGAGCACAAAAGCTGAAAATTCCAAAAACCTGACATCCCTTCTCCTCCAAAGGATCACAGCTCCTCGCCAGCAATGGAACAAAGCAGGATGGAGAATGACTTTGATGAGCTGACAGAAGTAGGCTTCAGAAAGTCGGTAATAACAAACTTCTCTGAGCTAAAGGAGGATGTGCGAACTCATCGCAAGGAAGCTAAAAACCTTGAAAAAAGATTAGACGAATGGCCAACCAGAATGAACAGTGTAGAGAAGACCTTAAATGACCTGATGGAGCTGAAAACCATGGCACGAGAACTACGTGATGCATGCACAAGCTTCAGTAGTCAATTCGATCAAGTGCAAGAAACGGTATCAGTGATTCAAGATCAAATTAGTGAAATGAAGCGAGAAGAGAAGTTTAGAGAAAAAAGAGTAAAAAGAAATGAACAAGCCTCCAATAAATATGGGACTATGTGGAAAGACCAAATCTACGTTTGATTGGTGCACTGAAAGTGACGGGGAGAATGGAACCAAGCTGGGAAACATTCTTCAGGATATTATCCAGGAGGACTTCCCCAACCTAGCAAGGAAGGCCAACATTCAAATTCAGGAAACACAGAGAACACCATAAAGATACTCCTCGAGAAGAGCAACCCCAAAACACATAATTGTCAGATTCACCAAGGTTGAAATGAAGGAAAAAATGCTAAGTGCAGCCAGAGAGAAAGGTCGGATTACCCACAAAGGGAAGCCCATCAGACTAGCAGCAGATCTCTTGGCACAAACCCTACAAGCCAGAAGAGAGTGGGAGCAATATTCAACATTCTTTTTTTTTTCCATATGTATAGTTTTCCTTTATTATTTTTTGTGTGTATGTATATATATGTATATATATTTTTCAATACTTTAAGTCTTAGGGTACATGTGCACAACGTGCAGGTTAGTTACATATGTATACATGTCCACATTGGTGTGCTTCACCCATTAACTCATCATTTAACATTAGGTATATCTCCTAATGCTACCCCTCCTCCCTCCCCCCACCCTACAACAGGCCCCAGTGTGTGATGTTCCCCTTCCTGTGTCCATGTGTTCTCATTGTTCAATTCCCACCTGTGAGTAAGAACATGCGGTATTTCGTTTTTTGTCCTTGCGATAGTTTGCTGAGAATGATGGTTTCCAGCTTCATCCATGCCCCTACAAAGGACATGAACTCATCATTTTTTATAGCTGCATAGTATTCCATGTTGTATATGTGCCACATTTTCTTAATCCAGTCTATCATTGCTGGATATTTGGCTTGGTTCCAAGTCTTTGCTATTGTGAATAGTGCCACAATAAACATATGTGTGCATGTGTCTTTACAACAGCATGATTTATAATCCTTTGGGTATACACCCAGTAATGGGATGGCTGGGTCAAATGGTATTTCTAGTTCTAGATCCCTGAGGAATTGCCACACTGTCTTCCACAATCGTTGAACTAGTTTACACTCCCACCAACAGTGTAAAAGTGTTCCTATTTCTCCACATCCTCTCCAGCATCTTCAACATTCTTAAAGAAAAGAATTTTCAACCCAGAATTTCATATCCAGCCAAACAAAGCTTCATAAGTGAAGGAGAAATAAATCCTTTACAGAGAAGCAAATGCTGAGAGATTTTGTCACCACCAGGCCTGCCTTACAAGAGCTCCTAAAGGAAGCACTAAACATGGAAAGGAACAACCGGTACCAGCCACTGCAAAAACATGCCAAACTGTAAAGACCATTGACGCTAGGAAGAAACTGCATCAACTAACGGGCGAAATAACCAGCTAACATCATAACGACAGGCTCAAATTCACACATAACAATATTAACCTTAAATGTAAATGGGCTAAATGCCCCAGTTAAAAAACACAGAATGGCAAATTGGACAAAGAGTCAAGACCCATCAGTGTGCTGTACTCAGGAAACCCATCTCACATGCAGAGACACACATAGGCTCAAAATAAAGGGATGGAGGAAGATCTACCAAGCAAATGGAAAGCAAAAAAATGCAGGGGTTGCAATCCTAGTCTCTGATAAAACAGACTTTAAACCAACAAAGATCAAAAGAGACAAAGAAGGCCACTACATAATGGTAAAGGGATCAATTCAACAAGAAGAGTTAACTATCCTAAATATATATGCACCCTATACGGGAGCACCCAGATTCATAAAGCAAGTCCTGAGAGACCTACAAAGAGATTTAGACTCCACACAATCATAATGGGAGACTTTAACACCCCACTGTCAATATTAGACAGATCAATGAGACAGAAGCTTTACAAGGATATCCAGGACTTGAACTCAGCTCTCCACCAAGCAGACCTAAAAGACATCTACAGAACTCTCCACCCCAAATCAACAGAATATACATTCTTCTCAGCACCACATCACACTTATTCCAAAATTGACCACATAGTTGGAGGTAAAGCACTCGTCAGCAAATGTAAAAGAATGGAAACCACAACAAACTGTCAGACCACAGTGCAATCAAATTAGAACTCAGGATTAAGAAACTCACTCAAAACCGCACAACTACATGGAAACTGAACAACCTGCTCCTGAATGACTACTGGGAAAATAACAAAATGAAGGCAGAAATAAAGATGTTCTTTGAAACCAATGAGAACAAAGACACAACATACCAGAATCTCTGGGACACATTTAAAGCAATGTGTAGAGGGAAAATTATAGCACTAAATGCCCACAAGAGAAAGCAGAAAAGATCTAAAATTGACACCCTAACATCACAATTAAAATAACTAGAGAAGCAAAGCAAACAAATTCAAAAGCTAGCAGAAGACAAGAAGTAACTAAGATCAGAGCAGAACTAAAGGAGATAGACACACAAAAAACCCTTCAAAAAATCAATGAATCCAGGGCTGGTTTTTTGAAAAGATCAACAAGAAAACCCTGTTTGGCTAGTTCACCTGGCTCATCTGATGGCAAGTTCCTATCTTGAGAGGACTATGAAATTAAAACCAATACAAGTGCCACAAATAACATACAACATTGTAAATCAGCACAATTTGTAGCTGGGTGAATGGAAGAAATAGTTCTATTCATCACTTCCTCATTTTCCCTAAATCTACAATCTCCAGATGTCACTACTGAATTAACAGCCAACAATTCCACAACATTACCTGGGAGACACTGGCCCTTTTTCTTCCTCTTCCTCATCATCACTTTCATTTTCTGTAAATAAATTCAGAGAAGCAGGTCACATTAAGCAATTCATACTTCACATATGACCAAATCACTGTCCAGTCATAGCACAAGGACATAACTATTCTCAGTGCAAGAATAAGGATTCTGACAGGAATATTCTAGGGTGCCCTAGATTAACTTTGGTGAGAATTAGATGACCCTGCTTTCCAGACCCACAGGCCAAAATCTCCCTCTACGTGTAGACCATAATGCCATATTCCCTGCCTGAGTCAAAGTTAAACAAAATTTTTTCCCCAAAAAAATCTCCAAAAATTGGTCCATTTTCTAAGAGTGTTGCTGCAATACGGACTTATATCACCAGATAACATGGACATTAAATGTTTAGAGGCATCTATACATGAAACACACATGATAGATAAATTTGAACAACTCTTGCTTTAAAAAGAATCTGTGATTTGGGAGGCCAAGACAGGTGAATCATTTGAGGTCATGAGTTCAGGACTACCCTGGCCAATATGGGGAAACCCTGTCTCTACTAAAAATACAAAAATTAGCCAGATGTGATGTTGTGCACCTGTGGTCCCAGCAACTCAGGAGGCTGAGGCAGGAGAATCACTTGAATCTGGGAGGCAGAGGTTGCACCAAGCCAAGATGGTGCAACTGCACTCTAGCCTGGGTGACAGAGCAAGACTCCATCGCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATCCACGATGCTACAAAGAAACATTGGATCAGCCATTGCATTGACAGGGTGGAGAACCAGGGTCCAGCCTTGCTTTATGGAAATATATCAGCAAAGTAAAGAAGAAAAGTTTCCGTCCTGATTTCAGGGTGACTGTGCAGCTAAGCAAGCTGACTTAAAGGAGATCCGGATGAAAGCTGAGAGCAGTGAAGCCTGGGGAACAATATTTCCAAATACAAAGGCAAGGCTGCCAGCTTCCTGAAACAGGCATAGAAACTCCATGGACATTGTTCAGGGACAGATGACTTAATCACAGATGACAAGAGATACTGAATCGAAGCTAGGAGGCCTGACAGATACTGCCTGTGCACCTCCTGCACTCAGGTGACTATGAGATTGTCACACTTGCCTGGGGTCGAGTAACTTGATACTGGGGACTGGCAGACAAAGGCATGACATTAGCTGAGAAGGACAAAAAAACTCCCTGATATCTGTTTAGAAACCCATCATAGTTTTTTATTCAAATGAATTTGTGTTTATAGAGCCTGTCTTCAGAGTTTATCTTCCTCAGCCTAGAGAGAGGTATGAGACACAAGGAAAACAGAGGCTACCTGGGATAATGTGTACAGCATCCTCCCATTCAACATGAGAGGATGAGCCAATGAGAGTTGAGTCGACTTTGTCTTCCTCAAATGTGATTTTGGTTTTCCTATGTGGCTGGTTGGAGTCATAAGGGCCATGGCTATTTGAACAAGTGATGGCACATTCCTCCAGTGAGTCCTCAGGGACTTCCTTTTCTTCAGCCTTCGGCATCTCCCTGATGAGCCAGGTGGGACAGAGATGACAGAAGATTAAACACAGAGGGATTGGACCCCAGGGAGTCCTAGCTGGTTTTGACAGGCGGCATTAAGAGAGTGGTCCCAGAAAGCAAAATGGAGGTTCCCTTTAAGGGGGAACATGCAATCCTGTTCTCTCTGCAACAGAGCATGGCTGCCATGGGAACCAGAGAGGAAGAGAGCAGCTGGTGTTCATTGCAGTGGACAGATAGGAGCTGAGGAGGATGAAGACTCAGCTATCCCTGTATGGTGCAGACATGACACTCGGCACACATAGAGAAACATGACAGCTGCCGCACCCTGTGTCTAAGCTGGGTTATATTTCACATACTGTGGCCAAGCAAATGCGGGTTTTTGGCCCATCATAGATGCCAGAGAGGGTGTACCTCCTAGATATTCTTCATATGTTACCATCCATTACTTGTTCCTGAGTATTCAGTGTTACCTGGGGGCAGACGATTTCTGCACTTTCTCAGCCACCTCAACTTGAACATCTTCATCGTCATCGTTGTCATTTTCTGTAAATACAGAAGTGTTCGTTCAGATATTTCCCACTTCACAGTCTGCAAGCACAGTCAGCCCAATGTGCAACAGAGACATGAACATCTAGGCATGGGTCACCGTTCAACTGAAAACTCTCATGTTTTATCTTTAACAGAATGCCCTGGCATGGTTTCCTGATCCATCAGGCAATGCATTTCTGATCTGGAGGGCCACCATCAAGATGTGGCCAAATATTGAAAAGACCTTTTGCTTCCCATATCACTGGAGGCTTGTGCAGCCTCTCTCTGGACTTTGGCAGCTGTCGCCCCCATCCTGCCAGATCTGATTCCCAGGCACAGGCTTGGTGTCCTGTCACAGTTTGCATTTCAAACCTAATTCTTTCTCTTAGAAGCAGACAAACTTATCCCACAGTCCTCTATGCATCAGAAGATTTCAAGCCTCCAAGTGGCTTCTGCTGTGTTATTCAGGGACATTCTATCCATGGGGAGTGCTCCAGTCTGAAGCACTTCCTACCACGAAACGCCACCACATAAAGTGCCTTCTCCAACATCACACGGCGAGGGGCTTCATCTCATTTTGGAAAGCAGTTTTAAGTGTTCCCACATTTGAATGCTTCAGACCCTTGCAAGAGACAATTTGCCATGGAGAGAGAGAAACTCAGGAAAGACAAGTCATTCAGTCACTGACAGTTACTAAGAACATTGCCGAAAAGACACCCTGGGAACCTTCATTCTTAGTCCAGAGCTCTTTTCACTCTAACAAGCCTGCTCCTATCGCAGCCTCCTTCCTGTCCTTTAAAACTAGATAGATGCTGCCTCTTACTCCAAAGACAACCTTCCATCAAGGGAGGAGGGACAATTGCAATACTGTGACCTCCAACCCCATGGGTTTCCCAACTCCGTTCTTACCCAGGAAGTCCTGGTCATGTCATGGCCACATAAGCTTAGTGGCAAAAAACACCATTGATACAACTGTCATTGTGAAAGTATGGAGGTCTGGAGTCTCTCATAAGCCTGGGGTTTTGGGTCATCAGGGCCTATGGCCACCTTACCTGGGCTGAGCTTTTGGACAAGGTGCTGTGCCAGTCTACACCCCTCAGCCAGCTGTTCTTGGAGGTCCTGCCCCTGGGACTTGTCTGGCTCATCCGGAGTGAGGAGGGCCTGGAGATGCTGATTCAATGAGCAGGAGGCATCTCTCCCTTCCCGTAACTTCTCCCTTAACTGGGTCAGCTCTCGTTCCTGAGAGTGAACCAGGACTTTATATTGCCTAAGGTGAGACGGTAGAGAAAATTTAAGAGTGGAAAGGGTTGAGTGATCCGCTCAAATATTGCAACAGAGATTTCTGAGACAATGTCCTCAAGGAGACCTCCAAGCAGAAGGTCAGCACATGTTGGAAGGAATGTCTGTGGCTAAGAGAAAGAATAGAAAATGGTTTACAGGTTTCCTCTGTATCAGAGAGGGCTCCTGCAAGATCCTCGATGATGTTCCATTCATCTTTCCCTTCTGTAAACAAAAGTAGGTGTCTTCCTAATTCCATTTCAAAAAGACATCCTTTCAGTCCCTCACTCTGGCCATGGACATTTCCATGTGAAAATACACATAGTGCATCTTGCGGCCACTAGATACAAAGCCATGTACAGAAATGAGGCCAGGTGCAGATGGGGCGAATTGAAAAGATGAAAGAAGAAAAGAATGACAGGGTCGAGAAGGCAACATTGATTGAGTGAAAGAATGAGAAGACGCAGTCAGTCAGAAGGTGATTCTCACTAAGGGTAAGTGGGGTGGTGATGGCACACCATTTTGAGTATACTGAATGCTGCTGTGTGGTTCACACTCCTTTGGTTAATTTTGTGTTATGTAAATTTCACATCAACAATTACTTGTTTGAAAAAGAGAAAACAAGGCTCTGAGAAACAACTGCAACCCATAAATTTTTATTATCCTTCTTCTCTGCTTGATAAATACTTGTGTGTTGCGAGCCTGCCATGGCAATTCCTGCCCTTCCCCTGGCCCAGCTTAGTTCTTAAGTCTCCCCACTGAGCTGCTGTACTTCAGAGATTTACACACCTGCCCCCCTGCCTGCCCCCATGGGGTCCCCTCACCTGAGCTCCTCAGCTTGCTTGAGCTGCTCTGCAAGCTTCTCCTCCTTGAACTGTCGCTCATTCCTCAGCATAGATTTTATGAGGTCTTTGCACTCTTCATTTTCTGAGAAAAGACAGACACGCCTGCCTCAGTGGAAGGCTGGACATGCTGCTGTGGTCATTGCCTACAGGGCAGGAGCCAGGTCCATCCCAAGGACAAAACTCTCCCCAGTACCAGGGTCTAGACAGGGATTTCCACATCTTTACTCTTCAGTCTCCTGACTTTCTGGCATCTGATCCTCCAAAATTTAGAGATGAAGAGAACCTCAATGGCACATCAAGGAAGTTGACAAGATGATTCAACCACAACGAAGTGGAGTCAGAATTCACAGCCCCTGAGGTCTGACTCTGAATGCAGGGCCACTTTCCCAAGACTTGCAGCCTCTCCTCTAAAACACTGCACTGGGGCATGAAGTAGTGATTTCTTGTACAGTCGGGAAGGCCCCTAGGACTATGGGACTGATGGTTTCCCTTTTACTGGGAATTTCAAGGACAAGTATGCAAAAGATTTTAAAAATCTTTGATTTTTAAATCATATCTTCAGTTATGATTTTAAGAATCATATCTGAAGCATAAAGTGTGACACATAACACCATAAGGCCATGAAGGAAATATGCCCAAATGTTAATAAAGTTTGTGTTAATTTAGAAACAGCAGAATGAAGAACTAATAGATAGTGTTTACTGTGTGCTAATAAATGTTCTAGGAGATTGACAAGAAATAGCTCATGTAATTCACTGCAGCAATTTACAGAGGTAGGTATTATTGTAGTACCCTCTGAACAGGTGAGGAAACAGGGACAGAAAAGACAAGCAACTTGGATGGAGCCCAGGAGACAGGCCCACGGTCTCTGCTCTGTACACTGCACTGCTATCTCCACACATTCTCGGGTGCGATCTTTCTTCCTCTTTAGGAACAAGACTCTGTGCCCCAGGAAGCAGGACTTCACTCTCACCAAGCTACATTCTGCTTCTTATTCTTATTTTTATTTATCATTATTAGTATTATTTTTTTAACAGTCTTGCCCTGTCGCCCAGGCTGGAGTGCAATGGCAAAATCTTGGCTCACTGCAACCTCAGCCTCCTGGGTTCAAAGGATTCTCCTGCCTCAGCCTCCTGAGCAGGGGTGATTACAGTCACCTGCCACCATGCCCATCTACTTTTTGTATTTTTAGTGGAGATGGGGTTTCTCCATGTTTCCCAGGCTGGTCTCAAACTCCTGACCTCGTGCTCTACCCGCCTCAGCCTCCCAAAGGGCTGGGATTACAGGAGTGAGCCACCATGCACAGCCCCTACTCCCTGCTCTTGATGCTGTCACTTATAGATAGCACAGGTTCTATTAGGAGCAGACTCCTCTTGAAGCCCCTCAGAGCAGGTACTGGCTACTATCACCAAGTTTCCCTCAGAGTCACTAGAACAGAGCTTTGCATATTGGGCCTCAACAGAAACTTGAACTGAATAAAAGTTCACTAGTCTCAGACATTTAGAACAACAGACTAGATGTTATTTGTCTGCAGGATCTTACATGGTACAGAGAGGATTCTTGAAAACATGATTGAGCCTCTTGGAGAAAACAGGTCATTCTGTGCCTGTGTCAGAAATCAATAAATGGCAGTTTAACTCTAGTCCCACCCCCACCTGATTGCAAACATGGAAAGTTGCTAAATATTTTGGGACCTCTGTCTTCCAACTTTAACAAAATGTTAAAATACCCATTTCTGTTTTCCTAGAAGTATGGGGAGGATGACATTATTTTAGATGGAGAGAGCACTTAGTTTCTCAGAGAGAAGACAGGACTTCGTTCATCACTTTCGTGATGGTGAGCCTATAGATCTTACTGTATTTGTTCTGCTGGTTGGCCAGGAAGCAGGCCAGTTGAGTTACAAAACATTTCTCTTTGAGGTTTCTGAACTGCTGTTTCTTCTCTGCCAGCTGGGGATGCAATTTCTCGTTGATTTCTAGAATGTTCATCTCTGCCTTCTCGCTGGACAAAGGGCCGGCTGATACCACCATGCTGACGTTTGTGGCAGAAGAGGTGGGGCCAGGGACTGGGGAGAAGAAAGGCAAACACATGATGGGTTAAAAACTGGTGAAATCAAATAGGTTTAATCACACTGAGGGATGTCAGCGGCAGCCTTGTCTACTTATTTGAAGATGATGTTTCCCTGGTTTCACTCTTGTCATCTCCAGTCTTGATCTCCTTTAAGTCAACTTATCTTAGCTATGCAGTCACCTTGAAACCAGGACATAAACACTTCTACACTTTTCTTGCTTATAAGTTTCTATAAAGCAAGGCTTGGCCCTGAGATTTTTACCCCATGAGTGGCCAATGTTTCTGTGTAGCACAAAAGGTTTCATTTTGCCTTTTTAATTTTTTTCTTTTTTGGTTTTTTGTTTTTTGTTTGAGACGGAGTCTCACTCTGTCACGCAGGCTGCAGTGCAGAGGCACAATCTCAGCTCACTGCCACCTCTGCCTCCCGGGTTCAAGCGATTCTCATCCCTCAGCCTGCCAAACATCTGGGATTACAAGCGCCAAGTAACATGCCAGCTAATTTTTGTATTTTTAGTAGAGATGGGGTTTCGCCATCTTGGACAGGCTGGTTTCGAACTCCTGACCTCAGGTGTTCCGCCCACCTTGGCCTCCCAAAGTGCTGGGATTAAGATGTGAGCCAGCACCCCCGGTCAGAGACTTTTTTTTTTTTTTTTGAGATGGAGTCTCGCTCTGTCTCCCAGGCTGGAGTGCAGTGGCACAATCTAGGCTCACTGCAAACTCCGGTTCCTGGGTTCATGCCATTCTCCTGCCACAGCCTCCCGAGTAGCTGGGACTACAGGTGCCCAACACCGTGCCCAGCTAATTTTTTTTTTTTGTATTTTTAGTAACGACGGGGTTTCACCGTGTTAGCCAGGATGGTCTCGATCTCCTGACCTCGTGATCCACCCGCCCCAGCCTCCGAAAGTTCTGGGATTACATGTGTGAGCCACCGCGCCCGGCCGAGACTTCTTATTAATAGCTAAGACAAGCCAATGAAAAGGAGAGAGAGTCTAGCCTGAGAGGAGTGAACCAGGGTGGGAGGATCGTCTCAGCCGATCCTCCCACCTAAGTCTCCTGAGCAGTTGGGACTAGAGGCACGCAGCACCATGCCTGCCTAATTTTTTGTATTCTTTGTAAAGATGGGTTTCACCATATTGTCCAGGCTGGTCTTCAACTCCTGAACTCAAGTCATCCTCCCACTTGGGCCTTCCAAAGTGCTGTGATTATATGTGTGAGTCACAGAACCTAGCTCCATCCTAGTTTCTGACTAAAACAATATGTGCGTATACAGCCTGTCCTCAGAATTGATCTTCCATAGCCTAGACAGAGGTATGAGACACAAGGAAAATAGAGGCTACCTGGGAGAATGTTTACAGCATCCTGACATTCATCATGAGAGGATTCTCTGTCTACAACCAGAGCTGAGTTGACTTTGTCTTCCTCAAAGGTGATGTTGATGTTCTTGTGAGGCTGGTTGGAGTCACAAGGGCCGTGGCTATTTGAACAAGTGATGGCACATTCCTCCAGTGAGTCCTCAGGGACTTTGCTTTCTTCAGCCTTCTGCACCTCCCTGATGAGCCAGGTGGGACAGAGATGACAGAAGATTAAACACAGAGGGATTGGACCCCAGGGAGTCCTAGCTGGTTTTGACAGGCGGCATTAAGACAGTGGTCCCAGAAAGCAAAATGGAGGTTCCCTTTAAGGGGGAACAGGCAATCCTCTTCTCTCTGCAACAGAGCATGGCTGCCATGGGAGCCAGAGAGGAAGAGAGCAGCTGGTGTTCAGTGCACTGGACAGATAGGAGCTGAGGAGGATGAAGACTCAGCTATCCCTGTATGGTACAGACATGACACTTGGCACACATAGAGAAACACGACAGCTGCCACACCCTGTGTCTAAGCTGGGTTGAATTTCACATACTGTGGCCAAGCGAATGCGGGCTTTTGGCCCATCATAGATGCCAGAGAGGGTGTGCCTCCTAGACATTTTCATATGTTACCACCCATTACTTGCTCCTGAGTATTCAGTGTTACCTGGGGGCAGATGATTCCAGTACTTTCTCAGCCTCCTCAACTTGAACATCTTCATCCTCATCTTCGTCATTTTCTGTAAATACAAAATGTTCGTTCAGATATTTCCCACTTCCCATTCTCCAAGCACAGTCAGCCCAATGTGCACAGAGACATGAACATCTATGTGTGGTTCAGCATTGTACTGAAAACTGTCATGTTTTATCTTTCACAAAATGCCCTGGCATGGTTTCCTGGTCCATCGGGCAATGCATTTCTGATCTGGAGGGCCACCATCAAGATGTGGCCAAATATTGAAAAGACCTTTTGCTTCCCATATCACTGGAGGCTTGTGCAGCCTCTCTCTGGACTTTGGCAGCTGTCTCCCCCATCCTGCCACAGATCTGATTCCCAGGAACAGGTTTGGTGTCCTGTCACAGTTCGCATTTCAAACCTCATTCTTTCTCTTAGGAGAGGACAAACTTGTCCCACAGTCCTCTATGTGTCATGAGACTGCACAGGCCCTCCATGTGGCTTCTGCTGTGTTATTCAGGGACATTCTATCCATGGGGAGTGCTCCAGTCTGAAGCACTTCCTACCACCAAATGCCCCCACATCAAGTGCCTTCTCCAACACCAAACGGAGAGGGGCTGCATCTCATTTTAAAAAGCATTCGTAAGTGTTCCCATATTTGGATGCTTCAGACCCTTGCAAGAGACAATTTGTTTGCCTTTGCAGATGGAGAGAGAGAAACTCTGGAAAGATAAATCACTCACTCACCGACAGTTACTAAGAACATTGCCAAAAAGACAGCCTGGGAACCTTCATTCTTAGCCCAGAGCTCTTTTCACTCCAACAAGCGCCCTCCCATCACAGCCTCCTTCCTGTCCTTTAAAACTAGACAGATGCTGCCTCTTGCTCCAAAGACCACCTTCCATCAAGGAAGGAGGGACACTTGCAATACTGTGACCTCCAACCCCATGGGTTTCCCATCTCTGTTCTTACCCAGGAAGTCCTGGTCATGTCATGGCCACATATGTGTAGCAGAAAATAACCCCACTGATACAACTGTCATTGTGAAAGTATGGAGGTCTGGAGCCTCTCATAAGCCTGGGGTTTTGGGTCATCAGGGCCTATGGCCACCTTACCTGGGCTGAGCTTCTGGAAAAGTTGCTGTGCCAGTCTACACCCCTCAGCCAGCTGTTCTTGGAGGTCCTGCCCCTGGGACTTGTCTGGCTTATCCGGAGTGAGGAGGGCCTGGAGATGCTGATTCAATGAGCGGGAGGCATCTCTCCCTTCCCGTAACTTCTCCCTTAACTGGGTCAGCTCTCGTTCCTGAGAGTGAACCAGGACTTTATATTGCCTAAGGTGAGACGGTAGAGAAAATTTAAGAGTGGAAAGGGTTGAGTGATCCGTTCAAATATTGCAACAGAGATTTCTGAGACAATGTCCTCAAGGAGACCTCCAAGCAGAAGGTCAGCACATGTTGAAAGGAATGACTGTGGCCAAGAGAAATAATAGAAAATGGTTTACAGGCTTCCTCTGTATCAGAGAGGGCTCCTGCAAGATCCTCGATGATGTTCCATTCATCTTTCCCTTCTGTAAACAAAAGTAGGTGTCTTCCTAATTCCGTTTCAAAAAGACATCCTTTCAGTTCCTCACTCTGGCCATGGACATTTCCATGTGAAAATACACATAGTGCAACTTGCAGCCACTAGATACAAAGCCATGTACAGAAATGAGGCCAGGTGCAGATGGGGCGAATTGAAAAGACGAAAGAAGAAAAGAATGACAGGGTCAAGAAGGCAACATTGATTGAGTGAAAGAATGAGAAGACGCAGTCAGTCAGAAGGTGGTTCTCACTAAGGGTAAGTGGGGTGGTGATGGCACACCATTTTGAGTATACTGAGTGCTGCTGTGTGGTTCACACTCCTTTGGTTAATTTTGTGTTATGTAAATTTCACATCAACAATTACTTGTTTGAAAAAGAGAAAACAAGGCTCTAAGAAACAACTGCAACCCATAAATTTTTATTATCCTTCTTCTCTGCTTGATAAATACTTGTGTGTTGCGAGCCTGCCATGGCAATTCCTGCCCTTCCCCTGGCCCAGCTTAGCTCTTACGTCTCCCCACCGAGCTGCTGTACTTCAGAGATTTACACAGCTGCTCCCCCACCTGCCCCCATGGGGTCCCCTCACCTGAGCTCCTCAGCTTGCTTGAGCTGCTCTGCAAGCTTCTCCTCCTTGAACTGTCGCTCATTCCTCAGCATAGATTTTATGAGGTCTTTGCACTCTTCATATTCTGAGAAAAGACAGACACGCCTGCCTCAGTGGAAGGCTGGACATGCTGCTGTGGTCATTGCCTACAGGGCAGGAGCCAGGTCCATCCCAAGGACAAAACTCTCCCCAGTACCAGGGTCTAGACAGGGATTTCCACATCTTTACTCTTCAGTCTCCTGACTTTCTGGCATCTGATCCTCCAAAATTTAGAGATGAAGAAAGGGAACCTCAAGGGCACATCAAGGAAGTTGACAAGATGATTCAACCACAACGAAGTGGAGTCAGAATTCACAGCCCCTGAGGTCTGACTCTGAATGCAGGGCCACTTTCCCAAGACTTGCAGCCTCTCCTCTAAAACACTGCACTGGGGCATGAAGTAGTGATTTCTTGTACAGTCGGGAAGGCCCCTAGGACTATGGGACTGACGGTTTCCCTTTTACTGGGAATTTCAAAGACAAGTATGCGAAAGATTTTAAAAATCTTTGATTTTTAAATCATATCTTCAGTTATGATTTTAAGAATCATATCTGAAGCATAAAGTGTGACACATAACACCATAAGGTCATGAAGGAAATATGCCCAAATGCTAATAAAGTTTGTGTTAATTTAGAAACAGCAGAATGAAGAACTAATAGATAGTGTTTACTGTGTGCCAATAAATGTTCTAGGAGATTGACAAGAAATAGCTCATGTAATTCACTGCAGCAATTTACAGAGGTAGGTATTATTGTAGTACCCTCTGAACAGGTGAGGAAACTGAGGGACAGACAAGACAAGCAACTTGGATGGAGCCCAGGAGACAGGCCCACGGTCTCTGCTCTGTACACTGCACTGCTACCTCCACACATTCTCAGGTGCGATCTTTCTTCCTCTTTAGGAACAAGACTCTGTGCCCCAGGAAGCAGGACTTCACTCTCACCAAGCTACACTCTGCTTCTTATTCTTATTTTTATTTATCATTATTATTATTATTATTATTATTATTATTTTTACCAGTCTTGCCCTGTCACCCAGAGTGGAGTGCAATGGCAAAATCTTGGCTCACTGCAACCTCAGCCTCCTGGGTTCAAAGGATTCTCCTGCCTCAGCCTCCTGAGCAGGGGTGATTACAGTCACCTGCCACCATGCCCATCTACTTTTTGTATTTTTAGTGGAGATGGGGTTTCTCCATGTTGCCCAGGCTGGTCTCAAACTCCTGACCTTGTGATCTGCCCGCCTCAGCCTCCCAAAGGGCTGGGATTACAGGAGTGAGCCACCATGCACAGCCCCTACTCCCTGCTCTTGATGCTGTCACTTATAGATAGCACAGGTTCTATTAGGAGCAGACTCCTCTTGAAGCCCCTCAGAGCGGGTACTGGCTACTATCACCAAGTTTCCCTCAGAGTCACTAGAACAGAGCTGTGCCTGTTGGGCCTCAACAGAAACTTGAACTGAATAAAAGTTCACTAGTCTCAGACATTTAGAACAACAGACTAGATGTTATTTGTCTGCAGGATCTTACATGGTACAGAGAGGATTCTTGGAAACATGATTGAGCCTCTTGGAGAAAACAGGTCATTCTGTGCCTGTGTCAGAAATCAATAAATGGCAGTTTAACTCTAGTCCCACCCCCACCTGATTGCAAACATGGAAAGTTGCTAAATACTTTGGTACCTCTCTCTTCCAACTTTAACAAAATGTTAAAATACCCATTTCTGTTTTCCTAGAAGTATGGGGAGGATGACATTATTTTAGATGGAGAGAGCACTTAGTTTCTCAGAGAGAAGACAGGACTTCGTTCATCACTTTCGTGATGGTGAGCCTATAGATCTTACTGTATTTGTTCTGCTGGTTGGCCAGGAAGCAGGCCAGTTGAGTTACAAAACATTTCTCTTTGAGGTTTCTGAACTGCTGTTTCTTCTCTGCCAGCTGGGGATGCAATTTCTCGTTGATTTCTAGAATGTTCATCTCTGCCTTCTCGCTGGACAAAGGGCCGGCTGATACCACCATGCTGACGTTTGTGGCAGAAGAGGTGGGGCCAGGGACTGGGGAGAAGAAAGGCAAACACATGATGGGTTAAAAACTGGTGAAATCAAATAGGTTTAATCACACTGAGGGATGTCAGTGGCAGCCTTGTCTACTTATTTGAAAATGTTGTTTCCCTGGTTTCACTCTTGTCATCTCCAGTCTTGATCTCCTTTAAGTCAACTTGTCTTAGCTATGCAGTCACCTTGAAACCAGGACATAAACACTTCTACACTTTTCTTGCTTATAAGTTTCTATAAAGCAAGGCTGGGCCCTGAGATTTTTACCCCATGAGTGGCCAATGTTTCTGTGTAGCACAAAAGATTGCATTTTCCTTTTTCGATATTTTTCTCTTTTGGTTTTTTGTTTTTTGTTTGAGACGGAGTCTCACTCTGTCACGCAGGCTGCAGTGCAGTGGCGCAATCTCAGCTCACTGCCACCTCTGCCTCCCGGGTTCAAGTGATTCTCATCCCTCAGCCTGCCAAACATCTGGGATTACAAGCGCCAAGTAACATGCCAGCTAATTTTTGCATTTTTAGTAGAGATTGGGTTTCGCCATCTTGGACAGGCTGGTTTCGAACTCCTGACCTCAGGTGTTCCGCCCACCTTGGCCTCCCAAAGTGCTGGGATTAAGATGTGAGCCAGCACCCCCGGTCAGAGACTTTTTTTTTTTTTTTTTTTGAGATGGAGTCTCGCTCTGTCTCCCAGGCTGGAGTGCAGTGGCACAATCTAGGCTCACTGCAAGCTCCGGTTCCTGGGTTCATGCCATTCTCCTGCCACAGCCTCCCGAGTAGCTGGGACTACAGGCGCCCAACACCGTGCCCAGCTAATTTTTTTTTTTTGTATTTTTAGTAACGACGGGGTTTCACCGTGTTAGCCAGGATGGTCTCGATCTCCTGACCTCGTGATCCACCCGCCCCGGCCTCCCAAAGTGCTGGGATTACATGTGTGAGCCACCGCGCCCGGCCGAGACTTCTTATTAATAGCTAAGACAAGCCAATGAAAAGGAGAGAGAGTCTAGCCTGAGAGGAGTGAACCAGGGTGGGAGGATCGTCTCAGCCGATCCTCCCACCTAAGTCTCCTGAGCAGTTGGGACTAGAGGCACGCAGCACCATGCCTGCCTAATTTTTTGTATTCTTTGTAAAGATGGGTTTCACCATATTGTCCAGGCTGGTCTTCAACTCCTGAACTCAAGTCATCCTCCCACTTGGGCCTTCCAAAGTGCTGTGATTATATGTGTGAGTCACAGAACCTAGCTCCATCCTAGTTTCTGACTAAAAGAATAACAATATGTGTATATACAGCCTGTCCTCAGAATTGATCTTCCATAGCCTAGACAGAGGTATGAGACACAAGGAAAATAGAGGCTACCTGGGAGAATGTTTACAGCATCCTGACATTCATCATGAGAGGATTCTCTGTCTACAACCAGAGTTGAGTTGACTTTGTCTTCCTCAAAGGTGATGTTGATGTTCTTGTGAGGCTGGTTGGAGTCACAAGGGCTGTGGCTATTTGAACAAGTGATGGCACATTCCTCCAGTGAGTCCTCAGGGACTTTGCTTTCTTCAGCCTTCTGCACCTCCCTGATGAGCCAGGTGGGACAGAGATGACAGAAGATTAAACACAGAGGGATTGGACCCCAGGGAGTCCTAGCTGGTTTTGACAGGCGGCATTAAGACAGTGGTCCCAGAAAGCAAAATGGAGGTTCCCTTTAAGGGGGAACAGGCAATCCTCTTCTCTCTGCAACAGAGCATGGCTGCCATGGGAGCCAGAGAGGAAGAGAGCAGCTGGTGTTCAGTGCACTGGACAGATAGGAGCTGAGGAGGATGAAGACTCAGCTATCCCTGTATGGTACAGACATGACACTTGGCACACATAGAGAAACACGACAGCTGCCGCACCCTGTGTCTAAGCTGGGTTGAATTTCACATACTGTGGCCAAGCGAATGCGGGCTTTTGGCCCATCATAGATGCCAGAGAGGGTGTGCCTCCTACACATTTTCATATGTTACCACCCATTACTTGCTCCCGAGTATTCAGTGTTACCTGGGGGCAGATGATTCCAGTACTTTCTCAGCCTCCTCAACTTGAACATCTTCATCCTCATCTTCGTCATTTTCTGTAAATACAAAATGTTCGTTCAGATATTTCCCACTTCACATTCTGCAAGCACAGTCAGCCCAATGTGCACAGAGACATGAACATCTATGTATGGTTCAGCACTGTACTGAAAACTGTCATATTTTATCTTTCACAAAATGCCCTGGCATGGTTTCCTGGTCCATCGGGCAATGCATTTCTGATCTGGAGGGCCACCATCAAGATGTGGTCAAATATTGAAAAGACCTTTTGCTTCCCATATCACTGGAGGCTTGTGCAGCCTCTCTCTGGACTTTGGCAGCTGTCGCCCCCATCCTGCCACATATCTGATTCCCAGGAACAGGCTTGGTGTCCTGTCACAGTTCGCATTTCAAACCTCATTCTTTCTCTTAGGAGAGGACAAACTTGTCCCACAGTCCTCTATGCATCATGAGACTGCACAGGCCCTCCATGTGGCTTCTGCTGTGTTATTCAGGGACATTCTATCCACGGGGAGTGCTCCAGTCTGAAGCACTTCCTACCACCAAATGCCCCTACACCAAGTGCCTTCTCCAACACCAAACGGAGAGGGGCTTCATCTCATTTTAAAAAGCATTCGTAAGTGTTCCCATATTTGGATGCTTCAGACCCTTGCAAGAGACAATTTGTTTGCCTTTGCAGATGGAGAGAGAGAAACTCTGGAAAGATAAATCACTCACTCACCGACAGTTACTAAGAACATTGTCAAAAAGACAGCCTGGGAACCTTCATTCTTAGCCCAGAGCTCTTTTCACTCCAACAAGCGCCCTCCCATCACAGCCTCCTTCCTGTCCTTTAAAACTAGACAGATGCTGCCTCTTGCTCCAAAGACCACCTTCCATCAAGGAAGGAGGGACACTTGCAATACTGTGACCTCCAACCCCATGGGTTTCCCATCTCTGTTCTTACCCAGGAAGTCCTGGTCATGTCATGGCCACATATGTATAGCAGAAAAAAACCCCACTGATACAACTGTCATTGTGAAAGTATGGAGGTCTGGAGCCTCTCATAAGCCTGGGGTTTTGGGTCATCAGGGCCTATGGCCACCTTACCTGGGCTGAGCTTCTGGAAAAGTTGCTGTGCCAGTCTACACCCCTCAGCCAGCTGTTCTTGGAGGTCCTGCCCCTGGGACTTGTCTGGCTTATCCGGAGTGAGGAGGGCCTGGAGATGCTGATTCAATGAGCGGGAGGCATCTCTCCCTTCCCGTAACTTCTCCCTTAACTGGGTCAGCTCTCGTTCCTGAGAGTGAACCAGGACTTTATATTGCCTAAGGTGAGACGGTAGAGAAAATTTAAGAGTGGAAAGGGTTGAGTGATCCGTTCAAATATTGCAACAGAGATTTCTGAGACAATGTCCTCAAGGAGACCTCCAAGCAGAAGGTCAGCACATGTTGAAAGGAATGACTGTGGCCAAGAGAAAGAATAGAAAATGGTTTACAGGCTTCCTCTGTATCAGAGAGGGCTCCTGCAAGATCCTCGATGATGTTCCATTCATCTTTCCCTTCTGTAAACAAAAGTAGGTGTCTTCCTAATTCCGTTTCAAAAAGACATCCTTTCAGTTCCTCACTCTGGCCATGGACATTTCCATGTGAAAATACACATAGTGCATCTTGCGGCCACTAGATACAAAGCCATGTACAGAAATGAGGCCAGGTGCAGATGGGGCGAATTGAAAAGACGAAAGAAGAAAAGAATGACAGGGTCGAGAAGGCAACATTGATTGAGTGAAAGAATGAGAAGACGCAGTCAGTCAGAAGGTGATTCTCACTAAGGGTAAGTGGGGTGGCGATGGCACACCATTTTGAGTATACTGAATGCTGCTGTGTGGTTCACACTCCTTTGGTTAATTTTGTGTTATGTAAATTTCACATCAACAATTACTTGTTTGAAAAAGAGAAAACAAGGCTCTAAGAAACAACTGCAACCCATAAATTTTTATTATCCTTCTTCTCTGCTTGATAAATACTTGTGTGTTGCGAGCCTGCCATGGCAATTCCTGCCCTTCCCCTGGCCCAGCTTAGCTCTTACGTCTCCCCACCGAGCTGCTGTACTTCAGAGATTTACACAGCTGCTCCCCTGCCTGCCCCCATGGGGTCCCCTCACCTGAGCTCCTCAGCTTGCTTGAGCTGCTCTGCAAGCTTCTCCTCCTTGAACTGTCGCTCATTCCTCAGCATAAATTTTATGAGGTCTTTACACTCTTCATACTCTGAGAAAAGACAGACACGCCTGCCTCAGTGGAAGGCTGGACATGCTGCTGTGGTCACTGCCTACAGGGCAGAAGCCAGGTCCATCCCAAGGACAAAACTGTCCCCCGTACCAGGCTCTAGGCAGGGATTTCCACATCTTTACTCTTCAGTCTCCTGACTTTCTGGCATCTTATCCTCCAAAATTTAAAGACGAAGAAAGAGAAATTCAAGGCACATCAAGGAAGTTGACAAGATGATTCAACCACAACGAAGTGGAGTCAGAACTCACAGCCCCTGAGGTCTGACTCTGAATGCGGGGCCACTTTCCCAAGACTTGCAGCCTCTCCTCTGAAACACTGCACTGGGGCATGAAGTAGTGATTTCTTGTACAGTTGGGAAGGCCCCTAGGACTATGGGACTGACGGTTTCCCTTTTACTGGGAATTTCAAAGACAAGTATGCGAAAGATTTTAAAAATCTTTGATTTTTAAATCATATCTTCAGTTATGATTTTAAGAATCATATCTGAAGCATAAAGTGTGACACATAACACCATAAGGCCATGAAGGAAATATGCCCAAATATTTTATTAGTATGACAGGCAGCATCAAGATTTAGATTAGTTGTGTTAATTTAGAAACAGCATAAGATTAGTTTGTGTTAATTTAGAAACATCAGAATGAAGAACTAATAGATAGTGTTTACACTGTGCCAATTAATGTTCAAGGAGATTGACAGGAAATACCTCATGTAATTCATTGCAGCAATTTACAGAGGTAGGTATTATTGTAGTACCCTCTGAACAGATGAGGAAACTGAGGGACAGACAAGACAAGCAACTTGGATGGAGCCCAGGAGACAGGCTGAGGGTCCCTGCTTTGCACACTGCACTGCTGCTTCCACACATTCTCGGGTGTGATCTTTCTTCCTCTTTAGGAACAAGAGCCTGTGCACCAGGAAGCAGGACTTCACTCTCACCAAGGTACTCTCTGCTTTTTATTTTTATTTTTGTTTTATTTATCTTTTTGTTTGTTTGTTTTTTGATGAGTCTTGCCCTGTCACCCATGCTGGAGTGCAATAGTGCAATCTTGGCTCACTGCAACATCTGCCTGCTGGGTTCAAAGGATTCTTCTGCCTCAGCCTCCCGATTAGTGGTGATTACAGTTGCCCGCCACGACGCCCATCTACTTTTTGTATTTTTAGTGGAGATGGGGTTTCTCCATGTTGCCCAGGCTAGTCTCAAACTCCTCACCTCGTGCTCTGCCCGCCTCAGCCTCCCAAAGTGCTGAGATTACAGGAGTGAGCCACGTTGCACGGCCCCTACTCCCTGCTCTTGATGCTGTCACTTATAGATAGCACAGGTTCTATTAGGAGCAGACTCCTCTTGAAGCCCCTCAGAGCAGGTACTGGCTACTATCACCAAGTTTCCCTCAGAGTCACTAGAACAGAGCCTTGCCTGTTGGGCCTCAACAGAAACTTGAACTGAATAAAAGTTCACTAGTCTCAGACATTTAGAACAACAGACTAGATGTTATTTGTCTGCAGGATCTTATATGGTACAGAGAGGATTCTTGAAAACATGATTGAGCCTCTTGGAGAAAACAGGTCGTTCTGTGTCTGTGTTAGAAATCAATAACTGTGAGTTTAACTCTAGTCCCACCCCCACCTGATTGCAAACATGGAAAGTTGCTAAATACTTTGGTACCTCTGTCTTCCAACTTTAACAAAATGTTAAAATACCCATTTCTGTTTTCCTAGAAGTACAGGAAGGATGAAATTATTTTTGATGGAGAGAGCATTTAGTGTCTCAGAGAGAAGACAGGACATCATTCATCACTTTCATGATGGTGAGCCTATAGATCTTACTGTATTTCTTCTGTCGGTTGGCCAGGAAGCCGGCCAGTTGAGTTACAAAACATTTCTCTTTGAGGTTTCTGAACTGCTGTTTGTTCTCTGCCAGCTGGGGGCGCAATTTCTCGTTGATTTCTAAAATGTTCGTCTCTGCCTTCTCGCTGGACCAAGGGCCAGCTGATACCACCATGCTGACGTTTGTGGCAGAAGAGGTGGAGCCAGGGACTGGGGAGAAGAAACCCAAACATATGATGGGTTAAAAACTGGTGAAATCAAATAGGTTTAATCAGGACTGAGGGATGTCAGTAACTGAAATTCTTAACTTACTGTTGTGAAAAATGTGATCACTCCCCACAGCACTTTAGGATCCTTCACCACAAAAACAAGGTTCGAGGTGCCTGAACTCAGAGCTGAAAGCACTGCCAGTAGCTCAGACTCTGATAAGAGTGAGGTAGACTGTGGCCAGCGTGCCAGGTAACCGTCTGCAGTTGCAATAACAGAATTAGAAGGTGGGGGTGTCATGGAATCTTAGGAGCCCTGCATTCCAATTGCCCAGGCTTTCCTGAAACACAGGCACCCTAGTCTCACCTGAGGGTCACCACCAATGGGGATCATTCCTTCAGCATTCACTCTCAGTATTCGTGTACCCTTGTGATGATGCCACAGACCCGTGTCTTTCCCAATACATCTAAGCATATTCCTCACTGTTTATCTCTTGTCTGTACAACATCATCAAGGCAGAAACAGTTTCCCAACAGGTTGTATTTTCTTAATGGTAGTCATGAAGTCACCCCACCTGCTCTCAGTTAAAACAGAGCTTAAGGCCTTTCCACAGGTGTAAGATATCAAACTTTTAGCCTGCCCTGATTTCCTCTGGGTCTTCTGCAGTTTTGTCTGTATCCACTAGAAAGTGAATGAATAATTCATTTGTAAAAAATGTTGTCTTTCCTGTCTCAGTATTCTTCTTGCTGTTTCCCATTGTTATGTTGATTTCTTTTTTCTCACTGGGGCACCATCTTTGCTTTTCATTACACTCTAGACCAGTTTGACATCCCTATGTCCAGAGCTCTTCCTCTATGTGGGTTGATTTGGTTTTTGATGTCACTGAGCGCTACATTTTATACTTGTCACTTATGGATGTCATTCTAGTGTCACAAGAGCTCTTTTCAAGGTATCAAGTGATCAAAATCATTTATATAGAGATCTCCTGAAAACATGTGTGACCATCTATCTTGGGAAGTTTCATAAACCTGATGCTATTTTGTTGTTTCCATTTTGTTTTCCCATATACTGAAAAGAACAGGGCCATGAGCGGTTCTTATGCAATATGGTTTGATATATATTTTGTTGAGATGACCTAACACCATTGATTTTGGGTTGCATTCCACTAACAGAACATGGCAAGATCAAGGTTATGGTCACGGTTGGTTGGTGATCCTCAGTGTTGCAGTAGAAGGTGAGTTTGAGATGAGAGGAATGAGTAGGAAAGAGTGATCCCCTGAACCACCTCCTCGCTTTCTCAGCTTTCACCCCACCTAGGTTTTGTGAGCCTGGAACTTGGGAGACTGTTCTGTAGCCCAGGTCTCCTAAGATTGGCTGCTGGACTTGCCTGAGTTGAGGGTGCGGTGGGTTGACCCTGGGCTGCCCAGCATTCATGTGGTAGTGAAGGAAGGAGGACTGGATCAATCCCATTTCAAAGCATGTCTCTCTGCACTCCACACTGTCCTCCAATGACACTGTAAGGAAACCGCTTTAAGACGTATCAACGGCTTTAAGTAAATGTATTTTCTGGCATCTGGGAGACCTGACATTCTGTGTCATAATGAAAATCTGTCATGTTTCTTTATTTTAAAAATGATAAAACTGCAGGTTCACAGAGTTACATGGCTTACTTGAGGTCACACGGGGATGAGTTTTCAGCACTGCCAATAAAAGCAATCACATGAATTATTCAGTAATTATTCATAGGATCCATATAATTCAGTAAATATTCACATAATTATTTACTAGTTGTTCATTGACCAATTCGTACAAGGCATTTTGCTCAAAACTGTGTTTATATTTGGACATTGTATCTTCATCATAATCCTGTGGTAATGCTGTTATCCGTAAGTAACAGGTAAGAAACCTGAAGAGGAGGGATAGCAAATCATGTATTTGGACATATTTCCTTTTTTTTTTTTTGGTTTTTGTGATGCTGGAAGAATGACCAGAATGAGTCATAGGAAGAGTATACATTCCTGTAGTATTTTCCAGGACAGAGGTGTGACCTCCTAGAGTACTGGGACCAAAATTCCCAAGTGTCTGCAACCTTGCTTTAACAGTATGGGAGATCACCTCTATCACCTGGAATTCCCCTGGAACTCTGGAATATACAAGAGAAGTATGAGACTTGGGTCTTCCCTTGGCTGTGTTTAATTCACTCTTCTATGGAATACCAATGATTCTCACTAAGACTGGCCTTTTCATAAGCACAATGTGCATTTTATGGAGAAGATTTTACACTTTGCTCTATTTAGAAAGAATAAATATGAGCAGTGGTTTAGGTTTTATGCCCTGGACTTAATATGTTTCTGATTCCTGTTTTGAGATTAAATTCTCATGTAAATAGAAAAATACTTATTATTTCTCATAAGGCCAAGTTTGTTATTAGTTTGAGTTTTTGAAGATGAAGCACAAACTTTTGATTTTATCTTTGTCTGTCTCTGTCAGCGCCACTCGTTGTCTCTCAGTATGACCTGGACTTGCCCCTGCACTTACCCTTGTCCTGCTGAACCATCTCCATGCACTGTCCAATTCCATCAGTGATTCGGGCTCCTTCCAAGGCTCCCTGAAAAGGGCACAGAGATCAGGACATTAGGCACATTCCGGACACAAAGGCAACCCATACTGTAGAGTGGGCAGCTGTGTTTCCACTTCCCTAATATTCCAGTGATGTCCTCAAACTGAAAGGAACACTTTCCCTTTTTAGGGGTCTGTTCTTCATGTCTCAGTGCCTCTGATCTAGTCAACACAACTGTCCTGAATGTGAAAGAACTTGCTAAATTTCTAGTTTCTTGTTAGGTGGCTAAAATAGATTTATAAGACTTCCTTACTTACCCATGACTGCTGAAGTTTGAATTCTTAGCAGTACGATTCGTTTTCTTGTAAGGTGAGCAGCTTAGGAAAGATTGGCCATCTTCCTGTGCAAAAAGAGGCAAACTTAATTTCTACTCAAAGCATGCTTGAATTTGGAATCAGGGCTTCCACTCTTCCGAAGTTGGAGTGTCACTGCGACAGGCATGTGTCCCGAAGGGCTCGTGTCTCTGCTATACTCAAAGTTTAAATGGAGCCCAGCAAGCCAGATGTCCTTTACTTCTAGGTTCCCTCAACAGTTTCTCCTCCGCTTTAGAGACCGCATTGAAAATATTCTTGTTCTGCTGTTGTGTTTTGGCTTTGGAATGATGTGATGCAGCTCAATGGGTCCCACCCCCAACTTGATCAAAGTAAGAAACAGCTGGGAAAGTCAGTGCAAATACAAGTTCATTGTCCTCCTTGCAGGGATTCTGATTCAGAGGGCTCAGGTGGGGCCTGGAATGTTTGTTAACATGACTCAGATGTGCAGTCAATTTGGGGACTCACTGACAGCATTGACCTTACAGTTTATGGGATGATTCTTTCTGTTTGGTGATGAAGAAACTGAGGCACACAGAGTCTGTAACTTGCCCAAGTTCCCCTTGTTGTAAGTCCTGGAGCCAGATCTCAGGTGGACCAGTGCTTCTCTCCCCTATACCTCATTTCTGAGAAAAGGAAATCTTCTGCAATTTGACTTCTTTCATCTAACACATTTCCTCACAACATGCAGCCAGCATCATATTTTGGCCACTTACTATTAAAGTGAGATGCTTTTTTTTTTTTTTTTTTGAGACAGGGTCTTATTCTGTCACCCAGGGTGGAGTGCACTGGTGATTATAGATCACGGCAATCTTGAACTTCTGGGCTCAAGCGATCCTCCTGCCTCAGCTTTCCAAGTAGTTGGAACTATAGGCACACATCACCATTTCTGGCTAATTTTATATTTTTCATAGAGACAAGGTCTTGCTATGTTGCTCAGGCTGGTTTTGAACTTCTGGCCTCAAGCGATCCTCCCACCTAGGCCTCCAAAAGTGCTGGGATTACAGAAGTTAGCCACTGAACCTGGCCCTGAAATGCTTTTATTTCTTTCTTTTTTTTAATGAAAATACTGGACATGGAGATGTGGAAAGACACCTTGCTTTATTACTTTTGTTGTTATTATTATTTCTACAGTAGAATTTATACATCACAAAATTCACCATTTTTAAGCATACATTTCAGTGTCTTTTACCATATTCCAAAACTTTCGCAACCATCGCCACTACCTAATTCCAGAATATTTTCATAATGCCAAAAAGCATGCCTGTACCTATGGGCAGACACTCTCCAATTCCCCCCTTCTTGCGCTCTCTGACAACCACTAATCTACCTTCTCTATATATTGATGTACTTGTTCTGGGCACTTCCTCTATATGGAATAACAAAGTGTGGTATTTTCTATCTGCTTCTTAGAATATTGTTCTCAAGTTTCATCCTTTCTAGCCTGCGTCAGTACTTCAACTTTTTATGGCCAGATAATATTCCACTATATGGTTATACCACATTTTGTTTATTCATCAACTCATGGTGGTTTAAGATGTTTCCACTTTTTAACTATTAGGAATAATGCTGCTGTGAACAGCTTTGTACAGGTTTTTGAGTGAACATCTGTTTTTCATTTTCTTGGTTATAAACCTAGGAGTGCAATTGCTGCATCATATGTCACTTTATGTTTCACTTTTTGAGGAACTCACACACTGTTTACTAACTTCAGTAGCTATATCATTTTAGATTCCCAATAGTAATATATGAGAATTCCATATTCTCCATCACTTTTGAAACATGTGTTGTCTTTATTTTTTTCTTAAGTCATACTGCTGGGTGTGAAGTGGTATCTCATTTTGGTTTAAATTTACATTTTCCTAATGACGAAAAACATTGAACATCTTTGCATGTGCTTCTTGGCCATTTGTGTGTTTCCTTTAGAGAAACCTCTACTCACAGCTTTTTTTCCCCATTGTTAAATGTGGTTGTCGTTTATTGCTCAGTTATATGAATTCCTTATACACTCTAGGTACTAGACCTGTGTCAAACATACAATTTGGAAATAGTTCTCCCATTATGTGGATTATCTTTTCACTTCCTTGACAGTGTCCTTTGAAGCATACAAGTTTTTTATTTTAATGAAGTCCATTTATCTATTTTTCGGTTGTTTGTGCCTACTTAAAAAATGTCTAATCCAAAATCACAAAGATTTGTACCTAGGTTTCCTTCAAGACATCGTCTTTTGAATGAGAACTTTCCTGGGTTTTAGAGGAGGGTGGACATTGTTTATTGATGCCTCCTGTCCATTACCGATGTTTCTCTTGATTGTTATTCATATGCTCACCACCCCTCCATGGAGCATCCATGGCCTGTGACAGAGCTCTGGGGACTGATATCCTTCCACTGACTTTGGCGCTGGTGAGAGCCCTGGTCATGTGATTCAGCTTGGCCTTAACCCGACCCAGTTGCACATATTCCTCAGGCCCTTTAGAGTTGAAGTCGAGACCTCTCTGAGAACGCTTGCCAGCCCATGCTCTTCTAAGGCTGGAGCAAACTTCCTCCATCTATTCCAGACAGAGGGGACTGCAGGGGTTGGACTCACTCAAGATATCTCTGGTGTTAGAAAGAAGACCTGTTTCAGGCTTTGGGGAAGATTGTTCAATATGAACTAGGTCCTCTCTAATTATTTTTACCGTATGTGTGACTTCTTTCTAGAAACAAGGGAAGAATATTTATGTTAGAACATTTTGTCTATTCTTTGTCAATTGTTGTTTATCTACAATTTTAACATGGATAAAGGAGAGTTCAGTGTCAATATATTCTTAACAACTAATTACGGCTCATGTCCACCGCCATGCGATCATATTTAAATCTGTCAACTATCCTGTTACTTAGGTATTATCCTGTTCCTGATGAGAAAACAAACTCAGAAAGATTGCAAAATTTCCCTAGGTCACAAAACTAGTGAGGAGAGGAGTAAGAATTAGATATCCGTTCCTTTTGGCCTTCAAAGCTAACCTTGTACCATTAGATCAAACTGATTTACATACTTTTGCTGGAATTAGTCTCAGACTTGTGGTTCTCACTTGATTTTCCCAAGGAAACAGTGTGCCACTTTAATATCATTTCAAACTTTGAAATTTAAAACTCTTTTTATTATACTTTTTTGTCTTTGTTCTATTCCGTTGCTTTTGGTTTCTTCTCAACGGATCCCTCTTATTTATATGCTAAATATTTGTTACCTATTTTCTGTCAATTTTCACCTTTTTGAGTGTTTGTTATCTGTCTGTTGTATGCTAACAGTTTTTCACTGAGGTAAAATTTGCGTAGAGTATACTGCAAAAAAACCTAAAGGCACAGCTTAATAAATTTTAATATAATTATAATTGTAAAGTAACACCCAGTTAAAGACAGAGAACATTTTCCCCCATGCCACAAAGTTCTGATGTGGTCCTTGCCAGTCAATACTCATCCCCCAAATGAAGAATATATTCTGAATGTTGTCACTGCCTTAGCCCCTTTGTGTTGCTGGAAAGGAATACCAGAGGCTGGGTAAGTTATCAAGACAAGAGGTGCCTTTTGCTCATAGTTCTGCAGGCTGTACAAGAAGCATGGCCCCCGCATCTGCTCCTAATGAGGGCCTGAGGCTGCTTCCACTTGCAGCAGAAGGTGAAAAGGAACCAGGGTGTGCAGAGATCATATGGCGAGAGAGGAAGCAAAAGAGAGCAAGGAAAGGTGAGAGGCACTTTTTAATAACCAGCTCCTACAGGAACTAAGAGAGTGAGAATTCACTCACTACCTTCTCCCAGGGTGGGGATTCATCTATTCATGAGGGATCCACTCCCATGACCCAAACACCTCCCATTTACCCCCACCTCCAACACTGGGGACCACATTTGAACATGTGATTTGGAGGGGACCAATATTTAAACTTAGCAGCCACCATAGATTCATTTTGCTTGATCATGTGCTTCATAAAAATGGAATCATTTTGGCTGGGCCTGGTGGCTCATGCCTGTAATCCCAAGACTTTGCAAGGCTGAGGCGGGCAGATCACCTGAGGTCAGGCGTTCAAGACCAGCCTGGCCAACATGGTAAAACCCTGCCTCTACTGAAAATACAAAAAATTAGCCAGGCATGGTGGCCGGTGCCTGTAATCCCAGGCACCAGATATGTACTGGTATCTCATATGTACAGGACATGTACTGGTATCTCATTGTTGTATTGATTGATGTTCCTGATGGCTAAACTGTAGAGCATCTTTTCCTATGCTAATTGACCATTCATGTATCTTCTTTTCTTAAGTACCTATTCAAGTCTTTTGAGAAATTGTTTCATTGTGCTGTTTATCTTATTAAACTTATATATATATACATACATATATATACAAATACACTCTAAAAAACCCCTTTGTTGGAAATAAATATATCTCCTATATTGTGGTTTCTTTTAATGTTCTCTTAATGTTCCCTGTTTGGAGATAACGATAGATAATCTTCAAAAAGGTGAATATACACACCCACACCCACCCACACACATACACACACACACACACACACACACACACACACACGTGAGCCACCGGATCCAGCCTGTTGAATTTATTTCTAAGCACAACATGTATTTAGATGTTACTTGAAATGAAATTGTATTTTTATTTCATTTTCCAAATGCTCATTGCTAATACACAGAAATACAAAAGACTACTTCTATTGAGCTTATATTCTGCAACATTACCAAACTCACTAATTACTTTTGGCAGATTTTTATAGATTTCTAGGATTATTAACATACACAGTCATTATCTGTGAATAAAGACAGCTTCAATTCTTTCTTTTCAATCTTTTCAATACTTTTATTTTTCTTACTTTATTGCATTGATTTAGATCTCTAGTATAATGCTGAATTGAAAGAATAACAACAGATATTCTACTTTTTTCTCTGATTTAATAGAAAAGCATTCAATCCTATGCCATTTAATATAATGTTACCTCTGAGTTTTTTTCAAATCTACCCTTAATAGGGTTGAAAGTGTTGCCTTCTCTTCTTATCATGCTGAGAGTTTTCTGGGGTTTGTTTTTATAAATCATGAAAAAAGTTTTCAATTGTGCCAAATGCTTTTACTGTGTATGACAAGGTAATCATATGGTTTTTCTCTTTTGCCCTGATAATACATAACATTACATTTTCTTAAATATAAAAAAGATTTCTTGAATCAAGCTAGGACAGTTTTTTTAATTATAAACTTTTAACAAATATATTGAAATATAACTTACATGCAATTGAGATGCATGAAAGTGTATAATCATTAAAGTGTATAATTTTAAGAGTTTGAGCACACTATACACGAGTCAAAGAGAAAGGACAGAAAATACTAACGATGGCTCAGCACATGTGGTCTATCTTGCTGAATGCTCTATGTGAGTTTGAGAAGAGTTATTTGTTAGCTGTTCTTAGATGTATTTTGCTTAAATATCGACCTGGCTAACATGTGTCATTGATTGTGTGAATTAATTTTGTTCTAGTGGGCAGTAAAATTACTGTCTGATCACTTTGGACTTATGTGGACTGGTTCATGTTTTATTACAACGGATTCATGGAAAGCCCACAGCATTTCCCAAGACCCTCTAATTTGGCAGGACTCAATCACCAATCCACCCCTTTGTGAATTTGTCAGGGTTTGCTTTTAGGCTTTAGCAGGTTGGTCTACAATAGGCCTTATTGAAAAGTGTGACACTTATTCCTAAAGCACATCCATTCTAGTGTCTCAGTTGGATACCTGGGTGCTAATGAGGTGTGCATGAGTTCTTCCCACCATGGATGGCAGAAACTCCATCATACATTCCCCAACCCTCCTCCACCTCAAGTACCTCTGGTCCAAACTCAATTTCATAGCAGCCACCCCTCTGTTAAATCTGTTAGTCTTTTCCTTGTGCAGGTAGAGTCCACTCCTTGATAAGTATGCACATGGAACCCCACATAGACTTTGAGAGCTGCACCTTTGATCAGCTGTCTCCTCACTGGTGCCCTGCCCTGCAGATTGCAGTTGCTTCAGCCGTCTTGAACTCTGATCTCTGCCTTCTCAGCTCAGTGAGCTGCCCTGCCCTGAGTGGACTCTAGCTCACTATGCAGCTGCTGAGAAATTCTCCCCAAACAACTAGGAAATCATGGGGCTTCCCCCTTAAGTTTTCTCTTGGACTGCCTGTTGTACACTGCTGAAAACAATTTTACGTTTGTTTATGGAGGCAGGGTTAGTCTGATATGATTTATTCTAACAGACAGAAGCAGAAATCTGTTATACTCTTTTAATTACTGTGTCTTTATAATATTATGGTAGACAGAATCCTAAGATGACCCCCAGTGATCTTTGCTCTTATATAATCACTTCCTCCTGAGTGTAGACAAAGCTACTGAGGAGATGTCACTCCTGTGATTGTGTTACAATTTATGGCAAAAACAAGTTAACAGATGTAATCGAGATCCCAAATCGGTCCAATTTAAGATAGACAGATTATCTGATGAGCTTGACCTAGTGAACGTGAGTTCCTTGGAGGGACTGAGGACTTCCTGGAGAGATGTGAAGTGCAGGAGGGTTTCCATGCAGGGCGATCCTCCTCTGCTGGCTGGAGGAAGCATGCAGTGGGAACATGGGAGGCCTCTAGGAGCAGCGAGAGGCCCCTGGCTGACAGCCAGCAAGAAAACAGAGATCTCAGTCCTACAGTCACAAGGAACTGAACTCAGCTGACAACCTGAGGAAACTTGAGAGGAAGTTCTTCCCCAGAACCTCCAGAAAGAAACCCAGCCTAATTTCAGCCTGTGAGGCCCTGAGAAGAAGACCCAGAGAATCCAGGCCTGAACTTCTGATCTGTGGACACTGCAAGAAAATAAATCATTCTTATTTTACGCCGCTAATGCTTGCAGTAATTTAGTATGCAGCAATAGAAAATTAATACAAATAAAATGGAGAAGGCTTTGGAGTGGGGACAAGAAGGAAACGGTGGGAGAGGGATGCCTGTATGCTGATATGGTTGATGCCTGTATGGTTGAATTGGGTCTACCGTTCCTCATCTAATTAGCTATGGTCTATTAAGGTGCATAGCTACACACAAATATTGGTACTACGTTCAATTCAGAGGAATAAGATATTGCATTCTTGACAGTAGACAAGAACACCCTGAATTTGGGGTCACTGTATCATAAGTCATGTTATCAGGTCCCTCTAGGAAGGCTTAGAGGAAGATTTCCAGGATACACTTGTGACAACATTGAAGGCTTCTTTTTTCCCCAAAGGGACCCGATCTCCCCTCAGTCGAGAAGCTCCAAGTCTCTGAACTGGATGCCAGGTTATAAATTCCCCCTATACTGACTCCATCAGGCTTCTGTCCTCAGAACTAGAGTTTATCAGTAAAAGATAGACTCATGGGAGTCTAGGCATTTATTCTCTTATTTTATATAAATCAGTTAATGTGCAGGAACAAAACAGACTTTGAAGAAAGACACTCACAGTTGCCACAGGAAAACACCTTCAACATCCTCATGAGTCATCATGGGTGTTCTGTTGGGAGGACTTGATAGGAGGCTTTCCTCCTCACGGGCTAGTGCAGATCCAGGGGAAATGTCATCAAGTCCTCCATTCGGAGGGTAGCAGCTGAGGCTGCTGATTCGTTAGGCCTCCTGCAGCTGGAGATGCAAGTAGTGCATTTTCATGGCCACCGCAGGGCCCTCAGTTTAGCATTCTTCAGAGCCAGCATCCAACAAGCCACAGAAGCTCTGAGTATTTCCCTTTCTTCAGTCACCCACATAAATGGCTTCAGGGCCTTCTGGGGAAGGCCTGAAGGAAGATTTACAGCATACACTTGTGGCAGCATTGAAGGCTTCACTCTTCCTCAAGGGATCCAATCTCCCCTCAGTCAAGAAGCTCCAGGTATCTGAACTGGATGCCAGGTCATAAATTCCCACTATGGTGACTCCATCAGGTCTCTGTCCTCAGAACTAGAGCTTTTCTAAGTGTAACGTAAGTTGATTTCTTAGTAGATGTCCCATCCATTACATTCCCAGACACCTCACAATGATTCGAATGATTAGTAACCACCACATATCCCTGCCTCTCAGGGAAATCCCTCCCGCCTTGTCTCTAGATGGCCAAGTCCCACGGCCTGTCCTCTACTCTTCCAGAACCCTGTTGTTCTCACTGACAGCAGGGAGGGCAAATCCATGCAGCAGCTCCCGCCATGACCTCCAGCCTGCAGAGGATGGGCGCCACAGGACTTTTAAACGCATGCCGCTGTTCCCCTCACCTGTGCATTTCTTAACGCCTTGGTGAGGAGAATGTCTCTGGATCTTCCTTGATGGGAGCTAAAGGAACAAAGGTAAATAATGCTATGGGACCCACTGAGAACTGGGGCTGTGGAAGAGTGGCCACTGAAGTAATAGACAGATGCAGCTATTGCCAGATACTCAGTGCCAGAGCAGGGAGGGACAGGGAAGAAATACGGACCTCACCTTCCTCTCACTTCCAGGATCCATCGGGGGCCCTCCATTGCTAAACCTAACTAGAAGTGTGCACGCACGGGAGCCAGGGATGCATTCTAGGAGGGACGAGCCCCGAGTGGCATGAGACAGGATGGAAATGAGTGGACAGTGGATCTGTGGGAAGAAGGAGGGGATGTTATGGGAAAACAAAAGGAGAATACTAGCTAAGAACGCTAGGTGACATTAATATTCCGAAGTCTGTGCTCATATTCAGCAAAGAAAGTTCAGCATAAAGCACTAAATAAGGAGTCAAGATATTGTACTTCCAACTGTTGTTCCAACAGCTGTATTATGAAGGGCCACTTTATTTCATGCCTTTCTAATTTGACCTAAAGTGCCAGGTGGCACTGGGGCTGGCACAGCCTTGCTCAATTATGTGTTGCAGAGTACACAGAGACTGCCAGGCTGAGGGAAGATGCAAGAGAATAGAAGAGATGCTCTCAGGGAACAAGAGACCACATGGCCCCAGAGTCAGGGGCAGCATCAGCCACTGTCAGCTGCTCATTTTCCCAGACAGAGCCCACAAGCCTCAGCCATGCTTTGCTTCTGCAAGACGCTTCTTCACCTTTTCAATAAACCTGCCTGAATTTAAGCTGACAGGGTTTATTTCTCCTTCATCATAAATGAAATTCTTCACCACAACAATCTCCAATGAATTTTGGGCACAGCAGGCAGGCCCATTTCTGCTTCTGTTCCACTATCTCTCCTGTAGGTTGAAAAGGAGGAGGTACTGAATTACCTCCAAATGTTCCTCTGGCTCTGATATTCTGTTATTCTGGTTCCTTTTTGGCTACTTTGTTTTTGGTAGCGTGTATCCTAAGGCGTCCAGTTGAACAACTTTTGTCTACTGTGTCCAGGCATTCCTGGTGGTATTTCAGATAAGACTCTCTTGGGTTGCTGAACTCACAACCACTGAACCAATTCTATGACCATCTGTTTCATGGCCACATGTTTGCTCATTTTATATGTACATAAAGGGAGGGGACAGACAGCAAACTTGCGTGTTACAAATTGTATCATCTTAAAAAGGAAACAAGGCAACACTTTGCAATAAAACCTTAAGATGCATGAAATTTGAGCCTAATGCAATAAAGGATGCCCATAAAATTCTTATCTAAAGAATGTTTCGAAAATTGTTGTACAAGGACATCATCATTTAAAGTGATATGAAGAAACCTTCTCAGCTAAGCATATGGGCTAGATTAGAGAGAAAAATAAAGGACCCATCTCTGCCCTGGAAAAACTGCTGGTAGCATCTTTCAAAAAGCTCTCTGTGTTTGAGTACGCACCTTGATCCATAGGCTCACATTTGATCCCAACTGGCAGCTGCTTCTTGGCATTAACATTGGATTCCCAACTAGTAAATCTTACCAAGATCTGACTTTCTGCAGATATAATATTATTTTGTTTGACCATCCTTATCTTCAAGGGCTACCAAGAAGGAACCAAGAATTTATTTACCTCCCCAAGGGAAAAGGTTTTACCAATGAGACCCTTTCTCACCATGACCCCAGGACCCCATATGCCCTGTTCACTTGAGTGCCCTGTGTGGCCTGATAGAAGCTCATGCTGGTCACAGGATTCCTTATATGACTAGCCTCCTTCCTGAATCCCAATTTCATGGTGGTGGTCATGACAGGTGTCCTGTATCCCATGCTCATGTCCCTGAAGTCACCAGCCTATCTCCAGTTAGAAAAAATTACATGTATATAGAGAGGCCTCTTTGGAAGGAGCAAAAGCTTTCTCACCTTCGTACACTAATGGTTGGAAGGTACAACAGCATATGCACTTTGGGAAAAAATATCTGGCATATTCTTACAGAAACAAACAACTACCTATTCTATGACTCAGTAATTCCTAAGCATTTATCCAAGAGAAACTAAAACCTATGTCCAGAAAATGACTTATACAAGAATGTTCATAGCAGTTTTATTCATAATACAAAAAACTGGAAACATTCAAGTATCTGTCAATACAAGAATGGATCAATAAACTGTGATACACTCATTCCATGGAATGGCTAAAGGAACAAACTGGTGACACACAGAACAACATGGATGAATCTCAAAAACATTTGGAGTGCGATAGAAGCCATACCCAAAAAAGTGTGAGAAAAAAAGATAAATAATAATGGTTCCAAGAAATGCACAGCAGACAGCCCAGAGGCAAAGACCCACAGGACGGCGGGCCGGTCCCAGGCTGTCGATCCTAATTAAGAAACTTCTGCTGGATTTTGCCCAGCTCCATTTCCAAACTATTTTGGGTCAGTGACTTCTTTATCCCTTCCATGTTGCCTCATTTTGAACTAGAATCACTGTAAGTGTTATTCTATGTCTGTCACATCATTCCACAGTAGGGGCAGATAAGCTGTTTAGAATGGCTAAAATTCAAAAAGGTGAACACACCAAATGCTGTCAAAGATGAGGAGCAACCAGAACTTTCCATCGCTAGTGGAAATCAAAAGGGTACAGTCACTTTGGAAAACTTAAGTTCACTCAAAATCCTGCACAGAAGTACTTACAGCAATTTTATTCATCATCGCCAAAACTTGGAAGTGCCCAAGATGTCTTTCACCAAGCGAAAGAATAAACAAACTGTTGTAGCCATACAAGGAAATCTGATTCACTGATTTTAAAAAACAAGTTATCAAGCCATGAAAAGACATGAAGGAACTTAAAGTACATAATGCTAGAAAGAAGCCAGTCTGGAAACCCACATACTGTACCACTCCAACTCTAGGACATTCTTGGAAAGTCAAAAAGATAGAAGTAGTAAAATGGTGAGTGGTTGTCAGGGGTGGAGGAGAGGAGGACGCGTGAAATGGTGAAGCACAGGGAATTTTCAGCAGTGAAACTCTTTCGCATGATGCTGTATTGGGGATTTAGGACATTATGTAATTGCCAAAACCCATAATCTGTGAAACTCAAAGAATGACCTCTAATGTAAACTATGGACTTTAGTTGATAATGACGTATCAACAGTGGTTCATCAATTGTAATGAATGGACCACACTAATACAACATACTAGTAGGGAAAATTGTGTGCTGGAGGACAGGGGAGCCTAGGAGAACTCTCTGTATTATCCACTCAAGTTTTCTGTAAACCTAGAACTGTTCTAAAAAATAATGTCTATTAACTGTTTTTTTAATTAGGATGCAGCAGCCCCATATCAAGGTTTTGGTGGCATCCTGTAATTGTGTGGTTAGTACTTGGCATTGAAGTGCACCAACCTGGAGTCAGAGCAGTTGGAGATTTCAAGGCCTGTGCCATTTACCTCTAACCCTGGGGTGCCCCTGGAATACAGATAGCAGATCGGTTAAGGAGAAGCAGCCTCAGCAATCTAGACAGTGCAGGTTTCTGGTGAGGACAGGTAAAAACCATCTGGGTGGGCAGAACTTGGTGAAGACCAGAAACCACTGAGACTCAGCAGCTGCCGCAGTGGCACCCACAAATCAAAGGAGGGGGCTGGGAAGAGCTAAGGGCTACTGGATGAGCTCTCTGCCTGCAAGACAGAAGCAGATCCAGAGATTTTGGAAAATAATGTAGGTTTCAGTACAGTGTGATCTCTTCAAAAAAGTAGAGAGAATGAAAAGGAAAGAAAAAGAGAGAGCATGAGAGAGAAAGAAGAAGAAAAGAAGAAAGGAAGAAAGGAAAGAAGGGAGGGAAGGAGGGAAGGAGGAAGGAAGGGAGGGATGGAGGGCGGGTGGGAAGGAGGGAAAGAATAAAAAGAGAGAGAAAGAGAGTTGGAGGGAAGTAGGGAAGGAAGGAAGGAAGGAAGGAAATGAACAAATTTACATGAAGATGAGAACAGTGGGGAAACTTACACCACCAATATTTTCCATTAACAGGAACACGCTAAGTAGTTATTAGAGAAAGACACGCTACTGTAAAACAATATACTGTTTCCATGGGGTACAACAACCCCTTCCTCCTCCTCTGAAACACATTCTATCTCTGGCTCACTGTTGCCAGAGACACTGAGTCTTGTCTTTGGATACGTTCTGGTGCCCACAAGAATGAGATGAGACAGTGGATCCCAGAACACCAGGCCACGAACTTCCCTGTTGCTCCTTGTCCACTCCAGAAGCTACCCAGCTGCAGTTGGGGACCTCAGCCCCTGGGTCTGATGTCATCCATTTGCCTTTCTCAATGGACTTCTCTCCTTGCACTGGCTCCTACTCCCCCAGGACCTGTGGGTGACCACATGAGAAGAACACAAACAGGCCATGCCCCTTTCTTTCTCCCCCTCTCAATGCCTGCAGTAGTGGGTTCCATGGGGTAGTGACCTGAGATTTACTCATTGTGGGGCCTCTAGCCCAGAGCAGGGCCTACTACCTCACAGTCACCCCATGAATGCTCAGTGAAAGAAGACGTCCACCACAAGGTCCTGGGGAACCAAGAATTCCACTGTGGCCCATAAATTCTAAGTCTACAGGATTCTGGAATGGGAGATGGGAAAGGCCTTCAAAAGTGGCCACTTTTAACCCATTATACTGGCAACTGAGCCATGTTTCCCCATCCTGGACACATCCAGAGGGCACTGCCTAAAACCAGACACATCTCCCCACCCAGGACAGTGTAGGAGCCTTAGCCTGGGGGATGCAGGTGGACAGGGAGGGGGTGAGCCACCAAAGCTGAAGAGCAGAAAGCAGGTGAAAGGGGACAGCAGGGTGGAAACAGAGAGAAATGGGGGCAGAGAATGGGGGGTGAGAGGGGAAGAGTGAGGAGAGGGATGCAGATCTAGCTAGTAAGGAAAAGTCCTGGAGAGAACACTGTCCTCTCCTGAAGTAAAATCACTTCTACCTGACCACGGCACTGCAGCTCATGGGCAGCACATGCTGTGGATATTTGTTCATTCATTTAACAAATATTTATTTAATATCTGTTGCATGCCAAGCAAGGCCCTGCAATGTTTAGGGACCTTGACATCTTCCCTTCACATCTGAGTCATAATACAAAGAGGACTCTCTGACCCCACTGAGCTGGCAATGCCTCGGGATTTTTACCTGTTGGATCTGGCAGCTCTTGATGTCAGCCCACACCATGTGAGGCTGCTCTTGGTGCACCCAATGGGGAAGTTTCTACATCAGGGCCTCGGAGAATCCACTGGAAGCCCTGGACAGTGGGAGTCAGCGGCATCCCCAGTGTGGAGGCCAAGAGCACACAGTGCTTAAGCTCCAGGCACCCTCAGGAGGACGGCAAGGGACAATTGGCTGGTGAGAGCCCGGGTCACCGGGAACCTTCGCCTGGGTCTAAACAGGATTTGCCTTCAGATTGCCTGTGAGATAAAAGAGAGAAATCAAGGTTAACGTTGAGATTTAGGGCTTCGGTAACTTGAAGGATGGAGCTGCCATTTACGGAGACTGGGAAGACCCAGGGAAGAGCAGATTGAAAGGTGGTGGGAACTAGAGGTGGTTGGGTTTCTGTCATATGTAATCAACAGTCCTGACCAGCCTGGGCAACATAGTAAGACCCCGTCTGGGAAAAGAAAAAAGGAAAAATAAGCTGAGCATGGTGGTGCACACTTGTAGTCTCAGCTACTTGGGAGGCTGAGGCAGGAGGATTCCTTGAGCCTTCAGTTAGCGGTTAGTGAGCTATGATGGCACCACTGTACTCCAGCCTGGGGGGAAAAAAATAAAGAGTCCTGACTAAATACTAGAGTAGCCAGGGAAGTTTTCACAAAGTAAGTAATATTTGAGGCAGATCTTAGTGAACAAGAATTCCATTATTTCTGTTAGGGAATTAAGAGAGTGTGGGTGTCGTTAGTTAATGCTTATTAAAGTAGCTTTGGAATCTCATCTACTGGTCTAGCTGGTCTATCTGTACACGTATATTGTATATGCTGTCTCTCTGAGCTTTCGCTAGGTTATGCTACGGTAACAAAAGCCCCAAAATCTTAGCAGCTACACATACGAAGGTTTATTTTTCATTGACATGTCCTTTTATGGCAGGTTGACTGTGACTCTACTCTATACAAGCTACTTTATTTGTTAGATGGTGAAAACTGTGATACTCGGAGGTTGTTGAATATGGTATTAGTATGTTCATTCATTCATTCATTTAAGAAATATTTATTCAATATCTGTTTCATGCCAGGCAAGGTCAAGTACTGAGAATACACTGGTGAATCAAAGAGACAAAATCTCTAATTGCCAGGAGCTTATATTGAAAATCAGATTAAACACATACAAAATCATCATAATAACAACAATGAATACTATATTCATAAATAATAGCTGTAAGAGATTTTAGTACATCTTTTAAATTAGAAAAATATAAAAATTATTAAAACTAAAATGGCCAGGTGTGATGGCTCATGCCTGTGATCCCAACACTTTGGGATGCCAAGGTGGGAGGATCATTTCAGCCCAGGAGTTTGAAACCAGTCTGGGCACTACAGGAAAACCCTGTCTACAAAAAGGAGAAAATTAGCCGGGCACAGTGGTGCATGCCTGTAGACCCAGCTACTAAGGAGGCTGAGGTGGGAGGAGTGCTTGAGCCTGAGAGATCAAGGCTGCAGAGAGCCATGATCATACCACTGCACTCCAGCCTGGGCGACAGAGCGAGACACTGTCTCAAGAAAAAAAAAAAAATTATTTGATGTAGTCCTAAAACTATTATGTAGAATACTATTGTTTATATCACAGCACGTGAGCCCCTTAAATGGCTTAACACTTATTTAGGTATGATCCATAAAGCTTTTCTGGTAATTAAGTATACTTAAGAACAATTAAGTATAAAAGAGTTACTGCCTTGACAGGAAGATTGTAAAAATTTTAAAAAGACAAATAAATAAAAGAGTAAAAACTGTAGCTCTGTGAGGCTCAAATAACATCTAATTCAAGTCACAATGAACATCTAGCAATCATTCTGAACACCATATAATTCACTTAATACGTTTTGCCTGAACACCCAACACATCTGAATTACCAACACCCATATGTAGCCAAGAAACTGGCAATCATTTATAAATTATCACCTATGACTCCATCTGCTCTACGCACTTATTTTTTAAATTTTATTCATTTATTTATTATTTTTATTTGTTGTAGAGATGGGATCTCACTATGTTACCCAAGTTGGTCCAGAAACAGAAACAGACCCACACTAATTTCATAAATCAGATGACCATACAGTCATTCGATTTATGAAAAAAAGTGCCACATGGTGCGGAAGGAAAAGGATGGTCTTTTCAATAAATGGTGCTGGATCAAGCAGACACATCCATGTAGTAAAAAGTGAATCATAGCCAGGTGGGGTGGCTCACACCTGTAATTCCAGCACTCTGGGAGGCTGAAGCGGGCAGATTACTTGAGCCCAGGAGTTCGAGACCAACCTGGGAAACATGTTGAATCCCCATCTCTACAAAAAATATGAAAATTAGCCAGGCATGGTGGCACATGCCTATAGTCGCAGCTACTCAGGAGGCTGAGGTGGGAGGATCACTTGAGCCAGGAGATGGAGGTTGAGTGAGCTGAGATCCTGCCACCACACTCTAGCCTGGGCAATAATAGACTGAGGCCCTGTCTGAAAAAAAAAAAAAGCAAAAACTAAAATAAAATCGTTATAAGGTTAACACAGAAAAATGTGTTCATACTCTTAGGTTAGGCATTGATTTCTTAAACAGGACACAAAAAACAGTAACCATAAAGGAAAAGATTAATAAAGTATAATTTCATTAAAATGAAGAATCTCAGGCTGGGTGCAGTGGCTCATGCCTGTAATCCCAACCCTTTGGGAGGCCGAGGCAGGTGTATCACTTGAGCCTAGGAATTCCAGACCAGCCTATGCAACGTGGCAAAACCCATCTCTACTAAAAATACAGAAAACAGCTGAGTGTGGTGGTACTCCCCTGTAGGTCCCAGCTACTTGGGGGCTGAGGCAGGGGGATCACCTGAGCCTTGTGAGGTCAAGGTTGCAGTGAGCTGTGATTGTGCCACTGCACTCCAGCCTGGGCGATGGAGTGAGATCCTGTCTCAAAAAGAAAAAAAAAAAAAGAGAATCTCCCTTCATGAAAAAACACCATAAAAGAGTGAAAACGCAAGCTACAGATTGAAAAAAGGGAAATGCAATACATATAAATCCTAGAAAGGAGGCATATCCAGAATAAAGTATTACAAATCAACAGGAAAACAAGCATATCAATGAAAACTGGATAAAAAGATTTAACAGGCACGTCACAAAAGAGGACATATAAATGGCAATAAAAGATACTCAATCTCAATGAAACCACACTGATATATTACTGCACCCCTACTAGAATGGCAAAATAATTTTTAACTGACAGGTATCAGCGAAGATGTGGGGTAACCAGCATATCCCTGCTAAATGGTACAACTACTTTGGGAAAATGTTCAACAATATGTAATACTAAAGTTTTATCATTCATATACCTCTAAAACCAACAATGCCACCCCTACAAATATACCCCAGACTAGTAATGTTCAATTTCTTGATCTGTGGTGGTTCACTTGGTAAAAATTCATTACTTTTTTTTTTTTTTTTTTGAGACAGGGTCTCACTCTGCCATCCAGGTCGGAGTGCACTGCCATGATCACGGCTCACTGCAATCTCAACCTCCCGGGCTCTGGTGATCCTCCCAACTCAGCCTACCGGGTAGCTGGGACTACAGGCACACGCCACCACACACAGCTAACTTCTGTATTTTTAGTAGAGAAAGGGTTTTGCCACATTGCCCAGGCTGGTCTGGAAATCCTGGGCTCAAGTGATCTACCCACCTTGGCGTCCCAAAGTGCTGGGATTACAGGTGTGATCACTGCGCCCGGGCCACCTGCACATGTAAAATTGTGAACTTCTGTATACTTCAGTAACTTTTCCAAGATTTCTTTGACGCAAAGTTCTCAGAAATCTTAAAGCTAGCATTTCAGAATAGAAAAAGTAGCTTCTGGTTCACTAGTGAAATTTTACCAATAGAATTTAAAAACAAAAAGCTACTAACGCATATCAGCTCAGAACACTACCAGCAGATCTTTTCTTTAACTTCCTGAAGCACTGGGATTCATTCTTTTGGCAAAGAAAGGATGAACAACACTGTAACCCAAAGAAAAGATACCACTGCCAGAAAAGACTTCTTTTCGAAAGCAGCTCTAAGCAAAAGATAGGAGGAAAACAAGGAAGCCAGGCCAAACGTCTTGGTTAACTCTCCGCTGAAAGGACGCCACATGAGATGATCTAAGAAGCCAGCCAGCCAGCCAGACGCAGGGAAATCACAGCAACTCTTTGGAGTGCAAACAGCAACCCCACAATCCAATCTACCCGAAATCCTGCGGTTCATTTGAGGCTTGCCCCGCTAGTCAGGAGGTGATTCAGTGATGGCTACAAATGCTGCTCATGTGCATCCTGGAGCTGGCACACCTGGCTTGCCCATCACCAGCCTGGAGACACCGCCAGGAGCAGAAGCCCGGAGGCCAGTAAAGACCCCAACTTTGCAAGTCAGGGGCGCGAGCGCGCTCGCCTCTCAGGTCCGCAGAGGGAACGGATTTCTGGCCTGGAGGGTGGGGTGCGGGGTCAGTGTCCTCTACAGGATATAGGAGGACGTGCCCCCGAAGCTGCTCCGTCCCTCCACCCCCTGGGATGCCACAGAACACCCGCCAGCGAGTTTCTTCCCCAGCGCCCACGAGAGTTGGGCTGCGGGCGGCAGCGGCAGGCGAAGAATCCAGCGCGGGGAACTCAGGCCCCGGCGGTGCACGACCCCCCACAGCCCCCACCCGCCCCCGCGCTCGCGCAACAAAACTTGCCACGGCCGCGCCTCGACCCAGCTGTGCGCCCGCGGGTCCCGGATTCACCGCCCGCCCAGCCTGGCGCGGCGCCCTCACCTCAGAAACGCTGGGTGGACTTCGCGTAACTTCCCATTCACAGGGCAGCCGGCAGCCGCGCCGCCGCGCCTCGGCCCAGCTCCTGGCGCCGCAGATCGCCCGTCCCGCGTTCCCAAAAGCACCGCGCTCGCTCAGAAGCTCGGGCAGCCTCGCGACCCTCACCTACGCCTCCCAGTACCGCCGCTGTCTCAACCGCCACCCAGCCCCTCGCCTGCGCCTGCGCCTGCAGCCCACTGGCTCCTCAGGATCCCGATGGGCGTGTCAGGAT", + 16888922 - 1); //coding region between 34..528 - var codingRegion = new CodingRegion(16890438, 16918516, 1007, 4651, 3369); + var codingRegion = new CodingRegion(16890438, 16918516, 1007, 4651, 3645); var regions = new ITranscriptRegion[] { - new TranscriptRegion(TranscriptRegionType.Exon, 28, 16888922,16890681, 4408, 6167), - new TranscriptRegion(TranscriptRegionType.Intron, 27, 16890682,16891301, 4407, 4408), - new TranscriptRegion(TranscriptRegionType.Exon, 27, 16891302,16891413, 4296, 4407), - new TranscriptRegion(TranscriptRegionType.Intron, 26, 16891414,16892127, 4295, 4296), - new TranscriptRegion(TranscriptRegionType.Exon, 26, 16892128,16892302, 4121, 4295), - new TranscriptRegion(TranscriptRegionType.Intron, 25, 16892303,16893674, 3844, 4121), - new TranscriptRegion(TranscriptRegionType.Exon, 25, 16893675,16893846, 3673, 3844), - new TranscriptRegion(TranscriptRegionType.Intron, 24, 16893847,16894473, 3672, 3673), - new TranscriptRegion(TranscriptRegionType.Exon, 24, 16894474,16894525, 3621, 3672), - new TranscriptRegion(TranscriptRegionType.Intron, 23, 16894526,16895567, 3620, 3621), - new TranscriptRegion(TranscriptRegionType.Exon, 23, 16895568,16895731, 3457, 3620), - new TranscriptRegion(TranscriptRegionType.Intron, 22, 16895732,16899636, 3456, 3457), - new TranscriptRegion(TranscriptRegionType.Exon, 22, 16899637,16899688, 3405, 3456), - new TranscriptRegion(TranscriptRegionType.Intron, 21, 16899689,16900981, 3404, 3405), - new TranscriptRegion(TranscriptRegionType.Exon, 21, 16900982,16901187, 3199, 3404), - new TranscriptRegion(TranscriptRegionType.Intron, 20, 16901188,16901651, 3198, 3199), - new TranscriptRegion(TranscriptRegionType.Exon, 20, 16901652,16901724, 3126, 3198), - new TranscriptRegion(TranscriptRegionType.Intron, 19, 16901725,16902761, 3125, 3126), - new TranscriptRegion(TranscriptRegionType.Exon, 19, 16902762,16902976, 2911, 3125), - new TranscriptRegion(TranscriptRegionType.Intron, 18, 16902977,16903811, 2910, 2911), - new TranscriptRegion(TranscriptRegionType.Exon, 18, 16903812,16903914, 2808, 2910), - new TranscriptRegion(TranscriptRegionType.Intron, 17, 16903915,16905687, 2807, 2808), - new TranscriptRegion(TranscriptRegionType.Exon, 17, 16905688,16905897, 2598, 2807), - new TranscriptRegion(TranscriptRegionType.Intron, 16, 16905898,16907239, 2597, 2598), - new TranscriptRegion(TranscriptRegionType.Exon, 16, 16907240,16907451, 2386, 2597), - new TranscriptRegion(TranscriptRegionType.Intron, 15, 16907452,16907914, 2385, 2386), - new TranscriptRegion(TranscriptRegionType.Exon, 15, 16907915,16907987, 2313, 2385), - new TranscriptRegion(TranscriptRegionType.Intron, 14, 16907988,16909038, 2312, 2313), - new TranscriptRegion(TranscriptRegionType.Exon, 14, 16909039,16909253, 2098, 2312), - new TranscriptRegion(TranscriptRegionType.Intron, 13, 16909254,16910088, 2097, 2098), - new TranscriptRegion(TranscriptRegionType.Exon, 13, 16910089,16910191, 1995, 2097), - new TranscriptRegion(TranscriptRegionType.Intron, 12, 16910192,16911983, 1994, 1995), - new TranscriptRegion(TranscriptRegionType.Exon, 12, 16911984,16912193, 1785, 1994), - new TranscriptRegion(TranscriptRegionType.Intron, 11, 16912194,16913544, 1784, 1785), - new TranscriptRegion(TranscriptRegionType.Exon, 11, 16913545,16913756, 1573, 1784), - new TranscriptRegion(TranscriptRegionType.Intron, 10, 16913757,16914219, 1572, 1573), - new TranscriptRegion(TranscriptRegionType.Exon, 10, 16914220,16914292, 1500, 1572), - new TranscriptRegion(TranscriptRegionType.Intron, 9, 16914293,16915343, 1499, 1500), - new TranscriptRegion(TranscriptRegionType.Exon, 9, 16915344,16915558, 1285, 1499), - new TranscriptRegion(TranscriptRegionType.Intron, 8, 16915559,16916393, 1284, 1285), - new TranscriptRegion(TranscriptRegionType.Exon, 8, 16916394,16916496, 1182, 1284), - new TranscriptRegion(TranscriptRegionType.Intron, 7, 16916497,16918341, 1181, 1182), - new TranscriptRegion(TranscriptRegionType.Exon, 7, 16918342,16918551, 972, 1181), - new TranscriptRegion(TranscriptRegionType.Intron, 6, 16918552,16918653, 971, 972), - new TranscriptRegion(TranscriptRegionType.Exon, 6, 16918654,16918808, 817, 971), - new TranscriptRegion(TranscriptRegionType.Intron, 5, 16918809,16919935, 816, 817), - new TranscriptRegion(TranscriptRegionType.Exon, 5, 16919936,16920062, 690, 816), - new TranscriptRegion(TranscriptRegionType.Intron, 4, 16920063,16921086, 689, 690), - new TranscriptRegion(TranscriptRegionType.Exon, 4, 16921087,16921156, 620, 689), - new TranscriptRegion(TranscriptRegionType.Intron, 3, 16921157,16921425, 619, 620), - new TranscriptRegion(TranscriptRegionType.Exon, 3, 16921426,16921504, 541, 619), - new TranscriptRegion(TranscriptRegionType.Intron, 2, 16921505,16935002, 540, 541), - new TranscriptRegion(TranscriptRegionType.Exon, 2, 16935003,16935274, 269, 540), - new TranscriptRegion(TranscriptRegionType.Intron, 1, 16935275,16939832, 268, 269), - new TranscriptRegion(TranscriptRegionType.Exon, 1, 16939833,16940100, 1, 268) + new TranscriptRegion(TranscriptRegionType.Exon, 28, 16888922, 16890681, 4408, 6167), + new TranscriptRegion(TranscriptRegionType.Intron, 27, 16890682, 16891301, 4407, 4408), + new TranscriptRegion(TranscriptRegionType.Exon, 27, 16891302, 16891413, 4296, 4407), + new TranscriptRegion(TranscriptRegionType.Intron, 26, 16891414, 16892127, 4295, 4296), + new TranscriptRegion(TranscriptRegionType.Exon, 26, 16892128, 16892302, 4121, 4295), + new TranscriptRegion(TranscriptRegionType.Intron, 25, 16892303, 16893674, 3844, 4121), + new TranscriptRegion(TranscriptRegionType.Exon, 25, 16893675, 16893846, 3673, 3844), + new TranscriptRegion(TranscriptRegionType.Intron, 24, 16893847, 16894473, 3672, 3673), + new TranscriptRegion(TranscriptRegionType.Exon, 24, 16894474, 16894525, 3621, 3672), + new TranscriptRegion(TranscriptRegionType.Intron, 23, 16894526, 16895567, 3620, 3621), + new TranscriptRegion(TranscriptRegionType.Exon, 23, 16895568, 16895731, 3457, 3620), + new TranscriptRegion(TranscriptRegionType.Intron, 22, 16895732, 16899636, 3456, 3457), + new TranscriptRegion(TranscriptRegionType.Exon, 22, 16899637, 16899688, 3405, 3456), + new TranscriptRegion(TranscriptRegionType.Intron, 21, 16899689, 16900981, 3404, 3405), + new TranscriptRegion(TranscriptRegionType.Exon, 21, 16900982, 16901187, 3199, 3404), + new TranscriptRegion(TranscriptRegionType.Intron, 20, 16901188, 16901651, 3198, 3199), + new TranscriptRegion(TranscriptRegionType.Exon, 20, 16901652, 16901724, 3126, 3198), + new TranscriptRegion(TranscriptRegionType.Intron, 19, 16901725, 16902761, 3125, 3126), + new TranscriptRegion(TranscriptRegionType.Exon, 19, 16902762, 16902976, 2911, 3125), + new TranscriptRegion(TranscriptRegionType.Intron, 18, 16902977, 16903811, 2910, 2911), + new TranscriptRegion(TranscriptRegionType.Exon, 18, 16903812, 16903914, 2808, 2910), + new TranscriptRegion(TranscriptRegionType.Intron, 17, 16903915, 16905687, 2807, 2808), + new TranscriptRegion(TranscriptRegionType.Exon, 17, 16905688, 16905897, 2598, 2807), + new TranscriptRegion(TranscriptRegionType.Intron, 16, 16905898, 16907239, 2597, 2598), + new TranscriptRegion(TranscriptRegionType.Exon, 16, 16907240, 16907451, 2386, 2597), + new TranscriptRegion(TranscriptRegionType.Intron, 15, 16907452, 16907914, 2385, 2386), + new TranscriptRegion(TranscriptRegionType.Exon, 15, 16907915, 16907987, 2313, 2385), + new TranscriptRegion(TranscriptRegionType.Intron, 14, 16907988, 16909038, 2312, 2313), + new TranscriptRegion(TranscriptRegionType.Exon, 14, 16909039, 16909253, 2098, 2312), + new TranscriptRegion(TranscriptRegionType.Intron, 13, 16909254, 16910088, 2097, 2098), + new TranscriptRegion(TranscriptRegionType.Exon, 13, 16910089, 16910191, 1995, 2097), + new TranscriptRegion(TranscriptRegionType.Intron, 12, 16910192, 16911983, 1994, 1995), + new TranscriptRegion(TranscriptRegionType.Exon, 12, 16911984, 16912193, 1785, 1994), + new TranscriptRegion(TranscriptRegionType.Intron, 11, 16912194, 16913544, 1784, 1785), + new TranscriptRegion(TranscriptRegionType.Exon, 11, 16913545, 16913756, 1573, 1784), + new TranscriptRegion(TranscriptRegionType.Intron, 10, 16913757, 16914219, 1572, 1573), + new TranscriptRegion(TranscriptRegionType.Exon, 10, 16914220, 16914292, 1500, 1572), + new TranscriptRegion(TranscriptRegionType.Intron, 9, 16914293, 16915343, 1499, 1500), + new TranscriptRegion(TranscriptRegionType.Exon, 9, 16915344, 16915558, 1285, 1499), + new TranscriptRegion(TranscriptRegionType.Intron, 8, 16915559, 16916393, 1284, 1285), + new TranscriptRegion(TranscriptRegionType.Exon, 8, 16916394, 16916496, 1182, 1284), + new TranscriptRegion(TranscriptRegionType.Intron, 7, 16916497, 16918341, 1181, 1182), + new TranscriptRegion(TranscriptRegionType.Exon, 7, 16918342, 16918551, 972, 1181), + new TranscriptRegion(TranscriptRegionType.Intron, 6, 16918552, 16918653, 971, 972), + new TranscriptRegion(TranscriptRegionType.Exon, 6, 16918654, 16918808, 817, 971), + new TranscriptRegion(TranscriptRegionType.Intron, 5, 16918809, 16919935, 816, 817), + new TranscriptRegion(TranscriptRegionType.Exon, 5, 16919936, 16920062, 690, 816), + new TranscriptRegion(TranscriptRegionType.Intron, 4, 16920063, 16921086, 689, 690), + new TranscriptRegion(TranscriptRegionType.Exon, 4, 16921087, 16921156, 620, 689), + new TranscriptRegion(TranscriptRegionType.Intron, 3, 16921157, 16921425, 619, 620), + new TranscriptRegion(TranscriptRegionType.Exon, 3, 16921426, 16921504, 541, 619), + new TranscriptRegion(TranscriptRegionType.Intron, 2, 16921505, 16935002, 540, 541), + new TranscriptRegion(TranscriptRegionType.Exon, 2, 16935003, 16935274, 269, 540), + new TranscriptRegion(TranscriptRegionType.Intron, 1, 16935275, 16939832, 268, 269), + new TranscriptRegion(TranscriptRegionType.Exon, 1, 16939833, 16940100, 1, 268) }; var rnaEdits = new IRnaEdit[] @@ -494,7 +536,8 @@ public void RnaEdits_big_test_reverse() new RnaEdit(4683, 4683, "G"), new RnaEdit(4637, 4637, "G"), new RnaEdit(4530, 4530, "A"), - new RnaEdit(3845, 3844, "GAAATTGAAAAGTACCAAGAAGTGGAAGAAGACCAAGACCCATCATGCCCCAGGCTCAGCAGGGAGCTGCTGGATGAGAAAGAGCCTGAAGTCTTGCAGGACTCCCTGGATAGATGTTATTCGACTCCTTCAGGTTATCTTGAACTGCCTGACTTAGGCCAGCCCTACAGAAGTGCTGTTTACTCATTGGAGGAACAGTACCTTGGCTTGGCTCTTGACGTGGACAGAATTAAAAAGGACCAGGAAGAGGAAGAAGACCAAGGCCCACCATGCCCC"), + new RnaEdit(3845, 3844, + "GAAATTGAAAAGTACCAAGAAGTGGAAGAAGACCAAGACCCATCATGCCCCAGGCTCAGCAGGGAGCTGCTGGATGAGAAAGAGCCTGAAGTCTTGCAGGACTCCCTGGATAGATGTTATTCGACTCCTTCAGGTTATCTTGAACTGCCTGACTTAGGCCAGCCCTACAGAAGTGCTGTTTACTCATTGGAGGAACAGTACCTTGGCTTGGCTCTTGACGTGGACAGAATTAAAAAGGACCAGGAAGAGGAAGAAGACCAAGGCCCACCATGCCCC"), new RnaEdit(3769, 3769, "C"), new RnaEdit(3554, 3554, "C"), new RnaEdit(3207, 3207, "A"), @@ -528,79 +571,87 @@ public void RnaEdits_big_test_reverse() new RnaEdit(1405, 1405, "A"), new RnaEdit(1318, 1318, "G"), new RnaEdit(1021, 1021, "C"), - new RnaEdit(932, 932, "A") - + new RnaEdit(932, 932, "A") }; - const byte startExonPhase = 0; + + const byte startExonPhase = 0; const bool onReverseStrand = true; - var codingSequence = new CodingSequence(genomicSeq, codingRegion, regions, onReverseStrand, startExonPhase, rnaEdits); + var codingSequence = new CodingSequence(genomicSeq, codingRegion, regions, onReverseStrand, startExonPhase, + rnaEdits); - const string expectedCodingSeq = "ATGGTGGTATCAGCCGGCCCTTGGTCCAGCGAGAAGGCAGAGACGAACATTTTAGAAATCAACGAGAAATTGCGCCCCCAGCTGGCAGAGAACAAACAGCAGTTCAGAAACCTCAAAGAGAAATGTTTTGTAACTCAACTGGCCGGCTTCCTGGCCAACCGACAGAAGAAATACAAGTATGAAGAGTGTAAAGACCTCATAAAATTTATGCTGAGGAATGAGCGACAGTTCAAGGAGGAGAAGCTTGCAGAGCAGCTCAAGCAAGCTGAGGAGCTCAGGCAATATAAAGTCCTGGTTCACTCTCAGGAACGGGAGCTGACCCAGTTAAGGGAGAAGTTACGGGAAGGGAGAGATGCCTCCCGCTCATTGAATCAGCATCTCCAGGCCCTCCTCACTCCAGATGAGCCAGACAAGTCCCAGGGGCAGGACCTCCAAGAACAGCTGGCTGAGGGGTGTAGACTGGCACAGCACCTTGTCCAAAAGCTCAGCCCAGAAAATGACGAAGATGAGGATGAAGATGTTCAAGTTGAGGAGGCTGAGAAAGTACTGGAATCATCTGCCCCCAGGGAGGTGCAGAAGGCTGAAGAAAGCAAAGTCCCTGAGGACTCACTGGAGGAATGTGCCATCACTTGTTCAAATAGCCACGGCCCTTGTGACTCCAACCAGCCTCACAAGAACATCAACATCACATTTGAGGAAGACAAAGTCAACTCAACTCTGGTTGTAGACAGAGAATCCTCTCATGATGAATGTCAGGATGCTGTAAACATTCTCCCAGTCCCTGGCCCCACCTCTTCTGCCACAAACGTCAGCATGGTGGTATCAGCCGGCCCTTTGTCCAGCGAGAAGGCAGAGATGAACATTCTAGAAATGAATGAGAAATTGCGCCCCCAGCTGGCAGAGAAGAAACAGCAGTTCAGAAACCTCAAAGAGAAATGTTTTGTAACTCAACTGGCCGGCTTCCTGGCCAACCAGCAGAACAAATACAAATATGAAGAGTGCGAAGACCTCATAAAATCTATGCTGAGGAATGAGCGACAGTTCAAGGAGGAGAAGCTTGCAGAGCAGCTCAAGCAAGCTGAGGAGCTCAGGCAATATAAAGTCCTGGTTCACTCTCAGGAACGAGAGCTGACCCAGTTAAGGGAGAAGTTACGGGAAGGGAGAGATGCCTCCCGCTCATTGAATCAGCATCTCCAGGCCCTCCTCACTCCGGATGAGCCAGACAAGTCCCAGGGGCAGGACCTCCAAGAACAGCTGGCTGAGGGGTGTAGACTGGCACAGCACCTTGTCCAAAAGCTCAGCCCAGAAAATGACGAAGATGAGGATGAAGATGTTCAAGTTGAGGAGGCTGAGAAAGTACTGGAATCATCTGCCCCCAGGGAGGTGCAGAAGGCTGAAGAAAGCAAAGTCCCTGAGGACTCACTGGAGGAATGTGCCATCACTTGTTCAAATAGCCACGGCCCTTGTGACTCCAACCAGCCTCACAAGAACATCAACATCACATTTGAGGAAGACAAAGTCAACTCAGCTCTGGTTGTAGACAGAGAATCCTCTCATGATGAATGTCAGGATGCTGTAAACATTCTCCCAGTCCCTGGCCCCACCTCTTCTGCCACAAACGTCAGCATGGTGGTATCAGCCGGCCCTTTGTCCAGCGAGAAGGCAGAGATGAACATTCTAGAAATGAATGAGAAATTGCGCCCCCAGCTGGCAGAGAAGAAACAGCAGTTCAGAAACCTCAAAGAGAAATGTTTTGTAACTCAACTGGCCTGCTTCCTGGCCAACCAGCAGAACAAATACAAATATGAAGAGTGCAAAGACCTCATAAAATCTGTGCTGAGGAATGAGCGACAGTTCAAGGAGGAGAAGCTTGCAGAGCAGCTCAAGCAAGCTGAGGAGCTCAGGCAATATAAAGTCCTGGTTCACTCTCAGGAACGGGAGCTGACCCAGTTAAGGGAGAAGTTACGGGAAGGGAGAGATGCCTCCCGCTCATTGAATCAGCATCTCCAGGCCCTCCTCACTCCGGATGAGCCAGACAAGTCCCAGGGGCAGGACCTCCAAGAACAGCTGGCTGAGGGGTGTAGACTGGCACAGCAACTTTTCCAAAAGCTCAGCCCAGAAAATGACAATGATCACGATGAAGATGTTCAAGTTGAGGTGGCTGAGAAAGTGCAGAAATCGTCTGCCCCCAGGGAGATGCAGAAGGCTGAAGAAAAGGAAGTCCCTGAGGACTCACTGGAGGAATGTGCCATCACTTGTTCAAATAGCCATGGCCCTTATGACTCCAACCAGCCACATAGGAAAACCAAAATCACATTTGAGGAAGACAAAGTCGACTCAACTCTCATTGGCTCATCCTCTCATGTTGAATGGGAGGATGCTGTACACATTATCCCAGAAAATGAAAGTGATGATGAGGAAGAGGAAGAAAAAGGGCCAGTGTCTCCCAGGAATCTGCAGGAGTCTGAAGAGGAGGAAGTCCCCCAGGAGTCCTGGGATGAAGGTTATTCGACTCTCTCAATTCCTCCTGAAATGTTGGCCTCGTACCAGTCTTACAGCGGCACATTTCACTCATTAGAGGAACAGCAAGTCTGCATGGCTGTTGACATAGGCGGACATCGGTGGGATCAAGTGAAAAAGGAGGACCAAGAGGCAACAGGTCCCAGGCTCAGCAGGGAGCTGCTGGATGAGAAAGGGCCTGAAGTCTTGCAGGACTCACTGGATAGATGTTATTCAACTCCTTCAGGTTATCTTGAACTGACCGACTCATGCCAGCCCTACAGAAGTGCCTTTTACATATTGGAGCAACAGCGTGTTGGCTGGGCTCTTGACATGGATGAAATTGAAAAGTACCAAGAAGTGGAAGAAGACCAAGACCCATCATGCCCCAGGCTCAGCAGGGAGCTGCTGGATGAGAAAGAGCCTGAAGTCTTGCAGGACTCCCTGGATAGATGTTATTCGACTCCTTCAGGTTATCTTGAACTGCCTGACTTAGGCCAGCCCTACAGAAGTGCTGTTTACTCATTGGAGGAACAGTACCTTGGCTTGGCTCTTGACGTGGACAGAATTAAAAAGGACCAGGAAGAGGAAGAAGACCAAGGCCCACCATGCCCCAGGCTCAGCAGGGAGCTGCTGGAGGCAGTAGAGCCTGAAGTCTTGCAGGACTCACTGGATAGATGTTATTCAACTCCTTCCAGTTGTCTTGAACAGCCTGACTCCTGCCTGCCCTATGGAAGTTCCTTTTATGCATTGGAGGAAAAACATGTTGGCTTTTCTCTTGACGTGGGAGAAATTGAAAAGAAGGGGAAGGGGAAGAAAAGAAGGGGAAGAAGATCAACGAAGAAAAGAAGGAGAAGGGGAAGAAAAGAAGGGGAAGAAGATCAAAACCCACCATGCCCCAGGCTCAGCGGCATGCTGATGGAAGTGGAAGAGCCTGAAGTCTTGCAGGACTCACTGGATAGATGTTATTCGACTCCGTCAATGTACTTTGAACTACCTGACTCATTCCAGCACTACAGAAGTGTGTTTTACTCATTTGAGGAACAGCACATCAGCTTCGCCCTTGACGTGGACAATAGGTTTCTTACTTTGATGGGAACAAGTCTCCACCTGGTCTTCCAGATGGGAGTCATATTCCCACAGTAA"; + var expectedCodingSeq = + "ATGGTGGTATCAGCCGGCCCTTGGTCCAGCGAGAAGGCAGAGACGAACATTTTAGAAATCAACGAGAAATTGCGCCCCCAGCTGGCAGAGAACAAACAGCAGTTCAGAAACCTCAAAGAGAAATGTTTTGTAACTCAACTGGCCGGCTTCCTGGCCAACCGACAGAAGAAATACAAGTATGAAGAGTGTAAAGACCTCATAAAATTTATGCTGAGGAATGAGCGACAGTTCAAGGAGGAGAAGCTTGCAGAGCAGCTCAAGCAAGCTGAGGAGCTCAGGCAATATAAAGTCCTGGTTCACTCTCAGGAACGGGAGCTGACCCAGTTAAGGGAGAAGTTACGGGAAGGGAGAGATGCCTCCCGCTCATTGAATCAGCATCTCCAGGCCCTCCTCACTCCAGATGAGCCAGACAAGTCCCAGGGGCAGGACCTCCAAGAACAGCTGGCTGAGGGGTGTAGACTGGCACAGCACCTTGTCCAAAAGCTCAGCCCAGAAAATGACGAAGATGAGGATGAAGATGTTCAAGTTGAGGAGGCTGAGAAAGTACTGGAATCATCTGCCCCCAGGGAGGTGCAGAAGGCTGAAGAAAGCAAAGTCCCTGAGGACTCACTGGAGGAATGTGCCATCACTTGTTCAAATAGCCACGGCCCTTGTGACTCCAACCAGCCTCACAAGAACATCAACATCACATTTGAGGAAGACAAAGTCAACTCAACTCTGGTTGTAGACAGAGAATCCTCTCATGATGAATGTCAGGATGCTGTAAACATTCTCCCAGTCCCTGGCCCCACCTCTTCTGCCACAAACGTCAGCATGGTGGTATCAGCCGGCCCTTTGTCCAGCGAGAAGGCAGAGATGAACATTCTAGAAATGAATGAGAAATTGCGCCCCCAGCTGGCAGAGAAGAAACAGCAGTTCAGAAACCTCAAAGAGAAATGTTTTGTAACTCAACTGGCCGGCTTCCTGGCCAACCAGCAGAACAAATACAAATATGAAGAGTGCGAAGACCTCATAAAATCTATGCTGAGGAATGAGCGACAGTTCAAGGAGGAGAAGCTTGCAGAGCAGCTCAAGCAAGCTGAGGAGCTCAGGCAATATAAAGTCCTGGTTCACTCTCAGGAACGAGAGCTGACCCAGTTAAGGGAGAAGTTACGGGAAGGGAGAGATGCCTCCCGCTCATTGAATCAGCATCTCCAGGCCCTCCTCACTCCGGATGAGCCAGACAAGTCCCAGGGGCAGGACCTCCAAGAACAGCTGGCTGAGGGGTGTAGACTGGCACAGCACCTTGTCCAAAAGCTCAGCCCAGAAAATGACGAAGATGAGGATGAAGATGTTCAAGTTGAGGAGGCTGAGAAAGTACTGGAATCATCTGCCCCCAGGGAGGTGCAGAAGGCTGAAGAAAGCAAAGTCCCTGAGGACTCACTGGAGGAATGTGCCATCACTTGTTCAAATAGCCACGGCCCTTGTGACTCCAACCAGCCTCACAAGAACATCAACATCACATTTGAGGAAGACAAAGTCAACTCAGCTCTGGTTGTAGACAGAGAATCCTCTCATGATGAATGTCAGGATGCTGTAAACATTCTCCCAGTCCCTGGCCCCACCTCTTCTGCCACAAACGTCAGCATGGTGGTATCAGCCGGCCCTTTGTCCAGCGAGAAGGCAGAGATGAACATTCTAGAAATGAATGAGAAATTGCGCCCCCAGCTGGCAGAGAAGAAACAGCAGTTCAGAAACCTCAAAGAGAAATGTTTTGTAACTCAACTGGCCTGCTTCCTGGCCAACCAGCAGAACAAATACAAATATGAAGAGTGCAAAGACCTCATAAAATCTGTGCTGAGGAATGAGCGACAGTTCAAGGAGGAGAAGCTTGCAGAGCAGCTCAAGCAAGCTGAGGAGCTCAGGCAATATAAAGTCCTGGTTCACTCTCAGGAACGGGAGCTGACCCAGTTAAGGGAGAAGTTACGGGAAGGGAGAGATGCCTCCCGCTCATTGAATCAGCATCTCCAGGCCCTCCTCACTCCGGATGAGCCAGACAAGTCCCAGGGGCAGGACCTCCAAGAACAGCTGGCTGAGGGGTGTAGACTGGCACAGCAACTTTTCCAAAAGCTCAGCCCAGAAAATGACAATGATCACGATGAAGATGTTCAAGTTGAGGTGGCTGAGAAAGTGCAGAAATCGTCTGCCCCCAGGGAGATGCAGAAGGCTGAAGAAAAGGAAGTCCCTGAGGACTCACTGGAGGAATGTGCCATCACTTGTTCAAATAGCCATGGCCCTTATGACTCCAACCAGCCACATAGGAAAACCAAAATCACATTTGAGGAAGACAAAGTCGACTCAACTCTCATTGGCTCATCCTCTCATGTTGAATGGGAGGATGCTGTACACATTATCCCAGAAAATGAAAGTGATGATGAGGAAGAGGAAGAAAAAGGGCCAGTGTCTCCCAGGAATCTGCAGGAGTCTGAAGAGGAGGAAGTCCCCCAGGAGTCCTGGGATGAAGGTTATTCGACTCTCTCAATTCCTCCTGAAATGTTGGCCTCGTACCAGTCTTACAGCGGCACATTTCACTCATTAGAGGAACAGCAAGTCTGCATGGCTGTTGACATAGGCGGACATCGGTGGGATCAAGTGAAAAAGGAGGACCAAGAGGCAACAGGTCCCAGGCTCAGCAGGGAGCTGCTGGATGAGAAAGGGCCTGAAGTCTTGCAGGACTCACTGGATAGATGTTATTCAACTCCTTCAGGTTATCTTGAACTGACCGACTCATGCCAGCCCTACAGAAGTGCCTTTTACATATTGGAGCAACAGCGTGTTGGCTGGGCTCTTGACATGGATGAAATTGAAAAGTACCAAGAAGTGGAAGAAGACCAAGACCCATCATGCCCCAGGCTCAGCAGGGAGCTGCTGGATGAGAAAGAGCCTGAAGTCTTGCAGGACTCCCTGGATAGATGTTATTCGACTCCTTCAGGTTATCTTGAACTGCCTGACTTAGGCCAGCCCTACAGAAGTGCTGTTTACTCATTGGAGGAACAGTACCTTGGCTTGGCTCTTGACGTGGACAGAATTAAAAAGGACCAGGAAGAGGAAGAAGACCAAGGCCCACCATGCCCCAGGCTCAGCAGGGAGCTGCTGGAGGCAGTAGAGCCTGAAGTCTTGCAGGACTCACTGGATAGATGTTATTCAACTCCTTCCAGTTGTCTTGAACAGCCTGACTCCTGCCTGCCCTATGGAAGTTCCTTTTATGCATTGGAGGAAAAACATGTTGGCTTTTCTCTTGACGTGGGAGAAATTGAAAAGAAGGGGAAGGGGAAGAAAAGAAGGGGAAGAAGATCAACGAAGAAAAGAAGGAGAAGGGGAAGAAAAGAAGGGGAAGAAGATCAAAACCCACCATGCCCCAGGCTCAGCGGCATGCTGATGGAAGTGGAAGAGCCTGAAGTCTTGCAGGACTCACTGGATAGATGTTATTCGACTCCGTCAATGTACTTTGAACTACCTGACTCATTCCAGCACTACAGAAGTGTGTTTTACTCATTTGAGGAACAGCACATCAGCTTCGCCCTTGACGTGGACAATAGGTTTCTTACTTTGATGGGAACAAGTCTCCACCTGGTCTTCCAGATGGGAGTCATATTCCCACAGTAA"; Assert.Equal(expectedCodingSeq, codingSequence.GetCodingSequence()); } + [Fact] public void RnaEdits_big_test() { //NM_005960.1, chrom: chr7:100547052-100611619 - var genomicSeq = new SimpleSequence("GCGCTGACGTCTGTCTGTCCGGGTGCAGGGAGAAGGGAGGAAGAGGGGAGAGGTGGGGCGGTGCAAAGGTGAGGCTGTGCTCAGCCCTGACGCTCAGCAAAACCGATAACCAGCACTTTCATTACGTGCACGCCCCAGGGCCACGTCCCTGCCGCTGTCTTGGTCCTGAAGCCTGTTCTGCCCCAGCCCCCTGCCCGCTGGGCCCATGCAGCTGTTGGGGCTCCTCGGCCTCCTCTGGATGCTCAAGGCCTCCCCGTGGGCCACAGGTAAGGGGGAGAGGCGGAAGGGGGTTGGAGAAAAGCTCCTGATGTGATGTTCCAGGAAAGGGGAGGGAAAAGTGGCTGTAAGGCCTGGGGAGGGGGGATAAGAAGGCACCGCTTGGGGCTCTGGGTGCAGGGAGAACCGAGGCACGGCCTGACTGGGGGAGGGGGCGATGAGGAGAGGTTTCTTCCAGAGCTCCAGGTGCAGGGAAAACCCCGAGGTTGGGAAAGAGTGAGGGAGCTGGGTCTCTGCCACTCTCCACCAAGCACTGAGCAGGTTGCAGCGGCTGAGCCCCAATCTGTATCTGCAGCTGGAGGGTAGAGGGTGGGATTTACGTCTTCCCAGAGCAGTGCCCTTCCTGTCTTGACTCCTTCTGTCACCTGCCTCATGCCCCCAGCTTGAGTGTCCCCTTCACACTGGCCTCTCCCTCCCTGACAGCCCTCTAACTTCTACCCCTGGTCTCGGTCCTCTGGTTTCAGCCTCTCTGCCTTTTGTCCCCCGGCGGCTCCTCCCCAGCTCTGCCGTCACTCTCTTACCCCGGCCAGGGCCCATGTGTCTGGGTACAGCTGTTGGTACCAGGGCCGGGACAGGGAGCTCCTGATGTCCACTTTGCTTCCAAGGGTGCGTCTGAGACTACCCGTCGTGGGGTCCCAGGCTTCTCTCTTCTGCCCTGCAGGAACACCTCGCAATTCCTCTATACTTCTCTTTTCTCTGTACTTCAGTGTCTGCTTCTGATCCCCGATCCCAGGCCACCCAGCCTACAGGCCCATGAGTCCCCTTCTCAGTCACCTCCAGGGCCACATCCTGGAGCCAAGGGCTGTAGCCTGGGGATTCTCATAATCCCTGACCCCACTTCCCTGGCACCCACGAGCTAGGTTGAGACGTGACACCCCAGCTCTCAGCCACAAGATGGGCTGTGCCCGAGGTGAGGGGTAGCAGATCGGGTACTTCCCACTTCCCGTCTGCTGTGGCTGCCTGTCTTCCTTGTCCCTGACACCCCCGACAGCCGGATCTCTGATCCTAACTCTGACAAATTGTGAAATGGGTTGAAATCCACATGCTGGGGTTCATGCTTGTAAACTAATGAATCCCACGGCCAAAAGGGAATAGTATAGAAAAATATGTCTATTTGTGTGATGAACACTCACTGCTAAGCCTTAAGGTCTCCAGAACTCATCACGCCTGACTGCTGAGGTAGCTCCTTCTGGAAGTTTCCTTTTCTATGCTGTCTCTCTGCCTCTTCACCTAGTCCTCACTCCATGCCCTTTGAAGTCATTAGTGTGTGAGCTTAGCCTGTTTCTCTTTGGTGTTCTCTGGGCAGTTTTTTGTTTTTGTTTTTGTTTTTGTTTTTGTTTTTGATGGAGTCTTGCTCTGTCACCCAGGCTGGAGTGCAGTGGCACCATCTCAGCTCACTGCAGCCTCTGCTTCCTGGGTTCAAGCGATTCTCCTGCCTCAGCTACAGGTACACGCCACTACGCCTGGCTAATTTTTGTATTTTGTTTTAGTAGAGAAAGGGTTTCACCATGTTGGTCAGACTGGTCTCGAACTCCTGACCTCAAGTGATCTCCTGCCTTGGCCTTTCAAAGTGCTGGGATTACAGGCATGAGCCACCGTGCCTGGCCCTCTTTGTTCAGCTTTCCCTGTCTCCTGGTTTTTGTGATGCGCCCCCTGCCAGGACATGGCTGGGTTCTCTCTTTTTCTCTTTGAAAGCGGAGTCAGCCCAGACAGCAGCAGGGTGCCGGGAGAAGCAGTGGTGGGAGCAGAAGGTTAATGGGGGGATGGGAGCACTCCAGGCAGTAGCAGGGGGAGGAGAGGAAGGGGCAGAGGGAGGAGGAGCCTGGGTGTGACCAGAGGAGGGAAGGGAGGGGAGGGAGGCTCTGCCCAGCTCGGCTATATCAGGACAGGAGGACCTGCCATGACAAGGCCAAGGCCCGGTGAGGAATGAGGGCTCCCATGCCCCACTGCTCCCCTAGGAGCAGACAGGCAGTCGTCTCCAGCACCACAAAGCACCCAGCTCCAAGCTGCCTCTGATGCAGGAGTCAGCTGTAATATGCCCTGCCCTCTGTGATGCTGCCTGGAAAATGGGTGAGTGAGTAGCTTACATGAGTGATGTAACAAAATGACCCACGGATTTACCAGTGGATTCCTCTGCTCTGCCGCCAATGCAGGAACTTTATCCACGGCCACATCCATCTCTCAAGTGCCTTTCCCCAGAGCAGAAGCAGCCAGCGCTGTGCTCAGCAATTCTCCACACTCCAGAGACCTGGCTGGGTGGCCACTTGGTGTCCCCCAGCTCGCCTCTCCTGCTCCTGGCCACAGGGAAAATGCACCTATGACACTCACTACCTCCCCCCATGACACACTCATCTCTGAAACATTGCTCAACTCTCCAGTCAGTTCCAACACCTCAACCACCCCGACGTCCAAGTTTGCCTTCAAGGTTGAAACCACTCCACCCACCGTGTTGGTCTATTCAGCCACCACTGAGTGCGTGTATCCAACGAGCTTTATAATCACCATCTCCCACCCCACCTCCATCTGTGTGACCACGACGCAGGTGGCCTTCACCAGCTCTTACACCTCGACTCCCGTGACACAGAAGCCAGTGACCACCGTCACCAGTACTTACTCTATGACCACTACTGAGAAAGGAACGTCAGCCATGACATCTTCTCCCTCTACCACCACTGCAAGGGAAACTCCCATAGTGACAGTGACACCCTCCTCTGTGTCAGCCACAGACACAACCTTCCACACTACAATCTCATCTACAACTAGAACCACAGAAAGGACTCCCCTGCCCACTGGAAGCATCCATACAACCACGTCCCCAACCCCAGTATTTACTACTCTCAAAACAGCAGTGACTTCCACTTCCCCCATCACTTCTTCAATCACTTCCACAAATACAGTGACTTCTATGACAACGACCGCCTCCCAGCCCACAGCCACTAATACATTGTCATCACCCACTAGGACCATTTTATCTTCCACACCTGTCCTGAGCACAGAAACAATCACCAGTGGTATCACAAACACCACCCCCCTATCCACCTTGGTGACCACACTCCCCACTACCATCAGCAGGTCTACACCTACATCTGAGACCACCTACCCTACTTCTCCCACCAGCACTGTCACAGACTCCACTACCAAAATCGCCTACTCCACAAGTATGACAGGTACATTGTCCACAGAGACTTCTCTCCCACCCACCTCTTCCTCTCTCCCAACCACAGAAACAGCCACGACTCCTATGACAAACTTGGTAACCACCACCACTGAGATCTCCTCCCACAGTACTCCCAGCTTCTCTTCATCAACCATCTACTCCACAGTCACCTCACACAGTACTCCCAGATTCACTTCTTCAATCACCACTACCGAGACCCCCTCACACAGTACTCCCAGATTCACTTCTTCATTCACCAATACCAAGACCACCTCACACAGATCTCCCAGCTTCACTTCTTTGATCACCACCACGGAGACCACCTCACACAGTACTCCCAGCTTCACTTCTTCGATCACCACCACCGAGACCACCTCACACAGTGCTCGCAGCTTCACTTCTTCGATCACCACCACCGAGACCACCTCACACAATACTCGGAGCTTCACTTCTTCGATCACCACCACCGAGACCAACTCTCACAGTACTACCAGCTTCACTTCTTCGATCACCACCACCGAGACCACCTCACACAGTACTCCCAGCTTCAGTTCTTCAATCACCACCACTGAGACCCCCTTACACAGTACTCCTGGCCTCACTTCGTGGGTCACCACCACCAAGACCACCTCACACATTACTCCTGGCCTCACTTCTTCAATCACCACCACTGAGACTACCTCACACAGTACTCCCGGCTTCACTTCTTCAATCACCACCACTGAGACCACCTCAGAGAGTACTCCCAGCCTCAGTTCTTCAACCATCTACTCCACAGTCAGCACATCCACAACTGCCATCACCTCACATTTTACTACCTCAGAGACTGCGGTGACTCCCACACCTGTAACCCCATCTTCTCTGAGTACAGACATCCCGACCACAAGCCTACGAACTCTCACCCCTTCGTCTGTGGGCACCAGCACTTCATTGACTACAACCACAGACTTTCCCTCTATACCCACTGATATCAGTACCTTACCAACTCGAACACACATCATTTCATCTTCTCCCTCCATCCAAAGTACAGAAACCTCATCCCTTGTGGGCACCACCTCTCCCACCATGTCCACTGTGAGAATGACCCTCAGAATTACTGAGAACACCCCAATCAGTTCCTTTAGCACAAGTATTGTTGTTATACCTGAAACCCCAACACAGACCCCTCCTGTACTGACGTCAGCCACTGGGACCCAAACATCTCCTGCACCTACTACTGTCACCTTTGGAAGTACGGATTCCTCCACGTCCACTCTTCATACTCTTACTCCATCAACAGCCTTGAGCACGATCGTGTCAACATCACAGGTTCCTATTCCTAGCACACATTCCTCCACCCTTCAAACAACTCCTTCTACTCCCTCATTGCAAACTTCACTCACATCTACAAGTGAGTTCACTACAGAATCTTTCACTAGGGGAAGTACGTCTACAAATGCAATCTTGACTTCTTTTAGTACCATCATCTGGTCCTCAACACCCACTATTATCATGTCCTCTTCTCCATCTTCTGCCAGCATAACTCCAGTGTTCTCCACTACCATTCATTCTGTTCCTTCTTCACCATACATTTTCAGTACAGAAAATGTGGGCTCCGCTTCTATCACAGGCTTTCCTAGTCTCTCTTCCTCTGCAACTACCAGCACTTCTTCAACCAGCTCCTCTCTGACCACAGCTCTCACTGAAATAACCCCCTTTTCTTATATTTCCCTTCCCTCCACCACACCCTGTCCAGGAACTATAACAATTACCATAGTCCCTGCCTCTCCCACTGATCCATGTGTTGAAATGGATCCCAGCACTGAAGCTACTTCTCCTCCCACCACCCCATTAACAGTCTTTCCCTTTACTACCGAAATGGTCACCTGTCCTACCTCCATCAGTATCCAAACTACTCTTACTACATATATGGACACTTCTTCCATGATGCCAGAAAGTGAGTCCAGCATCTCACCCAATGCTTCCAGTTCCACTGGCACTGGGACTGTACCCACAAACACAGTTTTCACAAGTACTCGACTGCCCACCAGTGAGACCTGGCTGAGCAACAGTTCTGTGATCCCCCTACCTCTTCCTGGCGTCTCTACCATCCCGCTCACCATGAAACCAAGCAGTAGCCTCCCGACCATCCTGAGGACTTCAAGCAAGTCAACACACCCCTCCCCACCCACCACTAGGACTTCAGAGACACCAGTGGCCACTACCCAGACTCCTACCACCCTTACATCACGCAGGACAACTCGCATCACTTCTCAGATGACCACACAGTCCACGTTGACCACCACTGCAGGTTGGACCTTCTGCCTCTCTGTTCCCCTCCTTCCTCCCCTGCAAAATTCCTGTGTCACTGAGGTCAGGCTTTATCCTGAGCTTCCCTTTCTTTCTGTGTTTTCCAGGCACCTGTGACAATGGTGGCACCTGGGAACAGGGACAGTGTGCTTGCCTTCCGGGGTTTTCTGGGGACCGCTGTCAGCTCCAGACCAGATGCCAGAATGGGGGTCAGTGGGATGGCCTCAAATGCCAGTGCCCCAGCACCTTCTATGGTTCCAGTTGTGAGTTTGCTGTGGAACAGGTGGATCTAGGTGAGTTGCCAGAGCTATGCCTTCTGCACTTCCTCCCACAGGGTGTCACTGACTCTCCCCAGACTTATCCCTCTGTGGGGCCTGGAGGCACCCATGCCTTTTTGCCCGGTCCTTCCCTCCCTGCCATCTCTCCCATGCCCTCCGCTGCCCTGTGTCATGCTCCTCTCCGTCCTCACCCTTAGGAGGTGGCTGGGACTACCCTCCCTCCTGGGCCCATCTCCTGACTTGGGCTGCTTGGAGCTGTATCAGTTTCCAACTGCTGCCGGGCCAACAAACACAAATCTGGCTGCTGGAACAACACGACATTATCATGTTAGAATTCTGTAGATTAGAAGTCTGATGTGGGTGTCACTGGGCTGAAATCAAGGCGTCACCAGGGCTGTGTTGTCTTTCAGCGGCTCCAGGGAAGAATCCATTTTTTTGCCCTTTGCAGCTTCTGGAGCCTCCCACAGCAAGGCTGCATCTCTCTGTGTCTTTCTCCCATAGCCTCATCTCCCTCTAATGAACTCTGGCCTCCTCAATTGCTTCTCCCACTGTTAAGGACCCTTGTGATAACTTTGCCTCCTCCCCAAATAGTCTATGTTAATTTTCTCAAGATCAGCTGATTACGCCGGGCGGGGTGGCTCACACCTGTAATCCCAGCAGTTTGGGAGGCTGAGGGGGTAGGATCACCTGAGGTCAGGAGTTGGAGACTAGCCTGGCCAACATGGTGAAACTGTCTCTACTATTAGTTGGGCATGGTGGCAGATGCCTATAATCCTCACTATTCAGGAGGCTGAGGCAGGAAAATCGCTTGAATCCAGGAGGTGGATATTGCAGTAAAGCGAGATTTCGCCACTGCACACTAGCGTAGATGACAGAGGGAGAGTGAGACTCTGTCTTAAAAGAAAAAAAAAAATCAGCTGATTGTCTTATAATCCCTGCACTTTGGAAGGCCGAGGAGGGAGTATCGCTTGAGGCGAGGAGTTCAGGACCAGCCTGGGCAACACAGCGAGACCCTCATCTCCACAAAAAATTTTAAAAACTTACCTGGGCATGGTGGCTCATGCCTGTGGTCCCAGTTATTTGGAAGGCTGAGGTGGGAGAATCACTTGAGCCTGGGAGTTCAAGGCTGCAGTGAGCTATGATCCCCCTATTGCACTTCAGCCTGGATGACAGAATGAGACCCTATCTCAACAATAAAAAAAAGTTAGGCTGATTAGCAATCTAATTCAATCTGCACCCTTGATCCTCCCTTGCCATGTAGTATAGCATAGTCACAGTTCTGGGGATTAGGACATGGACATCTTCCCACTATGGGGGCAGCCAGGAGGGACCACAGGCTGACCGCTATCTTTCTGCCTGCTTTCACTCATCTCCACACAATTCCTTCCTTCCTCTCGCTCTCTTCTTTCTTTTCTTCTTTTCTTTTGTCTCTTTCTCTTTTCTTTTTTTCTTTCTCTTTTTCTTTCTTTCTTTCTCTTTCTTTTCTTTCCTTTCTTTTCTTCTTTCCCTCATCTTCACACAATGCTTTCTCCCTTTCTTTCTTTCCTTCTTTCTTTCTCTTTCTTTCTTTCTCTCTCTCTCTCTCTCTCTCTTTCTTTCTTTCTTTCTTTCTTTTTCTCTCTCTCTCTCTATCTTTCTTTTTCATTTTCTTGAGAGACAGTCTCACTCTGTGGCCCAGGCTGGAGTGCAGTGATGCAATCTCGGCTCACTACAACCTCCGCCTCCTGAGTTCAAGTGATTCTCCTGCCTCAGCCTCCTGAGGCATAATGCATCCTGGAATTCCTACATCTGTTCCTGCCTCTGGGCATCAGTCCTCAGGGATCTTGGAGGGGAGCAGCAGGAGGAGCCTGTGGGTTGGGGTGGTGGTGTTGGTGGCTTCAGACAAAAGCAGACAGAGAAGTGACTGGGGACATGCATGCTCTGTGTAGATGTAGTGGAGACCGAGGTGGGCATGGAAGTGTCTGTGGATCAGCAGTTCTCGCCGGACCTCAATGACAACACTTCCCAGGCCTACAGGGATTTCAACAAGACCTTCTGGAATCAGGTAAAGGGCAAAGAGAGGGGATTTTTTTTTTTTTTGAGGTGTAGTCTCGCACTCTCACCCTGGCTGGAGTGCAATGGTGCGATCTTGGGTCACTGCAACCTCCGCCTCCCGGGTTCACATGATTCTCTTGCCTCAGCCTCCCAAGTAGCTGGGATTACAGGTGCACACCATGACACCTGGCTAATGTTTTGTATTTTTAGTAGAGACGGGTTTTCACTATGTTGGCCAGACTGGTCTCGAACTACTGACTTTGTGATCCACCTGCCTCGTCCTCCCAAAGTGTTGGGATTACAGGCGTGAGCCACGGCACCCGGCCGGGGAGGGGAATTGAAGGGTCTTCCCTGGAGCTGGGGTTGGGCGTCTGGGTCCCCTCAGGTCTGCAGGTTCGGACGTGAGCCCAGGGATCCTTGGTGTTTCAGATGCAGAAGATTTTTGCAGACATGCAGGGCTTCACCTTCAAGGGTGTGGAGATCCTGTCCCTGAGGTAGGAGACCCATCTGGGGATGCGGAGGCGGTGTTGGGTGGGGGAAATGTGCGCACACAAAAAACCCATTCCTTTCTTTTGTAATCATCAGATTTTATAAAGAGGGGTGGAGGGGGTACATAAGGAATCACTCCCTGGGTATTTTTTCGGATCGTTTTCTGGGGCCATTTATCTGGAGGAGGGGTGGCACCTCTCTTCTTCAGCACACTGGAAGGAGAGAAGTTGCAGGGACATGTGGGAAGGTGGTGCCTGGATTGATGACTTTGTCCCCCTCTGGCTGGCCCCTGCTCTACTGAGTGGGTCAGCATTAGAAAGAGAGAGAGAGAAAGAGAGAGAGGGAGAGAACGCACGTCTAGGGGCGCCCGGTGGATGATGGCTTGATGCAACAAGAAGAGAACGTCAGGCCAGATGTGGTGGCTCACACTTGCAATCCTAGCACTTTGGGTAGGCTAGGCGGGTGGATCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNGAATTCCTACATCTGTTCCTGCCTCTGGGCATCAGTCCTCAGGGATCTTGGAGGGGAGCAGCAGGAGGAGCCTGTGGGTGGTGGTGGTGGTGTCGGTGGCTTCAGACAAAAGCAGACAGAGAAGTGACTGGGGACATACATGCTCTGTGCAGATGTAGTGGAGACCGAGGTGGGCATGGAAGTGTCTGTGGATCAGCAGTTCTCGCCGGACCTCAATGACAACACTTCCCAGGCCTACAGGGATTTCAACAAGACCTTCTGGAATCAGGTAAAGGGCAAAGAGAGGGGATTTTTTTTTTTTTTTTTTTTTGAGATGGAGTCTCGCACTGTCATCCTGGCTGGAGTGCAATGGCGTGATCTTGGCTCACTGCAACCTCCGCTTCCCAGGTTCACATGATTCTCTTGCCTCAGCCTCCCGAGCAGCTGAGATTACAGGTGCACACCACCACACCTGGCTAATGTTTTGTATTTTTAGTAGAGACGGGGTTTCACTATGTTGGCCAGACTGGTCTCGAACTACTGACTTTGTGATCCGCCTGCCTCGTCCTCCCAAAGTGTTGGGATTACAGGCGTGAGCCACGGCACCCGGCCGGGGAGGGGAATTGAAGGGTCTTCCCTGGAGCTGGGGTTGGGCATCTGGGTCCCCTCAGGTCTGCAGGTTCGGACGTGAGCCCAGGGATCCTTGGTGTTTCAGATGCAGAAGATTTTTGCAGACATGCAGGGCTTCACCTTCAAGGGTGTGGAGATCCTGTCCCTGAGGTAGGAGACCCATCTGGGGATGTGGAGGCAGTGTTGGGTGGGGGAAATGTGCGCACACAAAAAACCCATTCCTTTCTTTTGTAATCATCAGATTTTATAAAGAGAGGGGTGGAGGAGGTACATAAGGAATCGCTCCCTGGGTATTTTTTTGGATCGTTTTCTGGGGCCATTTATCTGGAGGAGGGGTGGCACCTCCCTTCTTCAGCACACTGGAAAGAGAGAAGTTGCAGGGACATGTGGGAAGGTGGTGCCTGGATTGGTGACTTCGTCCCCCTCTGGCTGGCCCCTGCTCTACTGAGTGGGTCAGCATTAGAGAGAGAGAGAGAGAAAGAGAGAGAGGGAGAGAACGCGCGTCCAGGGGCGCCCGGTGGATGATGGCTTGATGCAACGAGAACGTCAGGCCAGATGTGGTGGCTCACACTTGCAATCCTAGCACTTTGGCAAGGTTAGGTGGGTGGATCACCTGAAACCAGTTCAAGACCAGCCTGGGCAACATAGTGAGAACCCATCCCTACAACAATAAAAATAGTAATAATAATAATAATAATAATAAAATGATTATCCAGGCGTGGTAGTGCACACCTGTAGTCCCAGATACTTGGGAGGCTGAGGAGAAAGGATCACTTTAGCCCAGGAGTTGGAGGCTGCAGTGAGCTACAATGATACCACTGCACTCCAGCCTGGGTGACAGCAAGACTTTGTCTCTATAAAACACACAGAGAGAGGAAGTCAATCATGTCAGTCATTCCTTGTCCTGCCTTCCCAGGCAGACCAAGTCAGGAATGCTGGCAGCCCCTTCTGAAAAGGATGCACGTGGCATCCCAACTCATGACCTCTGCCCTCTTTCCCCCTTCTGGTGCACTTTGGGTTGCTTCTGGAGGTGCCCCTCCAAGGACCCATATGTTCCTGGCTGGGGCACTCTCTAAGGCTGTGGACCCCTCAGGAATGGCAGCATCGTGGTGGACTACCTGGTCCTGCTGGAGATGCCCTTCAGCCCCCAGCTGGAGAGCGAGTATGAGCAGGTGAAGACCACGCTGAAGGAGGGGCTCCAGAACGCCAGCCAGGATGCGAACAGCTGCCAGGACTCCCAGAGTGAGCCCGGGCTGGAGGGAGGGGCCAGGGCCTGAGGTGTCACCCCAGCCCACTCCAGCTCAGCCAGGGGGCCACTGGACTCAGGTGCCAGCCCTGTGGTACCTCTGGCAGGTTGGGAGAACGGGAATAAGTCTACACACAATGCCATCAAGAGTGGGGCTAGGGAGGGTCTCCCCAGGACCTGGGTACTGGGGAAGAGACCCCCTGATCGTCAGGCTCAGCATTTCCCGATGGCTGAAGACCTCGGATTATTCAGGGGGGATAAGGGAGAGAACAGGAGTCTTCCCCTGTGGCCCCTCCACACTCCCCCAGACGGAGAGAGCCCTCACTGCCCTCCCTGTGCCTATCCTGCTTCCTGGCCCTAACCCCTTGACCTGCCCCGCCCATTCCATCTGTGCCTGTGTTTCCGCAGCCCTGTGTTTTAAGCCTGACTCCATCAAGGTGAACAACAACAGCAAGACAGAGCTGACCCCGGAAGGTGAGGGTGGGGTAAAGGGCTGAGTGGTCTCCCATGGCCATGACCCCTGCCACCAGGGACATTTGCCCATTGAAGCCTGTGGGCAGGGAGAGACCTTTGCGGGAGGCAAGTCATGTGGCCTAGGGAGGCTCTTCCTGGCGTTGGTTAGTGGCTTCCACCTGAGGACAGCAGGGGCCACGAGGAGAGGGTGAGGGTGCTGGGGGTGGCCTCCCCTCATCGAATCCCAGGGTCTACCCCACAGCATCCCACCTCGGAAATGGAATCCTCCTCGCGCATATTCAGAGGCACCATTATCAGGCCCCTGAATAGAATGGATGAGGTCCTTGTCTCTGTGCATACCCCTCCCCAACCCCCAGCCATCTGCCGCCGCGCCGCTCCCACGGGCTATGAAGAGTTCTACTTCCCTCTGGTGGAGGCCACCCGGCTCCGCTGTGTCACCAAATGCACGTCGGGCGTGGACAACGCCATCGACTGTCACCAGGGCCAGTGCGTTCTAGAGACGAGCGGTCCCGCGTGTCGGTAAGGCCCCGCTCACCATCAGCATCAGTCGAGCCCCGCCCACTCATTCTAGGATGAAGCCTAGCCTCACGCGCCGCCCCGGCTCTGCCCCCAGGCCCTACAGTGGAGCCTCGTCCCCAGAGTCCCGCTCCAAGCCCATCCCCGTTGCCCTACAGTGGAGCCCTGCCCTGGAGCTCTGCTCCGTCGCCCTAAAGTGTAGCCCCGCCTCCTTGATGGGGTTGAGTCCAATCCCCTGGTTCTGGGATAGACCCCGCCCACTCATTCTAGGGTGGGGCCCCGCCCCTTCGTTCTAGGGCTGAACCTTGCCCCCTTCTTCTGGGGTGGAGCCCCGCCCCCTTGTTCTAGGGTGGATCCCCGCCCCCTCCTTTTAGGGTGAAGCCCTGCCCACTTGATCTAAAGTGGAATCCCGCCCCCTCACCTAGGGTAGAGCCCCGCCCCCTCGTTCTAGGGTGGAGACCCGTCCGCTTGTTCTACGGTGGATTCCGGCCGCTTGTCTAGGGTGGAACCCCCCAGCTTGCCCTAGGGTGGAACCCCCCCGCTGCCCTAGGCTGGAGCCCCGCCCCCTCACCCGCCCCCGCGGGGCCCAGGTGCACGCGTGGACCCCGAGCCCGGAGGTGAAGAGGGTCTGACCCTGCGATCTCCCGCAGCTGCTACTCCACCGACACGCACTGGTTCTCTGGCCCGCGCTGCGAGGTGGCCGTCCACTGGAGGGCGCTGGTCGGGGGCCTGACGGCCGGCGCCGCGCTGCTGGTGCTGCTGCTGCTGGCGCTGGGCGTCCGGGCGGTGCGCTCCGGATGGTGGGGCGGCCAGCGCCGAGGCCGGTGAGCGTGCGGGGGGCGGGGCCGGGGGGCGAGGGCAGCCAAGGGGTCCCAGGCGGGCCGGCTCTGTCTGACCGCGCGGCGGCCCCACCTAGGTCCTGGGACCAGGACAGGAAATGGTTCGAGACCTGGGATGAGGAAGTCGTGGGCACTTTTTCAAACTGGGGTTTCGAGGACGACGGAACAGGTGAGTCCTGCCTCCTGGGGAAGCAGGCAGAGGCTTTCCTGGGCACCACTGCGAGGACAGACGCCCTCCTTGCCTTCCTCGCATTTACTCTGTCCCCCTCTCCCTTCCGTCCCCTCCCTCTCCCCTTCTATTTCTCCGCTCCTCTCTCTCTCTAGACAAGGATACAAATTTCCATGTGGCCTTGGAGAACGTGGACACCACTATGAAGGTGAGGGGCTAAAGAGGGGGACCCCAAGGAACTCTCCCAGCCTCCATTCCAGAATCCCTCCCCGACCCCCACCAGGGCAGGGAGGGGGCTGGGCTCGGATCAGCAGTGACCTCCCTGTCAGCCCAAACCAGTGGCTCCGCGTTCCCGTCCCTCACTGTGACTCTGACAGGTGCACATCAAGAGACCCGAGATGACCTCGTCCTCAGTGTGAGCCCTGCGGGGCCCCTTCACCACCCCCTCCGCCCTGCCCCGGACACAAGGGTCTGCATTGCGTCCATTTCAAGAGGTGGCCCCAGGACGCGGGCAGCCCAGGCTCCTGCTGTTCTTGGGCAAGATGAGACTGTTCCCCCAAATCCCATCCTTCTCCTTCCAACTTGGCTGAAACCCACCTGGAGACGCAGTTCACGTCCAGGCTCTTCCACTGTGGAATCTTGGGCAAGTCAGTAACGAGCCTCAGTTTCCTCACCTGCAAAACGGGTACAGCATTCCTGTATGATAGCTCACGCCGTCGTTGTGAAAACCACATAGACTTGGTCAATTCTCGGTCCTACTCTGCCCTCCCGTCTCAGCCCTCGTGTTGCCATTGCCTCTCTCGGATCCTCCAATCCTCACGTCCTTCACCTGGTCTCTGGCCCTGGTTCTTATTTTCTCTCAATTCCCTACTGCCTGTTTCTTACTTTGAACCTGGAGGCAGCCTGCAGCCCCATCCCATCTCCTGCCCTCTCCTGATCTAACTCCCTGCTGCATCTCTTGCTCTCATTCCTTAGACGTCCTCCCCTTTTGACCCCGTTCCTTCATCCATCCTGCACCCCAGTCCCCCAGCCCTAAATCCTCCCTCCTCTCCTCACATCCTGGTCCCTAGCAAGGTATAGATAGCCTCTGTGTCTTAGGATACCCCGGGTGCTGTTCCCTCGGTCACCCTGTTGCCCAGTTCCCCGTTTCTCTTGCTCTCATTCCTTGTATCCTTTCCCCTTTTGAGCCCGTCCATTCATCGGTTCTGCCCCCGACTCCCCCTGACCTAAATACCCCAGCTCCTAATTCCCCCCTCACCCCGTTGCTCAATTCCCCGTTTCTCTTGCTCTCATTCCTTGTATCTTCTCCCCTTCTGAGCCTGTCCATTCATCGGTGGTTCTGCCCCTACTCCCCCAGCCCTAAATACCCCAGCTGCTGTTCCTCCCCATCACCCAGCCACCGGATTCTCCATTCACCCCTTTCTCTCACCCCTGGAGCCCCGTGGGTGGGGGCAGGGCATGAGTTCCCCAGTCCCCAAGGAAAGGCAGCCCCCTCAGTCTCCCTCCTCCTCATTCCCTTCCATCTCCCTCCCCTCTGCCTTTTAAACCCATCCCCTCCGATTCCCCTCCTCCCCCCTCTCTCCCTGGTGTCAACTCGATTCCTGCGGTAACTCTGAGCCCTGAAATCCTCAGTCTCCTTGGCGGGGAAGATTGGCTTTGGGAACAGGAAGTCGGCACATCTCCAGGTCTCCATGTGCACAATATAGAGTTTATTGTAAAAAGC", 100547052 - 1); + var genomicSeq = new SimpleSequence( + "GCGCTGACGTCTGTCTGTCCGGGTGCAGGGAGAAGGGAGGAAGAGGGGAGAGGTGGGGCGGTGCAAAGGTGAGGCTGTGCTCAGCCCTGACGCTCAGCAAAACCGATAACCAGCACTTTCATTACGTGCACGCCCCAGGGCCACGTCCCTGCCGCTGTCTTGGTCCTGAAGCCTGTTCTGCCCCAGCCCCCTGCCCGCTGGGCCCATGCAGCTGTTGGGGCTCCTCGGCCTCCTCTGGATGCTCAAGGCCTCCCCGTGGGCCACAGGTAAGGGGGAGAGGCGGAAGGGGGTTGGAGAAAAGCTCCTGATGTGATGTTCCAGGAAAGGGGAGGGAAAAGTGGCTGTAAGGCCTGGGGAGGGGGGATAAGAAGGCACCGCTTGGGGCTCTGGGTGCAGGGAGAACCGAGGCACGGCCTGACTGGGGGAGGGGGCGATGAGGAGAGGTTTCTTCCAGAGCTCCAGGTGCAGGGAAAACCCCGAGGTTGGGAAAGAGTGAGGGAGCTGGGTCTCTGCCACTCTCCACCAAGCACTGAGCAGGTTGCAGCGGCTGAGCCCCAATCTGTATCTGCAGCTGGAGGGTAGAGGGTGGGATTTACGTCTTCCCAGAGCAGTGCCCTTCCTGTCTTGACTCCTTCTGTCACCTGCCTCATGCCCCCAGCTTGAGTGTCCCCTTCACACTGGCCTCTCCCTCCCTGACAGCCCTCTAACTTCTACCCCTGGTCTCGGTCCTCTGGTTTCAGCCTCTCTGCCTTTTGTCCCCCGGCGGCTCCTCCCCAGCTCTGCCGTCACTCTCTTACCCCGGCCAGGGCCCATGTGTCTGGGTACAGCTGTTGGTACCAGGGCCGGGACAGGGAGCTCCTGATGTCCACTTTGCTTCCAAGGGTGCGTCTGAGACTACCCGTCGTGGGGTCCCAGGCTTCTCTCTTCTGCCCTGCAGGAACACCTCGCAATTCCTCTATACTTCTCTTTTCTCTGTACTTCAGTGTCTGCTTCTGATCCCCGATCCCAGGCCACCCAGCCTACAGGCCCATGAGTCCCCTTCTCAGTCACCTCCAGGGCCACATCCTGGAGCCAAGGGCTGTAGCCTGGGGATTCTCATAATCCCTGACCCCACTTCCCTGGCACCCACGAGCTAGGTTGAGACGTGACACCCCAGCTCTCAGCCACAAGATGGGCTGTGCCCGAGGTGAGGGGTAGCAGATCGGGTACTTCCCACTTCCCGTCTGCTGTGGCTGCCTGTCTTCCTTGTCCCTGACACCCCCGACAGCCGGATCTCTGATCCTAACTCTGACAAATTGTGAAATGGGTTGAAATCCACATGCTGGGGTTCATGCTTGTAAACTAATGAATCCCACGGCCAAAAGGGAATAGTATAGAAAAATATGTCTATTTGTGTGATGAACACTCACTGCTAAGCCTTAAGGTCTCCAGAACTCATCACGCCTGACTGCTGAGGTAGCTCCTTCTGGAAGTTTCCTTTTCTATGCTGTCTCTCTGCCTCTTCACCTAGTCCTCACTCCATGCCCTTTGAAGTCATTAGTGTGTGAGCTTAGCCTGTTTCTCTTTGGTGTTCTCTGGGCAGTTTTTTGTTTTTGTTTTTGTTTTTGTTTTTGTTTTTGATGGAGTCTTGCTCTGTCACCCAGGCTGGAGTGCAGTGGCACCATCTCAGCTCACTGCAGCCTCTGCTTCCTGGGTTCAAGCGATTCTCCTGCCTCAGCTACAGGTACACGCCACTACGCCTGGCTAATTTTTGTATTTTGTTTTAGTAGAGAAAGGGTTTCACCATGTTGGTCAGACTGGTCTCGAACTCCTGACCTCAAGTGATCTCCTGCCTTGGCCTTTCAAAGTGCTGGGATTACAGGCATGAGCCACCGTGCCTGGCCCTCTTTGTTCAGCTTTCCCTGTCTCCTGGTTTTTGTGATGCGCCCCCTGCCAGGACATGGCTGGGTTCTCTCTTTTTCTCTTTGAAAGCGGAGTCAGCCCAGACAGCAGCAGGGTGCCGGGAGAAGCAGTGGTGGGAGCAGAAGGTTAATGGGGGGATGGGAGCACTCCAGGCAGTAGCAGGGGGAGGAGAGGAAGGGGCAGAGGGAGGAGGAGCCTGGGTGTGACCAGAGGAGGGAAGGGAGGGGAGGGAGGCTCTGCCCAGCTCGGCTATATCAGGACAGGAGGACCTGCCATGACAAGGCCAAGGCCCGGTGAGGAATGAGGGCTCCCATGCCCCACTGCTCCCCTAGGAGCAGACAGGCAGTCGTCTCCAGCACCACAAAGCACCCAGCTCCAAGCTGCCTCTGATGCAGGAGTCAGCTGTAATATGCCCTGCCCTCTGTGATGCTGCCTGGAAAATGGGTGAGTGAGTAGCTTACATGAGTGATGTAACAAAATGACCCACGGATTTACCAGTGGATTCCTCTGCTCTGCCGCCAATGCAGGAACTTTATCCACGGCCACATCCATCTCTCAAGTGCCTTTCCCCAGAGCAGAAGCAGCCAGCGCTGTGCTCAGCAATTCTCCACACTCCAGAGACCTGGCTGGGTGGCCACTTGGTGTCCCCCAGCTCGCCTCTCCTGCTCCTGGCCACAGGGAAAATGCACCTATGACACTCACTACCTCCCCCCATGACACACTCATCTCTGAAACATTGCTCAACTCTCCAGTCAGTTCCAACACCTCAACCACCCCGACGTCCAAGTTTGCCTTCAAGGTTGAAACCACTCCACCCACCGTGTTGGTCTATTCAGCCACCACTGAGTGCGTGTATCCAACGAGCTTTATAATCACCATCTCCCACCCCACCTCCATCTGTGTGACCACGACGCAGGTGGCCTTCACCAGCTCTTACACCTCGACTCCCGTGACACAGAAGCCAGTGACCACCGTCACCAGTACTTACTCTATGACCACTACTGAGAAAGGAACGTCAGCCATGACATCTTCTCCCTCTACCACCACTGCAAGGGAAACTCCCATAGTGACAGTGACACCCTCCTCTGTGTCAGCCACAGACACAACCTTCCACACTACAATCTCATCTACAACTAGAACCACAGAAAGGACTCCCCTGCCCACTGGAAGCATCCATACAACCACGTCCCCAACCCCAGTATTTACTACTCTCAAAACAGCAGTGACTTCCACTTCCCCCATCACTTCTTCAATCACTTCCACAAATACAGTGACTTCTATGACAACGACCGCCTCCCAGCCCACAGCCACTAATACATTGTCATCACCCACTAGGACCATTTTATCTTCCACACCTGTCCTGAGCACAGAAACAATCACCAGTGGTATCACAAACACCACCCCCCTATCCACCTTGGTGACCACACTCCCCACTACCATCAGCAGGTCTACACCTACATCTGAGACCACCTACCCTACTTCTCCCACCAGCACTGTCACAGACTCCACTACCAAAATCGCCTACTCCACAAGTATGACAGGTACATTGTCCACAGAGACTTCTCTCCCACCCACCTCTTCCTCTCTCCCAACCACAGAAACAGCCACGACTCCTATGACAAACTTGGTAACCACCACCACTGAGATCTCCTCCCACAGTACTCCCAGCTTCTCTTCATCAACCATCTACTCCACAGTCACCTCACACAGTACTCCCAGATTCACTTCTTCAATCACCACTACCGAGACCCCCTCACACAGTACTCCCAGATTCACTTCTTCATTCACCAATACCAAGACCACCTCACACAGATCTCCCAGCTTCACTTCTTTGATCACCACCACGGAGACCACCTCACACAGTACTCCCAGCTTCACTTCTTCGATCACCACCACCGAGACCACCTCACACAGTGCTCGCAGCTTCACTTCTTCGATCACCACCACCGAGACCACCTCACACAATACTCGGAGCTTCACTTCTTCGATCACCACCACCGAGACCAACTCTCACAGTACTACCAGCTTCACTTCTTCGATCACCACCACCGAGACCACCTCACACAGTACTCCCAGCTTCAGTTCTTCAATCACCACCACTGAGACCCCCTTACACAGTACTCCTGGCCTCACTTCGTGGGTCACCACCACCAAGACCACCTCACACATTACTCCTGGCCTCACTTCTTCAATCACCACCACTGAGACTACCTCACACAGTACTCCCGGCTTCACTTCTTCAATCACCACCACTGAGACCACCTCAGAGAGTACTCCCAGCCTCAGTTCTTCAACCATCTACTCCACAGTCAGCACATCCACAACTGCCATCACCTCACATTTTACTACCTCAGAGACTGCGGTGACTCCCACACCTGTAACCCCATCTTCTCTGAGTACAGACATCCCGACCACAAGCCTACGAACTCTCACCCCTTCGTCTGTGGGCACCAGCACTTCATTGACTACAACCACAGACTTTCCCTCTATACCCACTGATATCAGTACCTTACCAACTCGAACACACATCATTTCATCTTCTCCCTCCATCCAAAGTACAGAAACCTCATCCCTTGTGGGCACCACCTCTCCCACCATGTCCACTGTGAGAATGACCCTCAGAATTACTGAGAACACCCCAATCAGTTCCTTTAGCACAAGTATTGTTGTTATACCTGAAACCCCAACACAGACCCCTCCTGTACTGACGTCAGCCACTGGGACCCAAACATCTCCTGCACCTACTACTGTCACCTTTGGAAGTACGGATTCCTCCACGTCCACTCTTCATACTCTTACTCCATCAACAGCCTTGAGCACGATCGTGTCAACATCACAGGTTCCTATTCCTAGCACACATTCCTCCACCCTTCAAACAACTCCTTCTACTCCCTCATTGCAAACTTCACTCACATCTACAAGTGAGTTCACTACAGAATCTTTCACTAGGGGAAGTACGTCTACAAATGCAATCTTGACTTCTTTTAGTACCATCATCTGGTCCTCAACACCCACTATTATCATGTCCTCTTCTCCATCTTCTGCCAGCATAACTCCAGTGTTCTCCACTACCATTCATTCTGTTCCTTCTTCACCATACATTTTCAGTACAGAAAATGTGGGCTCCGCTTCTATCACAGGCTTTCCTAGTCTCTCTTCCTCTGCAACTACCAGCACTTCTTCAACCAGCTCCTCTCTGACCACAGCTCTCACTGAAATAACCCCCTTTTCTTATATTTCCCTTCCCTCCACCACACCCTGTCCAGGAACTATAACAATTACCATAGTCCCTGCCTCTCCCACTGATCCATGTGTTGAAATGGATCCCAGCACTGAAGCTACTTCTCCTCCCACCACCCCATTAACAGTCTTTCCCTTTACTACCGAAATGGTCACCTGTCCTACCTCCATCAGTATCCAAACTACTCTTACTACATATATGGACACTTCTTCCATGATGCCAGAAAGTGAGTCCAGCATCTCACCCAATGCTTCCAGTTCCACTGGCACTGGGACTGTACCCACAAACACAGTTTTCACAAGTACTCGACTGCCCACCAGTGAGACCTGGCTGAGCAACAGTTCTGTGATCCCCCTACCTCTTCCTGGCGTCTCTACCATCCCGCTCACCATGAAACCAAGCAGTAGCCTCCCGACCATCCTGAGGACTTCAAGCAAGTCAACACACCCCTCCCCACCCACCACTAGGACTTCAGAGACACCAGTGGCCACTACCCAGACTCCTACCACCCTTACATCACGCAGGACAACTCGCATCACTTCTCAGATGACCACACAGTCCACGTTGACCACCACTGCAGGTTGGACCTTCTGCCTCTCTGTTCCCCTCCTTCCTCCCCTGCAAAATTCCTGTGTCACTGAGGTCAGGCTTTATCCTGAGCTTCCCTTTCTTTCTGTGTTTTCCAGGCACCTGTGACAATGGTGGCACCTGGGAACAGGGACAGTGTGCTTGCCTTCCGGGGTTTTCTGGGGACCGCTGTCAGCTCCAGACCAGATGCCAGAATGGGGGTCAGTGGGATGGCCTCAAATGCCAGTGCCCCAGCACCTTCTATGGTTCCAGTTGTGAGTTTGCTGTGGAACAGGTGGATCTAGGTGAGTTGCCAGAGCTATGCCTTCTGCACTTCCTCCCACAGGGTGTCACTGACTCTCCCCAGACTTATCCCTCTGTGGGGCCTGGAGGCACCCATGCCTTTTTGCCCGGTCCTTCCCTCCCTGCCATCTCTCCCATGCCCTCCGCTGCCCTGTGTCATGCTCCTCTCCGTCCTCACCCTTAGGAGGTGGCTGGGACTACCCTCCCTCCTGGGCCCATCTCCTGACTTGGGCTGCTTGGAGCTGTATCAGTTTCCAACTGCTGCCGGGCCAACAAACACAAATCTGGCTGCTGGAACAACACGACATTATCATGTTAGAATTCTGTAGATTAGAAGTCTGATGTGGGTGTCACTGGGCTGAAATCAAGGCGTCACCAGGGCTGTGTTGTCTTTCAGCGGCTCCAGGGAAGAATCCATTTTTTTGCCCTTTGCAGCTTCTGGAGCCTCCCACAGCAAGGCTGCATCTCTCTGTGTCTTTCTCCCATAGCCTCATCTCCCTCTAATGAACTCTGGCCTCCTCAATTGCTTCTCCCACTGTTAAGGACCCTTGTGATAACTTTGCCTCCTCCCCAAATAGTCTATGTTAATTTTCTCAAGATCAGCTGATTACGCCGGGCGGGGTGGCTCACACCTGTAATCCCAGCAGTTTGGGAGGCTGAGGGGGTAGGATCACCTGAGGTCAGGAGTTGGAGACTAGCCTGGCCAACATGGTGAAACTGTCTCTACTATTAGTTGGGCATGGTGGCAGATGCCTATAATCCTCACTATTCAGGAGGCTGAGGCAGGAAAATCGCTTGAATCCAGGAGGTGGATATTGCAGTAAAGCGAGATTTCGCCACTGCACACTAGCGTAGATGACAGAGGGAGAGTGAGACTCTGTCTTAAAAGAAAAAAAAAAATCAGCTGATTGTCTTATAATCCCTGCACTTTGGAAGGCCGAGGAGGGAGTATCGCTTGAGGCGAGGAGTTCAGGACCAGCCTGGGCAACACAGCGAGACCCTCATCTCCACAAAAAATTTTAAAAACTTACCTGGGCATGGTGGCTCATGCCTGTGGTCCCAGTTATTTGGAAGGCTGAGGTGGGAGAATCACTTGAGCCTGGGAGTTCAAGGCTGCAGTGAGCTATGATCCCCCTATTGCACTTCAGCCTGGATGACAGAATGAGACCCTATCTCAACAATAAAAAAAAGTTAGGCTGATTAGCAATCTAATTCAATCTGCACCCTTGATCCTCCCTTGCCATGTAGTATAGCATAGTCACAGTTCTGGGGATTAGGACATGGACATCTTCCCACTATGGGGGCAGCCAGGAGGGACCACAGGCTGACCGCTATCTTTCTGCCTGCTTTCACTCATCTCCACACAATTCCTTCCTTCCTCTCGCTCTCTTCTTTCTTTTCTTCTTTTCTTTTGTCTCTTTCTCTTTTCTTTTTTTCTTTCTCTTTTTCTTTCTTTCTTTCTCTTTCTTTTCTTTCCTTTCTTTTCTTCTTTCCCTCATCTTCACACAATGCTTTCTCCCTTTCTTTCTTTCCTTCTTTCTTTCTCTTTCTTTCTTTCTCTCTCTCTCTCTCTCTCTCTTTCTTTCTTTCTTTCTTTCTTTTTCTCTCTCTCTCTCTATCTTTCTTTTTCATTTTCTTGAGAGACAGTCTCACTCTGTGGCCCAGGCTGGAGTGCAGTGATGCAATCTCGGCTCACTACAACCTCCGCCTCCTGAGTTCAAGTGATTCTCCTGCCTCAGCCTCCTGAGGCATAATGCATCCTGGAATTCCTACATCTGTTCCTGCCTCTGGGCATCAGTCCTCAGGGATCTTGGAGGGGAGCAGCAGGAGGAGCCTGTGGGTTGGGGTGGTGGTGTTGGTGGCTTCAGACAAAAGCAGACAGAGAAGTGACTGGGGACATGCATGCTCTGTGTAGATGTAGTGGAGACCGAGGTGGGCATGGAAGTGTCTGTGGATCAGCAGTTCTCGCCGGACCTCAATGACAACACTTCCCAGGCCTACAGGGATTTCAACAAGACCTTCTGGAATCAGGTAAAGGGCAAAGAGAGGGGATTTTTTTTTTTTTTGAGGTGTAGTCTCGCACTCTCACCCTGGCTGGAGTGCAATGGTGCGATCTTGGGTCACTGCAACCTCCGCCTCCCGGGTTCACATGATTCTCTTGCCTCAGCCTCCCAAGTAGCTGGGATTACAGGTGCACACCATGACACCTGGCTAATGTTTTGTATTTTTAGTAGAGACGGGTTTTCACTATGTTGGCCAGACTGGTCTCGAACTACTGACTTTGTGATCCACCTGCCTCGTCCTCCCAAAGTGTTGGGATTACAGGCGTGAGCCACGGCACCCGGCCGGGGAGGGGAATTGAAGGGTCTTCCCTGGAGCTGGGGTTGGGCGTCTGGGTCCCCTCAGGTCTGCAGGTTCGGACGTGAGCCCAGGGATCCTTGGTGTTTCAGATGCAGAAGATTTTTGCAGACATGCAGGGCTTCACCTTCAAGGGTGTGGAGATCCTGTCCCTGAGGTAGGAGACCCATCTGGGGATGCGGAGGCGGTGTTGGGTGGGGGAAATGTGCGCACACAAAAAACCCATTCCTTTCTTTTGTAATCATCAGATTTTATAAAGAGGGGTGGAGGGGGTACATAAGGAATCACTCCCTGGGTATTTTTTCGGATCGTTTTCTGGGGCCATTTATCTGGAGGAGGGGTGGCACCTCTCTTCTTCAGCACACTGGAAGGAGAGAAGTTGCAGGGACATGTGGGAAGGTGGTGCCTGGATTGATGACTTTGTCCCCCTCTGGCTGGCCCCTGCTCTACTGAGTGGGTCAGCATTAGAAAGAGAGAGAGAGAAAGAGAGAGAGGGAGAGAACGCACGTCTAGGGGCGCCCGGTGGATGATGGCTTGATGCAACAAGAAGAGAACGTCAGGCCAGATGTGGTGGCTCACACTTGCAATCCTAGCACTTTGGGTAGGCTAGGCGGGTGGATCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNGAATTCCTACATCTGTTCCTGCCTCTGGGCATCAGTCCTCAGGGATCTTGGAGGGGAGCAGCAGGAGGAGCCTGTGGGTGGTGGTGGTGGTGTCGGTGGCTTCAGACAAAAGCAGACAGAGAAGTGACTGGGGACATACATGCTCTGTGCAGATGTAGTGGAGACCGAGGTGGGCATGGAAGTGTCTGTGGATCAGCAGTTCTCGCCGGACCTCAATGACAACACTTCCCAGGCCTACAGGGATTTCAACAAGACCTTCTGGAATCAGGTAAAGGGCAAAGAGAGGGGATTTTTTTTTTTTTTTTTTTTTGAGATGGAGTCTCGCACTGTCATCCTGGCTGGAGTGCAATGGCGTGATCTTGGCTCACTGCAACCTCCGCTTCCCAGGTTCACATGATTCTCTTGCCTCAGCCTCCCGAGCAGCTGAGATTACAGGTGCACACCACCACACCTGGCTAATGTTTTGTATTTTTAGTAGAGACGGGGTTTCACTATGTTGGCCAGACTGGTCTCGAACTACTGACTTTGTGATCCGCCTGCCTCGTCCTCCCAAAGTGTTGGGATTACAGGCGTGAGCCACGGCACCCGGCCGGGGAGGGGAATTGAAGGGTCTTCCCTGGAGCTGGGGTTGGGCATCTGGGTCCCCTCAGGTCTGCAGGTTCGGACGTGAGCCCAGGGATCCTTGGTGTTTCAGATGCAGAAGATTTTTGCAGACATGCAGGGCTTCACCTTCAAGGGTGTGGAGATCCTGTCCCTGAGGTAGGAGACCCATCTGGGGATGTGGAGGCAGTGTTGGGTGGGGGAAATGTGCGCACACAAAAAACCCATTCCTTTCTTTTGTAATCATCAGATTTTATAAAGAGAGGGGTGGAGGAGGTACATAAGGAATCGCTCCCTGGGTATTTTTTTGGATCGTTTTCTGGGGCCATTTATCTGGAGGAGGGGTGGCACCTCCCTTCTTCAGCACACTGGAAAGAGAGAAGTTGCAGGGACATGTGGGAAGGTGGTGCCTGGATTGGTGACTTCGTCCCCCTCTGGCTGGCCCCTGCTCTACTGAGTGGGTCAGCATTAGAGAGAGAGAGAGAGAAAGAGAGAGAGGGAGAGAACGCGCGTCCAGGGGCGCCCGGTGGATGATGGCTTGATGCAACGAGAACGTCAGGCCAGATGTGGTGGCTCACACTTGCAATCCTAGCACTTTGGCAAGGTTAGGTGGGTGGATCACCTGAAACCAGTTCAAGACCAGCCTGGGCAACATAGTGAGAACCCATCCCTACAACAATAAAAATAGTAATAATAATAATAATAATAATAAAATGATTATCCAGGCGTGGTAGTGCACACCTGTAGTCCCAGATACTTGGGAGGCTGAGGAGAAAGGATCACTTTAGCCCAGGAGTTGGAGGCTGCAGTGAGCTACAATGATACCACTGCACTCCAGCCTGGGTGACAGCAAGACTTTGTCTCTATAAAACACACAGAGAGAGGAAGTCAATCATGTCAGTCATTCCTTGTCCTGCCTTCCCAGGCAGACCAAGTCAGGAATGCTGGCAGCCCCTTCTGAAAAGGATGCACGTGGCATCCCAACTCATGACCTCTGCCCTCTTTCCCCCTTCTGGTGCACTTTGGGTTGCTTCTGGAGGTGCCCCTCCAAGGACCCATATGTTCCTGGCTGGGGCACTCTCTAAGGCTGTGGACCCCTCAGGAATGGCAGCATCGTGGTGGACTACCTGGTCCTGCTGGAGATGCCCTTCAGCCCCCAGCTGGAGAGCGAGTATGAGCAGGTGAAGACCACGCTGAAGGAGGGGCTCCAGAACGCCAGCCAGGATGCGAACAGCTGCCAGGACTCCCAGAGTGAGCCCGGGCTGGAGGGAGGGGCCAGGGCCTGAGGTGTCACCCCAGCCCACTCCAGCTCAGCCAGGGGGCCACTGGACTCAGGTGCCAGCCCTGTGGTACCTCTGGCAGGTTGGGAGAACGGGAATAAGTCTACACACAATGCCATCAAGAGTGGGGCTAGGGAGGGTCTCCCCAGGACCTGGGTACTGGGGAAGAGACCCCCTGATCGTCAGGCTCAGCATTTCCCGATGGCTGAAGACCTCGGATTATTCAGGGGGGATAAGGGAGAGAACAGGAGTCTTCCCCTGTGGCCCCTCCACACTCCCCCAGACGGAGAGAGCCCTCACTGCCCTCCCTGTGCCTATCCTGCTTCCTGGCCCTAACCCCTTGACCTGCCCCGCCCATTCCATCTGTGCCTGTGTTTCCGCAGCCCTGTGTTTTAAGCCTGACTCCATCAAGGTGAACAACAACAGCAAGACAGAGCTGACCCCGGAAGGTGAGGGTGGGGTAAAGGGCTGAGTGGTCTCCCATGGCCATGACCCCTGCCACCAGGGACATTTGCCCATTGAAGCCTGTGGGCAGGGAGAGACCTTTGCGGGAGGCAAGTCATGTGGCCTAGGGAGGCTCTTCCTGGCGTTGGTTAGTGGCTTCCACCTGAGGACAGCAGGGGCCACGAGGAGAGGGTGAGGGTGCTGGGGGTGGCCTCCCCTCATCGAATCCCAGGGTCTACCCCACAGCATCCCACCTCGGAAATGGAATCCTCCTCGCGCATATTCAGAGGCACCATTATCAGGCCCCTGAATAGAATGGATGAGGTCCTTGTCTCTGTGCATACCCCTCCCCAACCCCCAGCCATCTGCCGCCGCGCCGCTCCCACGGGCTATGAAGAGTTCTACTTCCCTCTGGTGGAGGCCACCCGGCTCCGCTGTGTCACCAAATGCACGTCGGGCGTGGACAACGCCATCGACTGTCACCAGGGCCAGTGCGTTCTAGAGACGAGCGGTCCCGCGTGTCGGTAAGGCCCCGCTCACCATCAGCATCAGTCGAGCCCCGCCCACTCATTCTAGGATGAAGCCTAGCCTCACGCGCCGCCCCGGCTCTGCCCCCAGGCCCTACAGTGGAGCCTCGTCCCCAGAGTCCCGCTCCAAGCCCATCCCCGTTGCCCTACAGTGGAGCCCTGCCCTGGAGCTCTGCTCCGTCGCCCTAAAGTGTAGCCCCGCCTCCTTGATGGGGTTGAGTCCAATCCCCTGGTTCTGGGATAGACCCCGCCCACTCATTCTAGGGTGGGGCCCCGCCCCTTCGTTCTAGGGCTGAACCTTGCCCCCTTCTTCTGGGGTGGAGCCCCGCCCCCTTGTTCTAGGGTGGATCCCCGCCCCCTCCTTTTAGGGTGAAGCCCTGCCCACTTGATCTAAAGTGGAATCCCGCCCCCTCACCTAGGGTAGAGCCCCGCCCCCTCGTTCTAGGGTGGAGACCCGTCCGCTTGTTCTACGGTGGATTCCGGCCGCTTGTCTAGGGTGGAACCCCCCAGCTTGCCCTAGGGTGGAACCCCCCCGCTGCCCTAGGCTGGAGCCCCGCCCCCTCACCCGCCCCCGCGGGGCCCAGGTGCACGCGTGGACCCCGAGCCCGGAGGTGAAGAGGGTCTGACCCTGCGATCTCCCGCAGCTGCTACTCCACCGACACGCACTGGTTCTCTGGCCCGCGCTGCGAGGTGGCCGTCCACTGGAGGGCGCTGGTCGGGGGCCTGACGGCCGGCGCCGCGCTGCTGGTGCTGCTGCTGCTGGCGCTGGGCGTCCGGGCGGTGCGCTCCGGATGGTGGGGCGGCCAGCGCCGAGGCCGGTGAGCGTGCGGGGGGCGGGGCCGGGGGGCGAGGGCAGCCAAGGGGTCCCAGGCGGGCCGGCTCTGTCTGACCGCGCGGCGGCCCCACCTAGGTCCTGGGACCAGGACAGGAAATGGTTCGAGACCTGGGATGAGGAAGTCGTGGGCACTTTTTCAAACTGGGGTTTCGAGGACGACGGAACAGGTGAGTCCTGCCTCCTGGGGAAGCAGGCAGAGGCTTTCCTGGGCACCACTGCGAGGACAGACGCCCTCCTTGCCTTCCTCGCATTTACTCTGTCCCCCTCTCCCTTCCGTCCCCTCCCTCTCCCCTTCTATTTCTCCGCTCCTCTCTCTCTCTAGACAAGGATACAAATTTCCATGTGGCCTTGGAGAACGTGGACACCACTATGAAGGTGAGGGGCTAAAGAGGGGGACCCCAAGGAACTCTCCCAGCCTCCATTCCAGAATCCCTCCCCGACCCCCACCAGGGCAGGGAGGGGGCTGGGCTCGGATCAGCAGTGACCTCCCTGTCAGCCCAAACCAGTGGCTCCGCGTTCCCGTCCCTCACTGTGACTCTGACAGGTGCACATCAAGAGACCCGAGATGACCTCGTCCTCAGTGTGAGCCCTGCGGGGCCCCTTCACCACCCCCTCCGCCCTGCCCCGGACACAAGGGTCTGCATTGCGTCCATTTCAAGAGGTGGCCCCAGGACGCGGGCAGCCCAGGCTCCTGCTGTTCTTGGGCAAGATGAGACTGTTCCCCCAAATCCCATCCTTCTCCTTCCAACTTGGCTGAAACCCACCTGGAGACGCAGTTCACGTCCAGGCTCTTCCACTGTGGAATCTTGGGCAAGTCAGTAACGAGCCTCAGTTTCCTCACCTGCAAAACGGGTACAGCATTCCTGTATGATAGCTCACGCCGTCGTTGTGAAAACCACATAGACTTGGTCAATTCTCGGTCCTACTCTGCCCTCCCGTCTCAGCCCTCGTGTTGCCATTGCCTCTCTCGGATCCTCCAATCCTCACGTCCTTCACCTGGTCTCTGGCCCTGGTTCTTATTTTCTCTCAATTCCCTACTGCCTGTTTCTTACTTTGAACCTGGAGGCAGCCTGCAGCCCCATCCCATCTCCTGCCCTCTCCTGATCTAACTCCCTGCTGCATCTCTTGCTCTCATTCCTTAGACGTCCTCCCCTTTTGACCCCGTTCCTTCATCCATCCTGCACCCCAGTCCCCCAGCCCTAAATCCTCCCTCCTCTCCTCACATCCTGGTCCCTAGCAAGGTATAGATAGCCTCTGTGTCTTAGGATACCCCGGGTGCTGTTCCCTCGGTCACCCTGTTGCCCAGTTCCCCGTTTCTCTTGCTCTCATTCCTTGTATCCTTTCCCCTTTTGAGCCCGTCCATTCATCGGTTCTGCCCCCGACTCCCCCTGACCTAAATACCCCAGCTCCTAATTCCCCCCTCACCCCGTTGCTCAATTCCCCGTTTCTCTTGCTCTCATTCCTTGTATCTTCTCCCCTTCTGAGCCTGTCCATTCATCGGTGGTTCTGCCCCTACTCCCCCAGCCCTAAATACCCCAGCTGCTGTTCCTCCCCATCACCCAGCCACCGGATTCTCCATTCACCCCTTTCTCTCACCCCTGGAGCCCCGTGGGTGGGGGCAGGGCATGAGTTCCCCAGTCCCCAAGGAAAGGCAGCCCCCTCAGTCTCCCTCCTCCTCATTCCCTTCCATCTCCCTCCCCTCTGCCTTTTAAACCCATCCCCTCCGATTCCCCTCCTCCCCCCTCTCTCCCTGGTGTCAACTCGATTCCTGCGGTAACTCTGAGCCCTGAAATCCTCAGTCTCCTTGGCGGGGAAGATTGGCTTTGGGAACAGGAAGTCGGCACATCTCCAGGTCTCCATGTGCACAATATAGAGTTTATTGTAAAAAGC", + 100547052 - 1); - var codingRegion = new CodingRegion(100547257, 100610315, 206, 10177, 4452); + var codingRegion = new CodingRegion(100547257, 100610315, 206, 10177, 9972); var regions = new ITranscriptRegion[] { - new TranscriptRegion(TranscriptRegionType.Exon, 1, 100547052,100547317, 1, 266), - new TranscriptRegion(TranscriptRegionType.Intron, 1, 100547318,100549480, 266, 267), - new TranscriptRegion(TranscriptRegionType.Exon, 2, 100549481,100550652, 267, 1438), - new TranscriptRegion(TranscriptRegionType.Intron, 2, 100550653,100550655, 1438, 5957), - new TranscriptRegion(TranscriptRegionType.Exon, 3, 100550656,100550784, 5957, 6085), - new TranscriptRegion(TranscriptRegionType.Intron, 3, 100550785,100550787, 6085, 6698), - new TranscriptRegion(TranscriptRegionType.Exon, 4, 100550788,100550814, 6698, 6724), - new TranscriptRegion(TranscriptRegionType.Intron, 4, 100550815,100550817, 6724, 7115), - new TranscriptRegion(TranscriptRegionType.Exon, 5, 100550818,100552774, 7115, 9071), - new TranscriptRegion(TranscriptRegionType.Intron, 5, 100552775,100552880, 9071, 9072), - new TranscriptRegion(TranscriptRegionType.Exon, 6, 100552881,100553066, 9072, 9257), - new TranscriptRegion(TranscriptRegionType.Intron, 6, 100553067,100554979, 9257, 9258), - new TranscriptRegion(TranscriptRegionType.Exon, 7, 100554980,100555095, 9258, 9373), - new TranscriptRegion(TranscriptRegionType.Intron, 7, 100555096,100555514, 9373, 9374), - new TranscriptRegion(TranscriptRegionType.Exon, 8, 100555515,100555579, 9374, 9438), - new TranscriptRegion(TranscriptRegionType.Intron, 8, 100555580,100607745, 9438, 9439), - new TranscriptRegion(TranscriptRegionType.Exon, 9, 100607746,100607894, 9439, 9587), - new TranscriptRegion(TranscriptRegionType.Intron, 9, 100607895,100608306, 9587, 9588), - new TranscriptRegion(TranscriptRegionType.Exon, 10, 100608307,100608372, 9588, 9653), - new TranscriptRegion(TranscriptRegionType.Intron, 10, 100608373,100608728, 9653, 9654), - new TranscriptRegion(TranscriptRegionType.Exon, 11, 100608729,100608891, 9654, 9816), - new TranscriptRegion(TranscriptRegionType.Intron, 11, 100608892,100609538, 9816, 9817), - new TranscriptRegion(TranscriptRegionType.Exon, 12, 100609539,100609712, 9817, 9990), - new TranscriptRegion(TranscriptRegionType.Intron, 12, 100609713,100609804, 9990, 9991), - new TranscriptRegion(TranscriptRegionType.Exon, 13, 100609805,100609896, 9991, 10082), - new TranscriptRegion(TranscriptRegionType.Intron, 13, 100609897,100610051, 10082, 10083), - new TranscriptRegion(TranscriptRegionType.Exon, 14, 100610052,100610104, 10083, 10135), - new TranscriptRegion(TranscriptRegionType.Intron, 14, 100610105,100610273, 10135, 10136), - new TranscriptRegion(TranscriptRegionType.Exon, 15, 100610274,100611004, 10136, 10866), - new TranscriptRegion(TranscriptRegionType.Gap, 15, 100611005,100611005, 10866, 10867), - new TranscriptRegion(TranscriptRegionType.Exon, 15, 100611006,100611075, 10867, 10936), - new TranscriptRegion(TranscriptRegionType.Gap, 15, 100611076,100611076, 10936, 10937), - new TranscriptRegion(TranscriptRegionType.Exon, 15, 100611077,100611169, 10937, 11029), - new TranscriptRegion(TranscriptRegionType.Gap, 15, 100611170,100611173, 11029, 11030), - new TranscriptRegion(TranscriptRegionType.Exon, 15, 100611174,100611176, 11030, 11032), - new TranscriptRegion(TranscriptRegionType.Intron, 15, 100611177,100611299, 11032, 11033), - new TranscriptRegion(TranscriptRegionType.Exon, 16, 100611300,100611307, 11033, 11040), - new TranscriptRegion(TranscriptRegionType.Gap, 16, 100611308,100611311, 11040, 11041), - new TranscriptRegion(TranscriptRegionType.Exon, 16, 100611312,100611428, 11041, 11157), - new TranscriptRegion(TranscriptRegionType.Exon, 16, 100611429,100611517, 11170, 11258), - new TranscriptRegion(TranscriptRegionType.Exon, 16, 100611518,100611619, 11260, 11361) + new TranscriptRegion(TranscriptRegionType.Exon, 1, 100547052, 100547317, 1, 266), + new TranscriptRegion(TranscriptRegionType.Intron, 1, 100547318, 100549480, 266, 267), + new TranscriptRegion(TranscriptRegionType.Exon, 2, 100549481, 100550652, 267, 1438), + new TranscriptRegion(TranscriptRegionType.Intron, 2, 100550653, 100550655, 1438, 5957), + new TranscriptRegion(TranscriptRegionType.Exon, 3, 100550656, 100550784, 5957, 6085), + new TranscriptRegion(TranscriptRegionType.Intron, 3, 100550785, 100550787, 6085, 6698), + new TranscriptRegion(TranscriptRegionType.Exon, 4, 100550788, 100550814, 6698, 6724), + new TranscriptRegion(TranscriptRegionType.Intron, 4, 100550815, 100550817, 6724, 7115), + new TranscriptRegion(TranscriptRegionType.Exon, 5, 100550818, 100552774, 7115, 9071), + new TranscriptRegion(TranscriptRegionType.Intron, 5, 100552775, 100552880, 9071, 9072), + new TranscriptRegion(TranscriptRegionType.Exon, 6, 100552881, 100553066, 9072, 9257), + new TranscriptRegion(TranscriptRegionType.Intron, 6, 100553067, 100554979, 9257, 9258), + new TranscriptRegion(TranscriptRegionType.Exon, 7, 100554980, 100555095, 9258, 9373), + new TranscriptRegion(TranscriptRegionType.Intron, 7, 100555096, 100555514, 9373, 9374), + new TranscriptRegion(TranscriptRegionType.Exon, 8, 100555515, 100555579, 9374, 9438), + new TranscriptRegion(TranscriptRegionType.Intron, 8, 100555580, 100607745, 9438, 9439), + new TranscriptRegion(TranscriptRegionType.Exon, 9, 100607746, 100607894, 9439, 9587), + new TranscriptRegion(TranscriptRegionType.Intron, 9, 100607895, 100608306, 9587, 9588), + new TranscriptRegion(TranscriptRegionType.Exon, 10, 100608307, 100608372, 9588, 9653), + new TranscriptRegion(TranscriptRegionType.Intron, 10, 100608373, 100608728, 9653, 9654), + new TranscriptRegion(TranscriptRegionType.Exon, 11, 100608729, 100608891, 9654, 9816), + new TranscriptRegion(TranscriptRegionType.Intron, 11, 100608892, 100609538, 9816, 9817), + new TranscriptRegion(TranscriptRegionType.Exon, 12, 100609539, 100609712, 9817, 9990), + new TranscriptRegion(TranscriptRegionType.Intron, 12, 100609713, 100609804, 9990, 9991), + new TranscriptRegion(TranscriptRegionType.Exon, 13, 100609805, 100609896, 9991, 10082), + new TranscriptRegion(TranscriptRegionType.Intron, 13, 100609897, 100610051, 10082, 10083), + new TranscriptRegion(TranscriptRegionType.Exon, 14, 100610052, 100610104, 10083, 10135), + new TranscriptRegion(TranscriptRegionType.Intron, 14, 100610105, 100610273, 10135, 10136), + new TranscriptRegion(TranscriptRegionType.Exon, 15, 100610274, 100611004, 10136, 10866), + new TranscriptRegion(TranscriptRegionType.Gap, 15, 100611005, 100611005, 10866, 10867), + new TranscriptRegion(TranscriptRegionType.Exon, 15, 100611006, 100611075, 10867, 10936), + new TranscriptRegion(TranscriptRegionType.Gap, 15, 100611076, 100611076, 10936, 10937), + new TranscriptRegion(TranscriptRegionType.Exon, 15, 100611077, 100611169, 10937, 11029), + new TranscriptRegion(TranscriptRegionType.Gap, 15, 100611170, 100611173, 11029, 11030), + new TranscriptRegion(TranscriptRegionType.Exon, 15, 100611174, 100611176, 11030, 11032), + new TranscriptRegion(TranscriptRegionType.Intron, 15, 100611177, 100611299, 11032, 11033), + new TranscriptRegion(TranscriptRegionType.Exon, 16, 100611300, 100611307, 11033, 11040), + new TranscriptRegion(TranscriptRegionType.Gap, 16, 100611308, 100611311, 11040, 11041), + new TranscriptRegion(TranscriptRegionType.Exon, 16, 100611312, 100611428, 11041, 11157), + new TranscriptRegion(TranscriptRegionType.Exon, 16, 100611429, 100611517, 11170, 11258), + new TranscriptRegion(TranscriptRegionType.Exon, 16, 100611518, 100611619, 11260, 11361) }; var rnaEdits = new IRnaEdit[] { - new RnaEdit(865, 865, "G"), + new RnaEdit(865, 865, "G"), new RnaEdit(1214, 1214, "A"), - new RnaEdit(1439, 1438, "AGCACATCCACAACTGCCATCTCCTCACTTCCCCCTACCTCAGGTACTATGGTGACTTCCACAACCATGACCCCATCTTCTCTGAGTACAGACATCCCTTTCACAACACCAACAACTATCACCCACCATTCTGTGGGCTCTACCGGTTTCCTGACTACAGCAACAGACCTCACATCAACATTCACGGTTTCCAGTTCCTCAGCAATGTCCACGAGTGTCATTCCATCTTCCCCCAGCATTCAGAATACAGAAACCTCATCCCTTGTCAGCATGACCTCTGCCACTACTCCCAATGTGAGACCAACTTTTGTAAGTACACTCAGCACTCCTACAAGTTCCCTCCTGACGACCTTCCCAGCAACATATTCATTTTCATCTTCCATGTCTGCCAGCAGTGCTGGGACCACTCACACAGAGAGTATCTCCTCACCTCCAGCCAGCACCAGTACACTCCACACAACAGCTGAATCCACCCTGGCACCCACTACCACCACCTCATTCACAACTTCCACAACTATGGAACCACCTTCAACCACTGCAGCAACTACAGGAACAGGTCAGACCACCTTCACCAGCTCTACAGCCACATTTCCTGAGACCACCACACCGACTCCTACAACTGACATGTCCACAGAATCTCTCACAACAGCCATGACTTCTCCTCCCATCACTTCATCAGTCACTTCCACAAATACAGTGACTTCTATGACAACTACGACCTCTCCTCCCACAACCACCAATTCTTTTACATCACTGACCAGTATGCCTCTGTCTTCTACACCTGTCCCAAGCACAGAAGTAGTCACCAGTGGCACCATAAACACAATCCCTCCATCTATCTTGGTGACCACACTCCCCACTCCAAATGCTTCATCTATGACTACATCTGAGACCACCTATCCTAATTCTCCGACTGGTCCTGGTACAAACTCCACGACGGAAATCACCTATCCCACCACTATGACAGAGACATCATCCACTGCCACCTCTCTTCCACCCACCTCTCCCTTGGTCTCAACTGCAAAAACAGCCAAAACTCCTACCACAAACTTGGTAACCACCACCACCAAGACCACCTCACATAGTACCACCAGCTTCACTTCTTCAACCGTCTACTCCACAGCCAGCACATACACAACTGCCATCACCTCAGTTCCCACTACGTTGGGTACCATGGTAACTTCTACATCCATGATCTCATCTACTGTGAGTACAGGTATCCCTACCTCACAACCAACAACCATCACTCCCTCATCCGTGGGCATCAGTGGTTCATTACCTATGATGACAGACCTCACCTCAGTGTACACAGTCTCTAACATGTCTGCAAGGCCAACAACTGTCATTCCCTCATCTCCCACTGTCCAGAATACAGAAATCTCAATCTCTGTTAGCATGACGTCTGCTACCACTCCCAGTGGAGGACCAACTTTCACAAGTACTGAGAACACTCCAACAAGGTCCCTCCTGACAAGCTTTCCAATGACACATTCATTCTCTTCTTCTATGTCTGAAAGTAGTGCTGGGACCACTCACACAGAGAGTATCTCCTCACCTCGAGGCACCACCAGTACACTCCACACAACAGTTGAATCCACCCCATCACCCACTACCACCACCTCATTTACCACATCCACAATGATGGAACCACCTTCATCCACTGTATCAACTACAGGCAGAGGTCAGACCACCTTTCCCAGCTCTACAGCCACATTCCCTGAGACCACTACACTGACTCCTACAACTGACATTTCTACAGTATCTCTCACAACAGCCATGACTTCTCCTCCCCCCGTCAGTTCTTCAATCACTCCCACCAATACAATGACTTCTATGAGAACTACAACCTATTGGCCCACAGCCACTAATACATTATCACCACTCACCAGTAGCATTTTATCTTCTACACCTGTCCCAAGCACAGAAATGATCACCAGTCATACCACAAACACCACCCCTCTATCCACCTTGGTGACTACACTCCTCACTACCATCACCAGATCTACACCTACATCTGAGACCACCTACCCTACTTCTCCCACCAGCATTGTCTCAGACTCCACGACTGAAATCACCTATTCCACAAGTATAACAGGTACATTGTCCACTGCCACTACTCTCCCACCCACCTCTTCCTCTCTCCCAACCACAGAAACAGCCACGATGACTCCTACCACAACCTTGATAACCACCACCCCTAATACCACCTCCCTTAGTACCCCCAGCTTCACTTCTTCAACCATCTACTCCACAGTCAGCACATCCACAACTGCCATCTCCTCAGCTTCCCCTACCTCAGGTACCATGGTAACTTCCACAACCATGACCCCATCTTCTCTGAGTACAGACACCCCTTCCACAACACCAACAACTATCACCTACCCTTCTGTGGGCTCTACCGGTTTCCTGACTACAGCAACAGACCTCACATCAACATTCACTGTTTCCAGTTCCTCAGCAATGTCCACAAGTGTCATTCCATCTTCCCCCAGCATCCAGAATACAGAAACCTCATCCCTTGTCAGCATGACCTCTGCCACCACTCCCAGTTTGAGACCAACTATCACAAGTACTGACAGCACTCTAACAAGTTCCCTCCTGACGACCTTCCCAAGTACATATTCATTTTCATCTTCCATGTCTGCCAGCAGTGCAGGGACCACTCACACAGAGACTATTTCCTCACTTCCAGCCAGCACCAATACAATCCACACAACAGCTGAATCCGCCCTGGCACCCACTACCACCACCTCATTCACCACATCCCCAACGATGGAACCACCTTCAACCACTGTAGCGACTACAGGCACAGGTCAGACCACCTTCCCCAGCTCTACAGCCACATTCCTTGAGACCACCACACTGACTCCTACAACTGACTTTTCTACAGAATCTCTCACAACAGCCATGACTTCTACTCCCCCCATCACTTCTTCAATCACTCCCACCGATACAATGACTTCTATGAGAACTACGACCTCTTGGCCCACAGCCACTAATACGTTATCACCACTCACCAGTAGCATTTTATCTTCTACACCTGTCCCAAGCACAGAGGTGACCACCAGTCATACCACAAACACCAATCCTGTATCCACGTTGGTGACTACACTCCCCATTACCATCACCAGGTCTACACTTACATCTGAGACCGCCTACCCTAGTTCTCCCACAAGCACTGTCACAGAGTCCACAACTGAAATCACCTATCCCACCACTATGACAGAGACATCATCTACTGCCACCTCTCTTCCACCCACCTCTTCCTTGGTCTCAACCGCAGAAACAGCCAAAACTCCTACCACAAACTTGGTAACCACCACCACCAAGACCACCTCACATAGTACCACCAGCTTCACTTCTTCAACCATCTACTCCACAGCCAGCACACCCACCACTGCCATCACCTCAGTTCCCACTACCTTGGGTACCATGGTGACTTCTACATCCATGATCCCATCTACTGTGAGTACAGGTATCCCTACCTCACAACCAACAACTATTACTCCCTCATCCGTGGGCATCAGTGGTTCATTACCTATGATGACAGACCTCACCTCAGTGTACACAGTCTCCAGCATGTCTGCAAGGCCAACAAGTGTCATTCCTTCATCTCCCACTGTCCAGAATACAGAAACCTCAATCTTTGTTAGCATGATGTCTGCTACCACTCCCAGTGGAGGACCAACTTTCACAAGTACTGAGAACACTCCAACAAGGTCCCTCCTGACAAGCTTTCCAGTGACACATTCATTTTCCTCTTCCATGTCTGCCAGCAGTGTAGGGACCACTCACACCCAGAGTATCTCCTCACCCCCAGCCATCACCAGTACACTCCACACAACAGCTGAATCCACCCCATCACCTACAACCACCATGTCATTCACAACATTTACAAAGATGGAAACACCTTCATCCACTGTAGCAACTACAGGCACAGGTCAGACTACATTCACCAGTTCAACAGCCACATCCCCTAAGACCACCACACTGACTCCTACCTCTGACATTTCCACAGGATCTTTCAAAACAGCCGTGAGTTCTACTCCCCCCATCACTTCTTCAATCACCTCCACATATACGGTGACTTCGATGACAACTACCACCCCTCTAGGGCCCACAGCCACTAATACGTTACCATCATTTACCAGTAGCGTTTCATCTTCTACGCCTGTCCCAAGTACAGAAGCGATCACCAGTGGTACCACAAACACCACCCCTCTATCTACATTGGTGACCACATTCTCCAATTCCGACACCAGTTCTACACCTACATCTGAGACCACCTACCCTACTTCTCTTACTAGTGCTCTCACAGATTCCACGACCAGAACCACCTATTCCACCAATATGACAGGTACATTGTCCACTGTGACCTCTCTTCGACCCACCTCTTCCTCTCTCCTCACCACAGTAACAGCCACAGTTCCAACAACAAACTTGGTAACCACGACCACCAAGATCACCTCACACAGTACTCCTAGCTTCACTTCTTCAATCGCAACCACCGAGACCCCC"), + new RnaEdit(1439, 1438, + "AGCACATCCACAACTGCCATCTCCTCACTTCCCCCTACCTCAGGTACTATGGTGACTTCCACAACCATGACCCCATCTTCTCTGAGTACAGACATCCCTTTCACAACACCAACAACTATCACCCACCATTCTGTGGGCTCTACCGGTTTCCTGACTACAGCAACAGACCTCACATCAACATTCACGGTTTCCAGTTCCTCAGCAATGTCCACGAGTGTCATTCCATCTTCCCCCAGCATTCAGAATACAGAAACCTCATCCCTTGTCAGCATGACCTCTGCCACTACTCCCAATGTGAGACCAACTTTTGTAAGTACACTCAGCACTCCTACAAGTTCCCTCCTGACGACCTTCCCAGCAACATATTCATTTTCATCTTCCATGTCTGCCAGCAGTGCTGGGACCACTCACACAGAGAGTATCTCCTCACCTCCAGCCAGCACCAGTACACTCCACACAACAGCTGAATCCACCCTGGCACCCACTACCACCACCTCATTCACAACTTCCACAACTATGGAACCACCTTCAACCACTGCAGCAACTACAGGAACAGGTCAGACCACCTTCACCAGCTCTACAGCCACATTTCCTGAGACCACCACACCGACTCCTACAACTGACATGTCCACAGAATCTCTCACAACAGCCATGACTTCTCCTCCCATCACTTCATCAGTCACTTCCACAAATACAGTGACTTCTATGACAACTACGACCTCTCCTCCCACAACCACCAATTCTTTTACATCACTGACCAGTATGCCTCTGTCTTCTACACCTGTCCCAAGCACAGAAGTAGTCACCAGTGGCACCATAAACACAATCCCTCCATCTATCTTGGTGACCACACTCCCCACTCCAAATGCTTCATCTATGACTACATCTGAGACCACCTATCCTAATTCTCCGACTGGTCCTGGTACAAACTCCACGACGGAAATCACCTATCCCACCACTATGACAGAGACATCATCCACTGCCACCTCTCTTCCACCCACCTCTCCCTTGGTCTCAACTGCAAAAACAGCCAAAACTCCTACCACAAACTTGGTAACCACCACCACCAAGACCACCTCACATAGTACCACCAGCTTCACTTCTTCAACCGTCTACTCCACAGCCAGCACATACACAACTGCCATCACCTCAGTTCCCACTACGTTGGGTACCATGGTAACTTCTACATCCATGATCTCATCTACTGTGAGTACAGGTATCCCTACCTCACAACCAACAACCATCACTCCCTCATCCGTGGGCATCAGTGGTTCATTACCTATGATGACAGACCTCACCTCAGTGTACACAGTCTCTAACATGTCTGCAAGGCCAACAACTGTCATTCCCTCATCTCCCACTGTCCAGAATACAGAAATCTCAATCTCTGTTAGCATGACGTCTGCTACCACTCCCAGTGGAGGACCAACTTTCACAAGTACTGAGAACACTCCAACAAGGTCCCTCCTGACAAGCTTTCCAATGACACATTCATTCTCTTCTTCTATGTCTGAAAGTAGTGCTGGGACCACTCACACAGAGAGTATCTCCTCACCTCGAGGCACCACCAGTACACTCCACACAACAGTTGAATCCACCCCATCACCCACTACCACCACCTCATTTACCACATCCACAATGATGGAACCACCTTCATCCACTGTATCAACTACAGGCAGAGGTCAGACCACCTTTCCCAGCTCTACAGCCACATTCCCTGAGACCACTACACTGACTCCTACAACTGACATTTCTACAGTATCTCTCACAACAGCCATGACTTCTCCTCCCCCCGTCAGTTCTTCAATCACTCCCACCAATACAATGACTTCTATGAGAACTACAACCTATTGGCCCACAGCCACTAATACATTATCACCACTCACCAGTAGCATTTTATCTTCTACACCTGTCCCAAGCACAGAAATGATCACCAGTCATACCACAAACACCACCCCTCTATCCACCTTGGTGACTACACTCCTCACTACCATCACCAGATCTACACCTACATCTGAGACCACCTACCCTACTTCTCCCACCAGCATTGTCTCAGACTCCACGACTGAAATCACCTATTCCACAAGTATAACAGGTACATTGTCCACTGCCACTACTCTCCCACCCACCTCTTCCTCTCTCCCAACCACAGAAACAGCCACGATGACTCCTACCACAACCTTGATAACCACCACCCCTAATACCACCTCCCTTAGTACCCCCAGCTTCACTTCTTCAACCATCTACTCCACAGTCAGCACATCCACAACTGCCATCTCCTCAGCTTCCCCTACCTCAGGTACCATGGTAACTTCCACAACCATGACCCCATCTTCTCTGAGTACAGACACCCCTTCCACAACACCAACAACTATCACCTACCCTTCTGTGGGCTCTACCGGTTTCCTGACTACAGCAACAGACCTCACATCAACATTCACTGTTTCCAGTTCCTCAGCAATGTCCACAAGTGTCATTCCATCTTCCCCCAGCATCCAGAATACAGAAACCTCATCCCTTGTCAGCATGACCTCTGCCACCACTCCCAGTTTGAGACCAACTATCACAAGTACTGACAGCACTCTAACAAGTTCCCTCCTGACGACCTTCCCAAGTACATATTCATTTTCATCTTCCATGTCTGCCAGCAGTGCAGGGACCACTCACACAGAGACTATTTCCTCACTTCCAGCCAGCACCAATACAATCCACACAACAGCTGAATCCGCCCTGGCACCCACTACCACCACCTCATTCACCACATCCCCAACGATGGAACCACCTTCAACCACTGTAGCGACTACAGGCACAGGTCAGACCACCTTCCCCAGCTCTACAGCCACATTCCTTGAGACCACCACACTGACTCCTACAACTGACTTTTCTACAGAATCTCTCACAACAGCCATGACTTCTACTCCCCCCATCACTTCTTCAATCACTCCCACCGATACAATGACTTCTATGAGAACTACGACCTCTTGGCCCACAGCCACTAATACGTTATCACCACTCACCAGTAGCATTTTATCTTCTACACCTGTCCCAAGCACAGAGGTGACCACCAGTCATACCACAAACACCAATCCTGTATCCACGTTGGTGACTACACTCCCCATTACCATCACCAGGTCTACACTTACATCTGAGACCGCCTACCCTAGTTCTCCCACAAGCACTGTCACAGAGTCCACAACTGAAATCACCTATCCCACCACTATGACAGAGACATCATCTACTGCCACCTCTCTTCCACCCACCTCTTCCTTGGTCTCAACCGCAGAAACAGCCAAAACTCCTACCACAAACTTGGTAACCACCACCACCAAGACCACCTCACATAGTACCACCAGCTTCACTTCTTCAACCATCTACTCCACAGCCAGCACACCCACCACTGCCATCACCTCAGTTCCCACTACCTTGGGTACCATGGTGACTTCTACATCCATGATCCCATCTACTGTGAGTACAGGTATCCCTACCTCACAACCAACAACTATTACTCCCTCATCCGTGGGCATCAGTGGTTCATTACCTATGATGACAGACCTCACCTCAGTGTACACAGTCTCCAGCATGTCTGCAAGGCCAACAAGTGTCATTCCTTCATCTCCCACTGTCCAGAATACAGAAACCTCAATCTTTGTTAGCATGATGTCTGCTACCACTCCCAGTGGAGGACCAACTTTCACAAGTACTGAGAACACTCCAACAAGGTCCCTCCTGACAAGCTTTCCAGTGACACATTCATTTTCCTCTTCCATGTCTGCCAGCAGTGTAGGGACCACTCACACCCAGAGTATCTCCTCACCCCCAGCCATCACCAGTACACTCCACACAACAGCTGAATCCACCCCATCACCTACAACCACCATGTCATTCACAACATTTACAAAGATGGAAACACCTTCATCCACTGTAGCAACTACAGGCACAGGTCAGACTACATTCACCAGTTCAACAGCCACATCCCCTAAGACCACCACACTGACTCCTACCTCTGACATTTCCACAGGATCTTTCAAAACAGCCGTGAGTTCTACTCCCCCCATCACTTCTTCAATCACCTCCACATATACGGTGACTTCGATGACAACTACCACCCCTCTAGGGCCCACAGCCACTAATACGTTACCATCATTTACCAGTAGCGTTTCATCTTCTACGCCTGTCCCAAGTACAGAAGCGATCACCAGTGGTACCACAAACACCACCCCTCTATCTACATTGGTGACCACATTCTCCAATTCCGACACCAGTTCTACACCTACATCTGAGACCACCTACCCTACTTCTCTTACTAGTGCTCTCACAGATTCCACGACCAGAACCACCTATTCCACCAATATGACAGGTACATTGTCCACTGTGACCTCTCTTCGACCCACCTCTTCCTCTCTCCTCACCACAGTAACAGCCACAGTTCCAACAACAAACTTGGTAACCACGACCACCAAGATCACCTCACACAGTACTCCTAGCTTCACTTCTTCAATCGCAACCACCGAGACCCCC"), new RnaEdit(1520, 1520, "A"), new RnaEdit(1549, 1549, "C"), - new RnaEdit(1568, 1567, "TCGATCACCACCACCGAGACCACATCCCACAATACTCCCAGCCTCACTTCTTCAATCACCACCACCAAGACCACCTCACACAGTACTCCCAGCTACACTTCTTTGATCACCACAACCACCACCACCTCACACAGTACTCCCAGCTTCACTTCTTCCATCACCACCACTGAGACCACATCCCACAATACTCCCAGCTTGACTTCTTCGATCACAACCACCGAGACCACATCCCATAGTACTCCCAGCTTCACTTCTTCGATCACCACCGAGACCACATCCCACAGTACTCCCAGCTTCACTTCATTGATCACCATCACCGAGATCACCTCACACAGTACTCTCAGCTACACTACCTCAATCACCACCACCGAGACCCCCTCACACAGTACTCTCAGCTTCACTTCTTCAATCACCACCACTGAGACCACCTCACACAGTACTCCCAGCTTCACTTCCTCAATCACCACCTCTGAGATGCCCTCACACAGTACTCCCAGCTTCACTTCTTCGATCACCACCACTGAGAACGCCACACACAGTACTCCCAACTTCACTTCTTCAATCACCACCACCGAGACCACATCCCACAGTACTCCCAGCTTCACTTCTTTG"), - new RnaEdit(1595, 1594, "AGGTGGGGGACCACCGAGACCACATCCTACAGTACTCCCAGCTTCACTTCTTCAAATACCATCACTGAGACCACCTCACACAGTACTCCCAGCTACATTACCTCAATCACCACCACCGAGACCCCCTCAAGCAGTACTCCCAGCTTCAGTTCTTCGATCACCACCACTGAGACCACATCCCACAGTACTCCCGGCTTCACTTCTTCAATCACCACCACTGAGACTACATCCCACAGTACTCCCAGCTTCACTTCTTCGATCACCACCACTGAGACCACCTCACATGATACTCCCAGCTTCACTTCTTCAATCACCACCAGTGAGACCCCCTCACACAGTACTCCCAGCTCCACTTCTTTAATCACCACCACCAAGACCACCTCACACAGT"), + new RnaEdit(1568, 1567, + "TCGATCACCACCACCGAGACCACATCCCACAATACTCCCAGCCTCACTTCTTCAATCACCACCACCAAGACCACCTCACACAGTACTCCCAGCTACACTTCTTTGATCACCACAACCACCACCACCTCACACAGTACTCCCAGCTTCACTTCTTCCATCACCACCACTGAGACCACATCCCACAATACTCCCAGCTTGACTTCTTCGATCACAACCACCGAGACCACATCCCATAGTACTCCCAGCTTCACTTCTTCGATCACCACCGAGACCACATCCCACAGTACTCCCAGCTTCACTTCATTGATCACCATCACCGAGATCACCTCACACAGTACTCTCAGCTACACTACCTCAATCACCACCACCGAGACCCCCTCACACAGTACTCTCAGCTTCACTTCTTCAATCACCACCACTGAGACCACCTCACACAGTACTCCCAGCTTCACTTCCTCAATCACCACCTCTGAGATGCCCTCACACAGTACTCCCAGCTTCACTTCTTCGATCACCACCACTGAGAACGCCACACACAGTACTCCCAACTTCACTTCTTCAATCACCACCACCGAGACCACATCCCACAGTACTCCCAGCTTCACTTCTTTG"), + new RnaEdit(1595, 1594, + "AGGTGGGGGACCACCGAGACCACATCCTACAGTACTCCCAGCTTCACTTCTTCAAATACCATCACTGAGACCACCTCACACAGTACTCCCAGCTACATTACCTCAATCACCACCACCGAGACCCCCTCAAGCAGTACTCCCAGCTTCAGTTCTTCGATCACCACCACTGAGACCACATCCCACAGTACTCCCGGCTTCACTTCTTCAATCACCACCACTGAGACTACATCCCACAGTACTCCCAGCTTCACTTCTTCGATCACCACCACTGAGACCACCTCACATGATACTCCCAGCTTCACTTCTTCAATCACCACCAGTGAGACCCCCTCACACAGTACTCCCAGCTCCACTTCTTTAATCACCACCACCAAGACCACCTCACACAGT"), new RnaEdit(1627, 1627, "G"), new RnaEdit(1650, 1650, "A"), new RnaEdit(1702, 1702, "C"), @@ -653,13 +704,135 @@ public void RnaEdits_big_test() new RnaEdit(5805, 5805, "T"), new RnaEdit(5819, 5819, "C") }; - const byte startExonPhase = 0; + + const byte startExonPhase = 0; const bool onReverseStrand = false; - var codingSequence = new CodingSequence(genomicSeq, codingRegion, regions, onReverseStrand, startExonPhase, rnaEdits); + var codingSequence = new CodingSequence(genomicSeq, codingRegion, regions, onReverseStrand, startExonPhase, + rnaEdits); - const string expectedCodingSeq = "ATGCAGCTGTTGGGGCTCCTCGGCCTCCTCTGGATGCTCAAGGCCTCCCCGTGGGCCACAGGAACTTTATCCACGGCCACATCCATCTCTCAAGTGCCTTTCCCCAGAGCAGAAGCAGCCAGCGCTGTGCTCAGCAATTCTCCACACTCCAGAGACCTGGCTGGGTGGCCACTTGGTGTCCCCCAGCTCGCCTCTCCTGCTCCTGGCCACAGGGAAAATGCACCTATGACACTCACTACCTCCCCCCATGACACACTCATCTCTGAAACATTGCTCAACTCTCCAGTCAGTTCCAACACCTCAACCACCCCGACGTCCAAGTTTGCCTTCAAGGTTGAAACCACTCCACCCACCGTGTTGGTCTATTCAGCCACCACTGAGTGCGTGTATCCAACGAGCTTTATAATCACCATCTCCCACCCCACCTCCATCTGTGTGACCACGACGCAGGTGGCCTTCACCAGCTCTTACACCTCGACTCCCGTGACACAGAAGCCAGTGACCACCGTCACCAGTACTTACTCTATGACCACTACTGAGAAAGGAACGTCAGCCATGACATCTTCTCCCTCTACCACCACTGCAAGGGAAACTCCCATAGTGACAGTGACACCCTCCTCTGTGTCAGCCACAGACACAACCTTCCACACTACAATCTCGTCTACAACTAGAACCACAGAAAGGACTCCCCTGCCCACTGGAAGCATCCATACAACCACGTCCCCAACCCCAGTATTTACTACTCTCAAAACAGCAGTGACTTCCACTTCCCCCATCACTTCTTCAATCACTTCCACAAATACAGTGACTTCTATGACAACGACCGCCTCCCAGCCCACAGCCACTAATACATTGTCATCACCCACTAGGACCATTTTATCTTCCACACCTGTCCTGAGCACAGAAACAATCACCAGTGGTATCACAAACACCACCCCCCTATCCACCTTGGTGACCACACTCCCCACTACCATCAGCAGGTCTACACCTACATCTGAGACCACCTACACTACTTCTCCCACCAGCACTGTCACAGACTCCACTACCAAAATCGCCTACTCCACAAGTATGACAGGTACATTGTCCACAGAGACTTCTCTCCCACCCACCTCTTCCTCTCTCCCAACCACAGAAACAGCCACGACTCCTATGACAAACTTGGTAACCACCACCACTGAGATCTCCTCCCACAGTACTCCCAGCTTCTCTTCATCAACCATCTACTCCACAGTCAGCACATCCACAACTGCCATCTCCTCACTTCCCCCTACCTCAGGTACTATGGTGACTTCCACAACCATGACCCCATCTTCTCTGAGTACAGACATCCCTTTCACAACACCAACAACTATCACCCACCATTCTGTGGGCTCTACCGGTTTCCTGACTACAGCAACAGACCTCACATCAACATTCACGGTTTCCAGTTCCTCAGCAATGTCCACGAGTGTCATTCCATCTTCCCCCAGCATTCAGAATACAGAAACCTCATCCCTTGTCAGCATGACCTCTGCCACTACTCCCAATGTGAGACCAACTTTTGTAAGTACACTCAGCACTCCTACAAGTTCCCTCCTGACGACCTTCCCAGCAACATATTCATTTTCATCTTCCATGTCTGCCAGCAGTGCTGGGACCACTCACACAGAGAGTATCTCCTCACCTCCAGCCAGCACCAGTACACTCCACACAACAGCTGAATCCACCCTGGCACCCACTACCACCACCTCATTCACAACTTCCACAACTATGGAACCACCTTCAACCACTGCAGCAACTACAGGAACAGGTCAGACCACCTTCACCAGCTCTACAGCCACATTTCCTGAGACCACCACACCGACTCCTACAACTGACATGTCCACAGAATCTCTCACAACAGCCATGACTTCTCCTCCCATCACTTCATCAGTCACTTCCACAAATACAGTGACTTCTATGACAACTACGACCTCTCCTCCCACAACCACCAATTCTTTTACATCACTGACCAGTATGCCTCTGTCTTCTACACCTGTCCCAAGCACAGAAGTAGTCACCAGTGGCACCATAAACACAATCCCTCCATCTATCTTGGTGACCACACTCCCCACTCCAAATGCTTCATCTATGACTACATCTGAGACCACCTATCCTAATTCTCCGACTGGTCCTGGTACAAACTCCACGACGGAAATCACCTATCCCACCACTATGACAGAGACATCATCCACTGCCACCTCTCTTCCACCCACCTCTCCCTTGGTCTCAACTGCAAAAACAGCCAAAACTCCTACCACAAACTTGGTAACCACCACCACCAAGACCACCTCACATAGTACCACCAGCTTCACTTCTTCAACCGTCTACTCCACAGCCAGCACATACACAACTGCCATCACCTCAGTTCCCACTACGTTGGGTACCATGGTAACTTCTACATCCATGATCTCATCTACTGTGAGTACAGGTATCCCTACCTCACAACCAACAACCATCACTCCCTCATCCGTGGGCATCAGTGGTTCATTACCTATGATGACAGACCTCACCTCAGTGTACACAGTCTCTAACATGTCTGCAAGGCCAACAACTGTCATTCCCTCATCTCCCACTGTCCAGAATACAGAAATCTCAATCTCTGTTAGCATGACGTCTGCTACCACTCCCAGTGGAGGACCAACTTTCACAAGTACTGAGAACACTCCAACAAGGTCCCTCCTGACAAGCTTTCCAATGACACATTCATTCTCTTCTTCTATGTCTGAAAGTAGTGCTGGGACCACTCACACAGAGAGTATCTCCTCACCTCGAGGCACCACCAGTACACTCCACACAACAGTTGAATCCACCCCATCACCCACTACCACCACCTCATTTACCACATCCACAATGATGGAACCACCTTCATCCACTGTATCAACTACAGGCAGAGGTCAGACCACCTTTCCCAGCTCTACAGCCACATTCCCTGAGACCACTACACTGACTCCTACAACTGACATTTCTACAGTATCTCTCACAACAGCCATGACTTCTCCTCCCCCCGTCAGTTCTTCAATCACTCCCACCAATACAATGACTTCTATGAGAACTACAACCTATTGGCCCACAGCCACTAATACATTATCACCACTCACCAGTAGCATTTTATCTTCTACACCTGTCCCAAGCACAGAAATGATCACCAGTCATACCACAAACACCACCCCTCTATCCACCTTGGTGACTACACTCCTCACTACCATCACCAGATCTACACCTACATCTGAGACCACCTACCCTACTTCTCCCACCAGCATTGTCTCAGACTCCACGACTGAAATCACCTATTCCACAAGTATAACAGGTACATTGTCCACTGCCACTACTCTCCCACCCACCTCTTCCTCTCTCCCAACCACAGAAACAGCCACGATGACTCCTACCACAACCTTGATAACCACCACCCCTAATACCACCTCCCTTAGTACCCCCAGCTTCACTTCTTCAACCATCTACTCCACAGTCAGCACATCCACAACTGCCATCTCCTCAGCTTCCCCTACCTCAGGTACCATGGTAACTTCCACAACCATGACCCCATCTTCTCTGAGTACAGACACCCCTTCCACAACACCAACAACTATCACCTACCCTTCTGTGGGCTCTACCGGTTTCCTGACTACAGCAACAGACCTCACATCAACATTCACTGTTTCCAGTTCCTCAGCAATGTCCACAAGTGTCATTCCATCTTCCCCCAGCATCCAGAATACAGAAACCTCATCCCTTGTCAGCATGACCTCTGCCACCACTCCCAGTTTGAGACCAACTATCACAAGTACTGACAGCACTCTAACAAGTTCCCTCCTGACGACCTTCCCAAGTACATATTCATTTTCATCTTCCATGTCTGCCAGCAGTGCAGGGACCACTCACACAGAGACTATTTCCTCACTTCCAGCCAGCACCAATACAATCCACACAACAGCTGAATCCGCCCTGGCACCCACTACCACCACCTCATTCACCACATCCCCAACGATGGAACCACCTTCAACCACTGTAGCGACTACAGGCACAGGTCAGACCACCTTCCCCAGCTCTACAGCCACATTCCTTGAGACCACCACACTGACTCCTACAACTGACTTTTCTACAGAATCTCTCACAACAGCCATGACTTCTACTCCCCCCATCACTTCTTCAATCACTCCCACCGATACAATGACTTCTATGAGAACTACGACCTCTTGGCCCACAGCCACTAATACGTTATCACCACTCACCAGTAGCATTTTATCTTCTACACCTGTCCCAAGCACAGAGGTGACCACCAGTCATACCACAAACACCAATCCTGTATCCACGTTGGTGACTACACTCCCCATTACCATCACCAGGTCTACACTTACATCTGAGACCGCCTACCCTAGTTCTCCCACAAGCACTGTCACAGAGTCCACAACTGAAATCACCTATCCCACCACTATGACAGAGACATCATCTACTGCCACCTCTCTTCCACCCACCTCTTCCTTGGTCTCAACCGCAGAAACAGCCAAAACTCCTACCACAAACTTGGTAACCACCACCACCAAGACCACCTCACATAGTACCACCAGCTTCACTTCTTCAACCATCTACTCCACAGCCAGCACACCCACCACTGCCATCACCTCAGTTCCCACTACCTTGGGTACCATGGTGACTTCTACATCCATGATCCCATCTACTGTGAGTACAGGTATCCCTACCTCACAACCAACAACTATTACTCCCTCATCCGTGGGCATCAGTGGTTCATTACCTATGATGACAGACCTCACCTCAGTGTACACAGTCTCCAGCATGTCTGCAAGGCCAACAAGTGTCATTCCTTCATCTCCCACTGTCCAGAATACAGAAACCTCAATCTTTGTTAGCATGATGTCTGCTACCACTCCCAGTGGAGGACCAACTTTCACAAGTACTGAGAACACTCCAACAAGGTCCCTCCTGACAAGCTTTCCAGTGACACATTCATTTTCCTCTTCCATGTCTGCCAGCAGTGTAGGGACCACTCACACCCAGAGTATCTCCTCACCCCCAGCCATCACCAGTACACTCCACACAACAGCTGAATCCACCCCATCACCTACAACCACCATGTCATTCACAACATTTACAAAGATGGAAACACCTTCATCCACTGTAGCAACTACAGGCACAGGTCAGACTACATTCACCAGTTCAACAGCCACATCCCCTAAGACCACCACACTGACTCCTACCTCTGACATTTCCACAGGATCTTTCAAAACAGCCGTGAGTTCTACTCCCCCCATCACTTCTTCAATCACCTCCACATATACGGTGACTTCGATGACAACTACCACCCCTCTAGGGCCCACAGCCACTAATACGTTACCATCATTTACCAGTAGCGTTTCATCTTCTACGCCTGTCCCAAGTACAGAAGCGATCACCAGTGGTACCACAAACACCACCCCTCTATCTACATTGGTGACCACATTCTCCAATTCCGACACCAGTTCTACACCTACATCTGAGACCACCTACCCTACTTCTCTTACTAGTGCTCTCACAGATTCCACGACCAGAACCACCTATTCCACCAATATGACAGGTACATTGTCCACTGTGACCTCTCTTCGACCCACCTCTTCCTCTCTCCTCACCACAGTAACAGCCACAGTTCCAACAACAAACTTGGTAACCACGACCACCAAGATCACCTCACACAGTACTCCTAGCTTCACTTCTTCAATCGCAACCACCGAGACCCCCTCACACAGTACTCCCAGATTCACTTCTTCAATCACCACTACCGAGACCCCCTCACACAGTACTCCCAGATTCACTTCTTCAATCACCAATACCAAGACCACCTCACACAGCTCTCCCAGCTTCACTTCTTCGATCACCACCACCGAGACCACATCCCACAATACTCCCAGCCTCACTTCTTCAATCACCACCACCAAGACCACCTCACACAGTACTCCCAGCTACACTTCTTTGATCACCACAACCACCACCACCTCACACAGTACTCCCAGCTTCACTTCTTCCATCACCACCACTGAGACCACATCCCACAATACTCCCAGCTTGACTTCTTCGATCACAACCACCGAGACCACATCCCATAGTACTCCCAGCTTCACTTCTTCGATCACCACCGAGACCACATCCCACAGTACTCCCAGCTTCACTTCATTGATCACCATCACCGAGATCACCTCACACAGTACTCTCAGCTACACTACCTCAATCACCACCACCGAGACCCCCTCACACAGTACTCTCAGCTTCACTTCTTCAATCACCACCACTGAGACCACCTCACACAGTACTCCCAGCTTCACTTCCTCAATCACCACCTCTGAGATGCCCTCACACAGTACTCCCAGCTTCACTTCTTCGATCACCACCACTGAGAACGCCACACACAGTACTCCCAACTTCACTTCTTCAATCACCACCACCGAGACCACATCCCACAGTACTCCCAGCTTCACTTCTTTGATCACCACCACGGAGACCACCTCACACAGGTGGGGGACCACCGAGACCACATCCTACAGTACTCCCAGCTTCACTTCTTCAAATACCATCACTGAGACCACCTCACACAGTACTCCCAGCTACATTACCTCAATCACCACCACCGAGACCCCCTCAAGCAGTACTCCCAGCTTCAGTTCTTCGATCACCACCACTGAGACCACATCCCACAGTACTCCCGGCTTCACTTCTTCAATCACCACCACTGAGACTACATCCCACAGTACTCCCAGCTTCACTTCTTCGATCACCACCACTGAGACCACCTCACATGATACTCCCAGCTTCACTTCTTCAATCACCACCAGTGAGACCCCCTCACACAGTACTCCCAGCTCCACTTCTTTAATCACCACCACCAAGACCACCTCACACAGTACTCCCAGCTTCACTTCTTCGATCACCACCACGGAGACCACCTCACACAGTGCTCACAGCTTCACTTCTTCGATCACCACCACCGAGACCACCTCACACAATACTCGCAGCTTCACTTCTTCGATCACCACCACCGAGACCAACTCTCACAGTACTACCAGCTTCACTTCTTCGATCACCACCACCGAGACCACCTCACACAGTACTCCCAGCTTCAGTTCTTCAATCACCACCACTGAGACCCCCTTACACAGTACTCCTGGCCTCACTTCGTGGGTCACCACCACCAAGACCACCTCACACATTACTCCTGGCCTCACTTCTTCAATCACCACCACTGAGACTACCTCACACAGTACTCCTGGCTTCACTTCTTCAATCACCACCACTGAGACCACCTCAGAGAGTACTCCCAGCCTCAGTTCTTCAACCATCTACTCCACAGTCAGCACATCCACAACTGCCATCACCTCACATTTTACTACCTCAGAGACTGCGGTGACTCCCACACCTGTAACCCCATCTTCTCTGAGTACAGACATCCCGACCACAAGCCTACGAACTCTCACCCCTTCGTCTGTGGGCACCAGCACTTCATTGACTACAACCACAGACTTTCCCTCTATACCCACTGATATCAGTACCTTACCAACTCGAACACACATCATTTCATCTTCTCCCTCCATCCAAAGTACAGAAACCTCATCCCTTGTGGGCACCACCTCTCCCACCATGTCCACTGTGAGAATGACCCTCAGAATTACTGAGAACACCCCAATCAGTTCCTTTAGCACAAGTATTGTTGTTATACCTGAAACCCCAACACAGACCCCTCCTGTACTGACGTCAGCCACTGGGACCCAAACATCTCCTGCACCTACTACTGTCACCTTTGGAAGTACGGATTCCTCCACGTCCACTCTTCATACTCTTACTCCATCAACAGCCTTGAGCACGATCGTGTCAACATCACAGGTTCCTATTCCTAGCACACATTCCTCCACCCTTCAAACAACTCCTTCTACTCCCTCATTGCAAACTTCACTCACATCTACAAGTGAGTTCACTACAGAATCTTTCACTAGGGGAAGTACGTCTACAAATGCAATCTTGACTTCTTTTAGTACCATCATCTGGTCCTCAACACCCACTATTATCATGTCCTCTTCTCCATCTTCTGCCAGCATAACTCCAGTGTTTTCCACTACCATTCATTCTGTTCCTTCTTCACCATACATTTTCAGTACAGAAAATGTGGGCTCCGCTTCTATCACAGGCTTTCCTAGTCTCTCTTCCTCTGCAACTACCAGCACTTCTTCAACCAGCTCCTCTCTGACCACAGCTCTCACTGAAATAACCCCCTTTTCTTATATTTCCCTTCCCTCCACCACACCCTGTCCAGGAACTATAACAATTACCATAGTCCCTGCCTCCCCCACTGATCCATGTGTTGAAATGGATCCCAGCACTGAAGCTACTTCTCCTCCCACCACCCCATTAACAGTCTTTCCCTTTACTACCGAAATGGTCACCTGTCCTACCTCCATCAGTATCCAAACTACTCTTACTACATATATGGACACTTCTTCCATGATGCCAGAAAGTGAGTCCAGCATCTCACCCAATGCTTCCAGTTCCACTGGCACTGGGACTGTACCCACAAACACAGTTTTCACAAGTACTCGACTGCCCACCAGTGAGACCTGGCTGAGCAACAGTTCTGTGATCCCCCTACCTCTTCCTGGCGTCTCTACCATCCCGCTCACCATGAAACCAAGCAGTAGCCTCCCGACCATCCTGAGGACTTCAAGCAAGTCAACACACCCCTCCCCACCCACCACTAGGACTTCAGAGACACCAGTGGCCACTACCCAGACTCCTACCACCCTTACATCACGCAGGACAACTCGCATCACTTCTCAGATGACCACACAGTCCACGTTGACCACCACTGCAGGCACCTGTGACAATGGTGGCACCTGGGAACAGGGCCAGTGTGCTTGCCTTCCGGGGTTTTCTGGGGACCGCTGTCAGCTCCAGACCAGATGCCAGAATGGGGGTCAGTGGGATGGCCTCAAATGCCAGTGCCCCAGCACCTTCTATGGTTCCAGTTGTGAGTTTGCTGTGGAACAGGTGGATCTAGATGTAGTGGAGACCGAGGTGGGCATGGAAGTGTCTGTGGATCAGCAGTTCTCGCCGGACCTCAATGACAACACTTCCCAGGCCTACAGGGATTTCAACAAGACCTTCTGGAATCAGATGCAGAAGATTTTTGCAGACATGCAGGGCTTCACCTTCAAGGGTGTGGAGATCCTGTCCCTGAGGAATGGCAGCATCGTGGTGGACTACCTGGTCCTGCTGGAGATGCCCTTCAGCCCCCAGCTGGAGAGCGAGTATGAGCAGGTGAAGACCACGCTGAAGGAGGGGCTGCAGAACGCCAGCCAGGATGTGAACAGCTGCCAGGACTCCCAGACCCTGTGTTTTAAGCCTGACTCCATCAAGGTGAACAACAACAGCAAGACAGAGCTGACCCCGGCAGCCATCTGCCGCCGCGCCGCTCCCACGGGCTATGAAGAGTTCTACTTCCCCTTGGTGGAGGCCACCCGGCTCCGCTGTGTCACCAAATGCACGTCGGGGGTGGACAACGCCATCGACTGTCACCAGGGCCAGTGCGTTCTGGAGACGAGCGGTCCCACGTGTCGCTGCTACTCCACCGACACGCACTGGTTCTCTGGCCCGCGCTGCGAGGTGGCCGTCCACTGGAGGGCGCTGGTCGGGGGCCTGACGGCCGGCGCCGCGCTGCTGGTGCTGCTGCTGCTGGCGCTGGGCGTCCGGGCGGTGCGCTCCGGATGGTGGGGCGGCCAGCGCCGAGGCCGGTCCTGGGACCAGGACAGGAAATGGTTCGAGACCTGGGATGAGGAAGTCGTGGGCACTTTTTCAAACTGGGGTTTCGAGGACGACGGAACAGACAAGGATACAAATTTCTATGTGGCCTTGGAGAACGTGGACACCACTATGAAGGTGCACATCAAGAGACCCGAGATGACCTCGTCCTCAGTGTGA"; + var expectedCodingSeq = + "ATGCAGCTGTTGGGGCTCCTCGGCCTCCTCTGGATGCTCAAGGCCTCCCCGTGGGCCACAGGAACTTTATCCACGGCCACATCCATCTCTCAAGTGCCTTTCCCCAGAGCAGAAGCAGCCAGCGCTGTGCTCAGCAATTCTCCACACTCCAGAGACCTGGCTGGGTGGCCACTTGGTGTCCCCCAGCTCGCCTCTCCTGCTCCTGGCCACAGGGAAAATGCACCTATGACACTCACTACCTCCCCCCATGACACACTCATCTCTGAAACATTGCTCAACTCTCCAGTCAGTTCCAACACCTCAACCACCCCGACGTCCAAGTTTGCCTTCAAGGTTGAAACCACTCCACCCACCGTGTTGGTCTATTCAGCCACCACTGAGTGCGTGTATCCAACGAGCTTTATAATCACCATCTCCCACCCCACCTCCATCTGTGTGACCACGACGCAGGTGGCCTTCACCAGCTCTTACACCTCGACTCCCGTGACACAGAAGCCAGTGACCACCGTCACCAGTACTTACTCTATGACCACTACTGAGAAAGGAACGTCAGCCATGACATCTTCTCCCTCTACCACCACTGCAAGGGAAACTCCCATAGTGACAGTGACACCCTCCTCTGTGTCAGCCACAGACACAACCTTCCACACTACAATCTCGTCTACAACTAGAACCACAGAAAGGACTCCCCTGCCCACTGGAAGCATCCATACAACCACGTCCCCAACCCCAGTATTTACTACTCTCAAAACAGCAGTGACTTCCACTTCCCCCATCACTTCTTCAATCACTTCCACAAATACAGTGACTTCTATGACAACGACCGCCTCCCAGCCCACAGCCACTAATACATTGTCATCACCCACTAGGACCATTTTATCTTCCACACCTGTCCTGAGCACAGAAACAATCACCAGTGGTATCACAAACACCACCCCCCTATCCACCTTGGTGACCACACTCCCCACTACCATCAGCAGGTCTACACCTACATCTGAGACCACCTACACTACTTCTCCCACCAGCACTGTCACAGACTCCACTACCAAAATCGCCTACTCCACAAGTATGACAGGTACATTGTCCACAGAGACTTCTCTCCCACCCACCTCTTCCTCTCTCCCAACCACAGAAACAGCCACGACTCCTATGACAAACTTGGTAACCACCACCACTGAGATCTCCTCCCACAGTACTCCCAGCTTCTCTTCATCAACCATCTACTCCACAGTCAGCACATCCACAACTGCCATCTCCTCACTTCCCCCTACCTCAGGTACTATGGTGACTTCCACAACCATGACCCCATCTTCTCTGAGTACAGACATCCCTTTCACAACACCAACAACTATCACCCACCATTCTGTGGGCTCTACCGGTTTCCTGACTACAGCAACAGACCTCACATCAACATTCACGGTTTCCAGTTCCTCAGCAATGTCCACGAGTGTCATTCCATCTTCCCCCAGCATTCAGAATACAGAAACCTCATCCCTTGTCAGCATGACCTCTGCCACTACTCCCAATGTGAGACCAACTTTTGTAAGTACACTCAGCACTCCTACAAGTTCCCTCCTGACGACCTTCCCAGCAACATATTCATTTTCATCTTCCATGTCTGCCAGCAGTGCTGGGACCACTCACACAGAGAGTATCTCCTCACCTCCAGCCAGCACCAGTACACTCCACACAACAGCTGAATCCACCCTGGCACCCACTACCACCACCTCATTCACAACTTCCACAACTATGGAACCACCTTCAACCACTGCAGCAACTACAGGAACAGGTCAGACCACCTTCACCAGCTCTACAGCCACATTTCCTGAGACCACCACACCGACTCCTACAACTGACATGTCCACAGAATCTCTCACAACAGCCATGACTTCTCCTCCCATCACTTCATCAGTCACTTCCACAAATACAGTGACTTCTATGACAACTACGACCTCTCCTCCCACAACCACCAATTCTTTTACATCACTGACCAGTATGCCTCTGTCTTCTACACCTGTCCCAAGCACAGAAGTAGTCACCAGTGGCACCATAAACACAATCCCTCCATCTATCTTGGTGACCACACTCCCCACTCCAAATGCTTCATCTATGACTACATCTGAGACCACCTATCCTAATTCTCCGACTGGTCCTGGTACAAACTCCACGACGGAAATCACCTATCCCACCACTATGACAGAGACATCATCCACTGCCACCTCTCTTCCACCCACCTCTCCCTTGGTCTCAACTGCAAAAACAGCCAAAACTCCTACCACAAACTTGGTAACCACCACCACCAAGACCACCTCACATAGTACCACCAGCTTCACTTCTTCAACCGTCTACTCCACAGCCAGCACATACACAACTGCCATCACCTCAGTTCCCACTACGTTGGGTACCATGGTAACTTCTACATCCATGATCTCATCTACTGTGAGTACAGGTATCCCTACCTCACAACCAACAACCATCACTCCCTCATCCGTGGGCATCAGTGGTTCATTACCTATGATGACAGACCTCACCTCAGTGTACACAGTCTCTAACATGTCTGCAAGGCCAACAACTGTCATTCCCTCATCTCCCACTGTCCAGAATACAGAAATCTCAATCTCTGTTAGCATGACGTCTGCTACCACTCCCAGTGGAGGACCAACTTTCACAAGTACTGAGAACACTCCAACAAGGTCCCTCCTGACAAGCTTTCCAATGACACATTCATTCTCTTCTTCTATGTCTGAAAGTAGTGCTGGGACCACTCACACAGAGAGTATCTCCTCACCTCGAGGCACCACCAGTACACTCCACACAACAGTTGAATCCACCCCATCACCCACTACCACCACCTCATTTACCACATCCACAATGATGGAACCACCTTCATCCACTGTATCAACTACAGGCAGAGGTCAGACCACCTTTCCCAGCTCTACAGCCACATTCCCTGAGACCACTACACTGACTCCTACAACTGACATTTCTACAGTATCTCTCACAACAGCCATGACTTCTCCTCCCCCCGTCAGTTCTTCAATCACTCCCACCAATACAATGACTTCTATGAGAACTACAACCTATTGGCCCACAGCCACTAATACATTATCACCACTCACCAGTAGCATTTTATCTTCTACACCTGTCCCAAGCACAGAAATGATCACCAGTCATACCACAAACACCACCCCTCTATCCACCTTGGTGACTACACTCCTCACTACCATCACCAGATCTACACCTACATCTGAGACCACCTACCCTACTTCTCCCACCAGCATTGTCTCAGACTCCACGACTGAAATCACCTATTCCACAAGTATAACAGGTACATTGTCCACTGCCACTACTCTCCCACCCACCTCTTCCTCTCTCCCAACCACAGAAACAGCCACGATGACTCCTACCACAACCTTGATAACCACCACCCCTAATACCACCTCCCTTAGTACCCCCAGCTTCACTTCTTCAACCATCTACTCCACAGTCAGCACATCCACAACTGCCATCTCCTCAGCTTCCCCTACCTCAGGTACCATGGTAACTTCCACAACCATGACCCCATCTTCTCTGAGTACAGACACCCCTTCCACAACACCAACAACTATCACCTACCCTTCTGTGGGCTCTACCGGTTTCCTGACTACAGCAACAGACCTCACATCAACATTCACTGTTTCCAGTTCCTCAGCAATGTCCACAAGTGTCATTCCATCTTCCCCCAGCATCCAGAATACAGAAACCTCATCCCTTGTCAGCATGACCTCTGCCACCACTCCCAGTTTGAGACCAACTATCACAAGTACTGACAGCACTCTAACAAGTTCCCTCCTGACGACCTTCCCAAGTACATATTCATTTTCATCTTCCATGTCTGCCAGCAGTGCAGGGACCACTCACACAGAGACTATTTCCTCACTTCCAGCCAGCACCAATACAATCCACACAACAGCTGAATCCGCCCTGGCACCCACTACCACCACCTCATTCACCACATCCCCAACGATGGAACCACCTTCAACCACTGTAGCGACTACAGGCACAGGTCAGACCACCTTCCCCAGCTCTACAGCCACATTCCTTGAGACCACCACACTGACTCCTACAACTGACTTTTCTACAGAATCTCTCACAACAGCCATGACTTCTACTCCCCCCATCACTTCTTCAATCACTCCCACCGATACAATGACTTCTATGAGAACTACGACCTCTTGGCCCACAGCCACTAATACGTTATCACCACTCACCAGTAGCATTTTATCTTCTACACCTGTCCCAAGCACAGAGGTGACCACCAGTCATACCACAAACACCAATCCTGTATCCACGTTGGTGACTACACTCCCCATTACCATCACCAGGTCTACACTTACATCTGAGACCGCCTACCCTAGTTCTCCCACAAGCACTGTCACAGAGTCCACAACTGAAATCACCTATCCCACCACTATGACAGAGACATCATCTACTGCCACCTCTCTTCCACCCACCTCTTCCTTGGTCTCAACCGCAGAAACAGCCAAAACTCCTACCACAAACTTGGTAACCACCACCACCAAGACCACCTCACATAGTACCACCAGCTTCACTTCTTCAACCATCTACTCCACAGCCAGCACACCCACCACTGCCATCACCTCAGTTCCCACTACCTTGGGTACCATGGTGACTTCTACATCCATGATCCCATCTACTGTGAGTACAGGTATCCCTACCTCACAACCAACAACTATTACTCCCTCATCCGTGGGCATCAGTGGTTCATTACCTATGATGACAGACCTCACCTCAGTGTACACAGTCTCCAGCATGTCTGCAAGGCCAACAAGTGTCATTCCTTCATCTCCCACTGTCCAGAATACAGAAACCTCAATCTTTGTTAGCATGATGTCTGCTACCACTCCCAGTGGAGGACCAACTTTCACAAGTACTGAGAACACTCCAACAAGGTCCCTCCTGACAAGCTTTCCAGTGACACATTCATTTTCCTCTTCCATGTCTGCCAGCAGTGTAGGGACCACTCACACCCAGAGTATCTCCTCACCCCCAGCCATCACCAGTACACTCCACACAACAGCTGAATCCACCCCATCACCTACAACCACCATGTCATTCACAACATTTACAAAGATGGAAACACCTTCATCCACTGTAGCAACTACAGGCACAGGTCAGACTACATTCACCAGTTCAACAGCCACATCCCCTAAGACCACCACACTGACTCCTACCTCTGACATTTCCACAGGATCTTTCAAAACAGCCGTGAGTTCTACTCCCCCCATCACTTCTTCAATCACCTCCACATATACGGTGACTTCGATGACAACTACCACCCCTCTAGGGCCCACAGCCACTAATACGTTACCATCATTTACCAGTAGCGTTTCATCTTCTACGCCTGTCCCAAGTACAGAAGCGATCACCAGTGGTACCACAAACACCACCCCTCTATCTACATTGGTGACCACATTCTCCAATTCCGACACCAGTTCTACACCTACATCTGAGACCACCTACCCTACTTCTCTTACTAGTGCTCTCACAGATTCCACGACCAGAACCACCTATTCCACCAATATGACAGGTACATTGTCCACTGTGACCTCTCTTCGACCCACCTCTTCCTCTCTCCTCACCACAGTAACAGCCACAGTTCCAACAACAAACTTGGTAACCACGACCACCAAGATCACCTCACACAGTACTCCTAGCTTCACTTCTTCAATCGCAACCACCGAGACCCCCTCACACAGTACTCCCAGATTCACTTCTTCAATCACCACTACCGAGACCCCCTCACACAGTACTCCCAGATTCACTTCTTCAATCACCAATACCAAGACCACCTCACACAGCTCTCCCAGCTTCACTTCTTCGATCACCACCACCGAGACCACATCCCACAATACTCCCAGCCTCACTTCTTCAATCACCACCACCAAGACCACCTCACACAGTACTCCCAGCTACACTTCTTTGATCACCACAACCACCACCACCTCACACAGTACTCCCAGCTTCACTTCTTCCATCACCACCACTGAGACCACATCCCACAATACTCCCAGCTTGACTTCTTCGATCACAACCACCGAGACCACATCCCATAGTACTCCCAGCTTCACTTCTTCGATCACCACCGAGACCACATCCCACAGTACTCCCAGCTTCACTTCATTGATCACCATCACCGAGATCACCTCACACAGTACTCTCAGCTACACTACCTCAATCACCACCACCGAGACCCCCTCACACAGTACTCTCAGCTTCACTTCTTCAATCACCACCACTGAGACCACCTCACACAGTACTCCCAGCTTCACTTCCTCAATCACCACCTCTGAGATGCCCTCACACAGTACTCCCAGCTTCACTTCTTCGATCACCACCACTGAGAACGCCACACACAGTACTCCCAACTTCACTTCTTCAATCACCACCACCGAGACCACATCCCACAGTACTCCCAGCTTCACTTCTTTGATCACCACCACGGAGACCACCTCACACAGGTGGGGGACCACCGAGACCACATCCTACAGTACTCCCAGCTTCACTTCTTCAAATACCATCACTGAGACCACCTCACACAGTACTCCCAGCTACATTACCTCAATCACCACCACCGAGACCCCCTCAAGCAGTACTCCCAGCTTCAGTTCTTCGATCACCACCACTGAGACCACATCCCACAGTACTCCCGGCTTCACTTCTTCAATCACCACCACTGAGACTACATCCCACAGTACTCCCAGCTTCACTTCTTCGATCACCACCACTGAGACCACCTCACATGATACTCCCAGCTTCACTTCTTCAATCACCACCAGTGAGACCCCCTCACACAGTACTCCCAGCTCCACTTCTTTAATCACCACCACCAAGACCACCTCACACAGTACTCCCAGCTTCACTTCTTCGATCACCACCACGGAGACCACCTCACACAGTGCTCACAGCTTCACTTCTTCGATCACCACCACCGAGACCACCTCACACAATACTCGCAGCTTCACTTCTTCGATCACCACCACCGAGACCAACTCTCACAGTACTACCAGCTTCACTTCTTCGATCACCACCACCGAGACCACCTCACACAGTACTCCCAGCTTCAGTTCTTCAATCACCACCACTGAGACCCCCTTACACAGTACTCCTGGCCTCACTTCGTGGGTCACCACCACCAAGACCACCTCACACATTACTCCTGGCCTCACTTCTTCAATCACCACCACTGAGACTACCTCACACAGTACTCCTGGCTTCACTTCTTCAATCACCACCACTGAGACCACCTCAGAGAGTACTCCCAGCCTCAGTTCTTCAACCATCTACTCCACAGTCAGCACATCCACAACTGCCATCACCTCACATTTTACTACCTCAGAGACTGCGGTGACTCCCACACCTGTAACCCCATCTTCTCTGAGTACAGACATCCCGACCACAAGCCTACGAACTCTCACCCCTTCGTCTGTGGGCACCAGCACTTCATTGACTACAACCACAGACTTTCCCTCTATACCCACTGATATCAGTACCTTACCAACTCGAACACACATCATTTCATCTTCTCCCTCCATCCAAAGTACAGAAACCTCATCCCTTGTGGGCACCACCTCTCCCACCATGTCCACTGTGAGAATGACCCTCAGAATTACTGAGAACACCCCAATCAGTTCCTTTAGCACAAGTATTGTTGTTATACCTGAAACCCCAACACAGACCCCTCCTGTACTGACGTCAGCCACTGGGACCCAAACATCTCCTGCACCTACTACTGTCACCTTTGGAAGTACGGATTCCTCCACGTCCACTCTTCATACTCTTACTCCATCAACAGCCTTGAGCACGATCGTGTCAACATCACAGGTTCCTATTCCTAGCACACATTCCTCCACCCTTCAAACAACTCCTTCTACTCCCTCATTGCAAACTTCACTCACATCTACAAGTGAGTTCACTACAGAATCTTTCACTAGGGGAAGTACGTCTACAAATGCAATCTTGACTTCTTTTAGTACCATCATCTGGTCCTCAACACCCACTATTATCATGTCCTCTTCTCCATCTTCTGCCAGCATAACTCCAGTGTTTTCCACTACCATTCATTCTGTTCCTTCTTCACCATACATTTTCAGTACAGAAAATGTGGGCTCCGCTTCTATCACAGGCTTTCCTAGTCTCTCTTCCTCTGCAACTACCAGCACTTCTTCAACCAGCTCCTCTCTGACCACAGCTCTCACTGAAATAACCCCCTTTTCTTATATTTCCCTTCCCTCCACCACACCCTGTCCAGGAACTATAACAATTACCATAGTCCCTGCCTCCCCCACTGATCCATGTGTTGAAATGGATCCCAGCACTGAAGCTACTTCTCCTCCCACCACCCCATTAACAGTCTTTCCCTTTACTACCGAAATGGTCACCTGTCCTACCTCCATCAGTATCCAAACTACTCTTACTACATATATGGACACTTCTTCCATGATGCCAGAAAGTGAGTCCAGCATCTCACCCAATGCTTCCAGTTCCACTGGCACTGGGACTGTACCCACAAACACAGTTTTCACAAGTACTCGACTGCCCACCAGTGAGACCTGGCTGAGCAACAGTTCTGTGATCCCCCTACCTCTTCCTGGCGTCTCTACCATCCCGCTCACCATGAAACCAAGCAGTAGCCTCCCGACCATCCTGAGGACTTCAAGCAAGTCAACACACCCCTCCCCACCCACCACTAGGACTTCAGAGACACCAGTGGCCACTACCCAGACTCCTACCACCCTTACATCACGCAGGACAACTCGCATCACTTCTCAGATGACCACACAGTCCACGTTGACCACCACTGCAGGCACCTGTGACAATGGTGGCACCTGGGAACAGGGCCAGTGTGCTTGCCTTCCGGGGTTTTCTGGGGACCGCTGTCAGCTCCAGACCAGATGCCAGAATGGGGGTCAGTGGGATGGCCTCAAATGCCAGTGCCCCAGCACCTTCTATGGTTCCAGTTGTGAGTTTGCTGTGGAACAGGTGGATCTAGATGTAGTGGAGACCGAGGTGGGCATGGAAGTGTCTGTGGATCAGCAGTTCTCGCCGGACCTCAATGACAACACTTCCCAGGCCTACAGGGATTTCAACAAGACCTTCTGGAATCAGATGCAGAAGATTTTTGCAGACATGCAGGGCTTCACCTTCAAGGGTGTGGAGATCCTGTCCCTGAGGAATGGCAGCATCGTGGTGGACTACCTGGTCCTGCTGGAGATGCCCTTCAGCCCCCAGCTGGAGAGCGAGTATGAGCAGGTGAAGACCACGCTGAAGGAGGGGCTGCAGAACGCCAGCCAGGATGTGAACAGCTGCCAGGACTCCCAGACCCTGTGTTTTAAGCCTGACTCCATCAAGGTGAACAACAACAGCAAGACAGAGCTGACCCCGGCAGCCATCTGCCGCCGCGCCGCTCCCACGGGCTATGAAGAGTTCTACTTCCCCTTGGTGGAGGCCACCCGGCTCCGCTGTGTCACCAAATGCACGTCGGGGGTGGACAACGCCATCGACTGTCACCAGGGCCAGTGCGTTCTGGAGACGAGCGGTCCCACGTGTCGCTGCTACTCCACCGACACGCACTGGTTCTCTGGCCCGCGCTGCGAGGTGGCCGTCCACTGGAGGGCGCTGGTCGGGGGCCTGACGGCCGGCGCCGCGCTGCTGGTGCTGCTGCTGCTGGCGCTGGGCGTCCGGGCGGTGCGCTCCGGATGGTGGGGCGGCCAGCGCCGAGGCCGGTCCTGGGACCAGGACAGGAAATGGTTCGAGACCTGGGATGAGGAAGTCGTGGGCACTTTTTCAAACTGGGGTTTCGAGGACGACGGAACAGACAAGGATACAAATTTCTATGTGGCCTTGGAGAACGTGGACACCACTATGAAGGTGCACATCAAGAGACCCGAGATGACCTCGTCCTCAGTGTGA"; Assert.Equal(expectedCodingSeq, codingSequence.GetCodingSequence()); } + + [Fact] + public void GetCodingSequence_RnaEditInsertion_StartsCds_EndsUtr() + { + // NM_001220765.1, chr7:50344378-50367353 + var genomicSeq = new SimpleSequence( + "CGCGGCGCATCCCAGCCTGGGCGGGACGCTCGGCCGCGGCGAGGCGGGCAAGCCTGGCAGGGCAGAGGGAGCCCCGGCTCCGAGGTTGCTCTTCGCACCCGAGGATCAGTCTTGGCCCCAAAGCGCGACGCACAAATCCACGTGAGTGTTTTCAAATTGAATTTCAATAGGAAAACTTGGGGTAACTGGTGAATTTAAAAAAAAAAAAACACAGTAAAGAAAAGCGGTAAGGTTGGTAGACCCTGGTGTCGCTCAGGTCCGCCTCTCTTTTCTGAGGACAGTGAGAGAGTTCACTTCTGTCAAGCGTCTGTTGCTCTGCACTGTGCCAGCAGGTGCAGGACCAGGCCGACATGGGACACTTCTGAGCAGCCCCGCTGTCACCAGGAGAGGAGTTCTAGCTCCCAACCATATTTAAATTTATGTAGACCTACATATACCCACGGAAGTCAGCCTTTATAAAGTCGTGTGTAAAGAGTTTTCCTTATATTTGAGCCGGGAGCTTTCTTTTTATACTATAAATATGATGAGATCGAGTCTGAACTTAATTTCTGCAAGAGAGGAATTATCCCGGCTTTGAAAAGTTAGTCCTTTTGCTGACCGCAGGTTTGACGCTCAAGTCACCAAACCTTCTCAGGAAAACCCTTAGTAATATTAAGGCATCAGGTTACTTGCGGTTATATTTGAAATGTATTTTAAATATTTGTCAAGCATCGCTGCTGATGCCTAAGGAACCTCGTGAGGGCTTGTTTTTCCTTCTAATTTGGAGGCATCTAATGACCGAAAACCGTAGCGATTCCATAGGGTCTGACCAGGCACAGCTTTCAAATGCAGCTTCCCTCTCTCTAGGGACTGCAGCCCACCCAGACTGAATTTCAATGCGGTGCGCTTTGCTTAGGTTACCCACTCACAATTTCCCACTGCGCCGCAGGCAGTATATTTCAGCTTTGAGATACCTTGTTTTAAAATTCCAGACAAAATGGTGTTGAGGAAATGTCTCCTTACTAGTCCCATCAACTTCTGTTAAAAGAGGAAAATTTATGGAATTTGAAAATACTGCGTATGATATTTAAACTTTCATAGACATTCAAATGCTTTTAAGGCCAGGTTCAATTTGGTTATGAGTCGAGGGGTGGGGGGGACCCACATAGAAATGTCCTGGGTCCTCTTGAGTTTATTTCTTTGTTTGAAGATGTTTGTTCAATGAGTTTTATTGTACTCATCTTTTATATGGAATTTTAAAAAGTAACAATTTCAGTATTATTTATATTAGAATGTGTCAGAATTATTTCCGTGACAAATCAGATCATTTGGGCTATGGCTTAAAATGTACACGAGGCAAATATTCATGACAAGAAGATTCACCTTCTTACGCTGGCATCTTGTAAAATGCAGAACAAGTTAAAGAAATAATGTGTACACATACAAATAATGATGTCACATTAAAAATACTACACTATTCTTGCTTGATGGAATGTATCTGATTTCCAATTTCACCATGAACATATTTCATACATTTTTTACATGAAAAAAAACGTGACTCTTAAGTCTCACAGTCAATCAGAGCTGGTGACCAGAACATTTTATTGAACTAAATGGTCATGTTTTCTTCCCCTTTTGTTTCACGGTGAGAGTTGAAGGAAGGAGTTTAGAAACTCTCCAGTACTTGTTTAATTCATCAGTGTTCTAATTAGAGTGGTACCTCTTGGAAAACTACACACCCCCCTAATGCAGAAACATCATAGCAATAATCACCCACCCTCAGGGTCTCCAGGAGACCACAAGGGCTGCAGATAAAAGTCTGGATGTGTTAGGTTTGACCCTTTCGAAGAGTTTTACACAGGCTCCTAAAGAGAAGATCAGCTGTGGCCGTTTGTAGCCATTTCCTTTGTCGAAAAACTAAGATCGCAGTGAATGTATTAGCCAAGAGGTCTAAAGCCCTGTTGTACTGCAGGCCACTGTCTTCCTTGTTTGACTAGAGACTTGGAGTTTGAGAACAGTGGTTCTTTGGTTTGGATACATTTTTTGTTCTTGATTTGGATGTGTGTGTTTCATGCGTGGTTAATATAGCATATTTTCAATATAAATGTCAAAAATTTTGAAATAGGAAAGAACTCTCTATATATTAATGTACTTATACACACACTTCAAGATTATGCATTTATTAACAGATACATGAAATAAATTCCATGTGCATATGCACATATGCACACAGAGCGTGCACACACACAGCATGCACACAGCGTGGAGTGAGAGGCATGGGGCAGTGTGGAAGAGTTTTAACATCAAACAGACCTGAAATGAGTATTAAAGGCCCCCTTTATTTTTAAACTTTTACTAAAACAAGATGGATTTCCCTATGTTATATAATGGTGAATTTTAGGCATAAATAACGTTTTTTGAGTGTTGCATAATTGTACGTATTAATGTAATGTAACTGTGGTTAACGAAGAATTCATCAAGGATATCACTGTTTTGTGGCATTTTTTTTTTCCTCCTCTAATCTTTGGACTTGTGAAATAATTTCACTATGAAATAAATGTTGGTTCTTGTCATATTCTAAGGGAGATTGATGTAAGTGGCTCCACTCCAGCTTACAGAAGGTAAACCACGACCTTTTTGCGTTCTCTGAAAACGCTTGTCTTCCGATGCCTCTGTTTCTAAGACTGACAAGCACTCTGGGGGCACTGTGACGCCTGCTTCTAGCGGCAGAGTTGCTGCAGCTCCTGTCCTGGCTGTGAACATTGTTCTCTCTCTGGTGTCTCTATGTTCATAACTACAGAGACTTCAGCTCTATTCCATTTCATATTTGTGCTGAATAATCATTCCATTTTATGGGAGAAAACACAAGATGTAAAAGCAACAAGTGACCCATCCTTTGAAGCTTACAAGAAGAGAAACATTAATCTATTTCACGTCTTGAAAACAGATCAGTTTTATTTTGCTCAAAAAGGGCACATGTACATTTTTGATCTAGGTCTTAGAAACGTAGAGTTTCAGAGGATCAGCATTATACACACTGTCACACACACACACACTTAAAATTCAGATGAGGAACAAGATAGGAATGAGGTTTTGTTAGGGACGCAGAGCACCTAAAACCAAAGGATATCGACAGTAACAAAGCTGTTTTTACTGTAGTGCTGACTGAACACTCATGCTGGTGTCTTCATGTGGACCATGGCTTTCTTGTATTTCTTTGCAGTTTAATAAATGACTTCATATCTCAGGTTACCTTTCCACATCTCCTGGAATATATGTTTATGTCCTTAAAGTTTCAGTGTCGTCACTTTAGTAGCTTTAGTTTGAGTTTTTAAATGTTTGGTAATATTCCAACAAATATTTTTTAAGACATTATGAAACCTTATGAAGTGCCATATATTACAAGTGAGATAAAACAGCAAGCAAAAGAAGGTTTGCAGAAGGTTTTTAAGTGGCGAAGTGCGGGCCTGCCCATTTTGGTGTCTCCTTGGTGGTTACTCCTGAGAAGGGCCTGGAGGAAGAGCAACTGAGGCCTAATCTACAGGCAACTGCCAAATTGTTTCAGTTGACGTTTTTCCCTCTCATGTTTGACTATAATAAATAGGTAGTTGCCAGTGGAGCCTTCAGCCAACCACCTGGTAATAAACTGTTAAAAATGGTGCAAACCCTAGGTCACAGGTGTGGGGGCCATTTGTCTTGCCTGTTAACAGGCCTGGCCTTAATTCTTTTCTCCCATGGCCATTTCTGCCTTTGGGGAACTCACAATTCCTGTTGACTAAAAGAGCACCCTTTTCCACCACAAGCCTGACAAATCAGACGTCCACATAATTTCTGAACTCGTTTTGGTTAGGACAGGAAGCACAGGCTCCCTTCCTGTCTGTGTTTTCCTAAGAGAAAACGGTCTTCCCTCCTTTTTTGCATATTTGGCAAGTGGTTCCACCTTTCTCTGCACCCTGGTGGAGTGTGAAGGCAGCAGAGGAACCTTTTGGAGGAGGAAGAGGACACAGAGGCCCTGTAGCCAGGCACCAAGATCCCTCCCAGGTGGCTGGGTCTGAGGGGAACTCCGAGCAGCCCTAGGTCCTCAAAGTCTGGATTTGTGTGGAAAAGGCAGCTCTCACTTGGCCTTGGCGAGGCCTCGGTTGGTTGGTGAGTGCCACACGGTTTCTTTGTGTGCTTGCATGGATTGGAATAGCCATTGTGTTCTTCCGTCTTCCCTGCTGGTGTTTCCACAGTGGGTGGCCTGAGCCCAGAGCAGCTCCCCATATCCCTGTGCAGGCCACCTGTCTCGGGTGATGGAGAGCATCATTATGCTCCGTCTGAACGCTCTGCTTTCGGATGGCCCCATGCTCCACCTCCTGATAGCTCGTGGCGCGGGGCCACGGCTTAACAAATGGCTGAAAATGGGTCCTAATTAGTGGAAAAGTGCTTTCTTCATATTTTCTCACTCGAGTGTGCAGTGATTCATTTTTCTTCTGCAATCAGCTCACTGCTAAAGTAAATCTGACTCTCTTCCCGCCATTGCACACCAAAAGTTAACTCTAATGGGTAGGAGGTTAGGTTTGTTGAGAGAGCAATGCAGTAAAAAGAGGGGATCCAATGTGGTCTTGTCTGTCTGGTCTTCCTTTCTTCGTTTTTTCCTCCCTTGTCTTCTCTGTCATTCCCTTCCCTCCATTTGCCTTGCCTTTCCTGTCCTTCCCTTCCCTTCCTTCCCCTCTTTCTTTCTATAATTGGTGGGGGGTTTGCACAGACTGCCAAAACACTAAGAACTGTGTAAAGTGTTTTTGAATGGCCTTACACATATTGAAGTAGATTTTTATGCTCCATTTTTGAGATCACACACTAAAATCTATACCTTTAAAGCATTTTCTGTTAGTTTGAAACTATTTGAAAATGAACAATGTGGTTTAGATTAGAGTCCTGTTCTGAAGCTAGGAGTTCCACTATGAATATTGATTTATCAGTTTTTGACAAATTTTTGTTGTTATACCAGATTTTCACTGGCAAACCTAGAGCAAATAAAATTCCACATAAGATACTTCCCTAGACCTAATGGGAAAAATGTTTAATTTAGAGTCTTTAGGAGAAATGAGAATGAGGAATTGACCTTTTGTAAGCTTACTTCTGAGGCACTCTGAAGTGTGTTCCAGTGCTTTTAATGGAAACTAGAGAGAGCCAGCAACCCCCTAGTGTGAGCCCCACTTTTAACCGGAAAAAGTGACCTTTTCCTCCTCCTTTGTGCTGAGTTTTGCGTAGGGCAGAAAATTAAGCTGATATTCAAAGAGATTCACTGCAAAAACATATTGATAAATCGTATATTCTATTTCATTAAATTAAAACCATACTGCTAATTATCTCAGGTTGTTAAACATAAGGCAATTAATTATCATTTTAAAAGTTGGTAGGAAGTTGTGAGTACTTTTGCAGTATGAGTGTTTTCCCGCTTTAGTATGAGGTTGTGTATGTTTGCTTGAATTTACAGAATTTTCACTTTAAGAGCAGACAATGTTTTGTTAAAGAAATGAAATTTGCTAAAAAGGAGCATGTAAAGTGAAACATTAAAAATAAATAATTTCAACTTACTTAAGAGCTGCAGAAAAATCTGATTGCTGTGTTTAAAATGAATTTTCCCACATTTCGCTCTCTTATGGACAGGAGCATTTTCTGTCAGGTTATAAATAAAGACATGCCCATTTTTTGTACCCCCACAAATGAGGAAGTTGTAAGCTCTCTGAGGTTTTACTGATGAGCCCCCTCCCCCTGGGTTTGCATGAAGAGATCATAGGCCACAAATAAAGGACTACAAAATGGGGTCTAAACTATCCTGGTGGGGCCTGATACCCACGTTTCGCATGGACCTTACGATGTGATGAATGGTTTTGGCATGAGTGTCTTAAGAATGCTTCCAGATTCGGGTTACAGGACAGCCAGCGCTGAGCTCCCTATTGCAGAACAAAGTAGGAATCTAGAACTTTCTTGCTAACAGGATCCAGCTAAAACACCAAGTTAGATTCTTAAATGATGTTCTTTTCTGTCATTATTTGATTGTTGTCAGTAGCAGTAATTGTTACCAAGCCATTGATGCTTCTATTCTTCCCTTTGCCCTTCTGAGACACAGCTCATTTTGACTTCAGTGGAACCCCTCGAAGGTGGGGTGATGAGCAAGGTGAATTTTCAAAGTAAAGCTACTAAGAGACCAAACTACAATTTAAGGAACCTGATTTTTGAATCAAATTCCATATACTGTGGGTATAGTTCAACATAGATTAATTTCTTATAGTTATTATGAAAAAAATCTCATCTTGATGATAGCTGATAATTTTGTGGGTGTCGTAAACAAAACAGAGGTCAGAATTCAGTCCCTTGGGGAAAATTTCCAATTAGTAGGAAACCAAGTGGCCTACCTTAGTTTGAAGACACCCATCAGGATGTCTGCACCTTTTCATCCTCTCTGGAGGAAAGACTAAATACCCATTATTGTATATAGGTCAGGCCAAAGCAGCCTTTTATATTGCAAGGAATAAGAGGTAAATAGATATATGTGCAACAATGAATCCCCTAATGTGTTTACTCTAGAACACATGTTCTTTCTGTATTTATATGTAGATTTTGTAGATCTTGTCTTACCACCTGCTAATGGTAGATACTGTATCTAAATAAGTTGAGGAAAATTTATAGTACCTAGGAATGTGTCCTCAGTGGGCCAATCAATCAATCATGACTTCAGGTTATTTTTAATAAATATACACGTATGGGTTCATAAACAATGGGATGTTCTTGTGAAGATCTAAATAATTTTACTTCTTTGGGACTAAATAAAATATAGCTTTTGCCAAATAAACTCACACAAGCACTTATTTTAATAGAAGTCAAATGGCTTTGCAGAAACTTCAGTTTTACAGGTGCATTGTTTGAAATGTTACGGGTATACAAGTGGATTTCTCTATTATGTACAGTGTTAAGTTTGAGTTTCAAAATGTCCACCTGAAATGATTTACTTGTACGTTAAGATAATTTAACTGCTAAGAAGGCAAGATAAAGCATTCTTTGTGACACCATATGGCCTTGCTGAGGGAAAAACTTACTGTTATAAGTTTGTGTTTATCTCTCTTTTTAAAAAAAAATGAAGAAAAAAACGTTTAAAATAATGGGAACACAGCAGTTCCTGGGGTCCTCTGTCTCTTTATCTTATTATAGTAAATTACCAAAAAAATAATGACCTGGGGCATGTCTGTGTGGACCCTTCTTTTAGAGGCAGTTTCTGTGTTTTGTAAAGCTGTAGGTTCTATTTTCATTGCACTTCATATTGCTGCACAGCTCCTGACCATGCATGAAGGTCCTCTGAAATCGGTAAGAGGGCAGAAGAAAATGATTCTAAACTTAGATTTTTTTAACTTAAGTGATGAAGTGTGAAACGCCATTTATATTTGAGGAAGCTACCTAGGAAGTGGCTCATGTCGATGGCCCAAATCAGAAGAGGGCCTGTAAAAGCTTCTATCAATTTTGACTGTGTATGCTTCTACCATGGCGGCTCAATAAACAGCAGTATTAGTTTAAGAGTGGATGGTACAGTAGTATAGACGGGAAGCCTCTCCTCTCCGTGTGAACCGTGCACCCCTATGAGAGGGTAGAGACAATACAATATGCCTGTAACGTCAGGACAGACAGTCATGGCCAGCTTGAACTCCAGCCCTGGGCTTCTTGCAGCAACAAACGTGAACACAGAGGACTGTCTCCAACTCCACTTTCTCTATTTTTAAAACAACTTTTTGAATACAGTATCTGCCATCTTTTCTTATACCTCACTTTGAAACAGGTGGCTCCACTGTGGCATTTAAAATGTTCTGTTTCTTTTCCCTCTGTATCAAATACCTCTTTACCAAGAAAACATTCAAACAGCATAGTTTTTAACTGTATTTTGAAAGGTTTCCTTAGTTCCCTTTGACCCTTCCTCTTTTGCATATCAGTTCCTGGCCATAAAAATAAAAAATGCTAGGACAGAATTGCACATCTGAGCTGATTTGCCCTCAAAAAGTTTCACAGTGGAACAAACCGCAGGAGGAGTTTTCTGTGGCTCAGTTAAATGTCGGGGGAGGGTGGTGTGAAAGCCAAATTGGATTCCTGCTTTCCTGTTTAAATCTTGTTTTTCATTGTTATTTGCACCAGCAATACTCTGTGGAATAATCATGAAAATGTGTAGATTGGCAGCTAATTTTTGAAAAATGAAAAGAATCAGAAATGAAATAAGAGTGCTCGGAAGTTTTTATGTTCTCTCAACCTGTTTTGTCAAATTGTTACGAAAACCTATAAGGTCTCTTTGACTAGATACAAAGACTTTGCACATTGCCTTAGCTTTCTCTTGAAGCATTTCCTTTTTTAAAATACAGTGTAATTCACAGTGATATGATAGATTTGCAAAAGTAAAATCTACCAGTCTGAAGATGAAAGGACTTGTCTCTTAGCAGGAATAATGGGTTTTATTAAAGAGGTCTGTGACCTAAGGCATTTTAAATAAATTACAGGCTTGGTCCCTGTCTCCCCCATGTATCTACTCCCTTCAATATAAGCATCATTGAGTATTTAAGGAAATAACCCCAAATGTAACTCTAGTGTAGCTTCACTTGTCAGGGAGGAAAAAGTAAATAGCATACATTTGGCCAAATAACCAGAACTTTACTGTAGAAGTTTTATGATGAAATTTGCCTTTAGTGCAGAGTATTACAAAGATCATGTTTAGTTTCTAGCAGTATATAAGTAGCATCCATCCTTATCTGTCATGCATTTGGAGTGTGCGACCCCTGCACTGGGCTGCAACATTCTGATGGGCAAGAGTGCTAGGGAGAAAGAGGCATCACCATCAGACTGCACGGGTTCAAGTGTCAGCTCTGTGGTTGATTAGCTGTGTGACCTGGGGAAAGCTATTTCTCTTAGCCTTGGTTCTCTCATCTATAAAATGGAGATAATGATGCAGATGCCTTGGGTTTAATTGGGAGAGTTAAAGACACATTTACATATTTAGCAAGTAGGTGTTGAATTCTAGCTCTACATTGGACACTATGCCAGGTGCTCAAATAAACAAGTGGACAAGACAGACAACACCCATGGTCTTATGAGGCTTAACCATTTGCCTCTTCAATGCCAGAAACTTAGTAGGTTGATTAGATAAAGCCAGTGAGTACCAGTATCCTTTTCTTTGCAGCCTTTTCCTGGCACACTAAAAATACTCAGTACATATGAAATATCACTGGACAAAGAATCCCCCTTAGAGTACCAGTGGAGAAGGAAGGCATTTGCTTAAAAGCAAACCAACAGAAAGACATTGTAAGGCAGTTGTTTAAGTCTCAGAGACCTATAATTTTTTTCTTTTTTCTTTTTTTTCATCTCGCTCTGTCGCCCAGGCTGGAGTGCAGTGGCACAATCTCAGCTCACTGCAAGCTCCACCTTCCGGGTTCATGCCATTCTTCTGCCTCAGCCTCCCAAGTAGCAGAGACTACAGGCGCCCGCCACCACACCTGGCTAATTTTTTGTATTTTTAGTGGAGACGGGGTTTCGCCGTGTTAGCCAGGATGGTCTTGATCTCCTGACCTCATGATCCGCCTGCCTCGGCCTCCCAAAGTGCTGGGATTACTGGCATGAGCCACCACGCCCGGCAACTACAATTGTTCTTAAAGCTTGTAGAATTACTGTGTGCTACCAACAGACAGGCTAATTTTGAGTGACCCTCAGTACTTTGTACAGTTAATTTGGCACGCTGTGTACTTAGTGGCTTTTTAACAGCTATAAATTTGGGCTGCTAGAAAAGTAGTAAAGTTGTGATTCTTGACAGGCATCTATCTGCATTTTCATTTTTACTTCATTTGTCTAGACTCAGCTTGTCAGAATTATGGAAGAGACTCCTTGTGTCAGGGCAAGCACTGTGAAGAGAGGTATTCACTGTCAGAAAAGAGAGGGGAGCTGGAGGCAGCTCAGAGGCCTGAGACCCGCCTCCACAGGAGCCCCAGCAGGTTCGGTGGAGCTCTGGCCACACTCTCCTTTGGGATGCTGAAGTCAGAATGAGTTCACTTCCCAGCCAGTCTTGCCAAGGCTCCTCACCTGGAAGCAGCAACTGCCCAGGGCTGTTGGATGTTTCTCCCCAGGGGACAGCCAGGTCCCAGTCCCGCCTCGGTGTGGAAGGAGGAAAGGCAGGGTCCAGGAAGCTGTTTCAGGACAGGCCCAAGGTCCCCCAGGGATGCCTTTCAGGGTCAGCGGAGGCTGTAAATCAGCAGGGCCCACACGGCCTGGAAGAGGCCCCTGTGCTGTCGGCTTGCCCGGCTTGCCCGGCTCCTAGTCCGGCTTCTGCTCCTCCTTTGTAAAGTTATGGATATGCTAATAGTTTCCAACTGAGACTAGGAAAGTAAGTCCTACTTGACACTGTTTGGTCAGAAAGAGGGAGAGAAAGGAGAAGGACAGAGAGAGACTGAGAGAGAGACAGTCTCAGACAAAGGGAGACGGAGGGAGGGAGGGAGAGACAGAGAAAGAGATGGGAGGTAGGTGTGGGAGGAGGGAGAGATGCAGAAGGCAGAGGAAAGACAGACAGAGATTTAGACCTCCCAAGTCAGTGAGCAGTCCAGAGTTGGAGTGGAGGGTGCCTGGTGGCTTGTGACTGCAGACTCCACTCCCCGCTCCTAGAGGCACAGCCATGGACAGCTTCTGTCACGTTGGCCCTGCACTTATCTCTGCATCTATTTCCCCTTGTGCAAGATTCAGAACTGCATGCTCCAAAAAAACAATAAAAGCATTCATGTTCATAAGAATTGCACAGGTAAAAGGTAGTTTGCTGATATTGTTGTATTTTTTACTATCGCTTCTTTTAGGTCTTGCCTGAAATTGTTTGGGTTTCCCAGGCAAAGTAGAAAACTGCGGTACGTTTCTGTGAAATAATTATTCCTTCTGGCATCTCCCTTTACAGACCTACTGATCTTGATTTTTCATTTAGGTGAAAGTTTGTGAAAACATGCCATTAGCTTGCTTTGTGATTAACTCCTTTTACTGAATGTGAGCTCCTTTTAAATTGAGGCCATATCAAGCTTAAATTCCATATTTTACCCGGCACTCTGCATTTCTTCCATGTGGGAGAGGAGGGGCTCAGTAAGTGCTTTGTAAAATACACAGCCGAAGTGATGCACGTGCTAACAAAGGAGTGTGACAGGACTTAAGTGCCCTTCTAGACACTTCAGGCTCCCCTTTGTAAGCTGTCTTGGAAGAGGCCACATTTCCTTTCCCTCAAACAGTTTCTCATTGTTTGATTATTCTTTTAGCCTTTCTCTGGAAGCAAAGCCACTTTTACGAGAAAGTCACTGCTTTTTCATCTCAAGAGATGCAAGTTTGGAGTTTGGGGAAGTTTTCAGGTGCCCGTCAAGTCATCCTTTATGATGTCAGACGAGTCAGGCCACAGAATTCACAGGGCTCAGTGCAGACCGAAAACTTGAGGCCTCTTGTTCAGAAATTATTAAAAATTTTGGTGAACATCACCCCAAGCAAAGAGATCCCCTAAGCACCAGCCCCCAAGCAACTGCACTCATAAGCCCATGAAGCCCCCTGCTGTCAGAAACAATGTGGTTGAAATTGTGTATGCACTTGGAAGTGAGATGGATTGCAAAACACAGGTCTCCATGCTGGGGCAGGAGTGGTGATAGGGCATGGAGTGGAAATGTCCAGCAGGCCCACGTGCGAAAATGCAGAGCTCTCTGGCTCTTGCAGACTTGGCTGCTGACAATAGACGCGCTCCAGGAAGGTGCTCGCTGTGGTGTGATCTGCTGCCCACCCCTAGCTCCCTCCAGGAGACTGGTGCGGGGACTGTTTGCAAATGACTGCAAAAGTAAGAAGGTTCCCACAGAGCAGAGCTTGATTTGGGGACCAGCCGAGGGCAGTTTGTCAGGATTCCGGCTTGAAACTGTTCTCACATCTCACCGCCTGAAAGGACGAGTGTGTCCAGAGGACTTAGCATTGATCACCTCTGTCTCCATGCAGCAAACTCAGAGGCTCAGCCCGCATTCCACTGGAAGGGCGTTTGCCAGTGGTGTTGGTTGGAAGAGCCTTGACTTTGCCTTAGGAAACATCTTTTTTTAAGAATTGAAAATAACTTGAGTATGCAACAGTAGGGCATTTGTTATATAAATTAGTTGACTAGTGTGTAGCCAGTAAAATGATGATGGTGGTGTGTATTTGTTAAATAAAAAGATATGTGTGGTATTAAATTAAAAAATATTTTAAAACAACATATTTGTAATCTGTTTAGTGTCCTCTTTTTGTAAAAAGTACAGAAATAAATATACAGAAAAAATAGTAGTCCTAAGTGGTAGAAATTATGAGCATTTTCTTGCCTTTAAAAAAAGTTGTAAAAGATTGTATCATTTATGTAGCAAAAAGTTTTAAGTCAGCATTCTAAAAATTTCGTGTTGTTATAGTTGCTGTGACAAGATTTAACTTCTGTATGCTTCACCAATCAATACAGAGGTATTTAAGACCCGGTGTGTGATAGGCCGCGCTAAAATACTATACACATCTTCAGAAAACTAGAGAACTAACTTCTAACTTCCTATATTAGTGTGGCACGGCTGTTACAAAGATTTTTCTCATTTGAGTCTATCTTGCTTCTTTATCATTGTTTTGACAGTTTCAGAAGAATCGTGGCTTTTCCCCTTTTTTACAGTAAAGGTACCTGAGACTCTTGACGTATTGCTTTTTGGAAATGCTTGTGCTGGTCACATGCTTGCATCTGGGCTAGTGTGTCTGGCTTCCGTGTGCTGGTGGATGCTTACTCTGTTTTCTGAAATACTTTTTCTGTACAGTGGCCACTAGCTGTACTCCTAAGCCACACACCTACCTTGAAAATTCATGTCACTTTTAGAAATAGATAAAAGCCCCTCCCATCCAGAAAAAGTGACTATCATGTATATCCTCATCATGACTAATACTGATATTCCTGAAATTGAAAATACATATTCCATATGTACCATAAAAGGTATTAAAGATATATGGAGTGATAGATATATTATATATAACACTTCTACCCTCACAGTTTTCAGCCTAATTGAGAGGGTAAGATCCCTGAATCATCCATCAGTTTTTCAGGTCTCTGCTGAAAGCAGGCCACAGCTCAGATCCACACATCTGAACCAGAGACAGAGGTGGCCAAAAATAAAAAGGGGGACAGGGGGACAACCTGGTTTAGAGTCAACAAATAGACTGCATTTTCTGGTTAGTGAAGGAGCTCTCCTGAAAGTCATATACCAGAGCATAAATGAGCAGATTTCCTTGAGGTCACCTTCTGCTGGCCATAGCTTTCTTATCTGTGGAGCTGCCAGCTGTCATCCACTTTGGGGCACCTGAGACTGCCGAGCGGCAGGCCAGGACCCAAGTGCGAAAACACAGAACACCTTTTTGTTTCTACTCCACTGATGCTGGGGTTCTCTCCCTGGTGTTTGTGGCTCGTAGTACACTCTGTGGAACATTCACTATGGTCATCGAAGGGCAGCATCTTCCCAGTTGTTTCTTTCTTTTCTTTTTTTTTTTTAATTTAAACCGATCTGAGAAGCCAGCCATCTGTCAGCAAAACAGGAAGGCTCGGGCTGTCTCCTGGGCTCGTTTTGCTGCCGTAGTGAGCGTCACTTCTCCCCGTGTAAGAGTGCTGGTGAAGGCTGAGGCAAGGGCCCAGAAAGATTGAGGGACAAAGACAGGAGCGCCCGCATTGCCCATCTGCCAGGCTGGAGGTGTATTCATTATTGATGGAGGTAGTGCAGTTGCTGCTCAGATATGCAGCCCTGCCTGGGTAAATGAGACATTCTTCAGCAAATTGCTTCGTTTTTTGATTGCTGATTGTACGCGTGTCACCAAGCTGACTCAAGGTTCATCGATGCATGCTCAGTAAATTAGAAAGAACATAACTATGGATCAGCCAAGAGAATGAATTCTGTGCCTACAATGACCCAGGGCCATTTAATTTTCTGCTTAATTTTGTTGCAGTCAGTTTGCATTTTGGGTTATTATGCAGTAGGAAATTAACAATAAATAACAAATTTGGTCCTCCTGTGCTTGTAATGATATTTTTATAAATCTTTGTAATGCTGTTTTTAAAAGGATCAAGGTCTGTGCCAGTCTGATACTCCAGCAAGTATGTGAGGAGGAAAATGCATTATTCTTGCTAGATAACCTTGTTGTTAAATAGCATAGGGGTTCTTTATCTCTCTCTCTTTCTCATATCTTATTAGTATTTTTGCTTTAAACTAAAATCCCTTCCTCTCTTTCTCAGATAACCTGAGGACCATGGATGCTGATGAGGGTCAAGACATGTCCCAAGTTTCAGGTGAGACCTTATGAGATAGCTGTGTGGGAAGTTCATGAGAAAAGCTTCCCTGGGGCCGGAAGTCACAGTGCTTGGTATGCTCATGGGGGAGGAATAGGGGCTATTCTGCAAAAGAAAAGACCATGATGGAATTTGCCTGAGTGTTTCCTTCACCTGTTACAAATTATCTCACTTTGAGCTGAACAGAAAGCCTCCAAGATGAAATTAGTTTTACTGTTAAACTTCAGGAAAAAAAAACGGGAAGAGTTAAATACATTTTTGTACTGTTGGAAGGAAAAATGGCTGATTGGTTTAAAACCCAAACACATGCCAATGATGGTACTTAAAGAGAGAGAGAGAGAGAAGCTTGAAAAACATAATTGTTGGGCACAGTCATGACTGTTTGTTCATTAAGCATGGACACAACATTGCTCCCCTTTGCCATATATCTTTTCAAGCCGTATTGGATATAGCTCTTCTCATCCAGGAGACCCAGGAAGTGGAGAAGTCTGTAGTAGGAAAAGCCTAAGGGTAGGTCACAGACTGTGACCATTTGGCAGCACTGAGGGTGGACGGCGAGCCAGTCCAACAAAACCGCACAGTTCCCCAGTGCATGGACATAGGAAGACAGCTTTCTATCTGGCCCTGTATCCAGAGGCGTCAGCCCCAGTAGCAGCTTTCATGGACTTTGGGGTTTTCGGTATTTCATATTTTTGAGCCTCACAGACTCACAGCCAGCCCCAGAGGCTGACTTATATTTGAGAAAGTTCTCAGTGGCACCTTGCCTTGGCTGAGCGCCCTCGTGTTTTGAAGTTTCTATGGGATTCTACAAGTTGGTGCTCCTGATGAAGACCAGGACCTATGTGTGGCTGCTCCCCTGCTTGGTGGTTTCCCTGGGGAAGGTGCAGGAGAGGATCTTCTGAGTTCCATGGAACTGGAGATAGATCTGCCAATCACAGGCTTCCTTCTCCACCACTCCTCAGCCGCTCTATTCATGTTTCAGATTTTGGACTTAAACTCTCCCAGGTGCAAAGAACAAACAAAAGGCTAGCTTATTTTTCTTTTAGAGTGAGGCTTCGTATTTATTACAATATAATTGCCACATTCTTTGTGTAATTCTCACATTTATATCTTAAATATAATTCTCATGAATGAGAATTATATAATTCTCTTTTTGTATATCATTGAATATTTTCACTTAATTTTTAATTTTTTTAATCGTCACAAAATAATTGTGTACATAGACACAAAATAATTGGGTACATAGTGATGTTGTGATATATACAATGTATAGTAATCGGATCAGGTAAATCAGCATATTCATCATCTCAAACATTTATCGTTTCTTTGTATTAGGAACATTCGACATCTTCCTTCTAGCTATTTGAAACTATATATTATTGTTGACTACAGTCATCCTGCAATGGTGTAGAACACTAGAACTTATTCTTCCTACCTAGCTGTAATTTTGTCTCCTTTAACAAATCTCTCCCTATCTTCCACTCCCCCGACCTTTCCAGCCTCTATTAGCCTCTGTCCTACTTTCTACTTATAATGATGACAGCAGCATTTGTTAGTTTCCACATGTGAGTGAGAACATGTGGCTTTTTAACTTTTAGAATGTGGTATTCAGGCACTTCATGGTACAGTTGGTAAAAGTGAAAATGTGTCCAAAAGTTTGTGATTATCTATATAAACAAAAATGGTATAAATACAAATATCAATTTTGCATTGAAGAACTTACCTTAGAGGTATATTCTCACAAGTGCACAGAGCATTTAAGCATTTGTTCACTGCAGCATTGTTATCAGTATTTTAAAACTATGGTACATCCATGTACTTCCACATACAGCTCTTAAAAATAAGGAGGATATGAATGAACTAGTATGAAAAGAAGTCCAAATACATGTGAAAGTGAGAATAGCATGGTTCTGGATGGTATGCAAAGTATGATCTCGTTCTTTTAAAAGAAAATAAATTACATACACATACATATTTTCTATATGCTTGCCCATAACGTTTAGGAAAATTCTTGGGTGATATTTATTAACCTGGACTTCCTCTTGGAAGACTGATGGTAGAAGGAAGGGGACGAGTTAGGGAAGAGGAGGAGAAGGAAAACTTTGCTTTTCATCTTCTACCTTTTAGCATTATTTGAATTTATTTTCCTTAAGCGTTTACTTTGTTTCGTAAACAAAAAAGCACAAAAACAAAAAACGAGTTAAATGGGAAAAAAAGCAGTTTAGCTCTTTATAGCCTCTCATTTGGCTTCGCCAGCCTCTCACTGCAGCCTCAGAGAGCTGGTCTGGGAAACACTGGTAGATGAGGACTGTAATCCTCACTCATGGAAGAGGATCTCATTCACTGGGTTTGCTGACTGTGACTAGAAGTGATTAGGGTGTCAAAAAACCCAAGCATGTTAAAAATTTCCAGAGGCCAAAAAGATGCTTTCATTGTTCTGCTCTTCTTTTCCTTGTCGCTTTCACTTTGGGTAGCTTCTAAATTGGTATTTTGCATGGTGCATTTAAAGAAAATGAGACCCCTTTGGCCAATGCAGGAGTCTACACTCTGATATTCTAGAGTCAAAGCTGAATGCTGACACCTAGGAATTCATCTCTAGAATGTTTATATAAGGAATAGCCCCTCAGTATTCCGATCTCGTATCTTAGTAACGAAACTAACAAAAGCCTGATTCTCCTCTGGTAGTTTTCTTGTCTTTACCATAATACAAAATAAGTAATTTGTTCTGCACCCTGACTGTTCAAAGGATAGGGTAGCTGGGGGCGGGGACAAGAATGGAGACCTTATTACATAAGACTTCCTGAAAAAGGAAACTCTGTTTTTGTTTGAAATGATTTGGTCTGAAATTTAGTTTGTGTACACTTACCAAAGGGATTCCTATTTCTAAAACACTCATACTGCTTTTGATTCCTGTTAACCTTTGAGCACTCTACGTAATGATGAGAGCACTTAAAGAGTCATGTCACTTTTAGTAAAGAATCAAAGGATACTTTTTCTACTTCTTCGAGTTTGATCTCTGCTTCTCCAGTTAAAACCAGTATTTGTTTTTTTCATTTCTAAAGTTGGAAGAAATGACAGTTAGTTATGGCATAAGGATGTACATTTAACCAAATAGGAGTTGACATTCTTGGTAAGAAATCTTACCAAGATTATGTTATAGATTATAAGAAATCTTAACAAGAATATGTTCCTAAATCATCCTCTTTTCCCATAAAATATTAAAGTATCAGCAATTTCATAGGATTCAACCTAATGTATGCGAAATGCTAGATAAACAGATAAATACTTAATATCTGGCTTTTTTTCAAAGCACTGGGTTATTTGTTCCTTGAGATTTATCCTAAATGTGGGCTATACCCTGGTTTACAGTGTCTCACAGATGTGTAGTAGTAGACACTCCATAAGTGTTTACTGACTTGAATCCACAGGGTACTGAGAAAATGCTACTGATAGACTTGGAGGAGAGCATATCTAAAGCAAGCTACCCTTTCCTTTAGGGCACGTCTCACTAATTCTTTGGGTAAAGCGTATTTTTCTTCCTTTTGTGTTTTTGGCAGTCTTTCCAAAAATACGTGTTATACCTATGCATTATTTTTTGGTTTGGTTTCTAAAGAAAGAGTCAGCCGGTGGGAAAGTGAAGGATGTGGGAACTGAGAGATCTGCATCAGCATCCCACCTCTACCTCCCACGATGGGACCTGAGACAGTTATTTTTGCCTCCTGGACCACTATAGTATCATCTGTAACAGGAGGGACTTGAGCCAGTTGATCTCTAAGGTTCCTCTGGCACCTGTGACCCTAAATAGATATTGGATATTGGTTTAATGCTATTTGTAGTGTGTTTTTTTGGGGATATGGAAACCAGAAGTTTGTTTCCATAAACATAAACATAAACTGTATATATCTAAAGGATATGGAAACCTTTAGATATATATAATCTGCTTACGTAAAGAAGGTTTGTATATATTGCAGTGTCAATGGGAATATTTTATCAAGTTAAGCATAGTAAATCACATTGATTAAATGCTTTGTATTTACCAAACATTACCCAAAGTGTTTTCTCCTTTCAACCTCACAAGGACCCACAGAAGAAAATACAGTTATCATTTCCAACCTGCAGGGAGCTGAGACACAGAGAATTTAAGCAACTGACCGGAAGTCCAACAGGGAGTCAGAGATTGCTCTGGGGTGTGATCCCCACTTGGACCCTAGAGTGGAAGCTTCTCCACTACTTTATAGAGTTGAGATTCTATATTTTGAGCTTGTATTTACCCAGAGAATTATATCCTCTTGGGCAATTGTGTATAATAAAACCTCATGCATTTAGGAGAGGCGGGATGACAGAACTTTGTTGAGTGAATTATAATCTACTTGAGAAATTATTTGCTTACATTTTATAAGCTAATTATACCATATCTCATCCAGTTTTCCCAGAACACTTCTCATAGGTAATGCTTTATTTGAAACATAGGCCATAGGTAAGTTAAGTGTAAATGTGTATTTTTATAATTTAACCAGAAGTTTATTTCATTTTTCTAAATAAGTGAAATTGTATTGCATCTTCTAAATTATTCTATTTAAACACTTGATGTCTTGCTGTCTCCGTCTCTGTGTGTTTGCATGTCATTGTACATGTTCTTAGGAAAAGTGTGGGAGCTTGACGCAATATATACCTTATGTTTCTATGTGCATATAGTTTACCAAATAATACCATAAGTTTACTTAGCATATTAGAATCCATGCACATTATTTTTATTTTATCTTCACCGCAACCCTGTGGGATAGACCAAAATCATGCTTTTCAGCCTCCTTTTTCCACTTGAGGAAAGGAGTCTTAAAAAAGGGACCAGTCTCATGTTCCCATTCGTCTTACAACTAATTGGTCAAGCCAGAAAGCCAGAACTATGTCCTGGGTCACTAACTCCTAGTCACTGTGTGTTAGTATTTGAGATGCCTGTTGGCTTGATTTAGTCATTTATTTTTTAGTGTTTTATAATCCTTGCATACTTTTACATTTTAAATGGTTAACCAGGCAAATTGGTTTAAAATCAGTGCATAAAAATACTGTGCCTATCATGATGGGTTTCATGAAGTGATAACTTTTCATCATGGAGATCCTCAGCTGTCACAGAAGATGAGGGGCCCTGGGTACAGAGGCTCACGTGAGGGATGAAAGTCTCAGCAGCCCGGACTTACACTTTGGGGCTTTTAGGCAAATCAGACAACCTCTTAAGAACTATCACTGAGTTCAGGCAAGGCGAGCTTGAATTAACACAGGGCCCTTGGTGGGCATGTGAATATATCTCACTTCACTACCATCCAGTTCTGACTCTTTACTAGATGCCCCTGTACATACCAAGACTGATTTTTTATTCTCCCTTCTCCCCATGTGGTTTCTTCTGCATAGAGAGTTCCTATTGATCAGTCTGACCCATGGTATTTTAGAATTGCGATCCCTACTGTTTCATTATTCCTTTTTCTCCCCCATGTTGAAAAAAATAAATGTCCTGAGATGCAAGATCAGGGACACTGGAGCACTGACATTTAGTTCAGTGCAGGAACTGAAGGCAGATGTAATTCTTAAGAAGCGTACCTGTTATTATGAACCATCCTCAACAAATTGTAGTGGATCTTGTTTTCTCATAGATACAGCAGTTAAATTTTTTAATAAAAGTAACTAAGAGTTATTTGGATGTATTTTAGCATGCACTGAGCGGAAAGTACGACATTTCTTCATTGGGTAAGTCCTGATTCTTTATGATCCTCACTTGGTTCCAGGGCCCCATGCATCTAAGGGTGTCTCAGAGCATCCTGCAGTGCTCCAGCATGATCGCAGGGAAAAGCTATAGGAGGAAAAGAGTCAATAAAGTTTAGTTTCTCAACCTCCCACCTCCACCCCATAATAATGACAGCTGGTTAATCATGAGACGCGTGCACACCCCACACGCCCTGTACATGTTTACTCATTGGGATAGCATGTCAGGCCAGAAGGCTCCATGGTCATTTCTATGAAGGTACTTTAGCAGGTCTTCAAGAAGGCAAGTGGCCTGGGTCCCTGCCTCCCCAAATTGCAAGCTCCCTGCTTTATGTAGGAGACCTATGTGTATATTACAGTTCTGTGTAAGATTATTTTGTTATTCTTACCCCCACACCCACCCCCCAACCCCCCGCTGCCACCAAAAAAAAAAAAAAAAAATTCCTCTGACAACCTTCATAAAGTCCTGGGAGTTTGAACACCATTGCTCTAGGAAGTCATCTTATACAAAAATAAGAGTTGTGAGGTGGTTCATATACCTCCTGCGTTCTCCTATTTGGAGTTTTTCCCCATTTATGAAAGAGGTGAAAACGCTAAGATATTTAGCAATTATTACTTTAAACATTTTCTATTTATAGGCCGGGCGCAGTGGCTCATGCCTGTAATCCCAGCGCTTGGGAGGCCAAGGCAGGCAGATCACGAGGTCAGGAGATCGAGACCATCTTGGCTAACACGGTGAAACCCTGTCTCTACTAAAAAAATACAAAAATTTAGTTGGGCATGGTGGGGGATACCTGTGGTCCCAGCTACTCGGGAGGCTGAGACAGGAGAATGGCTTGAACCTGGGAGGCCGAGCTTGCAGTGAGCCAAGATCGCGCCACTGCACTCCAGCCTGGGTGACAGAGCAAGACTCTGTCTCGAAAAAAAAAAAAAATTCTATTTACAGCAGTGAAAATAGTAGTGACTTAATGCACATTGCCAAGGCTTTAGCATAACATGAACACTTTCACTCAATGTCTCTCTGGCCTTTTGTTTTTCCTTGGGAAATTCTTATAATCCTGCTCCGTCTTTAACTATTCATTTTGTATTGGCTATCCAAATATACCCAATAATGCTCTTTCTGAAAATATGCCAATTGTGGTAATTACAGCTAAGCTGGAATATTAAATTGTGATGTCTGTTTTCCAGAGAATGAAGTAGTATTCCCCAGAGCATAGGCTTGGTGCCTGTGCAGGTTCTATTTTAAATATTCCAGGAAGGGTTGTTTTATATACTGAGGATGATTTTACTGGTCTTGCCAGTCGTCTGAAATGCTGGTATTACTCTTGTGGAAGGTTTATTCAAACAAACAAGGACATTTCACACAATACCTAGTCATGTTTTTCAGACATTTTAATGTTTGGTTCATCATTTGCACACACTCTCAAAAATCTAGGTTTGTCTATGTGTTCATATCATTTTGCCTGTTGCCAGCTCAGTCAGCAGGCACACTCTCCCAGGCTGTTGCTGTTTTGTTAGACTTCTTCAGGACCTTCATCTAAAATGGTCTTCCACACGTAGCTATACTGCATAAGTTCACATCATCTGTTTCTTGCATGTGGGTTGTGTCTCAACTCAAGTTTAAGTTAGATTTGGAAGGGCGGAAACTATAGGAGTTGCAGCTTCAGTGGAGAAAAGAGCATTTCCTACTAGTTATGGCTTCCCAAGGAAGGTTAGATTCCTCAGAGTAGGAGTGATTCCCCAATGCTAGAACCTTTGGTCAAATATAATTCTAATCCAGTCAAAATAAATACAGGTATTCTGTAAAACCCGATTTCATTTTGTAAATCCTACTTTGTATAGTATAAGCAATTTTTGTATTTGTGTGGATTATATTTTATTTTCCTATTTCAAAGAGAAGAATTTGTATTAGCAGACTCCCTTTGCATGCGGAGAGGGGATCATTTTCCCAGTAGGCATGGGGTTCCCTTCCATTCCTTGTCCAGTCTTCTTTTCCCCACTAAGTTAAGTCAAACTAAGCAGCTGGTAAGATATTCCCTGGTTCTTGCAAAGAAAGTGAGCAGATGGCAGAATGTATAGCTCTAAGCAGAATACCTGGTGTGGTATCCTCAAACACAAATTGACAGGAGGGTGTGGTGTGGCAAGCTCATTGTGGGGGTAAATTGGAATAAGCTTACAGGGGGAAGAGTTGACAAAAGATAGGAAGAACCTTAAAAATATAGATGCCTTTTATGCAGTGATAAAATGTCTAGATATTTATACTGTGGTGATTATTAGGAATATGTGCAAAGATTGGCTATTAGGATGTTCATTACAGTGTTGTTTAATAATTATAAAAGGACAGAAAGCAATGTGGACTCAAAAATAGGAAAAGAATTTAAATAAATCCTAGTGTACCCGTTATACATGAAATTATGGAAATATGACCCTGAGCATGGAAATATGTACATGAGAATGTCTAAAAGCTAGTTCATTTTGAAAAACAAAATAATGTCACCTCATATTATTTATAGTATATAAAGATGATTTTAAGAGTGGCAGTGTCTGGGATTATAGGTGATTGTATTTCTTCCCTTTTGCACATCTATGTTCTCTCATTTGTATTGTGTGGGGAGAAGTGACTTTTTTTATAAAAAGAAAAAGGTATATGCATCCCAGCAGAGAAGCACTGGCTCCACCCAGTACCTGCCTCCTCATGCCACCCTCTCAAGCCAAAAGCCGGGGGAAGCCCAGGCACCTTGACCATGACCGCCCGAGACTCACACTTCTTCTTTCTCATCAGGGAAGGAAAGCCCCCCTGTAAGCGATACTCCAGATGAGGGCGATGAGCCCATGCCGATCCCCGAGGACCTCTCCACCACCTCGGGAGGACAGCAAAGCTCCAAGAGTGACAGAGTCGTGG", + 50344378 - 1); + + // the stuff from the genome represents a small part, most of it is brought in through the RNA-edit insertion + var codingRegion = new CodingRegion(50358658, 50367353, 169, 1602, 1434); + + var regions = new ITranscriptRegion[] + { + new TranscriptRegion(TranscriptRegionType.Exon, 1, 50344378, 50344383, 13, 17), + new TranscriptRegion(TranscriptRegionType.Exon, 1, 50344384, 50344518, 19, 154), + new TranscriptRegion(TranscriptRegionType.Intron, 1, 50344519, 50358643, 154, 155), + new TranscriptRegion(TranscriptRegionType.Exon, 2, 50358644, 50358697, 155, 208), + new TranscriptRegion(TranscriptRegionType.Intron, 2, 50358698, 50367233, 208, 209), + new TranscriptRegion(TranscriptRegionType.Exon, 3, 50367234, 50367353, 209, 328) + }; + + var rnaEdits = new IRnaEdit[] + { + new RnaEdit(1, 0, "GAATTCCGGCGT"), + new RnaEdit(6, 5, "A"), + new RnaEdit(16, 16, "T"), + new RnaEdit(97, 97, "C"), + new RnaEdit(316, 315, + "CCAGTAATGTTAAAGTAGAGACTCAGAGTGATGAAGAGAATGGGCGTGCCTGTGAAATGAATGGGGAAGAATGTGCGGAGGATTTACGAATGCTTGATGCCTCGGGAGAGAAAATGAATGGCTCCCACAGGGACCAAGGCAGCTCGGCTTTGTCGGGAGTTGGAGGCATTCGACTTCCTAACGGAAAACTAAAGTGTGATATCTGTGGGATCATTTGCATCGGGCCCAATGTGCTCATGGTTCACAAAAGAAGCCACACTGGAGAACGGCCCTTCCAGTGCAATCAGTGCGGGGCCTCATTCACCCAGAAGGGCAACCTGCTCCGGCACATCAAGCTGCATTCCGGGGAGAAGCCCTTCAAATGCCACCTCTGCAACTACGCCTGCCGCCGGAGGGACGCCCTCACTGGCCACCTGAGGACGCACTCCGTCATTAAAGAAGAAACTAATCACAGTGAAATGGCAGAAGACCTGTGCAAGATAGGATCAGAGAGATCTCTCGTGCTGGACAGACTAGCAAGTAACGTCGCCAAACGTAAGAGCTCTATGCCTCAGAAATTTCTTGGGGACAAGGGCCTGTCCGACACGCCCTACGACAGCAGCGCCAGCTACGAGAAGGAGAACGAAATGATGAAGTCCCACGTGATGGACCAAGCCATCAACAACGCCATCAACTACCTGGGGGCCGAGTCCCTGCGCCCGCTGGTGCAGACGCCCCCGGGCGGTTCCGAGGTGGTCCCGGTCATCAGCCCGATGTACCAGCTGCACAAGCCGCTCGCGGAGGGCACCCCGCGCTCCAACCACTCGGCCCAGGACAGCGCCGTGGAGAACCTGCTGCTGCTCTCCAAGGCCAAGTTGGTGCCCTCGGAGCGCGAGGCGTCCCCGAGCAACAGCTGCCAAGACTCCACGGACACCGAGAGCAACAACGAGGAGCAGCGCAGCGGTCTCATCTACCTGACCAACCACATCGCCCCGCACGCGCGCAACGGGCTGTCGCTCAAGGAGGAGCACCGCGCCTACGACCTGCTGCGCGCCGCCTCCGAGAACTCGCAGGACGCGCTCCGCGTGGTCAGCACCAGCGGGGAGCAGATGAAGGTGTACAAGTGCGAACACTGCCGGGTGCTCTTCCTGGATCACGTCATGTACACCATCCACATGGGCTGCCACGGCTTCCGTGATCCTTTTGAGTGCAACATGTGCGGCTACCACAGCCAGGACCGGTACGAGTTCTCGTCGCACATAACGCGAGGGGAGCACCGCTTCCACATGAGCTAAAGCCCTCCCGCGCCCCCACCCCAGACCCCGAGCCACCCCAGGAAAAGCACAAGGACTGCCGCCTTCTCGCTCCCGCCAGCAGCATAGACTGGACTGGACCAGACAATGTTGTGTTTGGATTTGTAACTGTTTTTTGTTTTTTGTTTGAGTTGGTTGATTGGGGTTTGATTTGCTTTTGAAAAGATTTTTATTTTTAGAGGCAGGGCTGCATTGGGAGCATCCAGAACTGCTACCTTCCTAGATGTTTCCCCAGACCGCTGGCTGAGATTCCCTCACCTGTCGCTTCCTAGAATCCCCTTCTCCAAACGATTAGTCTAAATTTTCAGAGAGAAATAGATAAAACACGCCACAGCCTGGGAAGGAGCGTGCTCTACCCTGTGCTAAGCACGGGGTTCGCGCACCAGGTGTCTTTTTCCAGTCCCCAGAAGCAGAGAGCACAGCCCCTGCTGTGTGGGTCTGCAGGTGAGCAGACAGGACAGGTGTGCCGCCACCCAAGTGCCAAGACACAGCAGGGCCAACAACCTGTGCCCAGGCCAGCTTCGAGCTACATGCATCTAGGGCGGAGAGGCTGCACTTGTGAGAGAAAATACTATTTCAAGTCATATTCTGCGTAGGAAAATGAATTGGTTGGGGAAAGTCGTGTCTGTCAGACTGCCCTGGGTGGAGGGAGACGCCGGGCTAGAGCCTTTGGGATCGTCCTGGATTCACTGGCTTTGCGGAGGCTGCTCAGATGGCCTGAGCCTCCCGAGGCTTGCTGCCCCGTAGGAGGAGACTGTCTTCCCGTGGGCATATCTGGGGAGCCCTGTTCCCCGCTTTTTCACTCCCATACCTTTAATGGCCCCCAAAATCTGTCACTACAATTTAAACACCAGTCCCGAAATTTGGATCTTCTTTCTTTTTGAATCTCTCAAACGGCAACATTCCTCAGAAACCAAAGCTTTATTTCAAATCTCTTCCTTCCCTGGCTGGTTCCATCTAGTACCAGAGGCCTCTTTTCCTGAAGAAATCCAATCCTAGCCCTCATTTTAATTATGTACATCTGTTTGTAGCCACAAGCCTGAATTTCTCAGTGTTGGTAAGTTTCTTTACCTACCCTCACTATATATTATTCTCGTTTTAAAACCCATAAAGGAGTGATTTAGAACAGTCATTAATTTTCAACTCAATGAAATATGTGAAGCCCAGCATCTCTGTTGCTAACACACAGAGCTCACCTGTTTGAAACCAAGCTTTCAAACATGTTGAAGCTCTTTACTGTAAAGGCAAGCCAGCATGTGTGTCCACACATACATAGGATGGCTGGCTCTGCACCTGTAGGATATTGGAATGCACAGGGCAATTGAGGGACTGAGCCAGACCTTCGGAGAGTAATGCCACCAGATCCCCTAGGAAAGAGGAGGCAAATGGCACTGCAGGTGAGAACCCCGCCCATCCGTGCTATGACATGGAGGCACTGAAGCCCGAGGAAGGTGTGTGGAGATTCTAATCCCAACAAGCAAGGGTCTCCTTCAAGATTAATGCTATCAATCATTAAGGTCATTACTCTCAACCACCTAGGCAATGAAGAATATACCATTTCAAATATTTACAGTACTTGTCTTCACCAACACTGTCCCAAGGTGAAATGAAGCAACAGAGAGGAAATTGTACATAAGTACCTCAGCATTTAATCCAAACAGGGGTTCTTAGTCTCAGCACTATGACATTTTGGGCTGACTACTTATTTGTTAGGCGGGAGCTCTCCTGTGCATTGTAGGATAATTAGCAGTATCCCTGGTGGCTACCCAATAGACGCCAGTAGCACCCCGAATTGACAACCCAAACTCTCCAGACATCACCAACTGTCCCCTGCGAGGAGAAATCACTCCTGGGGGAGAACCACTGACCCAAATGAATTCTAAACCAATCAAATGTCTGGGAAGCCCTCCAAGAAAAAAAATAGAAAAGCACTTGAAGAATATTCCCAATATTCCCGGTCAGCAGTATCAAGGCTGACTTGTGTTCATGTGGAGTCATTATAAATTCTATAAATCAATTATTCCCCTTCGGTCTTAAAAATATATTTCCTCATAAACATTTGAGTTTTGTTGAAAAGATGGAGTTTACAAAGATACCATTCTTGAGTCATGGATTTCTCTGCTCACAGAAGGGTGTGGCATTTGGAAACGGGAATAAACAAAATTGCTGCACCAATGCACTGAGTGAAGGAAGAGAGACAGAGGATCAAGGGCTTTAGACAGCACTCCTTCAATATGCAATCACAGAGAAAGATGCGCCTTATCCAAGTTAATATCTCTAAGGTGAGAGCCTTCTTAGAGTCAGTTTGTTGCAAATTTCACCTACTCTGTTCTTTTCCATCCATCCCCCTGAGTCAGTTGGTTGAAGGGAGTTATTTTTTCAAGTGGAATTCAAACAAAGCTCAAACCAGAACTGTAAATAGTGATTGCAGGAATTCTTTTCTAAACTGCTTTGCCCTTTCCTCTCACTGCCTTTTATAGCCAATATAAATGTCTCTTTGCACACCTTTTGTTGTGGTTTTATATTGTAACACCATTTTTCTTTGAAACTATTGTATTTAAAGTAAGGTTTCATATTATGTCAGCAAGTAATTAACTTATGTTTAAAAGGTGGCCATATCATGTACCAAAAGTTGCTGAAGTTTCTCTTCTAGCTGGTAAAGTAGGAGTTTGCATGACTTCACACTTTTTTTGCGTAGTTTCTTCTGTTGTATGATGGCGTGAGTGTGTGTCTTGGGTACCGCTGTGTACTACTGTGTGCCTAGATTCCATGCACTCTCGTTGTGTTTGAAGTAAATATTGGAGACCGGAGGGTAACAGGTTGGCCTGTTGATTACAGCTAGTAATCGCTGTGTCTTGTTCCGCCCCCTCCCTGACACCCCAGCTTCCCAGGATGTGGAAAGCCTGGATCTCAGCTCCTTGCCCCATATCCCTTCTGTAATTTGTACCTAAAGAGTGTGATTATCCTAATTCAAGAGTCACTAAAACTCATCACATTATCATTGCATATCAGCAAAGGGTAAAGTCCTAGCACCAATTGCTTCACATACCAGCATGTTCCATTTCCAATTTAGAATTAGCCACATAATAAAATCTTAGAATCTTCCTTGAGAAAGAGCTGCCTGAGATGTAGTTTTGTTATATGGTTCCCCACCGACCATTTTTGTGCTTTTTTCTTGTTTTGTTTTGTTTTGACTGCACTGTGAGTTTTGTAGTGTCCTCTTCTTGCCAAAACAAACGCGAGATGAACTGGACTTATGTAGACAAATCGTGATGCCAGTGTATCCTTCCTTTCTTCAGTTCCAGCAATAATGAATGGTCAACTTTTTTAAAATCTAGATCTCTCTCATTCATTTCAATGTATTTTTACTTTAAGATGAACCAAAATTATTAGACTTATTTAAGATGTACAGGCATCAGAAAAAAGAAGCACATAATGCTTTTGGTGCGATGGCACTCACTGTGAACATGTGTAACCACATATTAATATGCAATATTGTTTCCAATACTTTCTAATACAGTTTTTTATAATGTTGTGTGTGGTGATTGTTCAGGTCGAATCTGTTGTATCCAGTACAGCTTTAGGTCTTCAGCTGCCCTTCTGGCGAGTACATGCACAGGATTGTAAATGAGAAATGCAGTCATATTTCCAGTCTGCCTCTATGATGATGTTAAATTATTGCTGTTTAGCTGTGAACAAGGGATGTACCACTGGAGGAATAGAGTATCCTTTTGTACACATTTTGAAATGCTTCTTCTGTAGTGATAGAACAAATAAATGCAACGAATACTCTGTCTGCCCTATCCCGTGAAGTCCACACTGGCGTAAGAGAAGGCCCAGCAGAGCAGGAATCTGCCTAGACTTTCTCCCAATGAGATCCCAATATGAGAGGGAGAAGAGATGGGCCTCAGGACAGCTGCAATACCACTTGGGAACACATGTGGTGTCTTGATGTGGCCAGCGCAGCAGTTCAGCACAACGTACCTCCCATCTACAACAGTGCTGGACGTGGGAATTCTAAGTCCCAGTCTTGAGGGTGGGTGGAGATGGAGGGCAACAAGAGATACATTTCCAGTTCTCCACTGCAGCATGCTTCAGTCATTCTGTGAGTGGCCGGGCCCAGGGCCCTCACAATTTCACTACCTTGTCTTTTACATAGTCATAAGAATTATCCTCAACATAGCCTTTTGACGCTGTAAATCTTGAGTATTCATTTACCCTTTTCTGATCTCCTGGAAACAGCTGCCTGCCTGCATTGCACTTCTCTTCCCGAGGAGTGGGGTAAATTTAAAAGTCAAGTTATAGTTTGGATGTTAGTATAGAATTTTGAAATTGGGAATTAAAAATCAGGACTGGGGACTGGGAGACCAAAAATTTCTGATCCCATTTCTGATGGATGTGTCACACCTTTTCTGTCAAAATAAAATGTCTTGGAGGTTATGACTCCTTGGTGAAAAAAAAAAAAAAAAAA") + }; + + string actualCds = + new CodingSequence(genomicSeq, codingRegion, regions, false, 0, rnaEdits).GetCodingSequence(); + + const string expectedCds = + "ATGGATGCTGATGAGGGTCAAGACATGTCCCAAGTTTCAGGGAAGGAAAGCCCCCCTGTAAGCGATACTCCAGATGAGGGCGATGAGCCCATGCCGATCCCCGAGGACCTCTCCACCACCTCGGGAGGACAGCAAAGCTCCAAGAGTGACAGAGTCGTGGCCAGTAATGTTAAAGTAGAGACTCAGAGTGATGAAGAGAATGGGCGTGCCTGTGAAATGAATGGGGAAGAATGTGCGGAGGATTTACGAATGCTTGATGCCTCGGGAGAGAAAATGAATGGCTCCCACAGGGACCAAGGCAGCTCGGCTTTGTCGGGAGTTGGAGGCATTCGACTTCCTAACGGAAAACTAAAGTGTGATATCTGTGGGATCATTTGCATCGGGCCCAATGTGCTCATGGTTCACAAAAGAAGCCACACTGGAGAACGGCCCTTCCAGTGCAATCAGTGCGGGGCCTCATTCACCCAGAAGGGCAACCTGCTCCGGCACATCAAGCTGCATTCCGGGGAGAAGCCCTTCAAATGCCACCTCTGCAACTACGCCTGCCGCCGGAGGGACGCCCTCACTGGCCACCTGAGGACGCACTCCGTCATTAAAGAAGAAACTAATCACAGTGAAATGGCAGAAGACCTGTGCAAGATAGGATCAGAGAGATCTCTCGTGCTGGACAGACTAGCAAGTAACGTCGCCAAACGTAAGAGCTCTATGCCTCAGAAATTTCTTGGGGACAAGGGCCTGTCCGACACGCCCTACGACAGCAGCGCCAGCTACGAGAAGGAGAACGAAATGATGAAGTCCCACGTGATGGACCAAGCCATCAACAACGCCATCAACTACCTGGGGGCCGAGTCCCTGCGCCCGCTGGTGCAGACGCCCCCGGGCGGTTCCGAGGTGGTCCCGGTCATCAGCCCGATGTACCAGCTGCACAAGCCGCTCGCGGAGGGCACCCCGCGCTCCAACCACTCGGCCCAGGACAGCGCCGTGGAGAACCTGCTGCTGCTCTCCAAGGCCAAGTTGGTGCCCTCGGAGCGCGAGGCGTCCCCGAGCAACAGCTGCCAAGACTCCACGGACACCGAGAGCAACAACGAGGAGCAGCGCAGCGGTCTCATCTACCTGACCAACCACATCGCCCCGCACGCGCGCAACGGGCTGTCGCTCAAGGAGGAGCACCGCGCCTACGACCTGCTGCGCGCCGCCTCCGAGAACTCGCAGGACGCGCTCCGCGTGGTCAGCACCAGCGGGGAGCAGATGAAGGTGTACAAGTGCGAACACTGCCGGGTGCTCTTCCTGGATCACGTCATGTACACCATCCACATGGGCTGCCACGGCTTCCGTGATCCTTTTGAGTGCAACATGTGCGGCTACCACAGCCAGGACCGGTACGAGTTCTCGTCGCACATAACGCGAGGGGAGCACCGCTTCCACATGAGCTAA"; + + Assert.Equal(expectedCds, actualCds); + } + + [Fact] + public void GetCodingSequence_RnaEditSnv_StartsUtr() + { + // NM_001135635.1, chr11:65684281-65686531 + var genomicSeq = new SimpleSequence( + "TTTTAAAAAACACTCAAGACACAGACCCAAGCCGGGTTTTATTGAAATGCCAGGAGCAGGCACATGTCAAAGTAGCCAAGGAAGGGGGGACAGTGGTACAGGCTGTGTAAGTTGGCAGGGATGGGCAAGCCTCATGTCCATGGTCCTGGCATCCCCTCTGCCAGGGGATAAGTAGGCACAACTACCCTCCCCTCAAAATGGCATGCTCAGGCCAGTGGGGCCCCTACCCCTGGACCATGAAGGCTCCAAGAAGGGCTGGAAGCACTAAGTTTTCTCTCTCCTGAGGGGGAAGGAAAGAAGGGGAGATGCAGGAGGAAGGGGAGGTATAGCGGGGGATGAGCGTTCCAAGAAGTCTCTCCTTCTAGGTGTCTGCACCCAACTCATGGTGCTGGGCAGTGGAGAGGAGCAGCATTACAAAGGGAGGCTGAAGGCTCATCCCTCAGGGAACCGGAGCCCCCCAGCCTGTGGGGCTTGTGTCAGCCCTGAACAGAGGGCAGAAGTTCAAGGGGACTGAAGATGCAGGTAGTTCCCAAGTGACCTAGGAGTCCCCAGAGCTGGGGGGTGTGGCCTTCATAGGACAAGGAGGAAGACAGGAGGATCCAACCCCAGCATGGAGGGGGGAGTGGGCAGTCTCCCCAATTTGGCCCCCCTAGGTCAGTTCCACGTTGTTGGCACGGTCAAGCACTCGGGAGCCACGGGCACTACCCCCAAGCTGGAAACGGCTCTCATAGAGAGTGGGGCAGAGGTGCCAGCGATTGGCCCGGTAGATGCCCAGGTAGGTGTAGACATCAGGCTTGTAGGTGAGCAGGCACTTAATGCCCGCTGCACGGATGGCTGAATCCGCCTCCAGTACACCCAAGCGGTCCGTGAAGTCGTCCGTGTAAACACAGATGACCTGGCGCCCACCCTCCTTGGCACGTGGGCTCACCTTGGCCACCTGAAGCTGGCCTTCAACCACGGCCCGGGCAATGCCAGCCCAGGCGTGGTCCAGCTTGAAGCCCGGTGCCAGATGCATAAGCCACTTGCCCGAGAGCACGTGGTGGGTGATGGCGAGCTGGCGCAGGGTACCCGGTGTGATGGGCCGCCCACTGGTCTGCAGAGCTTCCCAGGCTGCCTGCAGGCCCTGCACGTCCCCGGAGTTGGGGCTGTAGCCCTGCCCATACACTGCAATCCAGCCCACAGGCTCTGAGTTGGGTGAACCGGGGTCCCCATAGCGGGTAACTTGGGATGGTGGGTACTTGGCCAGCCAGGCATCCAGCTCAGTGGCAGGCGTTGTGCGGGCATCAAACACTAGCCAGGGGTCCATGTCAGCTGCCATGGCCTCTGCAGCCAGGTGCTCGGCGGTGAAGCCATCCTCACGGCCACCTGGAGAGCCCTCCTCTTCCAGCTCCTCACCTGGTTCCATCCTGCTGTGAGGGAACCGAGTCAGGGCAGGGTCTGAGACAATAACTACAGATGCCAGGCACTGGATTAAACTGTGGCCTTGAGTAAGAGTTACTGTCGATGCGCCTCAGTTGCCTCATCTTTACAATGGGATAACAACTGTTCCTGTCCCGTAGATCTGCTATGAAAATTAGATGCCTGAGGAGTCAGCGCTCCAGAAGGGTTGCTGCAGTTATTACTATTCTCCTTGACTTACAGAAAAGGAAACTGAGGCTGAGAAAAAGGACTTGCCCAAGGTCACACCTGCAGTGCGTGGCAGGGCCGAAGGGTGAATCCAGGCGTGGGAGCAACCAGCCCCAGCTACACCTCCCGGCCCTGCCAAGGCCCCCTTTTCCTGGCAGGTATCCGGTGCGCTGGCATTTAATAGAGGAACGCAAAGAAGCGCACGTTCGCGCAGCTCCCGAGGCCGGCTCTGTAAGGCCAGGCCTCCCAGGCAGGCGTTATCGGGCCCACTTACAGACGAGGACGCTGAAGTCCAGAGAGGTTACAGGCCGTTCCGAGGCCAATGGGGCGGTTCCCAGACTCGAACCAGGGCTTGTTAGAGCCTGCAGGAGAGCCAGGCTCCGGCCGTGCCGCGCCCGCCGCCATTAACGCCCACGGGCCCGAGCTGTGCTCCCGCCCCGGCCCTGCCCTGCCCCTCCCGCCGCCCGCAGTCACCTCCGGCCTTCGCTGCGTTCGACGCCGGCCCAGCCCCGGGCCCGGCTCCGCTCCTGCCGTGGCTCCGCGCCACCGCCACCGCGCCCCACCCCCGCCACGGCCGCCGCCGCCGCCGCCGCCATCTTAGCGCCGCGCCACCTCAACAACAACT", + 65684281 - 1); + + // the stuff from the genome represents a small part, most of it is brought in through the RNA-edit insertion + var codingRegion = new CodingRegion(65684930, 65686502, 30, 911, 882); + + var regions = new ITranscriptRegion[] + { + new TranscriptRegion(TranscriptRegionType.Exon, 1, 65684281, 65685689, 152, 1560), + new TranscriptRegion(TranscriptRegionType.Intron, 1, 65685690, 65686380, 151, 152), + new TranscriptRegion(TranscriptRegionType.Exon, 2, 65686381, 65686531, 1, 151) + }; + + var rnaEdits = new IRnaEdit[] + { + new RnaEdit(912, 912, "A"), + new RnaEdit(986, 986, "C"), + new RnaEdit(1561, 1560, "AAAAAAAAAAA") + }; + + string actualCds = + new CodingSequence(genomicSeq, codingRegion, regions, true, 0, rnaEdits).GetCodingSequence(); + + const string expectedCds = + "ATGGCGGCGGCGGCGGCGGCGGCCGTGGCGGGGGTGGGGCGCGGTGGCGGTGGCGCGGAGCCACGGCAGGAGCGGAGCCGGGCCCGGGGCTGGGCCGGCGTCGAACGCAGCGAAGGCCGGAGCAGGATGGAACCAGGTGAGGAGCTGGAAGAGGAGGGCTCTCCAGGTGGCCGTGAGGATGGCTTCACCGCCGAGCACCTGGCTGCAGAGGCCATGGCAGCTGACATGGACCCCTGGCTAGTGTTTGATGCCCGCACAACGCCTGCCACTGAGCTGGATGCCTGGCTGGCCAAGTACCCACCATCCCAAGTTACCCGCTATGGGGACCCCGGTTCACCCAACTCAGAGCCTGTGGGCTGGATTGCAGTGTATGGGCAGGGCTACAGCCCCAACTCCGGGGACGTGCAGGGCCTGCAGGCAGCCTGGGAAGCTCTGCAGACCAGTGGGCGGCCCATCACACCGGGTACCCTGCGCCAGCTCGCCATCACCCACCACGTGCTCTCGGGCAAGTGGCTTATGCATCTGGCACCGGGCTTCAAGCTGGACCACGCCTGGGCTGGCATTGCCCGGGCCGTGGTTGAAGGCCAGCTTCAGGTGGCCAAGGTGAGCCCACGTGCCAAGGAGGGTGGGCGCCAGGTCATCTGTGTTTACACGGACGACTTCACGGACCGCTTGGGTGTACTGGAGGCGGATTCAGCCATCCGTGCAGCGGGCATTAAGTGCCTGCTCACCTACAAGCCTGATGTCTACACCTACCTGGGCATCTACCGGGCCAATCGCTGGCACCTCTGCCCCACTCTCTATGAGAGCCGTTTCCAGCTTGGGGGTAGTGCCCGTGGCTCCCGAGTGCTTGACCGTGCCAACAACGTGGAACTGACCTAG"; + + Assert.Equal(expectedCds, actualCds); + } + + [Fact] + public void GetCodingSequence_NonZeroStartExonPhase_CdsBeforeFirstExon() + { + // NM_001220775.1, chr7: + var genomicSeq = new SimpleSequence( + "ACTTTAGTCATTAAAGAAGAAACTAATCACAGTGAAATGGCAGAAGACCTGTGCAAGATAGGATCAGAGAGATCTCTCGTGCTGGACAGACTAGCAAGTAACGTCGCCAAACGTAAGAGCTCTATGCCTCAGAAATTTCTTGGTAAGAGTTAAATGTTTGCTGTCTCTTAAAAAAAAACTATGTGGGTGTTTTAGATGCAAGTAGAAATGAGTTGAGGGTGGAAGAAAGGGAAAAAAATCTTATTTTTTCAAAAGGAAAAATTGGTAAGCTTAACATTCCTTAAATATCTTAGAATTTTTTCCAATAAGTATCTTAAAAATAACAAACCTCCCATCAGTTTTTCCTAGATTTGATTTTGCAGCATCTGGGGCCTGCCCTGTGATCTGCCTGTGGACATCGCTCTTAGGGGCGGCTGCACCAGCGTGCACAGGGTGGAGAGTTTGGGCCTGGCTCGTCCGGGGGACACCACACTGCAGGACACTCCAGGCCTGGCCGGCTTCTCAGAGCTTCAGATCCTCATTTTTCATATGAAGCTCCTAATGCTCCCCTTATGGGGGACTCTGAAGGGTTAATGGGAGGAATCATACAGTGACTGACCCCTGAGAAGTGTCCAGTGAAGACAGGGCTTAGCTAGGATTGCTGTTTTGCCTAATGCTCTGCGGGATTAAAAAAAAAGAAGAAGAAGAACAAGACCATTCGTCTCTCTAGGAGCATTGCCCAGAGTAGGTATTAGACACACCAACACCACCATCCAGCCAGACGCTGCAGGGACAGTGAGCCAGGGTCCGAGTGGAAAGGCGCTAGGCTTGGGAACCAGCTCAGAGTCAATACAGAGCCACCGCCACTCACCAACTCTGTCAGCTTAGTAAAATGGCTCTGCCCCTAGAGCCCTGGTTCCATCCTTTAGTATCTCACAGGGTGATTGTGAATATCCCATGACTCCAAGATTGAGAAAACGTTTAGAATCCCTCGGTGTGAAGGTTAACTCTGTCCGGAAAGAGGACCAGTAAAAGCTTCATGAGGCTGAGATGCACTTTGGAAGAGGAATAGAGTTTCAGCACATTCTAGGTGTTGGAGGAATGGGGGAATCTAGGCAGATGTTTAAAATCAATGAGAAACCAGAATGCTGACCATGAGGGTTGGAGTGGGGGCCTAAGGACATGACGGAGGAGCAGGGTGTGTTCCCAGCTTAACTCAGGTACCCATGGGGAAGCAGGAAAAGTGAAGGTGTCCTAGGCAGCTCTGCCACAGGATGAATGGCTTCAGATGCCAGGTGAGCGAGGGACCCTTCATTCAGTCAGCAGGAAAGAAGCACTGGCATATTTTTTATGAGAACAAAGGCTAGGATAGTAAAGACAGCAAGTACCAAAAAATGACTGGAAAAGGGAGACTGTGGAGGCAGTGGCAGCAGGCATGGAAAGAAGGGCTTGTGAAGGGGAAGGGGTGGTGTCAGAGGAACATAGGGCTGGGGGCAGGGATTAGGTGAGGGAAACCATGAGTCACACTGATTCTAGAGTAGTGTGCCCTTGATGAAAAGGATAACACCAGGTTCTAGGAAAAGATGGGGTTCTGTTTTTGACGTGTTGATTTTCAAGGACTTCTGGTGTTTGTGACACATGGGGAAATTGTGGTGGGAGAGAGGTGGGGCCAGAACAGGGGCTGGTGAGGCCAAGGGTCCCAGAGGGCACCTGTTGACCTGCAGGATGACATGAAGGGGGAAGGACAGAGGCAAGGCCAAGTCCTGGGCACCAGCCTCCCTCTTGCAGCTTCAAATAGGGCTCCATTTTGACCTTTTGATTAATTAGAGGTTTGTCATAGGTTGGGGGTTGAGAGGAGCAAGGGAGAGAAGGATTCAGTGTACAAAAAGAATGAAAGCCACTGGCTGAGCCAGTGGGGAGTTGTCCACACACACATGAGCCTTTGGACCATGAGAACGAGGGAGGCCTTGCCTTCCTGAACGGAGTAGGAGTGAGGTCCTGTGCTGAGCGTAAGCAGTGGGATTCCCACAGCACTGGGCACAGAGCCCACGGGCTGCCTCCTGAGCAGCCAGCATCTGCCTGGGGTGGACACAGTGACAGAGAGATGGGTGGTGACTGGGGTATGGGCAGAGATAAGGCAGCAAGTGTGTGCAAGGGGAGTGAAGGGTTACTGACCTTAAGAAGCAGGGATGGCGTCCTCTGTCAGGTGAGGAGCCTGGAGAATGCTTTGGTGAATGAACGTTTGCAGCCCCTTTTAGCTTTTGGAGACTTGAAACCAAAGGAGAGATTCATCTGTGAAACTCTACTGGAGCCACTCCCCAACCCCCACCCTTGTGAGACCACAATGTGGGCGTTGGCTTGAGATGCTTCTGTGTTAGTAGAAGAAATAAACAACACAGTGCTCTGATGAGGCAAAGCGAAGATGAAAAAGGAGTTCCCAGGGGACATAGTAGGAACAGTGGACGAGGGTAGCAGAAGAGGAGTTTGGAGCAAAAGACTCACAAGCAGCTGCATAATCTGTTGGTGCTTGGCAGTTCATTTGTAAAAATGATGCCTCTTCCTGCCCTAAAATACCTACCTTACCCCCGCTTCAACTTGATGAGATTTCCATCAGTCACTCCCAATGTGTCACAGCTTCTGCAGCCCTAAAATTAAAAGGTGAGTGAGTCTCTGAGGCCCCTCTCCACTTCTCGGATGCTGAGTTTAGCCTTCATGTGAATGTGGAAAGACTAGGAATACAGCTGTTATCACACAAGCTGGCCCAATAGTGGTTCAGTTGAGAGAGCCCCATCCTTCAGAGTCAGCTCCAGCTAGGAGTGACTGGTGGCCTTGAGCATGGTGCTGGGCTTAGTGTTGCCATCTGTGGAATGGGTGTGGGTCTGTTGCCCTGCCTCCTCCCAGAGCTATTCTGAGGCTCAGAAGGGGTGATGGATGTGATGGTGCTCCCAACACTAGAAAGCATCTTAAGAATGTAAGATTTTCATGATGACTGTTGCTCAGAGTGGCTATTATAGTTTTGCTTTATTGTTCTATAACCTATGATTAAAATTTTTACCTTAAACTTTGACGTGAGTGTGAATAAGTATTTGTTTTGCCAGCAACATTCCTCACCACTGGGGCCATTAAAGATCTCCCCCTCTGAGACCATCAAATACAGGTCAACAGGACTGATTAATCTAATTAGAAAAGGGCTTGTATTAAATAGCAATGATAATTGTTGTTTTTAGTCTGTCTGGTGTTTGACTTGGGAACGTTTTTAAAATAGAGAAAAGCACAAAGAGGAAAACAACAATTACCAATATTCCTGCTACCCATTATAATTATCTAGGTATATTTTCTTCTTTTGTAAGAAAAAGAAACCCTGTTATATTGTTAAAATAACACAAAGTTAATATAAAGAATTTTAATGCAAAGATTAATGTTTTCAAATCACCACAAAACCCAACATCCAGAAATTACCAATATTAAAAGTAGAAAAGTATCATTCTAAATATTTTCTGTTGCATATGTATGTGAGTGGATAGGCTGATGAATTAGGTGGATTGATGGATAGGTAAATATGAAATAAATACTTTCATAAATATTCCAACTTATCATACATGCCTTAAATTCAAGAGGTGAAAAAAGACCCAAACAAAACTAGAGAAGCGGCTTATTTTAAATATCCTCTGACATAAAGGAATATTATATTTAAAGGATCCTCTAAGATTAAAAATATGTACTATGAAAAACATTAAGAAATTTGAATTTTTTTTAATCCATTTGTTTCAATTTAAGCAGCATCTACTGGCTCACTGCTTTGAAAAATAAGGACAGTATTCCAGTTCACATTCAGTGTTCCAGTGTTCACATTATCTTATTATTTTTACATTGTCCAGCTTTGTAATATTCACATTCTATTCTGTAATCATAATTCATAGTAGTTTAGTTATTTATTACTAACTCTATTTAAATAGATTCAAGGATCAGACCCTGCCCTTTTCTTCTTATTTATGTTTATTTTGATTAATCTCTTAATTGATTGGACTTTACATTCAAGCAACTTTTTTAAAAAAAAGTTTCTATAGATGTTCTATTTCTATCATTGTATTGTTTTTGAGGATGTTGGCCTGTTGCCTTTGTATTTGATGAGCATTTTGACAGAGTCTATGGTCTTGGGCCACTCTTTCTTTTTCTCCCTTGAGAACTTTTTAGATTTTGCTGATGGCATTGCTTGTTGAATGTTGCTGTGGAAACATCAAGTCTAGTGTAACTGTTTCTTCTTCAAGGTGATTTGCATTTTATTCCTGAATGCCTGAGGGTTCTTTATTTAACCTTGAAGTTAAATACCCTAATTAGGATGTATCTTGGTCTATTCATTCGGAATAAAAAATTCCTGCCATTTTGTCTAGAGAGTCCCTTTTTTTTCTCTTTATTTCTGGGAAATTCTCTTTTATATAAATATGTTTTGTTCCATCTATTGTGATCTCTGTTGAGGGATACCAGTTGTCCATATGTTAGATAATTTGTCTTCCATATCTGTTAACAGTTCTTAAAGTTTTTTGTTTATTTCTTTGTCTATTTTTACATTTACTCACTGTTCTCTTGTGGTTTTCCTCTGTCAGTAATTTAATTTTTAGTAGTTCCTGTTCTATTACTTGCTATTTTTAATCCATGCATTAATTTTATAATAATATTATTTTGCTCCTTATTTTGTCTCCTGAGACCCGAAATCTCTTTTTTCCTCTTACTCTGTTGCTTTTGCATTTTATTTTGAATACTTTTAAAATTGATTCCATGTTATGAAGCAATTATGAGGCATTTCCTCTCTTGTTGGAATTAACGATTTTTTCCCCTAGGAGGGACTCTATGGTCTGTGTTTTACTTCCTTTCTTCCCCTGTATTTCTAGAAAATATTTTCCTAGTAACCCTGACATTTCTTTTCATCTTGCTTATTCTAGTTGGTCTGATATAGCTTGATTGACATTTCAGCCTTCTTCCCACTATATTTTTTTTTCCTGTGAGAGCTATTGGGTTTTCTAAATCCTGAAAGAATGCCAAAGATGGGGTTGGAGGAGTTTGGTGAGGCAAAGTGCAGCCTTTGTTAAAATACTTTTCCTTTGCTCTCTCTCCCTCATCTGAAATTTAGTTAAATACCCTAAGCCATCAGCACTGTACCTAGTTGGGGAATGCTTTCATCCCCACAGGAGATTCTCTGGGGCTTTGGGCCATCTTCCCCTTCAGTGTAGACCACAGAGGACTTTGCTTCTGTCCCAGGGAGCCCGCAGGGGCTCACTTCTCCATGTTCATCTGATTCTTGTCAGCCAAGGTTTCAAATGCTTTTCTGATCAGAACAGGGAAAAGATACCTATCTGAATCATGTCTTTATAGATATGAGGCTATGAGGGAAAATTCTGAGGTTATTCTTGACTCACACCTAAAGATTTGGAAATGAGATTAGCAGCAAAGCTTTGCCCTACATCTCATGTCAGAATTTTCTGTTTCTTTCTAGTCTTTGAGTGTATGTGTGTTCTCACACACGCCATAATGAAATGCATATTATATATAATTATGTGTATATATAATATTCTATGACTATACATGACATGTTCCTTTAGCTGATTGCTGTTAAGAGAAATTTATAGGTTTTTATTTTTCTTGTTTTGTTGGGTATTAAGGAAGAGAAATTCTATGGTAATTTTCATGTGGCACAGTAATCTGGCATATATGTTGATTTTTTTCCTACACCCATTTGTTGTGATACCAAGTTTGAAAACAACAGATTTCAGTGGTTGCTTGGGAAACCACAGAACCATGACTTGGGGAGAGACAGGATGATTAGGTGGGAAAGCACCCTTTTGGTGGGGCTGTAAAGACTTTTATATTTAGCAAAATTGGCTACAAAGTCCATTCCCCTCCTTTTCTTGCCTTGATTTGGTAGAGGGATAGACTTGGATACAAACTAGAATGGATTCATTCTTCTCTGGAGTTAGTGTAACAAGACATTTAGCTGCTCAACACAAAAACAGAAACAAAAAAATTGTGTGGTTTCAGCAGTGCTATACAATTACTTTTTCTGACCTTTAATGGAGAGAAACACCACTTCTTTGGTCCCTACCATCAGCTTCATAGGGTTTTCATCCTGTTCTGTTTCTGGGAGGGCGTAACTGGCCATGCACAAGTTTTTTTTCTCTAATCAGAGTATGTGCCACTTCTGACCACCAGTAGATGAAAACGAATGGAAACCAGGCTATTATATGATACATATCCATTACAAAATAAGACATGAAACTCAAAGGTACTTTATGGTATAATGGGGCATATATTCCTGGACAATTCTTAATGGTCACAGATTTTATAAAAGGACTATTAGTAAATGTATGAATTACAGAGTAATTTATCCTTCTGTTAGTAAGAACCAGCTGATGACCTCAGTGTCAGGTGCATCGTGGAAGGTGTTGGGACCTTCCCTTGCCACCACCCTCACCAGCCATCATCAGCCATAACCTGCACATTGGGGAAGTTTTGACTTATCCCTCACTTTTGCCCCTCTTCAAGCTGTTCTTTCCACAGTGAATGAGAAGGCCACTTCTTCCTTCAAACCTTTCAGTGGTTTCCATTTTCCTTTAGACAAAGTCTCTGCCTAGCTGGCCTCTGCCTGCCCCTCCTGCCTACCTCTCGAGCACTGCCCCCACCTAGGGCTCTGGTTCCCCAACCTTCACTCGGTCCTGCCACACCTCCCAGCCCCTTCTCCCTTCAGAACTTTCCTTCTTGTTGTCCCCAACACTGGGACACAAAACCCTCCTTATCAACCCTCCTTATCTGGCTGACTCTTACAAGATCAGAAACCTGTGTAATGCTCTCATGGCACGCTCCCCTTGTCTTCGTGGATTTCTCAGATGGGAAGGAATTATCCATGCAATCACACATAAACTTCTACCTACCCTCCCCTAGTAGCTGTCTGCTGCTAAGGATGGGGACCATTCTCACTTACTCACTGTTCTGTCCCTCTGCCCAGTCCAGATGTGTTGAAGGATGGAAATATACAGAGTAGTGGTAAAATATAAACCGTTCAGACATTCCAAGGATGGGCTCATGTGCTTTGACTCATTAATGTACCACTGCTGAAAACAGAACACAGCCGCAGTCTTGCCAGTAAGAGTGCAGTTACTGTAATTAATGAATTTGCTAATTAAGCCATGATTTCATACTGAACTTATGACCAACATATTGAGAAGGTGTGTCTTCAAGAAAATTTATTTTTTGTATTAAGATATTTACTCCAAAGCTAATTGAAGAAGCCAAATCTAGGCTCTGGTTTCACCATTGCCAGGGAAATGAGCTCATGGACTCCTATGAACTGATGATGTTAGATCAGAAGTTTCTCAAGGCCAGGGCCCAATCACTGCTGAGGCGTCAACAGTAGTTCCTTGTACATCAATAATTCTCATTACTTTTAAAAAATAACAGATGAATAGCAACTATTTTCCCTGTAGCTCCCTTGCTGTGCCTCCTACCCTCCACCACATGTTTCTGGGGAGCCCTGCTTCGGGCCTGCCAACTACAGAGAATTACTTTTGAGTATCCCTTCCACTCTCATCTCAAGACAGAGTTCATCTACCTTTGGGTTATTTGTCAAAAATGTGTCATTTTATTACAAAAAATATACAATCATCATGTATTTTGATTAAATTTTACACTAGATTATTAAAATTATTAAATACAATTATTAAAATTAATAATTTAACATATCACATATTTTAAATATATTGTATATAATGAATAATAATATAATTATTGTCTATTTTAATTCAATAAATGTATAGTAAGTTAGCCAGTTGTAAATTACTGAGAACACTCTACTGAAAAAGCATCATTTCAAATACACTATTTAAAATATTAAATGAAATACAATAACATAATTAAACTAATCTTTGGTTCCCCTATTTATGTATTCATTTATCCAACAAAATCTCCTTAAGTGCTTATAATGGGTAGGTCCTGGCTCGGTGTCCCCTAGACAGACGCATGGGCCTTCCCCCAGCCCGTCAGTATGGTGCAGGTGTGATGTGTCCGCAGGTGTGTGTGTATGTGTGCAGGTGTGGGGTCCGCAGGCGTGCTGGGCCCCCAGGCCGTGTTCCCCTTCCCCTCCCCGGTTGTAGATTTCAGCTGTTGCTGCCAGACCTGACCGGTTCCGGAGGTGGCCGCGCCCCACTCACTGTCGCCTGCTTTCCACAGGGGACAAGGGCCTGTCCGACACGCCCTACGACAGCAGCGCCAGCTACGAGAAGGAGAACGAAATGATGAAGTCCCACGTGATGGACCAAGCCATCAACAACGCCATCAACTACCTGGGGGCCGAGTCCCTGCGCCCGCTGGTGCAGACGCCCCCGGGCGGTTCCGAGGTGGTCCCGGTCATCAGCCCGATGTACCAGCTGCACAAGCCGCTCGCGGAGGGCACCCCGCGCTCCAACCACTCGGCCCAGGACAGCGCCGTGGAGAACCTGCTGCTGCTCTCCAAGGCCAAGTTGGTGCCCTCGGAGCGCGAGGCGTCCCCGAGCAACAGCTGCCAAGACTCCACGGACACCGAGAGCAACAACGAGGAGCAGCGCAGCGGTCTCATCTACCTGACCAACCACATCGCCCCGCACGCGCGCAACGGGCTGTCGCTCAAGGAGGAGCACCGCGCCTACGACCTGCTGCGCGCCGCCTCCGAGAACTCGCAGGACGCGCTCCGCGTGGTCAGCACCAGCGGGGAGCAGATGAAGGTGTACAAGTGCGAACACTGCCGGGTGCTCTTCCTGGATCACGTCATGTACACCATCCACATGGGCTGCCACGGCTTCCGTGATCCTTTTGAGTGCAACATGTGCGGCTACCACAGCCAGGACCGGTACGAGTTCTCGTCGCACATAACGCGAGGGGAGCACCGCTTCCACATGAGCTAAAGCCCTCCCGCGCCCCCACCCCAGACCCCGAGCCACCCCAGGAAAAGCACAAGGACTGCCGCCTTCTCGCTCCCGCCAGCAGCATAGACTGGACTGGACCAGACAATGTTGTGTTTGGATTTGTAACTGTTTTTTGTTTTTTGTTTGAGTTGGTTGATTGGGGTTTGATTTGCTTTTGAAAAGATTTTTATTTTTAGAGGCAGGGCTGCATTGGGAGCATCCAGAACTGCTACCTTCCTAGATGTTTCCCCAGACCGCTGGCTGAGATTCCCTCACCTGTCGCTTCCTAGAATCCCCTTCTCCAAACGATTAGTCTAAATTTTCAGAGAGAAATAGATAAAACACGCCACAGCCTGGGAAGGAGCGTGCTCTACCCTGTGCTAAGCACGGGGTTCGCGCACCAGGTGTCTTTTTCCAGTCCCCAGAAGCAGAGAGCACAGCCCCTGCTGTGTGGGTCTGCAGGTGAGCAGACAGGACAGGTGTGCCGCCACCCAAGTGCCAAGACACAGCAGGGCCAACAACCTGTGCCCAGGCCAGCTTCGAGCTACATGCATCTAGGGCGGAGAGGCTGCACTTGTGAGAGAAAATACTATTTCAAGTCATATTCTGCGTAGGAAAATGAATTGGTTGGGGAAAGTCGTGTCTGTCAGACTGCCCTGGGTGGAGGGAGACGCCGGGCTAGAGCCTTTGGGATCGTCCTGGATTCACTGGCTTTGCGGAGGCTGCTCAGATGGCCTGAGCCTCCCGAGGCTTGCTGCCCCGTAGGAGGAGACTGTCTTCCCGTGGGCATATCTGGGGAGCCCTGTTCCCCGCTTTTTCACTCCCATACCTTTAATGGCCCCCAAAATCTGTCACTACAATTTAAACACCAGTCCCGAAATTTGGATCTTCTTTCTTTTTGAATCTCTCAAACGGCAACATTCCTCAGAAACCAAAGCTTTATTTCAAATCTCTTCCTTCCCTGGCTGGTTCCATCTAGTACCAGAGGCCTCTTTTCCTGAAGAAATCCAATCCTAGCCCTCATTTTAATTATGTACATCTGTTTGTAGCCACAAGCCTGAATTTCTCAGTGTTGGTAAGTTTCTTTACCTACCCTCACTATATATTATTCTCGTTTTAAAACCCATAAAGGAGTGATTTAGAACAGTCATTAATTTTCAACTCAATGAAATATGTGAAGCCCAGCATCTCTGTTGCTAACACACAGAGCTCACCTGTTTGAAACCAAGCTTTCAAACATGTTGAAGCTCTTTACTGTAAAGGCAAGCCAGCATGTGTGTCCACACATACATAGGATGGCTGGCTCTGCACCTGTAGGATATTGGAATGCACAGGGCAATTGAGGGACTGAGCCAGACCTTCGGAGAGTAATGCCACCAGATCCCCTAGGAAAGAGGAGGCAAATGGCACTGCAGGTGAGAACCCCGCCCATCCGTGCTATGACATGGAGGCACTGAAGCCCGAGGAAGGTGTGTGGAGATTCTAATCCCAACAAGCAAGGGTCTCCTTCAAGATTAATGCTATCAATCATTAAGGTCATTACTCTCAACCACCTAGGCAATGAAGAATATACCATTTCAAATATTTACAGTACTTGTCTTCACCAACACTGTCCCAAGGTGAAATGAAGCAACAGAGAGGAAATTGTACATAAGTACCTCAGCATTTAATCCAAACAGGGGTTCTTAGTCTCAGCACTATGACATTTTGGGCTGACTACTTATTTGTTAGGCGGGAGCTCTCCTGTGCATTGTAGGATAATTAGCAGTATCCCTGGTGGCTACCCAATAGACGCCAGTAGCACCCCGAATTGACAACCCAAACTCTCCAGACATCACCAACTGTCCCCTGCGAGGAGAAATCACTCCTGGGGGAGAACCACTGACCCAAATGAATTCTAAACCAATCAAATGTCTGGGAAGCCCTCCAAGAAAAAAAATAGAAAAGCACTTGAAGAATATTCCCAATATTCCCGGTCAGCAGTATCAAGGCTGACTTGTGTTCATGTGGAGTCATTATAAATTCTATAAATCAATTATTCCCCTTCGGTCTTAAAAATATATTTCCTCATAAACATTTGAGTTTTGTTGAAAAGATGGAGTTTACAAAGATACCATTCTTGAGTCATGGATTTCTCTGCTCACAGAAGGGTGTGGCATTTGGAAACGGGAATAAACAAAATTGCTGCACCAATGCACTGAGTGAAGGAAGAGAGACAGAGGATCAAGGGCTTTAGACAGCACTCCTTCAATATGCAATCACAGAGAAAGATGCGCCTTATCCAAGTTAATATCTCTAAGGTGAGAGCCTTCTTAGAGTCAGTTTGTTGCAAATTTCACCTACTCTGTTCTTTTCCATCCATCCCCCTGAGTCAGTTGGTTGAAGGGAGTTATTTTTTCAAGTGGAATTCAAACAAAGCTCAAACCAGAACTGTAAATAGTGATTGCAGGAATTCTTTTCTAAACTGCTTTGCCCTTTCCTCTCACTGCCTTTTATAGCCAATATAAATGTCTCTTTGCACACCTTTTGTTGTGGTTTTATATTGTAACACCATTTTTCTTTGAAACTATTGTATTTAAAGTAAGGTTTCATATTATGTCAGCAAGTAATTAACTTATGTTTAAAAGGTGGCCATATCATGTACCAAAAGTTGCTGAAGTTTCTCTTCTAGCTGGTAAAGTAGGAGTTTGCATGACTTCACACTTTTTTTGCGTAGTTTCTTCTGTTGTATGATGGCGTGAGTGTGTGTCTTGGGTACCGCTGTGTACTACTGTGTGCCTAGATTCCATGCACTCTCGTTGTGTTTGAAGTAAATATTGGAGACCGGAGGGTAACAGGTTGGCCTGTTGATTACAGCTAGTAATCGCTGTGTCTTGTTCCGCCCCCTCCCTGACACCCCAGCTTCCCAGGATGTGGAAAGCCTGGATCTCAGCTCCTTGCCCCATATCCCTTCTGTAATTTGTACCTAAAGAGTGTGATTATCCTAATTCAAGAGTCACTAAAACTCATCACATTATCATTGCATATCAGCAAAGGGTAAAGTCCTAGCACCAATTGCTTCACATACCAGCATGTTCCATTTCCAATTTAGAATTAGCCACATAATAAAATCTTAGAATCTTCCTTGAGAAAGAGCTGCCTGAGATGTAGTTTTGTTATATGGTTCCCCACCGACCATTTTTGTGCTTTTTTCTTGTTTTGTTTTGTTTTGACTGCACTGTGAGTTTTGTAGTGTCCTCTTCTTGCCAAAACAAACGCGAGATGAACTGGACTTATGTAGACAAATCGTGATGCCAGTGTATCCTTCCTTTCTTCAGTTCCAGCAATAATGAATGGTCAACTTTTTTAAAATCTAGATCTCTCTCATTCATTTCAATGTATTTTTACTTTAAGATGAACCAAAATTATTAGACTTATTTAAGATGTACAGGCATCAGAAAAAAGAAGCACATAATGCTTTTGGTGCGATGGCACTCACTGTGAACATGTGTAACCACATATTAATATGCAATATTGTTTCCAATACTTTCTAATACAGTTTTTTATAATGTTGTGTGTGGTGATTGTTCAGGTCGAATCTGTTGTATCCAGTACAGCTTTAGGTCTTCAGCTGCCCTTCTGGCGAGTACATGCACAGGATTGTAAATGAGAAATGCAGTCATATTTCCAGTCTGCCTCTATGATGATGTTAAATTATTGCTGTTTAGCTGTGAACAAGGGATGTACCACTGGAGGAATAGAGTATCCTTTTGTACACATTTTGAAATGCTTCTTCTGTAGTGATAGAACAAATAAATGCAACGAATACTCTGTCTGCCCTATCCCGTGAAGTCCACACTGGCGTAAGAGAAGGCCCAGCAGAGCAGGAATCTGCCTAGACTTTCTCCCAATGAGATCCCAATATGAGAGGGAGAAGAGATGGGCCTCAGGACAGCTGCAATACCACTTGGGAACACATGTGGTGTCTTGATGTGGCCAGCGCAGCAGTTCAGCACAACGTACCTCCCATCTACAACAGTGCTGGACGTGGGAATTCTAAGTCCCAGTCTTGAGGGTGGGTGGAGATGGAGGGCAACAAGAGATACATTTCCAGTTCTCCACTGCAGCATGCTTCAGTCATTCTGTGAGTGGCCGGGCCCAGGGCCCTCACAATTTCACTACCTTGTCTTTTACATAGTCATAAGAATTATCCTCAACATAGCCTTTTGACGCTGTAAATCTTGAGTATTCATTTACCCTTTTCTGATCTCCTGGAAACAGCTGCCTGCCTGCATTGCACTTCTCTTCCCGAGGAGTGGGGTAAATTTAAAAGTCAAGTTATAGTTTGGATGTTAGTATAGAATTTTGAAATTGGGAATTAAAAATCAGGACTGGGGACTGGGAGACCAAAAATTTCTGATCCCATTTCTGATGGATGTGTCACACCTTTTCTGTCAAAATAAAATGTCTTGGAGGTTATGACTCCTTGGTGAAACC", + 50459420 - 1); + + var codingRegion = new CodingRegion(50459422, 50468325, 169, 1053, 885); + + var rnaEdits = new IRnaEdit[] + { + new RnaEdit(1, 0, + "GAATTCCGGCGTCGCGGACGCATCCCAGTCTGGGCGGGACGCTCGGCCGCGGCGAGGCGGGCAAGCCTGGCAGGGCAGAGGGAGCCCCGGCTCCGAGGTTGCTCTTCGCCCCCGAGGATCAGTCTTGGCCCCAAAGCGCGACGCACAAATCCACATAACCTGAGGACCATGGATGCTGATGAGGGTCAAGACATGTCCCAAG"), + new RnaEdit(4, 3, "C"), + new RnaEdit(5325, 5324, "AAAAAAAAAAAAAAA") + }; + + var regions = new ITranscriptRegion[] + { + // insertion + new TranscriptRegion(TranscriptRegionType.Exon, 1, 50459422, 50459424, 204, 206), + new TranscriptRegion(TranscriptRegionType.Exon, 1, 50459425, 50459561, 208, 343), + new TranscriptRegion(TranscriptRegionType.Exon, 2, 50467616, 50472799, 344, 5527) + }; + + string actualCdna = + new CdnaSequence(genomicSeq, codingRegion, regions, false, rnaEdits).GetCdnaSequence(); + const string expectedCdna = + "GAATTCCGGCGTCGCGGACGCATCCCAGTCTGGGCGGGACGCTCGGCCGCGGCGAGGCGGGCAAGCCTGGCAGGGCAGAGGGAGCCCCGGCTCCGAGGTTGCTCTTCGCCCCCGAGGATCAGTCTTGGCCCCAAAGCGCGACGCACAAATCCACATAACCTGAGGACCATGGATGCTGATGAGGGTCAAGACATGTCCCAAGTTTCAGTCATTAAAGAAGAAACTAATCACAGTGAAATGGCAGAAGACCTGTGCAAGATAGGATCAGAGAGATCTCTCGTGCTGGACAGACTAGCAAGTAACGTCGCCAAACGTAAGAGCTCTATGCCTCAGAAATTTCTTGGGGACAAGGGCCTGTCCGACACGCCCTACGACAGCAGCGCCAGCTACGAGAAGGAGAACGAAATGATGAAGTCCCACGTGATGGACCAAGCCATCAACAACGCCATCAACTACCTGGGGGCCGAGTCCCTGCGCCCGCTGGTGCAGACGCCCCCGGGCGGTTCCGAGGTGGTCCCGGTCATCAGCCCGATGTACCAGCTGCACAAGCCGCTCGCGGAGGGCACCCCGCGCTCCAACCACTCGGCCCAGGACAGCGCCGTGGAGAACCTGCTGCTGCTCTCCAAGGCCAAGTTGGTGCCCTCGGAGCGCGAGGCGTCCCCGAGCAACAGCTGCCAAGACTCCACGGACACCGAGAGCAACAACGAGGAGCAGCGCAGCGGTCTCATCTACCTGACCAACCACATCGCCCCGCACGCGCGCAACGGGCTGTCGCTCAAGGAGGAGCACCGCGCCTACGACCTGCTGCGCGCCGCCTCCGAGAACTCGCAGGACGCGCTCCGCGTGGTCAGCACCAGCGGGGAGCAGATGAAGGTGTACAAGTGCGAACACTGCCGGGTGCTCTTCCTGGATCACGTCATGTACACCATCCACATGGGCTGCCACGGCTTCCGTGATCCTTTTGAGTGCAACATGTGCGGCTACCACAGCCAGGACCGGTACGAGTTCTCGTCGCACATAACGCGAGGGGAGCACCGCTTCCACATGAGCTAAAGCCCTCCCGCGCCCCCACCCCAGACCCCGAGCCACCCCAGGAAAAGCACAAGGACTGCCGCCTTCTCGCTCCCGCCAGCAGCATAGACTGGACTGGACCAGACAATGTTGTGTTTGGATTTGTAACTGTTTTTTGTTTTTTGTTTGAGTTGGTTGATTGGGGTTTGATTTGCTTTTGAAAAGATTTTTATTTTTAGAGGCAGGGCTGCATTGGGAGCATCCAGAACTGCTACCTTCCTAGATGTTTCCCCAGACCGCTGGCTGAGATTCCCTCACCTGTCGCTTCCTAGAATCCCCTTCTCCAAACGATTAGTCTAAATTTTCAGAGAGAAATAGATAAAACACGCCACAGCCTGGGAAGGAGCGTGCTCTACCCTGTGCTAAGCACGGGGTTCGCGCACCAGGTGTCTTTTTCCAGTCCCCAGAAGCAGAGAGCACAGCCCCTGCTGTGTGGGTCTGCAGGTGAGCAGACAGGACAGGTGTGCCGCCACCCAAGTGCCAAGACACAGCAGGGCCAACAACCTGTGCCCAGGCCAGCTTCGAGCTACATGCATCTAGGGCGGAGAGGCTGCACTTGTGAGAGAAAATACTATTTCAAGTCATATTCTGCGTAGGAAAATGAATTGGTTGGGGAAAGTCGTGTCTGTCAGACTGCCCTGGGTGGAGGGAGACGCCGGGCTAGAGCCTTTGGGATCGTCCTGGATTCACTGGCTTTGCGGAGGCTGCTCAGATGGCCTGAGCCTCCCGAGGCTTGCTGCCCCGTAGGAGGAGACTGTCTTCCCGTGGGCATATCTGGGGAGCCCTGTTCCCCGCTTTTTCACTCCCATACCTTTAATGGCCCCCAAAATCTGTCACTACAATTTAAACACCAGTCCCGAAATTTGGATCTTCTTTCTTTTTGAATCTCTCAAACGGCAACATTCCTCAGAAACCAAAGCTTTATTTCAAATCTCTTCCTTCCCTGGCTGGTTCCATCTAGTACCAGAGGCCTCTTTTCCTGAAGAAATCCAATCCTAGCCCTCATTTTAATTATGTACATCTGTTTGTAGCCACAAGCCTGAATTTCTCAGTGTTGGTAAGTTTCTTTACCTACCCTCACTATATATTATTCTCGTTTTAAAACCCATAAAGGAGTGATTTAGAACAGTCATTAATTTTCAACTCAATGAAATATGTGAAGCCCAGCATCTCTGTTGCTAACACACAGAGCTCACCTGTTTGAAACCAAGCTTTCAAACATGTTGAAGCTCTTTACTGTAAAGGCAAGCCAGCATGTGTGTCCACACATACATAGGATGGCTGGCTCTGCACCTGTAGGATATTGGAATGCACAGGGCAATTGAGGGACTGAGCCAGACCTTCGGAGAGTAATGCCACCAGATCCCCTAGGAAAGAGGAGGCAAATGGCACTGCAGGTGAGAACCCCGCCCATCCGTGCTATGACATGGAGGCACTGAAGCCCGAGGAAGGTGTGTGGAGATTCTAATCCCAACAAGCAAGGGTCTCCTTCAAGATTAATGCTATCAATCATTAAGGTCATTACTCTCAACCACCTAGGCAATGAAGAATATACCATTTCAAATATTTACAGTACTTGTCTTCACCAACACTGTCCCAAGGTGAAATGAAGCAACAGAGAGGAAATTGTACATAAGTACCTCAGCATTTAATCCAAACAGGGGTTCTTAGTCTCAGCACTATGACATTTTGGGCTGACTACTTATTTGTTAGGCGGGAGCTCTCCTGTGCATTGTAGGATAATTAGCAGTATCCCTGGTGGCTACCCAATAGACGCCAGTAGCACCCCGAATTGACAACCCAAACTCTCCAGACATCACCAACTGTCCCCTGCGAGGAGAAATCACTCCTGGGGGAGAACCACTGACCCAAATGAATTCTAAACCAATCAAATGTCTGGGAAGCCCTCCAAGAAAAAAAATAGAAAAGCACTTGAAGAATATTCCCAATATTCCCGGTCAGCAGTATCAAGGCTGACTTGTGTTCATGTGGAGTCATTATAAATTCTATAAATCAATTATTCCCCTTCGGTCTTAAAAATATATTTCCTCATAAACATTTGAGTTTTGTTGAAAAGATGGAGTTTACAAAGATACCATTCTTGAGTCATGGATTTCTCTGCTCACAGAAGGGTGTGGCATTTGGAAACGGGAATAAACAAAATTGCTGCACCAATGCACTGAGTGAAGGAAGAGAGACAGAGGATCAAGGGCTTTAGACAGCACTCCTTCAATATGCAATCACAGAGAAAGATGCGCCTTATCCAAGTTAATATCTCTAAGGTGAGAGCCTTCTTAGAGTCAGTTTGTTGCAAATTTCACCTACTCTGTTCTTTTCCATCCATCCCCCTGAGTCAGTTGGTTGAAGGGAGTTATTTTTTCAAGTGGAATTCAAACAAAGCTCAAACCAGAACTGTAAATAGTGATTGCAGGAATTCTTTTCTAAACTGCTTTGCCCTTTCCTCTCACTGCCTTTTATAGCCAATATAAATGTCTCTTTGCACACCTTTTGTTGTGGTTTTATATTGTAACACCATTTTTCTTTGAAACTATTGTATTTAAAGTAAGGTTTCATATTATGTCAGCAAGTAATTAACTTATGTTTAAAAGGTGGCCATATCATGTACCAAAAGTTGCTGAAGTTTCTCTTCTAGCTGGTAAAGTAGGAGTTTGCATGACTTCACACTTTTTTTGCGTAGTTTCTTCTGTTGTATGATGGCGTGAGTGTGTGTCTTGGGTACCGCTGTGTACTACTGTGTGCCTAGATTCCATGCACTCTCGTTGTGTTTGAAGTAAATATTGGAGACCGGAGGGTAACAGGTTGGCCTGTTGATTACAGCTAGTAATCGCTGTGTCTTGTTCCGCCCCCTCCCTGACACCCCAGCTTCCCAGGATGTGGAAAGCCTGGATCTCAGCTCCTTGCCCCATATCCCTTCTGTAATTTGTACCTAAAGAGTGTGATTATCCTAATTCAAGAGTCACTAAAACTCATCACATTATCATTGCATATCAGCAAAGGGTAAAGTCCTAGCACCAATTGCTTCACATACCAGCATGTTCCATTTCCAATTTAGAATTAGCCACATAATAAAATCTTAGAATCTTCCTTGAGAAAGAGCTGCCTGAGATGTAGTTTTGTTATATGGTTCCCCACCGACCATTTTTGTGCTTTTTTCTTGTTTTGTTTTGTTTTGACTGCACTGTGAGTTTTGTAGTGTCCTCTTCTTGCCAAAACAAACGCGAGATGAACTGGACTTATGTAGACAAATCGTGATGCCAGTGTATCCTTCCTTTCTTCAGTTCCAGCAATAATGAATGGTCAACTTTTTTAAAATCTAGATCTCTCTCATTCATTTCAATGTATTTTTACTTTAAGATGAACCAAAATTATTAGACTTATTTAAGATGTACAGGCATCAGAAAAAAGAAGCACATAATGCTTTTGGTGCGATGGCACTCACTGTGAACATGTGTAACCACATATTAATATGCAATATTGTTTCCAATACTTTCTAATACAGTTTTTTATAATGTTGTGTGTGGTGATTGTTCAGGTCGAATCTGTTGTATCCAGTACAGCTTTAGGTCTTCAGCTGCCCTTCTGGCGAGTACATGCACAGGATTGTAAATGAGAAATGCAGTCATATTTCCAGTCTGCCTCTATGATGATGTTAAATTATTGCTGTTTAGCTGTGAACAAGGGATGTACCACTGGAGGAATAGAGTATCCTTTTGTACACATTTTGAAATGCTTCTTCTGTAGTGATAGAACAAATAAATGCAACGAATACTCTGTCTGCCCTATCCCGTGAAGTCCACACTGGCGTAAGAGAAGGCCCAGCAGAGCAGGAATCTGCCTAGACTTTCTCCCAATGAGATCCCAATATGAGAGGGAGAAGAGATGGGCCTCAGGACAGCTGCAATACCACTTGGGAACACATGTGGTGTCTTGATGTGGCCAGCGCAGCAGTTCAGCACAACGTACCTCCCATCTACAACAGTGCTGGACGTGGGAATTCTAAGTCCCAGTCTTGAGGGTGGGTGGAGATGGAGGGCAACAAGAGATACATTTCCAGTTCTCCACTGCAGCATGCTTCAGTCATTCTGTGAGTGGCCGGGCCCAGGGCCCTCACAATTTCACTACCTTGTCTTTTACATAGTCATAAGAATTATCCTCAACATAGCCTTTTGACGCTGTAAATCTTGAGTATTCATTTACCCTTTTCTGATCTCCTGGAAACAGCTGCCTGCCTGCATTGCACTTCTCTTCCCGAGGAGTGGGGTAAATTTAAAAGTCAAGTTATAGTTTGGATGTTAGTATAGAATTTTGAAATTGGGAATTAAAAATCAGGACTGGGGACTGGGAGACCAAAAATTTCTGATCCCATTTCTGATGGATGTGTCACACCTTTTCTGTCAAAATAAAATGTCTTGGAGGTTATGACTCCTTGGTGAAAAAAAAAAAAAAAAAA"; + + Assert.Equal(expectedCdna, actualCdna); + + // var cdsTemp = actualCdna.Substring(codingRegion.CdnaStart - 1, codingRegion.Length); + const string expectedCds = + "ATGGATGCTGATGAGGGTCAAGACATGTCCCAAGTTTCAGTCATTAAAGAAGAAACTAATCACAGTGAAATGGCAGAAGACCTGTGCAAGATAGGATCAGAGAGATCTCTCGTGCTGGACAGACTAGCAAGTAACGTCGCCAAACGTAAGAGCTCTATGCCTCAGAAATTTCTTGGGGACAAGGGCCTGTCCGACACGCCCTACGACAGCAGCGCCAGCTACGAGAAGGAGAACGAAATGATGAAGTCCCACGTGATGGACCAAGCCATCAACAACGCCATCAACTACCTGGGGGCCGAGTCCCTGCGCCCGCTGGTGCAGACGCCCCCGGGCGGTTCCGAGGTGGTCCCGGTCATCAGCCCGATGTACCAGCTGCACAAGCCGCTCGCGGAGGGCACCCCGCGCTCCAACCACTCGGCCCAGGACAGCGCCGTGGAGAACCTGCTGCTGCTCTCCAAGGCCAAGTTGGTGCCCTCGGAGCGCGAGGCGTCCCCGAGCAACAGCTGCCAAGACTCCACGGACACCGAGAGCAACAACGAGGAGCAGCGCAGCGGTCTCATCTACCTGACCAACCACATCGCCCCGCACGCGCGCAACGGGCTGTCGCTCAAGGAGGAGCACCGCGCCTACGACCTGCTGCGCGCCGCCTCCGAGAACTCGCAGGACGCGCTCCGCGTGGTCAGCACCAGCGGGGAGCAGATGAAGGTGTACAAGTGCGAACACTGCCGGGTGCTCTTCCTGGATCACGTCATGTACACCATCCACATGGGCTGCCACGGCTTCCGTGATCCTTTTGAGTGCAACATGTGCGGCTACCACAGCCAGGACCGGTACGAGTTCTCGTCGCACATAACGCGAGGGGAGCACCGCTTCCACATGAGCTAA"; + + // Assert.Equal(expectedCds, cdsTemp); + + string actualCds = + new CodingSequence(genomicSeq, codingRegion, regions, false, 0, rnaEdits).GetCodingSequence(); + + Assert.Equal(expectedCds, actualCds); + } } } \ No newline at end of file diff --git a/VariantAnnotation.Interface/AnnotatedPositions/ITranscript.cs b/VariantAnnotation.Interface/AnnotatedPositions/ITranscript.cs index 35b6a5e1..436e56a4 100644 --- a/VariantAnnotation.Interface/AnnotatedPositions/ITranscript.cs +++ b/VariantAnnotation.Interface/AnnotatedPositions/ITranscript.cs @@ -25,9 +25,10 @@ public interface ITranscript : IChromosomeInterval int[] Selenocysteines { get; } IRnaEdit[] RnaEdits { get; } - bool CdsStartNotFound { get; } - bool CdsEndNotFound { get; } - ISequence CodingSequence { get; set; } + bool CdsStartNotFound { get; } + bool CdsEndNotFound { get; } + ISequence CodingSequence { get; set; } + ISequence CdnaSequence { get; set; } void Write(IExtendedBinaryWriter writer, Dictionary geneIndices, Dictionary transcriptRegionIndices, Dictionary microRnaIndices, diff --git a/VariantAnnotation/AnnotatedPositions/HgvsCodingNomenclature.cs b/VariantAnnotation/AnnotatedPositions/HgvsCodingNomenclature.cs index b18619d1..6d309cf7 100644 --- a/VariantAnnotation/AnnotatedPositions/HgvsCodingNomenclature.cs +++ b/VariantAnnotation/AnnotatedPositions/HgvsCodingNomenclature.cs @@ -9,17 +9,29 @@ namespace VariantAnnotation.AnnotatedPositions public static class HgvsCodingNomenclature { public static string GetHgvscAnnotation(ITranscript transcript, ISimpleVariant variant, ISequence refSequence, - int regionStart, int regionEnd) + int regionStart, int regionEnd, string transcriptRef, string transcriptAlt ) { // sanity check: don't try to handle odd characters, make sure this is not a reference allele, // and make sure that we have protein coordinates if (variant.Type == VariantType.reference || SequenceUtilities.HasNonCanonicalBase(variant.AltAllele)) return null; + // do not report HGVSc notation when variant lands inside gap region + if (regionStart > -1 && regionEnd > -1) + { + var startRegion = transcript.TranscriptRegions[regionStart]; + var endRegion = transcript.TranscriptRegions[regionEnd]; + if (startRegion.Id == endRegion.Id && startRegion.Type == TranscriptRegionType.Gap && + endRegion.Type == TranscriptRegionType.Gap) return null; + } + bool onReverseStrand = transcript.Gene.OnReverseStrand; - string refAllele = onReverseStrand ? SequenceUtilities.GetReverseComplement(variant.RefAllele) : variant.RefAllele; - string altAllele = onReverseStrand ? SequenceUtilities.GetReverseComplement(variant.AltAllele) : variant.AltAllele; - + string refAllele = string.IsNullOrEmpty(transcriptRef)? onReverseStrand ? SequenceUtilities.GetReverseComplement(variant.RefAllele) : variant.RefAllele + : transcriptRef; + string altAllele = string.IsNullOrEmpty(transcriptAlt) + ? onReverseStrand ? SequenceUtilities.GetReverseComplement(variant.AltAllele) : variant.AltAllele + : transcriptAlt; + // decide event type from HGVS nomenclature var genomicChange = GetGenomicChange(transcript, onReverseStrand, refSequence, variant); @@ -31,10 +43,10 @@ public static string GetHgvscAnnotation(ITranscript transcript, ISimpleVariant v (variantStart, variantEnd, refAllele, regionStart, regionEnd) = transcript.TranscriptRegions.ShiftDuplication(variantStart, altAllele, onReverseStrand); } - var startPositionOffset = HgvsUtilities.GetCdnaPositionOffset(transcript, variantStart, regionStart); + var startPositionOffset = HgvsUtilities.GetCdnaPositionOffset(transcript, variantStart, regionStart, true); var endPositionOffset = variantStart == variantEnd ? startPositionOffset - : HgvsUtilities.GetCdnaPositionOffset(transcript, variantEnd, regionEnd); + : HgvsUtilities.GetCdnaPositionOffset(transcript, variantEnd, regionEnd, false); if (onReverseStrand) { diff --git a/VariantAnnotation/AnnotatedPositions/HgvsUtilities.cs b/VariantAnnotation/AnnotatedPositions/HgvsUtilities.cs index 60225c2e..6aff8672 100644 --- a/VariantAnnotation/AnnotatedPositions/HgvsUtilities.cs +++ b/VariantAnnotation/AnnotatedPositions/HgvsUtilities.cs @@ -116,7 +116,7 @@ public static string GetAltPeptideSequence(ISequence refSequence, int cdsBegin, return aminoAcids.TranslateBases(altCds, true); } - public static PositionOffset GetCdnaPositionOffset(ITranscript transcript, int genomicPosition, int regionIndex) + public static PositionOffset GetCdnaPositionOffset(ITranscript transcript, int genomicPosition, int regionIndex, bool isRegionStart) { if (!transcript.Overlaps(genomicPosition, genomicPosition)) return null; @@ -124,7 +124,7 @@ public static PositionOffset GetCdnaPositionOffset(ITranscript transcript, int g int codingRegionStart = transcript.Translation?.CodingRegion.CdnaStart ?? -1; int codingRegionEnd = transcript.Translation?.CodingRegion.CdnaEnd ?? -1; - (int position, int offset) = GetPositionAndOffset(genomicPosition, region, transcript.RnaEdits, transcript.Gene.OnReverseStrand); + (int position, int offset) = GetPositionAndOffset(genomicPosition, region, transcript.Gene.OnReverseStrand, isRegionStart); if (position == -1) return null; (string cdnaCoord, bool hasStopCodonNotation, bool hasNoPosition) = GetCdnaCoord(position, offset, codingRegionStart, codingRegionEnd); @@ -134,8 +134,8 @@ public static PositionOffset GetCdnaPositionOffset(ITranscript transcript, int g return new PositionOffset(position, offset, value, hasStopCodonNotation); } - private static (int Position, int Offset) GetPositionAndOffset(int position, ITranscriptRegion region, IRnaEdit[] rnaEdits, - bool onReverseStrand) + private static (int Position, int Offset) GetPositionAndOffset(int position, ITranscriptRegion region, + bool onReverseStrand, bool isRegionStart) { int cdsPos = -1; int offset = -1; @@ -147,43 +147,16 @@ private static (int Position, int Offset) GetPositionAndOffset(int position, ITr offset = 0; break; case TranscriptRegionType.Gap: - (cdsPos, offset) = GetGapPositionAndOffset(position, region, onReverseStrand); + (cdsPos, offset) = GetGapPositionAndOffset(region, isRegionStart); break; case TranscriptRegionType.Intron: (cdsPos, offset) = GetIntronPositionAndOffset(position, region, onReverseStrand); break; } - int rnaEditOffset = GetRnaEditOffset(cdsPos, rnaEdits); - cdsPos -= rnaEditOffset; return (cdsPos, offset); } - - private static int GetRnaEditOffset(int position, IRnaEdit[] rnaEdits) - { - var rnaEditOffset = 0; - if (rnaEdits == null) return rnaEditOffset; - - RnaEditUtilities.SetTypesAndSort(rnaEdits); - - foreach (var rnaEdit in rnaEdits) - { - if (rnaEdit.Start > position) break; - - switch (rnaEdit.Type) - { - case VariantType.insertion: - rnaEditOffset += rnaEdit.Bases.Length; - break; - case VariantType.deletion: - rnaEditOffset -= rnaEdit.End - rnaEdit.Start + 1; - break; - } - } - - return rnaEditOffset; - } - + private static (int Position, int Offset) GetIntronPositionAndOffset(int position, ITranscriptRegion region, bool onReverseStrand) { @@ -209,13 +182,9 @@ private static (int Position, int Offset) GetIntronPositionAndOffset(int positio return (cdnaPosition, offset); } - private static (int Position, int Offset) GetGapPositionAndOffset(int position, ITranscriptRegion region, bool onReverseStrand) + private static (int Position, int Offset) GetGapPositionAndOffset(ITranscriptRegion region, bool isRegionStart) { - int leftDist = position - region.Start + 1; - int rightDist = region.End - position + 1; - - if (leftDist < rightDist && !onReverseStrand || rightDist < leftDist && onReverseStrand) return (region.CdnaStart, 0); - return (region.CdnaEnd, 0); + return isRegionStart ? (region.CdnaEnd, 0) : (region.CdnaStart, 0); } private static (string CdnaCoord, bool HasStopCodonNotation, bool HasNoPosition) GetCdnaCoord(int position, @@ -232,12 +201,6 @@ private static (string CdnaCoord, bool HasStopCodonNotation, bool HasNoPosition) cdnaCoord = "*" + (position - codingRegionEnd); hasStopCodonNotation = true; } - else if (offset != 0 && position == codingRegionEnd) - { - cdnaCoord = "*"; - hasStopCodonNotation = true; - hasNoPosition = true; - } } if (!hasStopCodonNotation && codingRegionStart != -1) @@ -271,7 +234,7 @@ public static string FormatDnaNotation(string start, string end, string referenc switch (type) { case GenomicChange.Deletion: - sb.Append(coordinates + "del" + referenceBases); + sb.Append(coordinates + "del"); break; case GenomicChange.Inversion: sb.Append(coordinates + "inv" + referenceBases); @@ -280,11 +243,18 @@ public static string FormatDnaNotation(string start, string end, string referenc sb.Append(coordinates + "dup" + referenceBases); break; case GenomicChange.Substitution: - sb.Append(start + referenceBases + '>' + alternateBases); + if (referenceBases == alternateBases) + { + sb.Append(start + '='); + } + else + { + sb.Append(start + referenceBases + '>' + alternateBases); + } break; case GenomicChange.DelIns: // NOTE: change to delins, now use del--ins-- to reduce anavarin differences - sb.Append(coordinates + "del" + referenceBases + "ins" + alternateBases); + sb.Append(coordinates + "delins" + alternateBases); break; case GenomicChange.Insertion: sb.Append(coordinates + "ins" + alternateBases); diff --git a/VariantAnnotation/AnnotatedPositions/Transcript/CdnaSequence.cs b/VariantAnnotation/AnnotatedPositions/Transcript/CdnaSequence.cs new file mode 100644 index 00000000..b83aaf40 --- /dev/null +++ b/VariantAnnotation/AnnotatedPositions/Transcript/CdnaSequence.cs @@ -0,0 +1,102 @@ +using System.Text; +using ErrorHandling.Exceptions; +using Genome; +using OptimizedCore; +using VariantAnnotation.Caches.Utilities; +using VariantAnnotation.Interface.AnnotatedPositions; +using Variants; + +namespace VariantAnnotation.AnnotatedPositions.Transcript +{ + public sealed class CdnaSequence : ISequence + { + private readonly ICodingRegion _codingRegion; + private readonly ITranscriptRegion[] _regions; + private readonly IRnaEdit[] _rnaEdits; + private readonly bool _onReverseStrand; + private readonly ISequence _compressedSequence; + private string _sequence; + + public CdnaSequence(ISequence compressedSequence, ICodingRegion codingRegion, ITranscriptRegion[] regions, + bool onReverseStrand, IRnaEdit[] rndEdits) + { + _codingRegion = codingRegion; + _regions = regions; + _rnaEdits = rndEdits; + _onReverseStrand = onReverseStrand; + _compressedSequence = compressedSequence; + + _sequence = GetCdnaSequence(); + } + + public string GetCdnaSequence() + { + if (_sequence != null) return _sequence; + + var sb = StringBuilderCache.Acquire(); + + foreach (var region in _regions) + { + if (region.Type != TranscriptRegionType.Exon) continue; + sb.Append(_compressedSequence.Substring(region.Start - 1, region.End - region.Start + 1)); + } + + if (_onReverseStrand) + { + string reverseComplement = SequenceUtilities.GetReverseComplement(sb.ToString()); + sb.Clear(); + sb.Append(reverseComplement); + } + + ApplyRnaEdits(sb); + + _sequence = StringBuilderCache.GetStringAndRelease(sb); + return _sequence; + } + + private void ApplyRnaEdits(StringBuilder sb) + { + if (_rnaEdits == null) return; + var editOffset = 0; + RnaEditUtilities.SetTypesAndSort(_rnaEdits); + + foreach (var rnaEdit in _rnaEdits) + { + int cdnaEditStart = rnaEdit.Start - 1 + editOffset; + + switch (rnaEdit.Type) + { + case VariantType.SNV: + if(cdnaEditStart >= 0 ) sb[cdnaEditStart] = rnaEdit.Bases[0]; + break; + + case VariantType.MNV: + for (var i = 0; i < rnaEdit.Bases.Length && cdnaEditStart >= 0; i++) + sb[cdnaEditStart + i] = rnaEdit.Bases[i]; + break; + + case VariantType.insertion: + if (cdnaEditStart >= 0) sb.Insert(cdnaEditStart, rnaEdit.Bases); + editOffset += rnaEdit.Bases.Length; + break; + + case VariantType.deletion: + editOffset -= rnaEdit.End - rnaEdit.Start + 1; + break; + + default: + throw new UserErrorException("Encountered unknown rnaEdit type:" + rnaEdit.Type); + } + } + } + + public int Length => _sequence?.Length ?? _codingRegion?.Length ?? 0; + public Band[] CytogeneticBands => null; + + public string Substring(int offset, int length) + { + if (_sequence == null) _sequence = GetCdnaSequence(); + return _sequence.Substring(offset, length); + } + } +} \ No newline at end of file diff --git a/VariantAnnotation/AnnotatedPositions/Transcript/CodingSequence.cs b/VariantAnnotation/AnnotatedPositions/Transcript/CodingSequence.cs index b594bc82..a71026d4 100644 --- a/VariantAnnotation/AnnotatedPositions/Transcript/CodingSequence.cs +++ b/VariantAnnotation/AnnotatedPositions/Transcript/CodingSequence.cs @@ -1,125 +1,26 @@ -using System.Text; -using ErrorHandling.Exceptions; -using Genome; -using Intervals; -using OptimizedCore; -using VariantAnnotation.Caches.Utilities; +using Genome; using VariantAnnotation.Interface.AnnotatedPositions; -using Variants; namespace VariantAnnotation.AnnotatedPositions.Transcript { public sealed class CodingSequence : ISequence { - private readonly ICodingRegion _codingRegion; - private readonly ITranscriptRegion[] _regions; - private readonly IRnaEdit[] _rnaEdits; - private readonly bool _geneOnReverseStrand; - private readonly byte _startExonPhase; - private readonly ISequence _compressedSequence; - private string _sequence; + private readonly string _sequence; public CodingSequence(ISequence compressedSequence, ICodingRegion codingRegion, ITranscriptRegion[] regions, - bool geneOnReverseStrand, byte startExonPhase, IRnaEdit[] rndEdits) + bool onReverseStrand, byte startExonPhase, IRnaEdit[] rnaEdits) { - _codingRegion = codingRegion; - _regions = regions; - _rnaEdits = rndEdits; - _geneOnReverseStrand = geneOnReverseStrand; - _startExonPhase = startExonPhase; - _compressedSequence = compressedSequence; + string cdnaSequence = + new CdnaSequence(compressedSequence, codingRegion, regions, onReverseStrand, rnaEdits) + .GetCdnaSequence(); + int cdsLen = codingRegion.CdnaEnd - codingRegion.CdnaStart + 1; + + _sequence = new string('N', startExonPhase) + cdnaSequence.Substring(codingRegion.CdnaStart - 1, cdsLen); } - public string GetCodingSequence() - { - if (_sequence != null) return _sequence; - - var sb = StringBuilderCache.Acquire(Length); - - // account for the exon phase (forward orientation) - if (_startExonPhase > 0 && !_geneOnReverseStrand) sb.Append('N', _startExonPhase); - - foreach (var region in _regions) - { - // handle exons that are entirely in the UTR - if (region.Type != TranscriptRegionType.Exon || region.End < _codingRegion.Start || region.Start > _codingRegion.End) continue; - AddCodingRegion(region, sb); - } - - // account for the exon phase (reverse orientation) - if (_startExonPhase > 0 && _geneOnReverseStrand) sb.Append('N', _startExonPhase); - if (_geneOnReverseStrand) - { - var revComp = SequenceUtilities.GetReverseComplement(sb.ToString()); - sb.Clear(); - sb.Append(revComp); - } - //RNA edits for transcripts on reverse strand come with reversed bases. So, no positional or base adjustment necessary - // ref: unit test with NM_031947.3, chr5:140682196-140683630 - ApplyRnaEdits(sb); - _sequence= StringBuilderCache.GetStringAndRelease(sb); - - return _sequence; - } - - private void ApplyRnaEdits(StringBuilder sb) - { - if (_rnaEdits == null) return; - var codingStart = _codingRegion.CdnaStart; - var editOffset = 0; - RnaEditUtilities.SetTypesAndSort(_rnaEdits); - - foreach (var rnaEdit in _rnaEdits) - { - //if the edits are in utr regions, we can skip them - var cdsEditStart = rnaEdit.Start - codingStart + editOffset; - - if (sb.Length <= cdsEditStart) continue; - - switch (rnaEdit.Type) - { - case VariantType.SNV: - if(cdsEditStart >= 0 ) sb[cdsEditStart] = rnaEdit.Bases[0]; - break; - case VariantType.MNV: - for (var i = 0; i < rnaEdit.Bases.Length && cdsEditStart >= 0; i++) - sb[cdsEditStart + i] = rnaEdit.Bases[i]; - break; - case VariantType.insertion: - if (cdsEditStart >= 0) sb.Insert(cdsEditStart, rnaEdit.Bases); - editOffset += rnaEdit.Bases.Length; //account for inserted bases - break; - case VariantType.deletion: - //from the transcripts NM_033089.6 and NM_001317107.1, it seems that deletion edits are - //already accounted for in the exons. So, we don't need to delete any more. - editOffset -= rnaEdit.End - rnaEdit.Start + 1; //account for deleted bases - break; - - default: - throw new UserErrorException("Encountered unknown rnaEdit type:" + rnaEdit.Type); - } - } - } - - private void AddCodingRegion(IInterval region, StringBuilder sb) - { - int tempBegin = region.Start; - int tempEnd = region.End; - - // trim the first and last exons - if (_codingRegion.Start >= tempBegin && _codingRegion.Start <= tempEnd) tempBegin = _codingRegion.Start; - if (_codingRegion.End >= tempBegin && _codingRegion.End <= tempEnd) tempEnd = _codingRegion.End; - - sb.Append(_compressedSequence.Substring(tempBegin - 1, tempEnd - tempBegin + 1)); - } - - public int Length => _codingRegion.Length; - public Band[] CytogeneticBands => null; - - public string Substring(int offset, int length) - { - if (_sequence == null) _sequence = GetCodingSequence(); - return _sequence.Substring(offset, length); - } + public string GetCodingSequence() => _sequence; + public int Length => _sequence.Length; + public Band[] CytogeneticBands => null; + public string Substring(int offset, int length) => _sequence.Substring(offset, length); } } \ No newline at end of file diff --git a/VariantAnnotation/Caches/DataStructures/Transcript.cs b/VariantAnnotation/Caches/DataStructures/Transcript.cs index 5b54d71d..d46d88f3 100644 --- a/VariantAnnotation/Caches/DataStructures/Transcript.cs +++ b/VariantAnnotation/Caches/DataStructures/Transcript.cs @@ -12,27 +12,28 @@ namespace VariantAnnotation.Caches.DataStructures { public sealed class Transcript : ITranscript { - public IChromosome Chromosome { get; } - public int Start { get; } - public int End { get; } - public ICompactId Id { get; } - public BioType BioType { get; } - public bool IsCanonical { get; } - public Source Source { get; } - public IGene Gene { get; } + public IChromosome Chromosome { get; } + public int Start { get; } + public int End { get; } + public ICompactId Id { get; } + public BioType BioType { get; } + public bool IsCanonical { get; } + public Source Source { get; } + public IGene Gene { get; } public ITranscriptRegion[] TranscriptRegions { get; } - public ushort NumExons { get; } - public int TotalExonLength { get; } - public byte StartExonPhase { get; } - public int SiftIndex { get; } - public int PolyPhenIndex { get; } - public ITranslation Translation { get; } - public IInterval[] MicroRnas { get; } - public int[] Selenocysteines { get; } - public IRnaEdit[] RnaEdits { get; } - public bool CdsStartNotFound { get; } - public bool CdsEndNotFound { get; } - public ISequence CodingSequence { get; set; } + public ushort NumExons { get; } + public int TotalExonLength { get; } + public byte StartExonPhase { get; } + public int SiftIndex { get; } + public int PolyPhenIndex { get; } + public ITranslation Translation { get; } + public IInterval[] MicroRnas { get; } + public int[] Selenocysteines { get; } + public IRnaEdit[] RnaEdits { get; } + public bool CdsStartNotFound { get; } + public bool CdsEndNotFound { get; } + public ISequence CodingSequence { get; set; } + public ISequence CdnaSequence { get; set; } public Transcript(IChromosome chromosome, int start, int end, ICompactId id, ITranslation translation, BioType bioType, IGene gene, int totalExonLength, byte startExonPhase, bool isCanonical, diff --git a/VariantAnnotation/TranscriptAnnotation/FullTranscriptAnnotator.cs b/VariantAnnotation/TranscriptAnnotation/FullTranscriptAnnotator.cs index 660f5f26..54706488 100644 --- a/VariantAnnotation/TranscriptAnnotation/FullTranscriptAnnotator.cs +++ b/VariantAnnotation/TranscriptAnnotation/FullTranscriptAnnotator.cs @@ -29,8 +29,10 @@ public static IAnnotatedTranscript GetAnnotatedTranscript(ITranscript transcript List consequences = GetConsequences(transcript, transcript.Gene.OnReverseStrand, leftShiftedVariant, leftAnnotation.VariantEffect); + var refAllele = rightAnnotation.TranscriptRefAllele; + var altAllele = rightAnnotation.TranscriptAltAllele; var hgvsCoding = HgvsCodingNomenclature.GetHgvscAnnotation(transcript, rightShiftedVariant, refSequence, - rightAnnotation.Position.RegionStartIndex, rightAnnotation.Position.RegionEndIndex); + rightAnnotation.Position.RegionStartIndex, rightAnnotation.Position.RegionEndIndex, refAllele, altAllele); var hgvsProtein = HgvsProteinNomenclature.GetHgvsProteinAnnotation(transcript, rightAnnotation.RefAminoAcids, rightAnnotation.AltAminoAcids, rightAnnotation.TranscriptAltAllele, @@ -46,7 +48,7 @@ public static IAnnotatedTranscript GetAnnotatedTranscript(ITranscript transcript } private static (VariantEffect VariantEffect, IMappedPosition Position, string RefAminoAcids, string - AltAminoAcids, string RefCodons, string AltCodons, string TranscriptAltAllele) AnnotateTranscript(ITranscript transcript, ISimpleVariant variant, AminoAcids aminoAcids, ISequence refSequence) + AltAminoAcids, string RefCodons, string AltCodons, string TranscriptAltAllele, string TranscriptRefAllele) AnnotateTranscript(ITranscript transcript, ISimpleVariant variant, AminoAcids aminoAcids, ISequence refSequence) { bool onReverseStrand = transcript.Gene.OnReverseStrand; var start = MappedPositionUtilities.FindRegion(transcript.TranscriptRegions, variant.Start); @@ -56,8 +58,10 @@ private static (VariantEffect VariantEffect, IMappedPosition Position, string Re end.Index, variant, onReverseStrand, transcript.Translation?.CodingRegion, transcript.StartExonPhase, variant.Type == VariantType.insertion); + var codingSequence = GetCodingSequence(transcript, refSequence); + var cdnaSequence = GetCdnaSequence(transcript, refSequence); + string transcriptAltAllele = HgvsUtilities.GetTranscriptAllele(variant.AltAllele, onReverseStrand); - var codingSequence = GetCodingSequence(transcript, refSequence); var codons = Codons.GetCodons(transcriptAltAllele, position.CdsStart, position.CdsEnd, position.ProteinStart, position.ProteinEnd, codingSequence); var aa = aminoAcids.Translate(codons.Reference, codons.Alternate); @@ -66,6 +70,7 @@ private static (VariantEffect VariantEffect, IMappedPosition Position, string Re (position.CoveredCdnaStart, position.CoveredCdnaEnd) = transcript.TranscriptRegions.GetCoveredCdnaPositions(position.CdnaStart, start.Index, position.CdnaEnd, end.Index, onReverseStrand); (position.CoveredCdsStart, position.CoveredCdsEnd, position.CoveredProteinStart, position.CoveredProteinEnd) = MappedPositionUtilities.GetCoveredCdsAndProteinPositions(position.CoveredCdnaStart, position.CoveredCdnaEnd, transcript.StartExonPhase, transcript.Translation?.CodingRegion); + var transcriptRefAllele = GetTranscriptRefAllele(position, cdnaSequence, variant, onReverseStrand); SequenceChange coveredAa; // only generate the covered version of ref & alt alleles when CDS start/end is -1 if (position.CdsStart == -1 || position.CdsEnd == -1) @@ -87,7 +92,26 @@ private static (VariantEffect VariantEffect, IMappedPosition Position, string Re var variantEffect = new VariantEffect(positionalEffect, variant, transcript, aa.Reference, aa.Alternate, codons.Reference, codons.Alternate, position.ProteinStart, coveredAa.Reference, coveredAa.Alternate); - return (variantEffect, position, aa.Reference, aa.Alternate, codons.Reference, codons.Alternate, transcriptAltAllele); + return (variantEffect, position, aa.Reference, aa.Alternate, codons.Reference, codons.Alternate, transcriptAltAllele, transcriptRefAllele); + } + + private static string GetTranscriptRefAllele(IMappedPosition position, ISequence cdnaSequence, ISimpleVariant variant, + bool onReverseStrand) + { + var variantRef = HgvsUtilities.GetTranscriptAllele(variant.RefAllele, onReverseStrand); + if (position == null || cdnaSequence == null) return variantRef; + var start = position.CoveredCdnaStart; + var end = position.CoveredCdnaEnd; + if (start == -1 && end == -1) return variantRef; + if (start != -1 && end != -1 && end < start) Swap.Int(ref start, ref end); + + return cdnaSequence.Substring(start - 1, end - start + 1); + + } + private static string GetCodingFromCdna(ICodingRegion codingRegion, ISequence cdnaSequence) + { + if (codingRegion == null) return null; + return cdnaSequence.Substring(codingRegion.CdnaStart - 1, codingRegion.CdnaEnd - codingRegion.CdnaStart + 1); } internal static (SequenceChange AaChange, int ProteinStart, int ProteinEnd) TryTrimAminoAcidsAndUpdateProteinPositions(SequenceChange aaChange, int proteinStart, int proteinEnd) @@ -112,6 +136,13 @@ private static ISequence GetCodingSequence(ITranscript transcript, ISequence ref transcript.Translation.CodingRegion, transcript.TranscriptRegions, transcript.Gene.OnReverseStrand, transcript.StartExonPhase, transcript.RnaEdits)); } + + private static ISequence GetCdnaSequence(ITranscript transcript, ISequence refSequence) + { + return transcript.CdnaSequence ?? (transcript.CdnaSequence = new CdnaSequence(refSequence, + transcript.Translation?.CodingRegion, transcript.TranscriptRegions, + transcript.Gene.OnReverseStrand, transcript.RnaEdits)); + } private static IMappedPosition GetMappedPosition(ITranscriptRegion[] regions, ITranscriptRegion startRegion, int startIndex, ITranscriptRegion endRegion, int endIndex, IInterval variant, bool onReverseStrand, diff --git a/VariantAnnotation/TranscriptAnnotation/GeneFusionUtilities.cs b/VariantAnnotation/TranscriptAnnotation/GeneFusionUtilities.cs index fbd6e7ab..9d8b2354 100644 --- a/VariantAnnotation/TranscriptAnnotation/GeneFusionUtilities.cs +++ b/VariantAnnotation/TranscriptAnnotation/GeneFusionUtilities.cs @@ -68,7 +68,7 @@ private static (string Begin, string End) AdjustFirst(BreakPointTranscript first if (position < codingRegion.Start) return ("?", (position - codingRegion.Start).ToString()); if (position > codingRegion.End) return ("?", (position - codingRegion.End + codingRegionLength).ToString()); - return ("1", HgvsUtilities.GetCdnaPositionOffset(first.Transcript, position, first.RegionIndex).Value); + return ("1", HgvsUtilities.GetCdnaPositionOffset(first.Transcript, position, first.RegionIndex, true).Value); } private static (string Begin, string End) AdjustSecond(BreakPointTranscript second) @@ -79,7 +79,7 @@ private static (string Begin, string End) AdjustSecond(BreakPointTranscript seco if (position < codingRegion.Start) return ((position - codingRegion.Start).ToString(), "?"); if (position > codingRegion.End) return ((position - codingRegion.End + codingRegionLength).ToString(), "?"); - return (HgvsUtilities.GetCdnaPositionOffset(second.Transcript, position, second.RegionIndex).Value, codingRegionLength.ToString()); + return (HgvsUtilities.GetCdnaPositionOffset(second.Transcript, position, second.RegionIndex, false).Value, codingRegionLength.ToString()); } } }