use std::time::Duration; use criterion::{black_box, criterion_group, criterion_main, Criterion}; use lib::{alignment_lib::Penalties, wavefront_alignment::wavefront_align}; fn wavefront_bench_l100_e1(c: &mut Criterion) { let query = "ACTCTATTTTACTCAGTGCAGGGTGAGCCGCCTATGCGGAGTGCAGTTACATAGGGAAAGCGGGGCTCAATTGCTACTCGTATGGGGTGTCACAGACGC"; let text = "ACTCTATTTTACTCAGTGCAGGGTGAGCCGCCTATGCGGAGTGCAGTTACATAGGGTAAAGCGGGGCTCAATTGCTACTCGTATGGGGTGTCACAGACGC"; let pens = Penalties { mismatch_pen: 1, open_pen: 2, extd_pen: 2, }; c.bench_function("wfa length 100 1% error", |b| { b.iter(|| wavefront_align(black_box(query), black_box(text), black_box(&pens))) }); } fn wavefront_bench_l100_e10(c: &mut Criterion) { let query = "TTTTTGACTCGAATGAAAGTGCGCTGCCGCAGAACTGGAGATTAGCAGGGGCAAGTGAACCATCCCCTTGGACGATACGGAATAAGTTGACAACCGGTCG"; let text = "TTTTTGCCTCGAATCTGAAGTGCGCTGCCACAGAACTGGAGATTAGCATAGGGGGCAAGTGAACCATCCCCTTGGCGATCCGGAATAAGTTGACAACCGGTCG"; let pens = Penalties { mismatch_pen: 1, open_pen: 2, extd_pen: 2, }; c.bench_function("wfa length 100 10% error", |b| { b.iter(|| wavefront_align(black_box(query), black_box(text), black_box(&pens))) }); } fn wavefront_bench_l100_e30(c: &mut Criterion) { let query = "TTTTTGACTCGAATGAAAGTGCGCTGCCGCAGAACTGGAGATTAGCAGGGGCAAGTGAACCATCCCCTTGGACGATACGGAATAAGTTGACAACCGGTCG"; let text = "TTTTTGCCTCGGAATCCGAAGTGCGCCTGCCACAGAACTGCAGATTAGCAATAGGGGGCAAGTGAGCCATCACCTTTCCGGCGATCCGGGAATGTTGACAACCGGTCG"; let pens = Penalties { mismatch_pen: 1, open_pen: 2, extd_pen: 2, }; c.bench_function("wfa length 100 30% error", |b| { b.iter(|| wavefront_align(black_box(query), black_box(text), black_box(&pens))) }); } fn wavefront_bench_l1000_e1(c: &mut Criterion) { let query = "TTTTTGACTCGAATGAAAGTGCGCTGCCGCAGAACTGGAGATTAGCAGGGGCAAGTGAACCATCCCCTTGGACGATACGGAATAAGTTGACAACCGGTCGCAGGGTGGAACAACACATATTCTATCTCAAACCTAAGGTGGATTGTAGTCCTGCACGTTGAAACTCGGTCCGGACCTCATGCGCGGTCGTAGAAAAGTGCATTTTCCTTCGGGAACTTGGTTATACTGAGTCCTCCCGAATTGCAGTAGGGGCGGCACTAATCCTTTACAAATTGTGCTCACTGACTATTCTTTCGGAGTCTAAGGACAAGAGCGTTGAGGCGCCTTTAGTCCTGAGTGGTATCGCCCACAGTTTATTAACTCTTAACTGATTTCCCGTCTTTGGTGGTGGCGAAGACTTTTTGTAAAGTCGTCACCTAAGGCCGGTGTTGTTCCGCGGACTGACTGGGGGCAAGTGGCCCAAAGGTACCAGCGTGGCACATGCACAGTCACGCGAACACGCTAAGGGATTATGCTTCGTTGCGTTGACTCAACACATTAGTCCCGCCATCACGGCGCCAATACACGAAGAGGGAACCCCCTGTGCCCGTCTGGAGTTGAGTTACTCGCGATGTGAATCGGTCACGTCGGCCCCGTATGGGTCAGTCGTGCCGTGTGCCAATGCAACCATTGTCTCCAAATGGCCCCTTGATGGATTGATGACCCATTCTTAGGCTTTTGCTCAGGTCCTATAGAGTACAACAGTGCTCACTATAGGTTTTAGTGTGGTTGTCTCCGTATAGTAGTGAGGTGTGGGGAACAGCCGTGAGTAGCATTTGAGCTAAGTGAAGGACAGATCCGACCGCACCGCTACAAAAGAACTATTTTGAAACGCTAGCCCTCCACCCGACGCATAAGAGTATAGCAGTCAAACCCTGGCGATACGCCCCAAGACACCTAGTATCCCAAACTCCTGTCACGCCACGCGACGGCGGGATGCAAACCAACCAGACTCGGTCGA"; let text = "TTTTTGACTCGAATGAAGTGCGCTGCCGCAGAACTGGAGATTAGCAGGGGCAAGTGAACCATCCCCTTGGACGATACGGAATAAGTTGACAAACCGGTCGCAGGGTGGAACAACACATATTCTATCTCAAACCTAAGGTGGATTGTAGTCCTGCACGTTGAAACTCGGTCCGGACCTCATGCGCGGTCGTAGAAAAGTGCATTTTCCTTCGGGAACTTGGTTATACTGAGTCCTCCCGAATTGCAGTAGGGGCGGCACTAATCCTTTACAATTGTGCTCACTGACTATTCTTTCGGAGTCTAAGGACAAGAGCGTTGAGGCGCCTTTAGTCCTGAGTGGTATCGCCCACAGTTTATTAACTCTTAACTGATTTCCCGTCTTTGGTGCGTGGCGAAGACTTTTTGTAAAGTCGTCACCTAAGGCCGGTGTTGTTCCGCGGACTGACTGGGGGCAAGTGGCCCAAAGGTACCAGCGTGGCACATGCACAGTCACGCGAACACGCTAAGGGATTATGCTTCGTTGCGTTGACTCAACACATTAGTCCCGCCATCCACGGCGCCAATACACGAAGAGGGAACCCCCTGTGCCCGTCTGGAGTTGAGTTACTCGCGATGTGAATCGGTCACGTCGGCCCCGTATGGGTCAGTCGTGCCGTGTGCCAATGCAACCATTGTCTCCAAATGGCCCCTTGATAGATTGATGACCCATTCTTAGGCTTTTGCTCAGGTCCTATAGAGTACAACAGTGCTCACTAAGGTTTTAGTGTGGTTGTCTCCGTATAGTAGTGAGGTGTGGGGAACAGCCGTGAGTAGCATTTGAGCTAAGTAAAGGACAGATCCGACCGCACCGCTACAAAAGAACTATTTTGAAACGCTAGCCCTCCACCCGACGCATAAGAGTATAGCAGTCAAACCCTGGCGATACGCCCCAAGACACCTAGTATCCCAAACTCCTGTCACGCCACGCGACGGCGGCGATGCAAACCAACCAGACTCGGTCGA"; let pens = Penalties { mismatch_pen: 1, open_pen: 2, extd_pen: 2, }; c.bench_function("wfa length 1000 1% error", |b| { b.iter(|| wavefront_align(black_box(query), black_box(text), black_box(&pens))) }); } fn wavefront_bench_l1000_e10(c: &mut Criterion) { let query = "TTTTGACTCGAATGAAGTGCTGCTGCCGCAGAACCTGGAGATTCAGGGGCTAAGGAACCATCCCCTTGCACGATACGGAATAAGTTGACAAACCGGTGCAGGGTGGAACAACACATATTCTATCTCAAACCTACGGTGGTTGTAGCCTGCAGTTGAACTCGGTCCGGACCTCATGCGCGGTCGGAGAAAAGTGCATTTCCTTCGGGAACTTGGTTATACTGAGTCCTACCGAATTGCAGTATGGGCGGCACTAATCCTATAAAATTGTGCTCAATTGATATTCTTTCGGAGTCTATCAGGACAAGAGCGTTGAGGCGCCTTTAGCCTGAGTGTATCGCCCACAGTTTATTACTCTTAACTGATTTCCCGTCTTTGGTGCGTGGGAAGACTTTTGTAAAGTCGTCACGTAAGGCCGGTGTTGTTGCCGCGGTCTGACTGGGCGGTCAAGTGGCCCAAAGGTACCAGCGTGGCACATAGCACAGTCACGCGTAACAGGTAAGGGATTATGCTTCGTTGCGTTGACTCACACATTAGTCCCGCCATCACGCGCAATACACCGAGAGGAACCCCCTGTGCCCGTCTGAGCTGAGTTACTCGCGATGCGAATCGGACACGTCGGCCCACGTATGGGTCAGTAGTGCCCGTGTGCCAATGCAGACCGATTGTCTCCAAATGGCCCCTTATAGATTGATGACCCATTCTTAGGCTTTTGCGTCAGGTCCTATGGAGTACAACAGTGCTCACTAAGGTTTTAGTGTGGTTGTCTCCGTATAGTAGTGAGGTGTGGGGAACCGCGGAGTAGCATTCGCTATAGTAAAGGACAGACCACCGACACCGGCTACAAAAGAACTATTTTGAAACGCTAGCCCTCCACCCGACGCATAAGGAGTATAGTAGTCAAACCCTGGCGATACGCCGCCAAGACACCTAGTATCCCAAACTCCCTGTCGACGCCACGCGACGGCGGCGAGTGCAAACCAACCAGACTTCGGTCGA"; let text = "TTTTTGACTCGAATGAAAGTGCGCTGCCGCAGAACTGGAGATTAGCAGGGGCAAGTGAACCATCCCCTTGGACGATACGGAATAAGTTGACAACCGGTCGCAGGGTGGAACAACACATATTCTATCTCAAACCTAAGGTGGATTGTAGTCCTGCACGTTGAAACTCGGTCCGGACCTCATGCGCGGTCGTAGAAAAGTGCATTTTCCTTCGGGAACTTGGTTATACTGAGTCCTCCCGAATTGCAGTAGGGGCGGCACTAATCCTTTACAAATTGTGCTCACTGACTATTCTTTCGGAGTCTAAGGACAAGAGCGTTGAGGCGCCTTTAGTCCTGAGTGGTATCGCCCACAGTTTATTAACTCTTAACTGATTTCCCGTCTTTGGTGGTGGCGAAGACTTTTTGTAAAGTCGTCACCTAAGGCCGGTGTTGTTCCGCGGACTGACTGGGGGCAAGTGGCCCAAAGGTACCAGCGTGGCACATGCACAGTCACGCGAACACGCTAAGGGATTATGCTTCGTTGCGTTGACTCAACACATTAGTCCCGCCATCACGGCGCCAATACACGAAGAGGGAACCCCCTGTGCCCGTCTGGAGTTGAGTTACTCGCGATGTGAATCGGTCACGTCGGCCCCGTATGGGTCAGTCGTGCCGTGTGCCAATGCAACCATTGTCTCCAAATGGCCCCTTGATGGATTGATGACCCATTCTTAGGCTTTTGCTCAGGTCCTATAGAGTACAACAGTGCTCACTATAGGTTTTAGTGTGGTTGTCTCCGTATAGTAGTGAGGTGTGGGGAACAGCCGTGAGTAGCATTTGAGCTAAGTGAAGGACAGATCCGACCGCACCGCTACAAAAGAACTATTTTGAAACGCTAGCCCTCCACCCGACGCATAAGAGTATAGCAGTCAAACCCTGGCGATACGCCCCAAGACACCTAGTATCCCAAACTCCTGTCACGCCACGCGACGGCGGGATGCAAACCAACCAGACTCGGTCGA"; let pens = Penalties { mismatch_pen: 1, open_pen: 2, extd_pen: 2, }; c.bench_function("wfa length 1000 10% error", |b| { b.iter(|| wavefront_align(black_box(query), black_box(text), black_box(&pens))) }); } fn wavefront_bench_l1000_e30(c: &mut Criterion) { let query = "TTTTGACTCGGATGAGATGCTGCTGCCCAGATCCGAGATCAGGGGCCTATAGGAACCATCCCCTTGCCACGATAGATAAGTTGCAAACGCGGTGCAGGGTGGAACAACATGTATTACTACCTCAAACCTACGGTGGTTGTAGCCTGCAGTTGAACTCGGTCCTGACCTCATGCGCGCGTCGGAGTAAAATTCCCATTTCTTCGGGAACTGGGTATTCTAGTCACTACACGAATTCAGTATGGGCGGCACCTAATTTCTATAAAATTTGTCGAATTGCTATTTTTTGGAGGTCTGACCAGGACAGAGCGTTGAGACGCTTCACCTGAGTGTATCGCCCACAGTTATAACTCTTAACTGATTTCCCGTCTTTGGTGCGTGGGAGACTTTGAAAGTCGTCACGGTAAGGCCGAGTGTTGTTCCCCGCGGTTCGACTGGGCGGCAAGTGGACCAAAGGCACAGCGTGGCCACATACCACAGTTACGCGTAACAGGTAAGGGATTATGCTGTGTTGCGTTGATCACACATGAGCACCGCCTATAGCCCAAAAACAGCAGAGGAACCCCCTTGCCCGTCTCAGTTGAGTCTCCTCGCGAGCGAATCGGGGACACGTCGGCCCACGTATGGGTCGTAGTGCCCGTGTGCCACGAGCGCAGACACGATTGGCTACAAATGGCCCCTTATAGATTAATGCCCATTCTTAGGCTTTCGCGTCACGCCTATCGGTAGCAAACAGTGCTATCTAGGGCTCTTAGTAGTGGTTGCTCTCCTATGGTAGTGAGGGTGGGGAACCGCGGAGTAGCATTCGCTATAGTTAAAGGGGCAGCCACGGACACCGGCTACAAAAGAACAATTTTGAAACGTCTAGGACTCCACCCAGACGCATAAGGTATAAGAGTCAAAACCCTGGCGATACGGCCCCAGACACCTAGTTATCCCAAACCCCTGCGACGCCACGCGCCCCGGCGAAGTGCAAACCCACTACACCCGGTCGC"; let text = "TTTTTGACTCGAATGAAAGTGCGCTGCCGCAGAACTGGAGATTAGCAGGGGCAAGTGAACCATCCCCTTGGACGATACGGAATAAGTTGACAACCGGTCGCAGGGTGGAACAACACATATTCTATCTCAAACCTAAGGTGGATTGTAGTCCTGCACGTTGAAACTCGGTCCGGACCTCATGCGCGGTCGTAGAAAAGTGCATTTTCCTTCGGGAACTTGGTTATACTGAGTCCTCCCGAATTGCAGTAGGGGCGGCACTAATCCTTTACAAATTGTGCTCACTGACTATTCTTTCGGAGTCTAAGGACAAGAGCGTTGAGGCGCCTTTAGTCCTGAGTGGTATCGCCCACAGTTTATTAACTCTTAACTGATTTCCCGTCTTTGGTGGTGGCGAAGACTTTTTGTAAAGTCGTCACCTAAGGCCGGTGTTGTTCCGCGGACTGACTGGGGGCAAGTGGCCCAAAGGTACCAGCGTGGCACATGCACAGTCACGCGAACACGCTAAGGGATTATGCTTCGTTGCGTTGACTCAACACATTAGTCCCGCCATCACGGCGCCAATACACGAAGAGGGAACCCCCTGTGCCCGTCTGGAGTTGAGTTACTCGCGATGTGAATCGGTCACGTCGGCCCCGTATGGGTCAGTCGTGCCGTGTGCCAATGCAACCATTGTCTCCAAATGGCCCCTTGATGGATTGATGACCCATTCTTAGGCTTTTGCTCAGGTCCTATAGAGTACAACAGTGCTCACTATAGGTTTTAGTGTGGTTGTCTCCGTATAGTAGTGAGGTGTGGGGAACAGCCGTGAGTAGCATTTGAGCTAAGTGAAGGACAGATCCGACCGCACCGCTACAAAAGAACTATTTTGAAACGCTAGCCCTCCACCCGACGCATAAGAGTATAGCAGTCAAACCCTGGCGATACGCCCCAAGACACCTAGTATCCCAAACTCCTGTCACGCCACGCGACGGCGGGATGCAAACCAACCAGACTCGGTCGA"; let pens = Penalties { mismatch_pen: 1, open_pen: 2, extd_pen: 2, }; c.bench_function("wfa length 1000 30% error", |b| { b.iter(|| wavefront_align(black_box(query), black_box(text), black_box(&pens))) }); } fn wavefront_bench_l10000_e1(c: &mut Criterion) { let query = "TTTTTGACTCGAATGAAAGTGCGCTGCCGCAGAACTGGAGATTAGCAGGGGCAAGTGAACCATCCCCTTGGACGATACGGAATAAGTTGACAACCGGTCGCAGGGTGGAACAACACATATTCTATCTCAAACCTAAGGTGGATTGTAGTCCTGCACGTTGAAACTCGGTCCGGACCTCATGCGCGGTCGTAGAAAAGTGCATTTTCCTTCGGGAACTTGGTTATACTGAGTCCTCCCGAATTGCAGTAGGGGCGGCACTAATCCTTTACAAATTGTGCTCACTGACTATTCTTTCGGAGTCTAAGGACAAGAGCGTTGAGGCGCCTTTAGTCCTGAGTGGTATCGCCCACAGTTTATTAACTCTTAACTGATTTCCCGTCTTTGGTGGTGGCGAAGACTTTTTGTAAAGTCGTCACCTAAGGCCGGTGTTGTTCCGCGGACTGACTGGGGGCAAGTGGCCCAAAGGTACCAGCGTGGCACATGCACAGTCACGCGAACACGCTAAGGGATTATGCTTCGTTGCGTTGACTCAACACATTAGTCCCGCCATCACGGCGCCAATACACGAAGAGGGAACCCCCTGTGCCCGTCTGGAGTTGAGTTACTCGCGATGTGAATCGGTCACGTCGGCCCCGTATGGGTCAGTCGTGCCGTGTGCCAATGCAACCATTGTCTCCAAATGGCCCCTTGATGGATTGATGACCCATTCTTAGGCTTTTGCTCAGGTCCTATAGAGTACAACAGTGCTCACTATAGGTTTTAGTGTGGTTGTCTCCGTATAGTAGTGAGGTGTGGGGAACAGCCGTGAGTAGCATTTGAGCTAAGTGAAGGACAGATCCGACCGCACCGCTACAAAAGAACTATTTTGAAACGCTAGCCCTCCACCCGACGCATAAGAGTATAGCAGTCAAACCCTGGCGATACGCCCCAAGACACCTAGTATCCCAAACTCCTGTCACGCCACGCGACGGCGGGATGCAAACCAACCAGACTCGGTCGATCCGAATATAAAACCCCTGGCTTCAGATTGATAGGAGCAGCAGGGATATGGACGCGAGGAAGACAGCTACGGGAAAAACAGTAACGGGAATCTTGTGTTGCCAAGCCTCGTACTATGTCGACATAGTTGGCTAGAGTCGCTCCCAGATCGGGTGCAAATTTCTTATGAAACACTCGCGGTAACTGGATTTGGCGGCCACGCGGGCACTGTGTTTGGGTGCGCTATCCAGTTTGCGAGATCTCATCTGAGACCCCCATGCCGACAGTACTTGTCGTTGCTAGCCAGTCGCGATTCAGCATCTGCCCAATGAAACGAACCGTAGGAATTGTTTTCAATCCGTCTATCCTGTGCACACGTAAGTACCCGAGATGCGTCTAACATTACTCTTGTGCTAGCGTTGGGAACCTGGCTGCTTCCGAAGTCCTATGTGCCCCCGTCCGTAAAATGGCGGTCACCAATATACAGTTGCAACCACCTATCGGCAGGGGTCTGGCTAAGTGTTTATCGTCGCAAGCGATCACCTTGGAGCTCAGCCGGTGACTACCGAGCGGGTCGCAGACGGCCTGTCGCCTCGCGAGACCGAAATGACTCACTCAGCCCTTAACGGGAGACCCGGACGGAAGCATCTCTAATCACTGTACAGGCCCCGTTGAGACGGATCCTCGTGGGGTTGGGTTTACTAATGCCATGACTTGGTACCGCACTGAGGCACCCCAGGCCACGAACTAGACACCCAAGTGTATCCCCATGCATAAAGTAAAGCCTTGACGTCGGGATTATGGTGTATCATCAGGGGGAGTTCACATCAGCAATATTAGAAGGCACTGTAATTGAAGTGTCATGATGTAATAGCGGGCAGCCCCACGTAAGGAGCCGTAGTATCCCAAGCGATTGTCAGCACTCTAGCATATTTCCAGGTTAATAGGCGCTTGGAGTTATGCTGACTATCATGAGTTACCGAACTCAGCCGAGCGGTGTGAACTATGAAACTAGATAAGGCAGTGAGCTCATCCGGCCGGCACGTGGAGAGACAAACGCAACAGTTACCTATAGCAATATAGTGTAGCGTGTCGCCGGGTGTGGCATCATACGATCACGTCAGGTTAGGTCAGATTCGAGGCTACGGGTCCAGTTGTAAGTGGCGGAAACGTGCTAAGGATACGTAATAACAGACCTGGTAATTGGTGAGTAGAGGCGGGTTGGATTTGGTGGGCCCCAGATGGTCCAATGATCGTCGTTAGGTCAAGCCCCAAAACCCGAAGTCATGTGGTCAGTATGGATTCTACCCGTCGGCTTAGGTAGAAATCAGTACTGCTTGCGGTAAAATCGGATACACCCCTCGAAACAAACGGAGTCTTGGCGCCTCTCTAAATACTGCTGTCCTAAATTGGCCATCGGGCGGGCTTCGCCCAGGATTCTTACAGCATTGGCCCTTATATCCAGATGTTATGAATGGTGCGATTCGGGGTCTCGCCGACCAAACCTATTGCCGCAATTGGGAGAGTCAATGCAGGGGGCGCTTTAATAAGTTGCTCCCGCAAGCTCTCTATAATACAAGAGCTCGGGTTACAATCAAAGACCCCCGTCGCCCGCGCTACTAGTCGACGATTCCCTTTTCCATGTACCACGTGAGAGTGCTGCCAGCTCAAGCTCAAGCAATTTACTGAGAAACGATTAATCTACCCCATCAGAATGAGTGGAGAGTTCAACCTGGATTAGACCCCCACTTACTTCGGCATCCAAAGCAGGTTTACCCCTCCTGCTATGGTCTCCACAGCGAAGACTCTAAAGATTTAGCGCGGGAGAAACTCGGCTGTGTATCAGAAGGGCACTTGGTTGCTATCCTTCGGCCTCAAGTGCAGGTGACCAAGTCGATCAATGCCGTCGCACTAACAGGGAGTTGACGTTGTTCCAAACTGCACGATTTGCTCCGTCACCTACGGGTTGAGAGGCCTCATTGGAACTCGCTCCAAATTTCACGTAAAACCTAAGCATAGCCCTTGATCAGTAACTAGAATCAAGGCGGGAAACTTAATCACACGGAGACTATAACGGTCATCACAAGATTCCAGTTTGTACTTGAAATACAAGCGTCAAAACGAACATTTTCTTTAAATAGTACATACTCGTTAATGAGCAGTTCGTGTTGCGTGTGGCGAACTCCTTGGAGATCGGCACCTGATATCTCTACCAGTTCCCGTCGCAATAGAACCTGAAGCAGTGGCGGTTTCTCTCCACGTCGAGCGTGACTGAGCGATCATTTAGAGTCCGTTGGCCGACTAAAGGGTGATCTGGGTACCCACCTATAGAGGAGTTCGGTGCAGAGAATGCCGTGGTGGGGACTTAGATATCGAAGTCGGTATGAGATCTGTTTGGACTTGTCATCTGTGCGTACTTGTACCAACTTGATCGGTTGCGCACGTATATTGGTTATAGGAATTGGGCCATACTCAGGTTCGCAGCCGCTCCTACCGTTAAGACGCGCTGACCGGTTTGCTTTGAAATAATAGTGACACCGGTAACATCGAACATGAACCAACGTTTCACGTTCTATTTACACTCACCCTTCTAATAAAAGTTGATGAGGAATGAAGCGACCCACGTCGAGAACGAAAATTCAGTAGGGAGTGATTGTCAATAACTCGAGGTAGCTTAGCAAAGAAGTAATCAAGGTTAAGTTGCCCACAGGATCCTAAAAACAATTATTCCGATAGCCTCTGGGTAGAATACCCGAAGAAAGTACATTCGCCCTAATTCAGCCTTAAATCATTAAAATAGGCATACAAACCTGTTGTTGGATCTTCATACCGGCGTTGTTTCTGAGATCTCGGTGCCTACAGATATGTCGTATGTTAATGTACCAATCTATAGTTTTGGACGCAAAACATTAAAGAACCACCAACATATGAACCCCGGGTCGTGGGTTACAGGCGTCGTCCACGCTAACTTGCTCAGATGCAAACTTGGTTATCTAATCCGAAAACAGGACTACACCTAAGAACCTGGTTTGAAGCGTAATCAATACATCCGGCATCGGCGCTTGGAACAACCCCACTCCCGATAATCTCTCTGCCCCGTGGCTATAGGGTTCTTCAGTTTGCGCGATAGGGCAGCTTTCGTCTTACTGCTGAACGTCCTAACCAATTTTCCGTCGTGGGTCCAGGGCAACAAGGCTCCGAGATCCCCTTATACATAGAAGCCTATATACGCAGAGAGAACAAGGACGGGTAAAAATAAAGTCTCGGGAGGGTGACGGAACTCCACGAGGCCCTATCGCGCAAAGCGAATCCTTGTCAATTCACACCGATACTCGGTAGTTAATTTGAATTAAAGAGTTGTTTGCCAAGTTGTACTAATATTCAATCGGAAGTTAACCCTCAGCCTACATGTTAATTCCGCCAACCCGGGGATACAAGGAGCACCAAACGGGTTTCAATTTGTGGATTGGTATTGCATGCCCAAATGAACTAAGTTTGGGCCTCCGGGCCTGGATGACTATTCTGAGGTACAGAGATCGAGGGAGCTGTTTGGAGAACTAGAAACTCAATAGGTGACGTACTTATCCATACCAGCCCGCCGGTACGCGCATTAGTAAACTAGCCATGCCATAGTATCGGTTCGTACTCGACTGGATCGCTGAACACCGTACGGTCGCCAAGGTCATAGGGGCTGGTAACTAGGGGACACCATTAAATCTCTGGGCCCCCTCCGTTCTAGCGGCGGGGGTGATATCCATGGTAACTTTTACCTAGCGAACAGCTGCCACCTACTAGGACGCTTATGCGTGTTACTTGCTATGAAGATCCCTGATTTCACAGAATGTGACGCACCATGAATCAGCTCAAGCCCGCAAATCGCGGGATGGTGGAGACGCGGAATCGCCTCCCTGTGCTCTGCGACACTGTGCTGCCCGTAAAGAGCTACCTAGCCAGTTCGGTGACTCTGGAGCCCTACACCCTTGTGCTTACTGGAGAAATATACCTGTATACGAAGGGGGGTCCGGTGGACTTGACCGACGCTACTTACCGACACTGAGCAAAAGCCTACCGTATAAGCGTTGCATCTTTAATACCCTCCCGTATGCTCGCCGAGGTTGTTGAGGCAAACCGACGATTACGGGAGATGACCTTCGGTGGAATGCACGACGGTCATTCTCGCTCAATTAGCATCTAGAGTCCCAGCACTATCCGGGTGCTCTAAATCTAAGCCTGTCTCATCGCTCTTTAGCATCAGGAGGGAAGGAAGCCCTTGTAGGATCCTAGATCAGATGAGCAGAGACCTACATTAGACGCAGAGTTTGCTATATTTTCCTGGTGCTAGCGAGCCCAAATGTAGATCATTCGGAGAGCCCTACGCGTGGTCCTCTACCAAAGTTGCAATCGGCTCTGACAAGGTACTCGAGTGCTCGTGCAAAGTCCCGGGGCCGCGGTCGCCCTATCTCTAGAGCGATATGTATGGGACTTTACGCATACTCTTACCACGTAGATAGCATCATGCCTCCATACTTGCCTGTGGCGGGCAGCCTATACTGGTCGCCGAGATCTCTCAGTCGGGACTTGATATTGGAAAAGATTACTGGCGTTCGTTCTCGTGCGCTGCATTCTTGAGATTTGTACTTTTACGTGAACTGGGCTGCCTTGGTCAGCGCACACGGACTCTGTCCCATGGGCAAACCTGACTCGAAACCAGAGGGTTGTGCCTCGATTAGACCCTGCATTAGATCGGCCCTGTGTCTTCTCCATTACCACCAACTGTGTAAGTACTGAGTAACATCCCGCTTGTAGGAACCCTACATTCCTCCCGCGTGCACATCCCTGGCTTAACATCGCCTTGCACCTGGCTCTCGTAAATAAAGCTATCCTAACCCGCAAGACCGAAGCAGCCGAGGAGTCCAGGCACGCCCCTGAATGCACTCTTACATCGACATGACCCTGTGCTGAGACTTGTTTCTGGCTTGTGTATATGAGTACAGCCGCACATGACAGCAAAGTAGATACCTCGTAACGCCAGAGTGTCTAGTGGAATAAACACAACCCAGGACTTACTCATAAGGCGCCTCTTTTACCCCTTGCGCCAATCATGGGTATAACTACTAGACAACGCAAGAAGCAGTGAGTATTCGATCACCGCCTATTAGACACGGCATAATTACCAATCGATAGGAGGCAGGATATCCGCCGAGAGGCCTTCTTACAGTCTGTTGATTCGATCCCCTAGAACGTCTACGAGCTGCCGAAAGCTAGACGCTGCCCATACATGTACCCGACTAAATATAGCCGATTCTTGCTCTTCCAGTCAGCCTCGGGATAGTTGCGCTTCCTATACGATGGCAGGGACTACGAAAGTGGTATGAGTGATCTGGTACGCGCCTTGAAATTGGTGCAAAGCTAACGAGATTGACGAAGCACCTAACCCGCTTCAATTACTTCCAGTCGGGTATGAAACCGTCCACCAACCTCGCGCCTATGTTGGAGGCAACCGGTTGACATTTCCCGACGGCGATGTGATTCCCAAATAGTACGCTTATCTGGCTGTTAAGTGTCGAGCCACCGATCAACCTAACTGCGTCCTTCACGGTTTAAGAAAAACGACGCCCGAATGATAAAGTTCTAGCAGCCTTTTCGCTTTATTGAGGCTCCTGATAGATAGTTCGATAAGAAGAGTGCAGGCCAGCCAGCAAAACTACTCAACTATGTCTCTATATCCTTTATTACTCTTGTTTTTTGGACATGTTCACCAACAACCTGAGAACTACGGTGTTGGTCTAGAATGATTGTCTGGTAGTCAGCTGACAATAAGCCCTCCTACATATGACGGGATGTAATATACGGGACAGAATCATCGAGCGCGGTCTTCTTGCCAACGATTCTCCTGAAAGGCCCCGAAAATGCCTGGCTGAAGCGCTTCACAGGGTCGAGTACACAGACCGGGCACGTAAAGCTCTGTCTCATTCATAACGTACAAGTATAAGCTAAGTGGCTCACCACGGAGGCTGATGATTGATGAGGTATGCAATAGGTGACAAAATTAGGTTGCAAATATGGTGGAAATTCCTCCACACATATCGTCGTGGGCGATGCAGACTTTATACCAACACAATGTGACAGGTCTTTACTAAAAACCCGGCAGGACCGGTGCGGTGGTGTGGTGGTATCTGGTCCTTGGCGCTCTGTCCGATAAGTTTTCGCAGTCGGTATGGGTCCTTGCAGGAACAACCTTCGGGAAGCAATTACAAAGCCCACGGCGTGGGAAAGACAGCCCAGTCGTAAACCGTTTGTGAGGAGCCACTCTCGGATCATCCATTATTGGCGAATTCATTACTCACGTGGTATATGAGCGCTACTTCCACCAGAGGGAGAGCCCGCAGACACCCTACAGCGTGAAATGAGTTACCGGCAGTCTCGTGATAGCAAGCCGAGAAGCCTTTCTCCACGTAAAACGGCTCTATTTATCCAAATGACACGGCTTCTATGCGTATGAGGTAAACATTACTGAGTTCATCACTGCAGTACGACGATTATACGGGCCCGCCACTAAAATTCAGGGCGCATAACTGTCACTCGATCAAGCTGTAACTCACGAGGCGCATCCTTATTCATAGTGCAGTTAACGATCGGTGCAAAAAATGATGGGCATAATAAATCACAGAGACTACACCGGACCTGCGGCCTGGTAGAACCTCGTGATTCGCCTGCGATCGCCCAACTCGATCGCAAGATTGCCGTTAATCGAGTATATAGAAAGCCGACGAATCGTCGTAACATACTCCAAGACAGTTGCGGCCATCCGACTGGTTAGAGGCAGGCAGAGTTCAACAGTTGATATGTTAACTCGGATGGACCTTGAAGGAGCCCCATCAAGGAAAGATATAGCACAAGTTGCATGCAGTAGCGGCGAGGCGTATTCATATGGAGGGAGCAGTGCGAATGGCCGCCCTCCAATGAGCTTTATGAGATGAGCTAGCGAGCCTCGTAGGCGCCTCAAAATGAGTTGGCAGACAATGTACGGTAATCATCCGACAACTTTTCTCGTCATCCCACCAATCACGTCATGGGCCGTATCAACTGTAGAGTCCACGGAATATCTATCTAACACTTTGAGGTCTACCTACATCTCCAAGTATCACAACGCTCACCCGGCTTCTCCAGCACCACGCGTCTCTTGAATCTGGGGACAGCTAGACTCAATTGTCGGAGGATCGGAATCACTTCGATCGACCTAACGTCACCAGATGCGAGAAGGGGCTACCGCCTGAGACAGCGGACTTGCTGACAGTATCCGTTCGAAGCAATTTTATGTCGGCATAATTGCCCCTTCTGTTTGGGCTCAGTTAATAAATTGCCTGATTTCGTCACTGACTTAGACGACGACACTATAATACGTTTAGGCACCCACTGGACGGGTGGTGGTGACCTCGGTATACCATATCCATAGTGCGAACGCTACAGATGTAACCTGCATCAAATGGGTTAGATGCACCAACAATGTCTTACTACTTACGTGATGGCGATGACTAACTCCTGGTTAGGAACATCTCACTCAGCCCCGTCTACGGACTTATAGTTTTAAAACCGGTAACTGCATATTGGTGGTACGACTCGTTAGGTGGCGCTGATCACATAGTCAGGCCTACGAAATTTCCAAACAGCGGCGAATAGGGACGGAGGAGCAATACAGCGTACCGGCGTAACCGATGGCGCTTGGTTGGCCCCGTTAAGTCTCGCCCTATGGGCAACTTTAACGTACTCATGTACCGTAGGTAACCCTACGCCATCCCAGGACCCTTTGAGCTTCCATACATTGTGTAAATGCCAGATGGTCTTACACCCTGAGCACAAGCAAGCCCGCACCCCAGGCAATTTTCATTCACGAGCGTTAATCCAGGTCATCTGCTACGTGTCCATTGGGTTCACGGACAAAGATTAAATATGCAGATCTCATTAACTAGACTGGTCGTGCTCTAGGCGTCATATACCTCATTTGCGATGGCCAAGTTACGGGGGCGTGGCTGAGCGCCCAAGGATAATCCCTTAGCTGACATACGCTATCATAGTATTTCCAACCTTACAGCTGGGAGTTTAGTTGAGGTAAACGCACCGCTACGTTGCTGCTAAGTCACACGAGACGCTATGAACAATCTCGGGTACACTAGCCCGGTTGATCCTGCAGGTACGGATACAACTGGAACAATCTCGTTATCTTCACACCCGCCACATGCAGCATCCGCCTAGGAATGCATGTCATGAGCCTATTACCGGGCTCATCTGGACCTTCTGCCTTATTATACGGAACCACGATCCCGAATTGCCGCCCAGACTTTTTCCAGACGCGAATCATTGACTGTAAACATCATGCTCCAATGAACCAACTCTTAGAAGCCGGCCCTATCCTCAACCGGGTGATCACCCATGTGAATTCTCTGGTTACCGACAAAGAGTGTTAGCCTCCCAGCTAAGCCAACCAGGTGCTCAGCTTTTAACCGGATGGAAGACACTGCGAAAAGCAGCATCCAATATGTAGCCAGTAAATAATCTCGGGGCAACAAGTTCAGTCGCCTGCTTGGAGATATGCTGTTGCTCGTTCCGTGGCACAGACAAACTGGTAGGTTCCGCCAGTTCGACTAATCAAGGACATCGGCGATACACAAACGCTCGTCAAGGGTTGTCCCTTCGATTGTTGACATTGTCTTTGCGCACTCTTCCGGACATATAGTAGGTTGGTAACGATCCTCTATCAACACCCTCCCTCCCAACAGTACCGCTGCGTGTCGAGTTTCCTGGCGGTTATAGCGTAACGATCGGCCCCAGTACGCAACTCATACGTCTCAAAGGGATAGATCCCTTCAACCACCGACATTAATGGGTGTCTTGAAGTGGATACAGTAATATAATTTGGCCTCACCCACTGCGGGTCGACGAAGCTCCCAGTTATCCACTAAAGGTGTCGCTTCGCAAGGACCTCCCTGGGGGGACGTCACGTCTGGAGCGGGACTCGGTCCCT"; let text = "TTTTTGACTCGAATGAAAGTGGCTGCCGCAGAACTGGAGATTAGCAGGGGCAAGTGAACCATCCCCTTGGACGATACGGAATAAGTTGACAACCGGTCGCAGGGTGGAACAACACATATTCTATCTCAAACCTAAGGTGGATTGTAGTCCTGCACGTTGAAACTCGGTCCGGACCTCATGCGCGGTCGTAGAAAAGTGCATTTTCCTTCGGGAACTTGGTTATACTGAGTCCTCCCGAATTGCAGTAGGGGCGGCACTAATCCTTTACAAATTGTGCTCACTGACTATTCTTTCGGAGTCTAAGGACAAGAGCGTTGAGGCGCCTTTAGTCCTGAGTGGTATCGCCCACAGTTTATTAACTCTTAACTGATTTCCCGCTTTGGTGGTGGCGAAGACTTTTTGTAAAGTCGTCACCTAAGGCCGGTGTTGTTCCGCGGACTGACTGGGGGCAAGTGGCCCAAAGGTACCAGCGTGGCACATGCACAGTCACGCGAACACGCTAAGGGCTTATGCTTCGTTGCGTTGACTCAACACATTAGTCCCGCCATCACGGCGCCAATACACGAAGAGGGAACCCCCTGTGCCCGTCTGGAGTTGAGTTACTCGCGATGTGAATCGGTCACGTCGGCCCCGTATGGGTCAGTCGTGCCGTGTGCCAATGCAACCATTGTCTCCAAATGGCCCCTTGATGGATTGATGACCCATTCTTAGGCTTTTGCTCAGGTCCTATAGAGTACAACAGTGCTCACTATAGGTTTTAGTGTGGTTGTCTCCGTATAGTAGTGAGGTGTGGGGAACAGCCGTGAGTAGCATTTGAGCTAAGTGAAGGACAGATCCGCCGCACCGCTACAAAAGAACTATTTTGAAACGCTAGCCCTCCACCCGACGCATAAGAGTATAGCAGTCAAACCCTGCGATACGCCCCAAGACACCTAGTATCCCAAACTCCTGTCACGCCACGCGACGGCGGGATGCAAACCAACCAGACTCGGTCGATCCGAATATAAAACCCCTGGCTTCAGATTGATAGGAGCAGCAGGGATATGGACGCGAGGAAGACAGCTACGGGAAAAACAGTAACGGGGATCTTGTGTTGCCAAGCCTCGTACTATGTCGACATAGTTGGCTAGAGTCGCTCCCAGATCGGGTGCAAATTTCTTATGAAACACTCGCGGTAACTGGATTTGGCGGCCACGCGGGCACTGTGTTTGGGTGCGCTATCCAGTTTGCGAGATCTCATCTGAGACCCCCATGCCGACAGTACTTGTCGTTGCTAGCCAGTCGCGATTCAGCATCTGCCCAATGAAACGAACCGTAGGAATTGTTTTCAATCCGTCTATCCTGTGCACACGTAAGTACCCGAGATGCGTCTAACATTACTCTTGTGCTAGCGTGGGAACCTGGCTGCGTTCCGAAGTCCTATGTGCCCCCGTCCGTAAAATGGCGGTCACCAATATACAGTGCAACCACCTATCGTCAGGGGTCTGGCTAAGTGTTTATCGTCGCAAGCGATCACCTTGGAGCTCAGCCGGTGACTACCGAGCGGGTCGCAGACGGCCTGTCGCCTCGCGAGACCGAAATGACTCACTCAGCCCTTAACGGGAGACCCGGACGGAAGCATCTCTAATCACTGTACAGGCCCCGTTGAGACGGATCCTCGTGGGGTTGGGTTTACTAATGCCATGACTTGGTACCGCACTGAGGCACCCCAGGCCACGAACTAGACACCCAAGTGTATCCCCATGCATAAAGTAAAGCCTTGACGTCGCGATCATGGTGTATCATCAGGGGGAGTTCACATCAGCAATATTAGAAGGCACTGTAATTGAAGTGTCATGATGTAATAGCGGGCAGCCCCACGTAAGGAGCCGTAGTATCCCAAGCGATTGTCAGCACTCTAGCAATTTCCAGGTTAATAGGCGCTTGGAGTTATGCTGACTATCATGAGTTACCGAACTCAGCCGAGCGGTGTGAACTATGAAACTAGATAAGGCAGTGAGCTCATCCGGCCGGCACGTGGAGAGACAAACGCAACAGTTACCTATAGCAATATAGTGTAGCGTGTCGCCGGGTGTGGCATCATACGATCACGTCAGGTTAGGTCAGATTCGAGGCTACGGGTCCAGTTGTAAGTGGCGGAAACGTGCTAAGGATACGTAATAACAGACCTGGTAATTGGTGAGTAGAGGCGGGTTGGATTGGCTGGGCCCCAGATGGTCCAATGATCGTCGTTAGGTCAAGCCCCAAAACCCGAAGTCATGTGGTCAGTATGGATTCTACCCGTCGGCTTAGGTAGAAATCAGTACTGCTTGCGGTAAAATCGGATACACCCCTCGAAACAAACGGAGTCATTGGCGCCTCTCTAAATACTGCTGTCCTAAATTGGCCATCGGGCGGGCTTCGCCCAGGATTCTTACAGCATTGGCCCTTATATCCAGATGTTATGAATGGTGCGATTCGGGGTCTCGCCGACCAAACCTATTGCCGCAATTGGGAGAGTCAATGCAGGGGGCGCTTTAATAAGTTGCTCCCGCAAGCTCTCTATAATACAAGAGCTCGGGTTACAATCAAAGACCCCCGTCGCCCGCGCTACTAGTCGACGATTCCCTTTTCCATGTACCACGTGAGAGTGCTGCCAGCTCAAGCTCAAGCAATTTACTGAGAAACGATTATCTACCCCATCAGAATGAGTGGAGGAGTTCAACCTGGATTAGACCCCCACTTACTTCGGCATCCAAAGCAGGTTTACCCCTCCTGCTATGGTCTCCACAGCGAAGACTCTAAAGATTTAGCGCGGGAGAAACTCGGCTGTGTATCAGACGGGCACTTGGTTGCTATCCTTCGGCCTCAAGTGCAGGTGACCAAGTCGATCAATGCCGTCGCACTAAACAGGGAGTTGACGTTGTTCCAAACTGCACGATTTGCTCCGTCACCTACCGGGTTGAGAGGCCTCATTGGAACTCGCTCCAAATTTCACGTAAAACCTAAGCATAGCCCTTGATCAGTAACTAGAATCAAGGCGGGAAACATTAATCACACGGAGACTATAACGGTCATCACAAGATTCCAGTTTGTACTTGAAATACAAGCGTCAAATCGAACATTTTCCTTAAATAGTACATACTCGTTAATGAGCAGTTCGTGTTGCGTGTGGCGAACTCCTTAGAGATCGGCACCTGATATCTCTACCAGTTCCCGTCGCAATAGAACCTGAAGCAGTGCGGTTTTTCTCCACGTCGAGCGTGACTGAGCGATCATTTAGAGTCCGTTGGCCGACTAAAGGGTGATCTGGGTACCCACCTATAGAGGAGTTCGGTGCAGAGAATGCCGTGGTGGGGACTTAGAAATCGAAGTCGGTATGAGATCTGTTTGGACTTGTCATCTGTGCGTACTTGTTCCAACTTGATCGGTTGCGCACGTATATTGGTTATAGGAATTGGGCCATACTCAGGTTCGCAGCCGCTCCTACCGTTAAGACGCGCTGACCGGTTTGCTTTGAAATAATAGTGACACCGGTAACATCGAACATGAACCAACGTTTCACGTTCTATTTACACTCACCCTTCTAATAAAAGTTGATGAGGAATGAAGCGACCCACGTCGAGAACGAAAATTCAGTAGCGAGTGATTGTCAATAACTCGAGGTAGCTTAGCAAAGAAGTAATCAAGGTTAAGTTGCCCACAGGATCCTAAAAACAATTATTCCGATAGCCTCTGGGTCAGAATACCCGAAGAAAGTACATTCGCCCTAATTCAGCCTTAAATCATTAAAATAGGCATACAAACCTGTTGTTGGATCTTCATACCGGCGTTGTTTCTGAGATCTCGGTGCCTACAGATATGTCACTATGTTAATGTACCAATCTATAGTTTTGGACGCAAAACATTAAAGAACCACCAACATATGAACCCCGGGTCGTGGGTTACAGGCGTCGTCCACGCTAACTTGCTCAGATGCAAACTGGTTATCTAATCCGAAAACAGGACTACACCTAAGAACCTGGTTTGAAGCGTAATCAATACATCCGGCATCGGCGCTTGGAACAACCCCACTCCCGATAATCTCTCTGCCCCGTGGCTATAGGGTTCTTCAGTTTGCGCGATAGGGCAGCTTTCGTCTTACTGCTGAACGTCCTAACCAATTTTCCGTCGTGGGTCCAGGGCAACAAGGCTCCGAGATCCCCTTATACATAGAAGCCTATATACGCAGAGAGAACAAGGACGGGTAAAAATAAAGTCTCGGGAGGGTGACGGAACTCCACGAGGCCCTATCGCGCAAAGCGAATTCTTGTCAATTCACACCGATACTCGGTAGTTAATTTGAATTAAAGAGTTGTTTGCCAAGTTGTACTAATATTCAATCGGAAGTTAACCCTCAGCCTACTGTTAATTCCGCCAACCCGGGGATACAAGGAGCACCAAACGGGTTTCAATTTTGGATTGGTATTGCATGCCCAAATGAACTAAGTTTGGGCCTCCGGGCCTGGATGACTATTCTGAGGTACAGAAGATCGAGGGAGCTGTTTGGAGAACTAGAAACTCAATAGGTGACGTACTTATCCATACCAGCCCGCCGGTACGCGCATTAGTAAACTAGTCCATGCCATAGTATCGGTTCGTACTCGACTGGATCGCTGAACACCGTACGGTCGCCAAGGTCATAGGGGCTGGTAACTAGGGGACACCATTAAATCTCTGGGCCCCCTCCGTTCTAGCGGCGGGGGTGATATCCATGGTACACTTTTACCTAGCGAACAGCTGCCACTACTAGGACGCTTATGCGTGTTACTTGCTATGAAGATCCCTGATTTCACAGAATGTGACGCACCATGAATCAGCTCAAGCCCGCAAATCGCGGGATGGTGGAGACGCGGATCGCCTCCCTGTGCTCTGCGACACTGTGCTGCCCGTAAAGAGCTACCTAGCCAGTTCTGTGACTCTGGAGCCCTACACCCTTGTGCTTACTGGAGAAATATACCTGTGATACGAAGGGGGGTCCGGTGGACTTGACCGACGCTACTTACCGACACTGAGCAAAAGCCTACCGTATAAGCGTTGCATCTTTAATACCCTCCCGTATGCTCGCCGAGGTTGTTGAGGCAAACCGACGATTACGGGAGATGACCTTCGGTGGAATGCACGACGGTCATTCTCGCTCAATTAGCATCTAGAGTCCCAGCACTATCCGGGTGGCTCTAAATCTAAGCCTGTCTCATCGCTCTTTAGCATCAGGAGGGAAGGAAGCCCTTGTAGGATCCTAGATCAGATGAGCAGAGACCTACATTAGACGCAGAGTTTGCTATATTTTCCTGGTGCTAGCGAGCCCAAATGTAGATCATTCGGAGAGCCCTACGCGTGGTCCTCTACCAAAGTTCAATCGGCTCTGACAAGGTACTCGAGTGCTCGTGCAAAGTCCCGGGGCCGCGGTCGCCCTATCTCTAGAGCGATATGTATGGGACTTTACGCATACTCTTACCACGTAGATAGCATCATGCCTCCATACTTGCCTGTGGCGGGCAGCCTATACTGGTCGCCGAGATCTCTCAGTCGGGACTTGATATTGGAAAAGATTACTGGCGTTCGTTCTCGTGCGCTGCATTCTTGAGATTTGTACTTTTACGTGAACTGGGCTGCCTTGGTCAGCGCACACGGACTCTGTCCCATGGGCAAACCTGACTCGAAACCAGAGGGTTGTGCCTCGATTAGACCCTGCATTAGAGTCGGCCCTGTGTCTTCTCCATTACCACCAACTGTGTAAGTACTGAGTAACATCCCCGCTTGTAGGAACCCTACATTCCTCCCGCGTGCACATCCCTGGCTTAACATCGCCTTGCACCTGGCTCTCGTAAATAAAGACTATCCTAACCCGCAAGACCGAAGCAGCCGAGGAGTCCAGGCACGCCCCTGAAGGCACTCTTACATCGACATGACCCTGTGCTGAGACTTGTTTCTGGCTTGTGTATATGAGTACAGCCGCACATGACAGCAAAGTAGATACCTCGTAACGCCAGAGTGTCTAGTGGAATAAACACAACCCAGGACTTACTCATAAGGCGCCTCTTTTACCCCTTGCGCCAATCATGGGTATAACTACTAGACAACGCAAGAAGCAGTGAGTATTCGATCACCGCCTATTAGACACGGCATAATTACCAATCGATAGGAGGCATGGATATCCGCCGAGAGGCCTTCTTACAGTCTGTTGATTCGATCCCCTAGAACGTCTACGAGCTGCGAAAGCTAGACGCTGCCCATACATGTACCCGACTAAATATAGCCGATTCTTGCTCTTCCAGTCAGCCTCGGGATAGTTGCGCTTCCTATACGATGGCAGGGACTACGAAAGTGGTATGAGTGTCTGGTACGCGCCTTGAAATTGGTGCAAAGCTAACGAGATTGACGAAGCACCTAACCCGCTTCAATTACTTCCAGTCGGGTATGAAACCGTCCACCAACCTCGCGCCTATGTTGGAGGCAACCGGTTGACATTTCCCGACGGCGATGTGATTCCCAAATAGTACGCTTATCTGGCTGTTAAGTGTCGAGCCACCGATCAACCTAACTGCTCCTTCACGGTTTAAGAAAAACGACGCCCGAATGATAAAGTTCTAGCAGCCTTTTCGCTTTATTGAGGCTCCTGATAGATAGTTCGATAAGAAGAGTGCAGGCCAGCCAGCAAAACTACTCAACTATGTCTCTATATCCTTTATTACTCTTGTTTTTTGGACATGTTCACCAACAACCTGAGAACTACGGTGTTGGTCTAGAATGATTGTCTGGTAGTCAACTGACAATAAGCCCTCCTACATATGACGGATGTAATATACGGGACAGAATCATCGAGCGCGGTCTTCTTGCCAACGATTCTCCTGAAAGGCCCCGAAAATGCCTGGCTGAAGCCGCTTCACAGGGTCGAGTACACAGACCGGGCACGTAAAGCTCTGTCTCATTCATAACGTACAAGTATAAGCTCAGTGGCTCACCACGGAGGCTGATGATTGATGAGGTATGCAATAGGTGACAAAATTAGCGTTGCAAATATGGTGGAAATTCCTCCACACATATCGTCGTGGGCGATGCAGACTTTATACCAACACAATGTGACAGGTCTTTACTAAAAACCCGGCAGGACCGGTGCGGTGGTGTGGTGGTATCTGGTCCTTGGCGCTCTGTCCGATAAGTTTTCGCAGTCGGTATGGGTCCTTGCAGGAACAACCTTCGGGAAGCAATTACAAAGCCCACGGCCGTGGGAAAGACAGCCCAGTCGTAAACCGTTTGTGAGGAGCCACTCTCGGATCATCCATTATTGGCGAATTCATTACTCACGTGGTATATGAGCGCTACTTCCACCAGAGGGAGAGCGCCGCAGACACCCTACAGCGTGAAATGAGTTACCGGCAGTCTCGTGATAGCAAGCCGAGAAGCCTTTCATCCACGTAAAAACGGCTCTATTTTCCAAATGACACGGCTTCTATGCGTATGAGGTAAACATTACTGAGTTCATCACTGCAGTACGACGATTATACGGGCCCGCCACTAAAATTCAGGGCGCATAACTGTCACTCGATCAAGCTGTAACTCACGAGGCGCATCCTTATTCATAGTGCAGTTAACGATCGGTGCAAAAAATGATGGGCATAATAAATCACAGAGACTACACCGGACCTGCGGCCTGGTAGAACCTCGTGATTCGCCTGCGATCGCCCAACTCGATCGCAAGATTGCCGTTAATCGAGTATATAGAAAGCCGACGAATCGTCGTAACATACTCCAAGACAGTTGCGGCCATCCGACTGGTTAGAGGCAGGCAAGTTCAACAGTTGATATGTTAACTCGGATGGACCTTGAAGGAGCCCCATCAAGGATAGATATAGCACAAGTTGCATGCAGTAGCGGCGAGGCGTATTCATATGGAGGGAGCAGTGCGGAATGGCCGCCCTCCAATGAGCTTTATGAGATGAGCTAGCGAGCCTCGTAGGGCCTCAAAATGAGTTGGCAGACAATGTACGGTAATCATCCGACAACTTTTCTCGTCATCCCACCAATCACGTCATGGGCCGTATCAACTGTAGAGTCCACGGAATATCTATCTAACACTTTGAGGTCTACCTACATCTCCAAGTATCACAACGCTCACCCGGCTTCTCCAGCACCACGCGTCTCTTGAATCTGGGGACAGCTAGACTCAATTGTCGGAGGATCGGAATCACTTCGATCGACCTAACGTCACCAGATGCGAGAAGGGGCTACCGCCTGAAACAGCGGATTGCGACAGTATCCGTTCGAAGCAATTTTATGTCGGCATAATTGCCCCTTCTGTTTGGGCTCAGTTAATAAATTGCCTGATATCGTCACTGACTTAGACGACGACACTATAATACGTTTAGGCACCCACTGGACGGGTGGTGGTGACCTCGGTATACCATATCCATAGTGCGAACGCTACAGATGTAACCTGCATCAAATGGGTTAGATCCACCAACAATGTCTAACTACTTACGTGATGGCGATGACTAACTCCTGGTTAGGAACATCTCACTCAGCCCCGTCTACGGACTTATAGTTTTAAAACCGGTAACTGCATATTGGTGGTACGACTCGTTAGGTGGCGCTGATCACATAGTCAGGCCTACGAAATTTCCAAACAGCGGCGAATAGGGACGGAGGAGCAATACAGCGTACCGGCGTAACCGATGGCGCTTGGTTGGCCCCGTTAAGTCTCGCCCTATGGGCAACTTTAACGTACTCATGTACCGTAGGTAACCCTACGCCATCCCAGGACCCTTGAGCTTCCATACATTGTGTAAATGCCAGATGGTCTTACACCCTGAGCACAAGCAAGCCCGCACCCCAGGCAATTTTCATTCACGAGCGTTAATCCTAGGTCATCTGCTACGTGTCCATTGGGTTCACGGACAAAGATTAAATATGCAGATCTCATTAACTAGACTGGTCGTGCTCTAGGCGTCATATACCTCATTTGCGATGGCCAAGTTACGGGGGCGTGGCTGAGCGCCCAAGGATAATCCCTTAGCTGACATACGCTATCATAGTATTTCCAACCTTACAGCTGGGAGTTTAGTTGAGGTAAACGCCACCGCTACGTTGCTGCTAAGTCAACACGAGACGCTATGAACAATCTCGTGGTACACTAGCCCGGTTGATCCTGCAGGGTACGGATACAACTGGAACAATCTCGTTATCTTCACACCCGCCACATGCAGCATCCGCCTAGGAATGCATGTCATGAGGCCTATTACCGGGCTCATCTGGACCTTCTGCCTTATTATACGGAACCACGATCCCGAATTGCCGCCCAGACTTTTTCCAGACGCGAATCATTGACTGTAAACATCATGCTCCAATGAACCAACTCTTAGAAGCCGGCCCTATCCTCAACCGGGTGATCACCCATGTGAATTTTCTGGTTACCGACAAAGAGTGTTAGCCTCCCAGCTAAGCCAACCAGGTGCTCAGCTTTTAACCGGATGGAAGACACTGCGAAAAGCAGCATCCAATACTGTAGCCAGTAAATAATCTCGGGGCAACAAGTTCAGTCGCCTGCTTGGAGATATGCTGTTGCTCGTTCCGTGGCACAGACAAACTGGTAGGTTCCGCCAGTTCGACTGAATCAAGGACATCGGCGATACACAAACGCTCGTCAAGGGTTGTCCCTTCGATTGTTGACATTGTCTTTGCGCACTCCTCCGGACATATAGTAGGTTGGTAACGATCCTCTATCAACACCCTCCCTCCCAACAGTACCGCTGCGTGTCGAGTTTCCTGGCGGTTATAGCGTAACGATCGGCCCCAGTACGCAACTCATACGTCTCAACGGGATAGATCCCTTCAACCAGCCGACATTAATGGGTTGTCTTGAAGTGGATACAGTAATATAATTTGGCCTCAACCCACTGCGGGTCGACGAAGCTCCCAGTTATCCACTAAAGGTGTCCGCTTCGCAAGGACCTCCCTGGGGGGACGTCACGTCTGGAGCGGGACTCGGTCCCT"; let pens = Penalties { mismatch_pen: 1, open_pen: 2, extd_pen: 2, }; c.bench_function("wfa length 10000 1% error", |b| { b.iter(|| wavefront_align(black_box(query), black_box(text), black_box(&pens))) }); } fn wavefront_bench_l10000_e10(c: &mut Criterion) { let query = "TTTTTGACTCGAATGAAAGTGCGCTGCCGCAGAACTGGAGATTAGCAGGGGCAAGTGAACCATCCCCTTGGACGATACGGAATAAGTTGACAACCGGTCGCAGGGTGGAACAACACATATTCTATCTCAAACCTAAGGTGGATTGTAGTCCTGCACGTTGAAACTCGGTCCGGACCTCATGCGCGGTCGTAGAAAAGTGCATTTTCCTTCGGGAACTTGGTTATACTGAGTCCTCCCGAATTGCAGTAGGGGCGGCACTAATCCTTTACAAATTGTGCTCACTGACTATTCTTTCGGAGTCTAAGGACAAGAGCGTTGAGGCGCCTTTAGTCCTGAGTGGTATCGCCCACAGTTTATTAACTCTTAACTGATTTCCCGTCTTTGGTGGTGGCGAAGACTTTTTGTAAAGTCGTCACCTAAGGCCGGTGTTGTTCCGCGGACTGACTGGGGGCAAGTGGCCCAAAGGTACCAGCGTGGCACATGCACAGTCACGCGAACACGCTAAGGGATTATGCTTCGTTGCGTTGACTCAACACATTAGTCCCGCCATCACGGCGCCAATACACGAAGAGGGAACCCCCTGTGCCCGTCTGGAGTTGAGTTACTCGCGATGTGAATCGGTCACGTCGGCCCCGTATGGGTCAGTCGTGCCGTGTGCCAATGCAACCATTGTCTCCAAATGGCCCCTTGATGGATTGATGACCCATTCTTAGGCTTTTGCTCAGGTCCTATAGAGTACAACAGTGCTCACTATAGGTTTTAGTGTGGTTGTCTCCGTATAGTAGTGAGGTGTGGGGAACAGCCGTGAGTAGCATTTGAGCTAAGTGAAGGACAGATCCGACCGCACCGCTACAAAAGAACTATTTTGAAACGCTAGCCCTCCACCCGACGCATAAGAGTATAGCAGTCAAACCCTGGCGATACGCCCCAAGACACCTAGTATCCCAAACTCCTGTCACGCCACGCGACGGCGGGATGCAAACCAACCAGACTCGGTCGATCCGAATATAAAACCCCTGGCTTCAGATTGATAGGAGCAGCAGGGATATGGACGCGAGGAAGACAGCTACGGGAAAAACAGTAACGGGAATCTTGTGTTGCCAAGCCTCGTACTATGTCGACATAGTTGGCTAGAGTCGCTCCCAGATCGGGTGCAAATTTCTTATGAAACACTCGCGGTAACTGGATTTGGCGGCCACGCGGGCACTGTGTTTGGGTGCGCTATCCAGTTTGCGAGATCTCATCTGAGACCCCCATGCCGACAGTACTTGTCGTTGCTAGCCAGTCGCGATTCAGCATCTGCCCAATGAAACGAACCGTAGGAATTGTTTTCAATCCGTCTATCCTGTGCACACGTAAGTACCCGAGATGCGTCTAACATTACTCTTGTGCTAGCGTTGGGAACCTGGCTGCTTCCGAAGTCCTATGTGCCCCCGTCCGTAAAATGGCGGTCACCAATATACAGTTGCAACCACCTATCGGCAGGGGTCTGGCTAAGTGTTTATCGTCGCAAGCGATCACCTTGGAGCTCAGCCGGTGACTACCGAGCGGGTCGCAGACGGCCTGTCGCCTCGCGAGACCGAAATGACTCACTCAGCCCTTAACGGGAGACCCGGACGGAAGCATCTCTAATCACTGTACAGGCCCCGTTGAGACGGATCCTCGTGGGGTTGGGTTTACTAATGCCATGACTTGGTACCGCACTGAGGCACCCCAGGCCACGAACTAGACACCCAAGTGTATCCCCATGCATAAAGTAAAGCCTTGACGTCGGGATTATGGTGTATCATCAGGGGGAGTTCACATCAGCAATATTAGAAGGCACTGTAATTGAAGTGTCATGATGTAATAGCGGGCAGCCCCACGTAAGGAGCCGTAGTATCCCAAGCGATTGTCAGCACTCTAGCATATTTCCAGGTTAATAGGCGCTTGGAGTTATGCTGACTATCATGAGTTACCGAACTCAGCCGAGCGGTGTGAACTATGAAACTAGATAAGGCAGTGAGCTCATCCGGCCGGCACGTGGAGAGACAAACGCAACAGTTACCTATAGCAATATAGTGTAGCGTGTCGCCGGGTGTGGCATCATACGATCACGTCAGGTTAGGTCAGATTCGAGGCTACGGGTCCAGTTGTAAGTGGCGGAAACGTGCTAAGGATACGTAATAACAGACCTGGTAATTGGTGAGTAGAGGCGGGTTGGATTTGGTGGGCCCCAGATGGTCCAATGATCGTCGTTAGGTCAAGCCCCAAAACCCGAAGTCATGTGGTCAGTATGGATTCTACCCGTCGGCTTAGGTAGAAATCAGTACTGCTTGCGGTAAAATCGGATACACCCCTCGAAACAAACGGAGTCTTGGCGCCTCTCTAAATACTGCTGTCCTAAATTGGCCATCGGGCGGGCTTCGCCCAGGATTCTTACAGCATTGGCCCTTATATCCAGATGTTATGAATGGTGCGATTCGGGGTCTCGCCGACCAAACCTATTGCCGCAATTGGGAGAGTCAATGCAGGGGGCGCTTTAATAAGTTGCTCCCGCAAGCTCTCTATAATACAAGAGCTCGGGTTACAATCAAAGACCCCCGTCGCCCGCGCTACTAGTCGACGATTCCCTTTTCCATGTACCACGTGAGAGTGCTGCCAGCTCAAGCTCAAGCAATTTACTGAGAAACGATTAATCTACCCCATCAGAATGAGTGGAGAGTTCAACCTGGATTAGACCCCCACTTACTTCGGCATCCAAAGCAGGTTTACCCCTCCTGCTATGGTCTCCACAGCGAAGACTCTAAAGATTTAGCGCGGGAGAAACTCGGCTGTGTATCAGAAGGGCACTTGGTTGCTATCCTTCGGCCTCAAGTGCAGGTGACCAAGTCGATCAATGCCGTCGCACTAACAGGGAGTTGACGTTGTTCCAAACTGCACGATTTGCTCCGTCACCTACGGGTTGAGAGGCCTCATTGGAACTCGCTCCAAATTTCACGTAAAACCTAAGCATAGCCCTTGATCAGTAACTAGAATCAAGGCGGGAAACTTAATCACACGGAGACTATAACGGTCATCACAAGATTCCAGTTTGTACTTGAAATACAAGCGTCAAAACGAACATTTTCTTTAAATAGTACATACTCGTTAATGAGCAGTTCGTGTTGCGTGTGGCGAACTCCTTGGAGATCGGCACCTGATATCTCTACCAGTTCCCGTCGCAATAGAACCTGAAGCAGTGGCGGTTTCTCTCCACGTCGAGCGTGACTGAGCGATCATTTAGAGTCCGTTGGCCGACTAAAGGGTGATCTGGGTACCCACCTATAGAGGAGTTCGGTGCAGAGAATGCCGTGGTGGGGACTTAGATATCGAAGTCGGTATGAGATCTGTTTGGACTTGTCATCTGTGCGTACTTGTACCAACTTGATCGGTTGCGCACGTATATTGGTTATAGGAATTGGGCCATACTCAGGTTCGCAGCCGCTCCTACCGTTAAGACGCGCTGACCGGTTTGCTTTGAAATAATAGTGACACCGGTAACATCGAACATGAACCAACGTTTCACGTTCTATTTACACTCACCCTTCTAATAAAAGTTGATGAGGAATGAAGCGACCCACGTCGAGAACGAAAATTCAGTAGGGAGTGATTGTCAATAACTCGAGGTAGCTTAGCAAAGAAGTAATCAAGGTTAAGTTGCCCACAGGATCCTAAAAACAATTATTCCGATAGCCTCTGGGTAGAATACCCGAAGAAAGTACATTCGCCCTAATTCAGCCTTAAATCATTAAAATAGGCATACAAACCTGTTGTTGGATCTTCATACCGGCGTTGTTTCTGAGATCTCGGTGCCTACAGATATGTCGTATGTTAATGTACCAATCTATAGTTTTGGACGCAAAACATTAAAGAACCACCAACATATGAACCCCGGGTCGTGGGTTACAGGCGTCGTCCACGCTAACTTGCTCAGATGCAAACTTGGTTATCTAATCCGAAAACAGGACTACACCTAAGAACCTGGTTTGAAGCGTAATCAATACATCCGGCATCGGCGCTTGGAACAACCCCACTCCCGATAATCTCTCTGCCCCGTGGCTATAGGGTTCTTCAGTTTGCGCGATAGGGCAGCTTTCGTCTTACTGCTGAACGTCCTAACCAATTTTCCGTCGTGGGTCCAGGGCAACAAGGCTCCGAGATCCCCTTATACATAGAAGCCTATATACGCAGAGAGAACAAGGACGGGTAAAAATAAAGTCTCGGGAGGGTGACGGAACTCCACGAGGCCCTATCGCGCAAAGCGAATCCTTGTCAATTCACACCGATACTCGGTAGTTAATTTGAATTAAAGAGTTGTTTGCCAAGTTGTACTAATATTCAATCGGAAGTTAACCCTCAGCCTACATGTTAATTCCGCCAACCCGGGGATACAAGGAGCACCAAACGGGTTTCAATTTGTGGATTGGTATTGCATGCCCAAATGAACTAAGTTTGGGCCTCCGGGCCTGGATGACTATTCTGAGGTACAGAGATCGAGGGAGCTGTTTGGAGAACTAGAAACTCAATAGGTGACGTACTTATCCATACCAGCCCGCCGGTACGCGCATTAGTAAACTAGCCATGCCATAGTATCGGTTCGTACTCGACTGGATCGCTGAACACCGTACGGTCGCCAAGGTCATAGGGGCTGGTAACTAGGGGACACCATTAAATCTCTGGGCCCCCTCCGTTCTAGCGGCGGGGGTGATATCCATGGTAACTTTTACCTAGCGAACAGCTGCCACCTACTAGGACGCTTATGCGTGTTACTTGCTATGAAGATCCCTGATTTCACAGAATGTGACGCACCATGAATCAGCTCAAGCCCGCAAATCGCGGGATGGTGGAGACGCGGAATCGCCTCCCTGTGCTCTGCGACACTGTGCTGCCCGTAAAGAGCTACCTAGCCAGTTCGGTGACTCTGGAGCCCTACACCCTTGTGCTTACTGGAGAAATATACCTGTATACGAAGGGGGGTCCGGTGGACTTGACCGACGCTACTTACCGACACTGAGCAAAAGCCTACCGTATAAGCGTTGCATCTTTAATACCCTCCCGTATGCTCGCCGAGGTTGTTGAGGCAAACCGACGATTACGGGAGATGACCTTCGGTGGAATGCACGACGGTCATTCTCGCTCAATTAGCATCTAGAGTCCCAGCACTATCCGGGTGCTCTAAATCTAAGCCTGTCTCATCGCTCTTTAGCATCAGGAGGGAAGGAAGCCCTTGTAGGATCCTAGATCAGATGAGCAGAGACCTACATTAGACGCAGAGTTTGCTATATTTTCCTGGTGCTAGCGAGCCCAAATGTAGATCATTCGGAGAGCCCTACGCGTGGTCCTCTACCAAAGTTGCAATCGGCTCTGACAAGGTACTCGAGTGCTCGTGCAAAGTCCCGGGGCCGCGGTCGCCCTATCTCTAGAGCGATATGTATGGGACTTTACGCATACTCTTACCACGTAGATAGCATCATGCCTCCATACTTGCCTGTGGCGGGCAGCCTATACTGGTCGCCGAGATCTCTCAGTCGGGACTTGATATTGGAAAAGATTACTGGCGTTCGTTCTCGTGCGCTGCATTCTTGAGATTTGTACTTTTACGTGAACTGGGCTGCCTTGGTCAGCGCACACGGACTCTGTCCCATGGGCAAACCTGACTCGAAACCAGAGGGTTGTGCCTCGATTAGACCCTGCATTAGATCGGCCCTGTGTCTTCTCCATTACCACCAACTGTGTAAGTACTGAGTAACATCCCGCTTGTAGGAACCCTACATTCCTCCCGCGTGCACATCCCTGGCTTAACATCGCCTTGCACCTGGCTCTCGTAAATAAAGCTATCCTAACCCGCAAGACCGAAGCAGCCGAGGAGTCCAGGCACGCCCCTGAATGCACTCTTACATCGACATGACCCTGTGCTGAGACTTGTTTCTGGCTTGTGTATATGAGTACAGCCGCACATGACAGCAAAGTAGATACCTCGTAACGCCAGAGTGTCTAGTGGAATAAACACAACCCAGGACTTACTCATAAGGCGCCTCTTTTACCCCTTGCGCCAATCATGGGTATAACTACTAGACAACGCAAGAAGCAGTGAGTATTCGATCACCGCCTATTAGACACGGCATAATTACCAATCGATAGGAGGCAGGATATCCGCCGAGAGGCCTTCTTACAGTCTGTTGATTCGATCCCCTAGAACGTCTACGAGCTGCCGAAAGCTAGACGCTGCCCATACATGTACCCGACTAAATATAGCCGATTCTTGCTCTTCCAGTCAGCCTCGGGATAGTTGCGCTTCCTATACGATGGCAGGGACTACGAAAGTGGTATGAGTGATCTGGTACGCGCCTTGAAATTGGTGCAAAGCTAACGAGATTGACGAAGCACCTAACCCGCTTCAATTACTTCCAGTCGGGTATGAAACCGTCCACCAACCTCGCGCCTATGTTGGAGGCAACCGGTTGACATTTCCCGACGGCGATGTGATTCCCAAATAGTACGCTTATCTGGCTGTTAAGTGTCGAGCCACCGATCAACCTAACTGCGTCCTTCACGGTTTAAGAAAAACGACGCCCGAATGATAAAGTTCTAGCAGCCTTTTCGCTTTATTGAGGCTCCTGATAGATAGTTCGATAAGAAGAGTGCAGGCCAGCCAGCAAAACTACTCAACTATGTCTCTATATCCTTTATTACTCTTGTTTTTTGGACATGTTCACCAACAACCTGAGAACTACGGTGTTGGTCTAGAATGATTGTCTGGTAGTCAGCTGACAATAAGCCCTCCTACATATGACGGGATGTAATATACGGGACAGAATCATCGAGCGCGGTCTTCTTGCCAACGATTCTCCTGAAAGGCCCCGAAAATGCCTGGCTGAAGCGCTTCACAGGGTCGAGTACACAGACCGGGCACGTAAAGCTCTGTCTCATTCATAACGTACAAGTATAAGCTAAGTGGCTCACCACGGAGGCTGATGATTGATGAGGTATGCAATAGGTGACAAAATTAGGTTGCAAATATGGTGGAAATTCCTCCACACATATCGTCGTGGGCGATGCAGACTTTATACCAACACAATGTGACAGGTCTTTACTAAAAACCCGGCAGGACCGGTGCGGTGGTGTGGTGGTATCTGGTCCTTGGCGCTCTGTCCGATAAGTTTTCGCAGTCGGTATGGGTCCTTGCAGGAACAACCTTCGGGAAGCAATTACAAAGCCCACGGCGTGGGAAAGACAGCCCAGTCGTAAACCGTTTGTGAGGAGCCACTCTCGGATCATCCATTATTGGCGAATTCATTACTCACGTGGTATATGAGCGCTACTTCCACCAGAGGGAGAGCCCGCAGACACCCTACAGCGTGAAATGAGTTACCGGCAGTCTCGTGATAGCAAGCCGAGAAGCCTTTCTCCACGTAAAACGGCTCTATTTATCCAAATGACACGGCTTCTATGCGTATGAGGTAAACATTACTGAGTTCATCACTGCAGTACGACGATTATACGGGCCCGCCACTAAAATTCAGGGCGCATAACTGTCACTCGATCAAGCTGTAACTCACGAGGCGCATCCTTATTCATAGTGCAGTTAACGATCGGTGCAAAAAATGATGGGCATAATAAATCACAGAGACTACACCGGACCTGCGGCCTGGTAGAACCTCGTGATTCGCCTGCGATCGCCCAACTCGATCGCAAGATTGCCGTTAATCGAGTATATAGAAAGCCGACGAATCGTCGTAACATACTCCAAGACAGTTGCGGCCATCCGACTGGTTAGAGGCAGGCAGAGTTCAACAGTTGATATGTTAACTCGGATGGACCTTGAAGGAGCCCCATCAAGGAAAGATATAGCACAAGTTGCATGCAGTAGCGGCGAGGCGTATTCATATGGAGGGAGCAGTGCGAATGGCCGCCCTCCAATGAGCTTTATGAGATGAGCTAGCGAGCCTCGTAGGCGCCTCAAAATGAGTTGGCAGACAATGTACGGTAATCATCCGACAACTTTTCTCGTCATCCCACCAATCACGTCATGGGCCGTATCAACTGTAGAGTCCACGGAATATCTATCTAACACTTTGAGGTCTACCTACATCTCCAAGTATCACAACGCTCACCCGGCTTCTCCAGCACCACGCGTCTCTTGAATCTGGGGACAGCTAGACTCAATTGTCGGAGGATCGGAATCACTTCGATCGACCTAACGTCACCAGATGCGAGAAGGGGCTACCGCCTGAGACAGCGGACTTGCTGACAGTATCCGTTCGAAGCAATTTTATGTCGGCATAATTGCCCCTTCTGTTTGGGCTCAGTTAATAAATTGCCTGATTTCGTCACTGACTTAGACGACGACACTATAATACGTTTAGGCACCCACTGGACGGGTGGTGGTGACCTCGGTATACCATATCCATAGTGCGAACGCTACAGATGTAACCTGCATCAAATGGGTTAGATGCACCAACAATGTCTTACTACTTACGTGATGGCGATGACTAACTCCTGGTTAGGAACATCTCACTCAGCCCCGTCTACGGACTTATAGTTTTAAAACCGGTAACTGCATATTGGTGGTACGACTCGTTAGGTGGCGCTGATCACATAGTCAGGCCTACGAAATTTCCAAACAGCGGCGAATAGGGACGGAGGAGCAATACAGCGTACCGGCGTAACCGATGGCGCTTGGTTGGCCCCGTTAAGTCTCGCCCTATGGGCAACTTTAACGTACTCATGTACCGTAGGTAACCCTACGCCATCCCAGGACCCTTTGAGCTTCCATACATTGTGTAAATGCCAGATGGTCTTACACCCTGAGCACAAGCAAGCCCGCACCCCAGGCAATTTTCATTCACGAGCGTTAATCCAGGTCATCTGCTACGTGTCCATTGGGTTCACGGACAAAGATTAAATATGCAGATCTCATTAACTAGACTGGTCGTGCTCTAGGCGTCATATACCTCATTTGCGATGGCCAAGTTACGGGGGCGTGGCTGAGCGCCCAAGGATAATCCCTTAGCTGACATACGCTATCATAGTATTTCCAACCTTACAGCTGGGAGTTTAGTTGAGGTAAACGCACCGCTACGTTGCTGCTAAGTCACACGAGACGCTATGAACAATCTCGGGTACACTAGCCCGGTTGATCCTGCAGGTACGGATACAACTGGAACAATCTCGTTATCTTCACACCCGCCACATGCAGCATCCGCCTAGGAATGCATGTCATGAGCCTATTACCGGGCTCATCTGGACCTTCTGCCTTATTATACGGAACCACGATCCCGAATTGCCGCCCAGACTTTTTCCAGACGCGAATCATTGACTGTAAACATCATGCTCCAATGAACCAACTCTTAGAAGCCGGCCCTATCCTCAACCGGGTGATCACCCATGTGAATTCTCTGGTTACCGACAAAGAGTGTTAGCCTCCCAGCTAAGCCAACCAGGTGCTCAGCTTTTAACCGGATGGAAGACACTGCGAAAAGCAGCATCCAATATGTAGCCAGTAAATAATCTCGGGGCAACAAGTTCAGTCGCCTGCTTGGAGATATGCTGTTGCTCGTTCCGTGGCACAGACAAACTGGTAGGTTCCGCCAGTTCGACTAATCAAGGACATCGGCGATACACAAACGCTCGTCAAGGGTTGTCCCTTCGATTGTTGACATTGTCTTTGCGCACTCTTCCGGACATATAGTAGGTTGGTAACGATCCTCTATCAACACCCTCCCTCCCAACAGTACCGCTGCGTGTCGAGTTTCCTGGCGGTTATAGCGTAACGATCGGCCCCAGTACGCAACTCATACGTCTCAAAGGGATAGATCCCTTCAACCACCGACATTAATGGGTGTCTTGAAGTGGATACAGTAATATAATTTGGCCTCACCCACTGCGGGTCGACGAAGCTCCCAGTTATCCACTAAAGGTGTCGCTTCGCAAGGACCTCCCTGGGGGGACGTCACGTCTGGAGCGGGACTCGGTCCCT"; let text = "TTTTGAGTCGAATGAAAGTGGCTGCCGACAGAACTGGAGATTAGCAGGGGGGCAAGTAACCAATCGCCTATAGGACGATATCGGAATAAGTTGACAACCGGTCGCAGGTGGGAACCAACAATATTCTATCTCAAACCTAAGCGTGGATTGAGTCCTGCACGTTGAACTCGGTCCCCGGACCTCATGTGCGGTGTAATAAGTGGCATTTTCCTTTCGGGAACTTGGTTATATGAGTCCCCCGAAATTGCAGTAGGGGCGGCACTAAGCCTTTACAAATTGTGCTCACTGATATTCTTTCGGAGTCTAAGATAAGAGCGTTGAGGCGCCTTTAGTCCTGAGTGGTATCGCCCACAGTTGATTAACTCCTTAACTGATTTTCCCGCTTTTGGTGGTGGCGAAGACTTTTTGTTACAACTCGTCACCTAAGGCCGGTATTGTTCCGCGGACTGACTGGGGGCAAGTGGCCCGAAGGTACCAGCGTGAGCACATGGCACAGTCACGCGAACCGCTACGGTTTATGCTTCGTGTGCGTTGACTAACACATTAGTCCCGCCATCACGGCGCCAATACACGAAGAGGGAACCCCCTGTGCCCGTCTGGAGTGAGTTACTCGCGATATGAATACGGTCACGTCGGCCCCGTATGGGTCAGTGGTGCCGTGGCCAATGCAACCATTGTATCCAAATGGCCTCCTTGATGGATTTATGACCCATTCTTAGGGTTTTGCTCAGGTCCTATAGAGTGGCTAAAGTGCTCACTATAGGTTTTAGTGTGGTTGTCTGCGTATAGTCGTGAGGTCGTGGGGAACAGCCGTGAGTAGCTTTTGAGCTACGTGAAGGACAGTATCCGCCGCAACCGCTACAAAAGAACTATTTTGAAACGCTAGCCCTCACCCGACGCTTAAGAGTATAGCAGTCAAGACCCTGGATACCCCCCAAGACACCTAGTATCCCAAACTCCTGTCACGCCACGCGGGCGGGATGCAAACCAACCAGACTTCGCTCAATCGATAAAAACCCCTGCGTTCAGCTGATAGGAAGCACAGGGATAAATGGACGCGAAGGAAGGACAGCACGGGAAAAACAGTAACGGGGATCTTGTGCTTGCCAAGCCTCGTACTATGTCGACATAGTTGGCTAGAGTCGCTCCCAGATCGGGTGCAAATTTCTTATGAAACACTCGCGGTAACTGGAATTGGCGGCCACGCGGGCAACTGTGTCTTTGGGTAGACGCTATCCAGTTTGCGAGATTCATCTGAGACCCTCCATGCCGACAGTACTTGTCTTTCTAGCCAGTCGCGGATTCAGCGTCTGCCCAATGAAACGAACCTAGGATTTGTTTTCAATCCCGTGCTACACCTGTGCACACGTAAGTACCCGAGATGCGTCTAACATTACTCTTGTGCTAGCGTGGGAACCTGGGTGGTTCTGACGCCTATGTGCCCCCGTCCGTAGATTGGCGGTCACCAATATACAGTGCAACCACCTATCGTCAGGGGTCTGGCTAAGTGTTTACGTCGCAAGCGATCACCCTTGGAGCTCAAGCCGGTGACTACGCGGGCGGGCGCGACGGCCCTGTCGCCTCGCGAGACCGAAATGACTCACTCAGCCCTTAACGGGGAGACCCGGACGGAAGCATCTCTAATCACTGTACAGGGCCCCGTTGAGACGGTCCTCGGGGGTTGGGTTTACTAATGCCATGACTTGGTACCGCACTGAGGCACCCCCGCCACGAACTAGACACCCAAGTGTCCACCATGCATAAGTAAAGCCTTGACGTCGCGATCAAGGTGTATCATTCAGGGGGAGTTCACATCAGCATATTAGAAAGGCACTGTAATTGAAGTGTATTGATGTATAGCGGGCAGCCCCAGTAAAGAGCCGTAGTATCCCACAGCGATTGCAGCACATCTCGCAATTTCCAGGTTAAATAGGCGCTTGATTATGCTGACTATCATGAGTTACCGAACTCAGCCGAGCGGTGTAAACTATGAAATAGATAAGGCAGTGAGCTCATCGGCCGGCACGTGGAGGACAAACGCAACAGTTACCTATAGCAATATTAGGTACTGTGTCGCCGGGTGGGCATTCTATACATCACGTCAGTTTAGGATCAGTTTCGAGGCTACGGGTCCAGTTGTAGTTGCGGATACGTGGTAAGGATACGAATAACAGACCTGGTAATTGGTGAGTAGAGGCGGTTGGATTGGCTGGGCCCCAGGATGGTCCAATAGATCGTCGTTAGGTCAAGCCCCAAAACCCGAAGCATGCTGGTCAGTATGGATATCTACCCGTCGGTTATCGTAGAAATCAGTACTGGTTGCGATAAATGTGATACACCCCTCGACAAACGGAGTCATTAGGCGCCTCTCTAAATACTGCTGTCCTGCAATGGCTATCGGGCAGGCTTCGCCAAGGATTCCTTCAGCATTGGCCCTTATATCCAGATGTTGATGAATGGTGGCGATTCGGGGTCTCCTGCCTGGACCAAACCTATGCCGCATTTGGGAGAGTCAATGCAGGGGGCGCTTTAATTAGTTGCTCCTCGCAAGCTCTCATATATAACAAGAGCTCGGGTACAATAAAGACCCCCGTCGCCCGGCGCTACTAGTCGGACGATTCCCTTTTCCATGTACCACGTGAGGTGCTGCCAGCCTCAAGCTCAAGCAATCTACTGAGAAACGGATTATCTACTCCCCATCAGAATGAGTGGAGGAGTTCAACTTGGATTAGACCCCCACTTACTTCGGCATCCAAAGAGGGTTACCCCTCCTGCTATGGTCTCCAAGCGAAGACTCTAAAGATTAGCGCGGGAGATAACTCGGCTGTGTATCAGACGCGGCACTTGGTTGCTATCCTTTCTGGCCTCAAGTCTAGGTGACCAAGTCGATCAATGCCGTCGCACTAAACAGGCGAGTTGACGTTGTTCCAAACTGCACGATTTGCTCCGTCACTACCGGGTTGAGAGGCCTCATTGGACACTCGCTCCAAATTTCACGCAAAACCTAAGTCATAGCCCTTGATCAGTAACTAGAACTGCAAGGCGGAAACATTAATCACACGGAGACTATAACGGTCATCTCAAATTCCAGTTTGTACTTGAAAATACAAGCGTCAAATCGAACATTTTCCTTAATAGTATCATACTCGTCTAATGAGCAGTCCGTGTTGCGTGTGGCGAACTCTTAGAGATCGGCACCTGATATCCTACCAGTTCCCGTCGCTACAGAACCTGAAGCAGTGCGGTTTTTCTCCACGTCGAGCGTGTCTGAGCGATCATTTAGAGTCCGTGGCCGACGAAAGGGTGATCTGGTACCCACCTATAGAGGAGTTGCTGCAGAGAATCCGTGGTGGGGACTTAGAAATCGTATCGTACGAGATCTGGTTTGGAGTTTCACTGTGCTTACTTGTATCCAACTTGATCGGTTGCGCACGTATATTGGTTATAGGAATTGGCCATTACTTCAGGTTCGCAGCCCGCTCCTAACCGTTAATTCGCGCTGACCGGTGTGCTTTGAAATAATAGTGACACCGTAACTTCCAACATGAACCAACGTTACACGTTCTATTTACACTCACCCTTCTAATAAAAGTTTTGAGGAATGAAGCGTACCCACGTCGGAACGAAAATTCAAGTGAGAGTGATTGTCAATACTCGAGAAGCTTAGCAAAGAAGTAATCAAGGTTAAGTTGACTCCACAGGATCCTAAAAACAATTATTCCGATAGCCTCGGGGTCAGTATACACCGCAGAAAGTACATTCGCCCTAATTAGCCTTAAATATTAAAATAGGCATACAAACCTGTTGTTGGAGTCTTCATACCGGCGTTGTTTCTGAGATCTCGGTGCCTACAGTATATGTACTATGTTAATGTACCAATCTTATGTTTTGGACGCAAAACATAAAGAACCACCAACATATGAACCCCCGGGTCGCGGGTTACAGGCGTCGTCCAACGCTACTTGCTCTAGATCAAACTGGTTATATATCCGAAAACAGGACTACACACTAAGAACCGTGGTTGAAGCGTAATCAATAACATCCGGCACTCGGCGCTTGGAACAACCCCACTCCCGATAGATCTCTCTGCCCCGTGGCTATAGGTTCTTCAGTTTGCGCGATAGGGCAGCTTTCGTCTTACTGCTGAACGTCCTAACCAATTTTCCGCTCGTGGGTCCAGGGCAACAAGGCTCCGAGATCCCCTTATACTAGAACGCCCTATATACGCAGAGAGAACAAGGACGGGTAAAAATAAAGTCCTTCTGGAAGGGTGACCGAACTCCCACCGAGGCCCTATCGCGCAAAGCGAATTCTTGTCAATTCACACCGATAACTCGGTAGTTAATTTGAATTAAAGAGTGTTTGCATTTGTACTAATATTCAATCGAAGTTAACCCTCCAGCCTACTGTAATTCCGCCAACCCGGGGATACAAGGAGGCACCAAACGGGTTTCAATTTGGATTGGTATGCATGCCCAATGAACTAAGTTTGGGCCACCGGGCCTGCATGACTATGTCTGAGAACAAAGATGAGGGAGCTGTTTGGTGAACTAGAAACTGCAATATGTGACGTACTATCCATACCAGCCCGCCGGTACGCGCATAGTAAACTAGTCCATGCCATAGTATCGGTTCGTACTTGACTGTATCGCTGAACACCGTACGGTCGTCAAGGTTCATAGGGGCTGGTAACAAGGGAACCATTAAATACTCTGGGCCCCCTCCGTTCTGACCGGCGGGGGTATATCCATGTGTACACTTTACCTAGCGAACAGCTGCCCTACTAGGACCTTATGCTTGTTACTTGCTATGACAGATCCCTGATTTCACAGAATGATGACGCAGCATGAACCAGCTCAGCCCGCAAATCGGGGATGGTGGAGTCGCGGATTTGCCTCCCTGGGCTTGCGACACTGTTGCCCGTAAAGAGTCTACCTACCAGTTCTCTAACTCTGGAGCCCTACCTCCCTTGTGCTTACTGGAGAATATATACCATGTGATACGAAGGGGGGTCCGGTGGACTTGATCCCGACGCTACTAACGGACAACTGAGCAAGAGGCCTACCGTTAAGCGTTGCATCTTTAATACCCTACCGTATTGCTCGCCGAGGTTGTTGAGGCATACCGACGATTACGGGAGATGACCTTCGGTGGAATGCACGACGGTCATTCTCGTCATTTAGCATCTAGAGAGTCCCAGCACTATCCGGGTGGCTCATAAATCTAAGCCTGTCTCATCGCTCTTTAGCATCGGAGGGAAGGAAGCCCTTGTAGGATCCTAGATCAGATGACGCAGAGACCTCATTGCAATCGCATGAGTTTGCTATATTTCCTGGTGGTAGCGAGCCCAAATGTATATCATTCGGAGAGACCCTACTCGGGTCCTCCTACCAAAGCTCAATCGGCTCTGACCAAGGTACTCGAGGACTCGTGCAAAGTCCCGGGGCCGCGGTCGCCCTATCTCTAGAGCGATATGTATGGGACTTTACGCAACTCTTACACGTAGATAGCAGTCATGCCTCCTATACTTGCCTGGCGAGCGAGGCTAGCCTATATTGGTCGCCGATCTCTCAGTCGGGACTTGATATTGGAAAAGATTACTGCGTTCGTTCTCGTGCGCTGCATTCTTGAGATTTGTACTGTTTACGTGAACTGGGCGTGCTTGGCCAGCGACGAGACTCTGTCCCATGAGGCAAACCTGACTCGAAACCAGAGGGGTTGTGCCTTCGATAGACCCTGCATTAGAATCGGCCCTATGTCTTCTCCATTACCACCAACTGTTTAAGGACTGAGAACATCCACCGCTTGTAGAACCCACATTCCTCCCGCGTGCACGATCCCTGGCTTAACATCGCCTTGCACCTGGCTCTCCGTAAATAAAGACTATCCTTAACCCGCAAGACCGAAGCAGCGTAGGTGTCCAGGCCGCCCCTGAGGCACTCTTCACATGGACATAGACCCTGGTGCTGAGACTTGTTTCTGGCTTGGTATATGAGTACAGCCGCACAGGACAGCAAAGTAGATACCTCGTAACGCCAGAGTGCTAGTGGAAATAACACAACCCAGGATTTACTCATAAGGCGCCTCTTTTACCCCTGCGCCAGATCATGGGTATAACTACTAGACAACGCGAGAAGCAGTGAGTATTCGACCACCGCTATTAGAACGGCATAATTACCAATCGATAGGAGGCATGGATATTCGCCAGAGGCCTTCTTACAGTTGTTGATTCGAACCCCTAGAACGTCTACGAGCTGCGAAAGCTAGACGCTGTCATACATGTACCCGACTAAGATATAGCCGATTCTTGCGCTTCCAGGTCAGCCATCGGGATAGTTGCGCTTCCTTACGATGGCAGGGACACGAAAGTGGTATGAGTGTTGGTACGCGCCTTGAAATTGGTGCAAAGCTAACGAGTTGGACGAAGCACCTAACCCGCTTCAATTACTTTCCAGTCGTGGTATGAAACCGCCACCAACCTCGCGCCTAGTTGGAGGCCACCGGTTGACATTTCCTCGACGGCGATGTGATTCCCAAAAGTACGCTTATCTGGCTGTTAAGCTTCGACCACCGATCAACCTAACTGCTCCTTCACGGTTTCAAGAAAACACGAGGCCCGAATGATAAAGTTCTAGCAGCCTTTTCGCTTTATTGAGGCTCCTGATAGATAGTTCGATAAGAAGAGTGCAGGCCCAGCGAGCAAAACTGCTCACCTATGTCTCTATATCCTTTATTACTACTATGTTTTTTGGACATGTTCACCAACAACCTGAGTACTACGGTGTTGGTCAGAATGATTGTCTGGTAGTCAACTGACAATAAGCCCTCCTACAATAAGGCCGGATGTATATACGGACAGATATCAGCGGAGCGTTCTTCTTGCCAACGCTTCTCCTGAAAGGCCCCCGAATGCCTGGCTGAAGCCGCTTCACGGGCTCGATACACAGACCGGGCACGTAAGCTCTGTCTATTCATAACGAACAAGTATAAGCTCAGTGCTCACCACTGAGTTGATGATTGATGAGGTATGCAATAGGGACAAAAATAGCGTTGCAATGATGGGTGGAAATTCCTCACCACATATTCGTCGTGGGCGATGCGCACTTTATACCAACACAATGTGACAGGTCTTATTAAAAACCGACAGGACCGGTGCGGTGGTGTGGTGGTATCTGGTCCTTGGCGCTCTGTCCGATAAGTTTTGCAGTCGGTTGGGTCCTTGCAGGAACACCTCGGAGCACATTACAAAGCGCCACGGGCCGTGGGAAAGACAGCCCAGTCGTAAACCGTTTGTGAGGAGCGCACTCTGGATCATCCATTATTGGCGAATTCATAGCTCACGTGGTATATGAGCGCTACTTCCAACAAGGGAGAGCGCCGCAGACACCCTTCAGCGTGAAATGAGTTACCGGCAGTCTCGTGATAGCAAGCCGACAAGCCTTCACTCCACGTAAAAACGGCTCTATTTTCCAAATGTCACGGCTTCTATGCGTATGAGTAACATTTACTGAGTTCATCACTGCACTACGACGATTATGACGGGCCAGCCACTAAAAGTTCAGGGCGCACAACTGGTCACTCGATCAAGCTGTAACTTACGAGGCGCATCCTCGATTCATAGTGCAGTTAACGATAGATGCAAAAAATGATGGGCATAATAAATCACAGAGACTACCACCGGACTGCGGCCTGGTAGACCTCGTGATTCGCCTCGATCGCCCAACTCGATCGCAAGATTGCCGTTAATCGAGTTATAGACCGCCGACGAATCTGTCGTAACATACTCCAAGACAAGATGGGTCATCGACTTGTTAAGGCAGGCAAGTTCAACAGTTGATAGTGTTAACTCGGATGGACCTTGAAGGAGCCCCATCAAGGATAGATATAGCACAAGTTGATGCATAGCGGCGAGGCGTATTCATATGGAGGGAGCAGTGCGGAATGTCTGCCCTCCATGAGCTTTATGAGATAGCTAGCGAGCCTCGTAGAGCCTCAAAATGAGTTGGGAGACAATGTACGGTAATCATCCGACATTGTTCTCGTCAATCCCACCAATCACGTCCGATGGGCCGTATCAACTGTAGGTATGTCCACGGAATATCTGATCTAACACTTTGAGTCTCTACATTCCAAGTATCACAACGCTCACCCGGCTTCTCCGCACCACGCGTCTCTGAATCTGGGTGACAGCTATAGCTCAATTGTCGGAGGATCGGAATCACTTCGATCGACCTAACTCACCAGATGCGAGAAGGGGGCTACCGCCTGAAACAGCGGATTGCGACAGTATCCGTTCGAACAATTTTATGTCGGCATAATGCCCCTTCTGTTTGGGCTCATTAATAAGATTGCCCTGATTCGTCACTAACCTAGACGACGACACTAGTAATACGGTTTAGCACCCACTGGACGGGTGGTGGTGCCTCGGTATAACATATCATAGTGGACGTTACAGATGTAACCTGCATCGAAATGGGTAGATCCCCAACAATGTCTAACTATTACGTGATGGCATACTAACTCCTCGGTTAGGAACATCTCACTCAGCCCCTCTACGGCTTATAGTTTTAAAACCGGTAACTGCATATTTGGTGGTACGACTCGTTAGGTGGCCTGATCCATAGTAGGCCTACAAATTTCTCCAAACAGGGCGAATAGGGACTGAGCGCGCAATACAGCGTACCGGCGTAACCGATTGGCGCGTTGGTTGGCCCGGTTAAGTCTCGCCCTATGGCAACGTTTAACGTACTCATGTACCCGTAGGTAACCCTGACGCCATCCCAGGACCTTGTGAGCTTCCATACAATGTGTAAATCCAGATGGTCTTACACCTGAGCACACAGCAAGCCCGCACCAGGCAATTTTCATTCACGAGCGTTAATTACTAGGTCATCTGCTACGTGTCCATTGGGATCACGGATCAAGATTAAATATGCAGATCTCATTAACTATACTGGTCGTGCTCTAGGCGTCATATACCTTCATTGCGACAGGTCAAGTTCCGGGGGCGTGGCTGAGCGCCCCAGGATAATCCCTTAGCTGACATACGCTATATAGTATTTCCAACTTACAGCTGGGAGTTTATTGAGGTAAACGCCACGCTACGTTGCTGCTAAGTCAACACGAGACGCTATGTAACAATCTCGTGGTACACTAGCCCGGTTGATCATGCAGGGTACTGGATACAACTGGAACTATCACGTTATCTTCACACCCGCCACATGCAGCATCCGCCTAGGAATGCATGTCGATGAGGCCTATTATCGGGCTCATCTGGAGCTCCTGCCTCTGATTATACGGAACCACGATGCCGAATTGCCGCCCAGACTTTTTCAACGCGAATCATTGACTGTAAACATCAATGCTCCAGTGAACCAACTCTTAGAAGCCGACCCTTCCTGCAACCGGGTGATCTCCCTGTGAATTTTCTGGTTACCGACAAAGTAGTGTTAGCCTCCCAGCTAAGCCAACCAGGTGGCTCAGCTTTAAACCGGATGGAAGACACTGCTAAAAGCAGATCCATACTGTACCAGTAAATAAGTTCGGGGCAACAAGTTCAGTCGCCTGCTTGGAGATATGCTGTTGCCTGTTCCGTGGCACAGACAAACCGGTAGGTTCCGCCAGTTCGACTGAATCAGGACATCGGCGATACACAAACGCTCGTCAAGGGTTGTCCCTTCGATTGTTGACATTGTCTTTGCGCTCGCCTCCGGACATATAGTAGGTTGGTAAACGATCCCCTATCAAAGACCCTCCCTCCCAACAGTACCGCTGCGTGTCGAGTTTCCTGGCGGGTTATAGCGTAACGACGGCCCCAGTACGCAACCTCACACGTCTGCAACGGGATAGGATCCCCTTCAACAGCCGACTTAATGGGTTGTCTTGAAGTGGATACAGTAATAAATTGGCCAATCCCAGTGCGGGTCGACGAAGCTCCCAGTTATCCACTAAAGGTGGCCACTTCGACAAGGACCTCCCTGGGGGGGAGTCACGTCTGGAGGGGACTCGGTACCCT"; let pens = Penalties { mismatch_pen: 1, open_pen: 2, extd_pen: 2, }; c.bench_function("wfa length 10000 10% error", |b| { b.iter(|| wavefront_align(black_box(query), black_box(text), black_box(&pens))) }); } fn wavefront_bench_l10000_e30(c: &mut Criterion) { let query = "TTTTTGACTCGAATGAAAGTGCGCTGCCGCAGAACTGGAGATTAGCAGGGGCAAGTGAACCATCCCCTTGGACGATACGGAATAAGTTGACAACCGGTCGCAGGGTGGAACAACACATATTCTATCTCAAACCTAAGGTGGATTGTAGTCCTGCACGTTGAAACTCGGTCCGGACCTCATGCGCGGTCGTAGAAAAGTGCATTTTCCTTCGGGAACTTGGTTATACTGAGTCCTCCCGAATTGCAGTAGGGGCGGCACTAATCCTTTACAAATTGTGCTCACTGACTATTCTTTCGGAGTCTAAGGACAAGAGCGTTGAGGCGCCTTTAGTCCTGAGTGGTATCGCCCACAGTTTATTAACTCTTAACTGATTTCCCGTCTTTGGTGGTGGCGAAGACTTTTTGTAAAGTCGTCACCTAAGGCCGGTGTTGTTCCGCGGACTGACTGGGGGCAAGTGGCCCAAAGGTACCAGCGTGGCACATGCACAGTCACGCGAACACGCTAAGGGATTATGCTTCGTTGCGTTGACTCAACACATTAGTCCCGCCATCACGGCGCCAATACACGAAGAGGGAACCCCCTGTGCCCGTCTGGAGTTGAGTTACTCGCGATGTGAATCGGTCACGTCGGCCCCGTATGGGTCAGTCGTGCCGTGTGCCAATGCAACCATTGTCTCCAAATGGCCCCTTGATGGATTGATGACCCATTCTTAGGCTTTTGCTCAGGTCCTATAGAGTACAACAGTGCTCACTATAGGTTTTAGTGTGGTTGTCTCCGTATAGTAGTGAGGTGTGGGGAACAGCCGTGAGTAGCATTTGAGCTAAGTGAAGGACAGATCCGACCGCACCGCTACAAAAGAACTATTTTGAAACGCTAGCCCTCCACCCGACGCATAAGAGTATAGCAGTCAAACCCTGGCGATACGCCCCAAGACACCTAGTATCCCAAACTCCTGTCACGCCACGCGACGGCGGGATGCAAACCAACCAGACTCGGTCGATCCGAATATAAAACCCCTGGCTTCAGATTGATAGGAGCAGCAGGGATATGGACGCGAGGAAGACAGCTACGGGAAAAACAGTAACGGGAATCTTGTGTTGCCAAGCCTCGTACTATGTCGACATAGTTGGCTAGAGTCGCTCCCAGATCGGGTGCAAATTTCTTATGAAACACTCGCGGTAACTGGATTTGGCGGCCACGCGGGCACTGTGTTTGGGTGCGCTATCCAGTTTGCGAGATCTCATCTGAGACCCCCATGCCGACAGTACTTGTCGTTGCTAGCCAGTCGCGATTCAGCATCTGCCCAATGAAACGAACCGTAGGAATTGTTTTCAATCCGTCTATCCTGTGCACACGTAAGTACCCGAGATGCGTCTAACATTACTCTTGTGCTAGCGTTGGGAACCTGGCTGCTTCCGAAGTCCTATGTGCCCCCGTCCGTAAAATGGCGGTCACCAATATACAGTTGCAACCACCTATCGGCAGGGGTCTGGCTAAGTGTTTATCGTCGCAAGCGATCACCTTGGAGCTCAGCCGGTGACTACCGAGCGGGTCGCAGACGGCCTGTCGCCTCGCGAGACCGAAATGACTCACTCAGCCCTTAACGGGAGACCCGGACGGAAGCATCTCTAATCACTGTACAGGCCCCGTTGAGACGGATCCTCGTGGGGTTGGGTTTACTAATGCCATGACTTGGTACCGCACTGAGGCACCCCAGGCCACGAACTAGACACCCAAGTGTATCCCCATGCATAAAGTAAAGCCTTGACGTCGGGATTATGGTGTATCATCAGGGGGAGTTCACATCAGCAATATTAGAAGGCACTGTAATTGAAGTGTCATGATGTAATAGCGGGCAGCCCCACGTAAGGAGCCGTAGTATCCCAAGCGATTGTCAGCACTCTAGCATATTTCCAGGTTAATAGGCGCTTGGAGTTATGCTGACTATCATGAGTTACCGAACTCAGCCGAGCGGTGTGAACTATGAAACTAGATAAGGCAGTGAGCTCATCCGGCCGGCACGTGGAGAGACAAACGCAACAGTTACCTATAGCAATATAGTGTAGCGTGTCGCCGGGTGTGGCATCATACGATCACGTCAGGTTAGGTCAGATTCGAGGCTACGGGTCCAGTTGTAAGTGGCGGAAACGTGCTAAGGATACGTAATAACAGACCTGGTAATTGGTGAGTAGAGGCGGGTTGGATTTGGTGGGCCCCAGATGGTCCAATGATCGTCGTTAGGTCAAGCCCCAAAACCCGAAGTCATGTGGTCAGTATGGATTCTACCCGTCGGCTTAGGTAGAAATCAGTACTGCTTGCGGTAAAATCGGATACACCCCTCGAAACAAACGGAGTCTTGGCGCCTCTCTAAATACTGCTGTCCTAAATTGGCCATCGGGCGGGCTTCGCCCAGGATTCTTACAGCATTGGCCCTTATATCCAGATGTTATGAATGGTGCGATTCGGGGTCTCGCCGACCAAACCTATTGCCGCAATTGGGAGAGTCAATGCAGGGGGCGCTTTAATAAGTTGCTCCCGCAAGCTCTCTATAATACAAGAGCTCGGGTTACAATCAAAGACCCCCGTCGCCCGCGCTACTAGTCGACGATTCCCTTTTCCATGTACCACGTGAGAGTGCTGCCAGCTCAAGCTCAAGCAATTTACTGAGAAACGATTAATCTACCCCATCAGAATGAGTGGAGAGTTCAACCTGGATTAGACCCCCACTTACTTCGGCATCCAAAGCAGGTTTACCCCTCCTGCTATGGTCTCCACAGCGAAGACTCTAAAGATTTAGCGCGGGAGAAACTCGGCTGTGTATCAGAAGGGCACTTGGTTGCTATCCTTCGGCCTCAAGTGCAGGTGACCAAGTCGATCAATGCCGTCGCACTAACAGGGAGTTGACGTTGTTCCAAACTGCACGATTTGCTCCGTCACCTACGGGTTGAGAGGCCTCATTGGAACTCGCTCCAAATTTCACGTAAAACCTAAGCATAGCCCTTGATCAGTAACTAGAATCAAGGCGGGAAACTTAATCACACGGAGACTATAACGGTCATCACAAGATTCCAGTTTGTACTTGAAATACAAGCGTCAAAACGAACATTTTCTTTAAATAGTACATACTCGTTAATGAGCAGTTCGTGTTGCGTGTGGCGAACTCCTTGGAGATCGGCACCTGATATCTCTACCAGTTCCCGTCGCAATAGAACCTGAAGCAGTGGCGGTTTCTCTCCACGTCGAGCGTGACTGAGCGATCATTTAGAGTCCGTTGGCCGACTAAAGGGTGATCTGGGTACCCACCTATAGAGGAGTTCGGTGCAGAGAATGCCGTGGTGGGGACTTAGATATCGAAGTCGGTATGAGATCTGTTTGGACTTGTCATCTGTGCGTACTTGTACCAACTTGATCGGTTGCGCACGTATATTGGTTATAGGAATTGGGCCATACTCAGGTTCGCAGCCGCTCCTACCGTTAAGACGCGCTGACCGGTTTGCTTTGAAATAATAGTGACACCGGTAACATCGAACATGAACCAACGTTTCACGTTCTATTTACACTCACCCTTCTAATAAAAGTTGATGAGGAATGAAGCGACCCACGTCGAGAACGAAAATTCAGTAGGGAGTGATTGTCAATAACTCGAGGTAGCTTAGCAAAGAAGTAATCAAGGTTAAGTTGCCCACAGGATCCTAAAAACAATTATTCCGATAGCCTCTGGGTAGAATACCCGAAGAAAGTACATTCGCCCTAATTCAGCCTTAAATCATTAAAATAGGCATACAAACCTGTTGTTGGATCTTCATACCGGCGTTGTTTCTGAGATCTCGGTGCCTACAGATATGTCGTATGTTAATGTACCAATCTATAGTTTTGGACGCAAAACATTAAAGAACCACCAACATATGAACCCCGGGTCGTGGGTTACAGGCGTCGTCCACGCTAACTTGCTCAGATGCAAACTTGGTTATCTAATCCGAAAACAGGACTACACCTAAGAACCTGGTTTGAAGCGTAATCAATACATCCGGCATCGGCGCTTGGAACAACCCCACTCCCGATAATCTCTCTGCCCCGTGGCTATAGGGTTCTTCAGTTTGCGCGATAGGGCAGCTTTCGTCTTACTGCTGAACGTCCTAACCAATTTTCCGTCGTGGGTCCAGGGCAACAAGGCTCCGAGATCCCCTTATACATAGAAGCCTATATACGCAGAGAGAACAAGGACGGGTAAAAATAAAGTCTCGGGAGGGTGACGGAACTCCACGAGGCCCTATCGCGCAAAGCGAATCCTTGTCAATTCACACCGATACTCGGTAGTTAATTTGAATTAAAGAGTTGTTTGCCAAGTTGTACTAATATTCAATCGGAAGTTAACCCTCAGCCTACATGTTAATTCCGCCAACCCGGGGATACAAGGAGCACCAAACGGGTTTCAATTTGTGGATTGGTATTGCATGCCCAAATGAACTAAGTTTGGGCCTCCGGGCCTGGATGACTATTCTGAGGTACAGAGATCGAGGGAGCTGTTTGGAGAACTAGAAACTCAATAGGTGACGTACTTATCCATACCAGCCCGCCGGTACGCGCATTAGTAAACTAGCCATGCCATAGTATCGGTTCGTACTCGACTGGATCGCTGAACACCGTACGGTCGCCAAGGTCATAGGGGCTGGTAACTAGGGGACACCATTAAATCTCTGGGCCCCCTCCGTTCTAGCGGCGGGGGTGATATCCATGGTAACTTTTACCTAGCGAACAGCTGCCACCTACTAGGACGCTTATGCGTGTTACTTGCTATGAAGATCCCTGATTTCACAGAATGTGACGCACCATGAATCAGCTCAAGCCCGCAAATCGCGGGATGGTGGAGACGCGGAATCGCCTCCCTGTGCTCTGCGACACTGTGCTGCCCGTAAAGAGCTACCTAGCCAGTTCGGTGACTCTGGAGCCCTACACCCTTGTGCTTACTGGAGAAATATACCTGTATACGAAGGGGGGTCCGGTGGACTTGACCGACGCTACTTACCGACACTGAGCAAAAGCCTACCGTATAAGCGTTGCATCTTTAATACCCTCCCGTATGCTCGCCGAGGTTGTTGAGGCAAACCGACGATTACGGGAGATGACCTTCGGTGGAATGCACGACGGTCATTCTCGCTCAATTAGCATCTAGAGTCCCAGCACTATCCGGGTGCTCTAAATCTAAGCCTGTCTCATCGCTCTTTAGCATCAGGAGGGAAGGAAGCCCTTGTAGGATCCTAGATCAGATGAGCAGAGACCTACATTAGACGCAGAGTTTGCTATATTTTCCTGGTGCTAGCGAGCCCAAATGTAGATCATTCGGAGAGCCCTACGCGTGGTCCTCTACCAAAGTTGCAATCGGCTCTGACAAGGTACTCGAGTGCTCGTGCAAAGTCCCGGGGCCGCGGTCGCCCTATCTCTAGAGCGATATGTATGGGACTTTACGCATACTCTTACCACGTAGATAGCATCATGCCTCCATACTTGCCTGTGGCGGGCAGCCTATACTGGTCGCCGAGATCTCTCAGTCGGGACTTGATATTGGAAAAGATTACTGGCGTTCGTTCTCGTGCGCTGCATTCTTGAGATTTGTACTTTTACGTGAACTGGGCTGCCTTGGTCAGCGCACACGGACTCTGTCCCATGGGCAAACCTGACTCGAAACCAGAGGGTTGTGCCTCGATTAGACCCTGCATTAGATCGGCCCTGTGTCTTCTCCATTACCACCAACTGTGTAAGTACTGAGTAACATCCCGCTTGTAGGAACCCTACATTCCTCCCGCGTGCACATCCCTGGCTTAACATCGCCTTGCACCTGGCTCTCGTAAATAAAGCTATCCTAACCCGCAAGACCGAAGCAGCCGAGGAGTCCAGGCACGCCCCTGAATGCACTCTTACATCGACATGACCCTGTGCTGAGACTTGTTTCTGGCTTGTGTATATGAGTACAGCCGCACATGACAGCAAAGTAGATACCTCGTAACGCCAGAGTGTCTAGTGGAATAAACACAACCCAGGACTTACTCATAAGGCGCCTCTTTTACCCCTTGCGCCAATCATGGGTATAACTACTAGACAACGCAAGAAGCAGTGAGTATTCGATCACCGCCTATTAGACACGGCATAATTACCAATCGATAGGAGGCAGGATATCCGCCGAGAGGCCTTCTTACAGTCTGTTGATTCGATCCCCTAGAACGTCTACGAGCTGCCGAAAGCTAGACGCTGCCCATACATGTACCCGACTAAATATAGCCGATTCTTGCTCTTCCAGTCAGCCTCGGGATAGTTGCGCTTCCTATACGATGGCAGGGACTACGAAAGTGGTATGAGTGATCTGGTACGCGCCTTGAAATTGGTGCAAAGCTAACGAGATTGACGAAGCACCTAACCCGCTTCAATTACTTCCAGTCGGGTATGAAACCGTCCACCAACCTCGCGCCTATGTTGGAGGCAACCGGTTGACATTTCCCGACGGCGATGTGATTCCCAAATAGTACGCTTATCTGGCTGTTAAGTGTCGAGCCACCGATCAACCTAACTGCGTCCTTCACGGTTTAAGAAAAACGACGCCCGAATGATAAAGTTCTAGCAGCCTTTTCGCTTTATTGAGGCTCCTGATAGATAGTTCGATAAGAAGAGTGCAGGCCAGCCAGCAAAACTACTCAACTATGTCTCTATATCCTTTATTACTCTTGTTTTTTGGACATGTTCACCAACAACCTGAGAACTACGGTGTTGGTCTAGAATGATTGTCTGGTAGTCAGCTGACAATAAGCCCTCCTACATATGACGGGATGTAATATACGGGACAGAATCATCGAGCGCGGTCTTCTTGCCAACGATTCTCCTGAAAGGCCCCGAAAATGCCTGGCTGAAGCGCTTCACAGGGTCGAGTACACAGACCGGGCACGTAAAGCTCTGTCTCATTCATAACGTACAAGTATAAGCTAAGTGGCTCACCACGGAGGCTGATGATTGATGAGGTATGCAATAGGTGACAAAATTAGGTTGCAAATATGGTGGAAATTCCTCCACACATATCGTCGTGGGCGATGCAGACTTTATACCAACACAATGTGACAGGTCTTTACTAAAAACCCGGCAGGACCGGTGCGGTGGTGTGGTGGTATCTGGTCCTTGGCGCTCTGTCCGATAAGTTTTCGCAGTCGGTATGGGTCCTTGCAGGAACAACCTTCGGGAAGCAATTACAAAGCCCACGGCGTGGGAAAGACAGCCCAGTCGTAAACCGTTTGTGAGGAGCCACTCTCGGATCATCCATTATTGGCGAATTCATTACTCACGTGGTATATGAGCGCTACTTCCACCAGAGGGAGAGCCCGCAGACACCCTACAGCGTGAAATGAGTTACCGGCAGTCTCGTGATAGCAAGCCGAGAAGCCTTTCTCCACGTAAAACGGCTCTATTTATCCAAATGACACGGCTTCTATGCGTATGAGGTAAACATTACTGAGTTCATCACTGCAGTACGACGATTATACGGGCCCGCCACTAAAATTCAGGGCGCATAACTGTCACTCGATCAAGCTGTAACTCACGAGGCGCATCCTTATTCATAGTGCAGTTAACGATCGGTGCAAAAAATGATGGGCATAATAAATCACAGAGACTACACCGGACCTGCGGCCTGGTAGAACCTCGTGATTCGCCTGCGATCGCCCAACTCGATCGCAAGATTGCCGTTAATCGAGTATATAGAAAGCCGACGAATCGTCGTAACATACTCCAAGACAGTTGCGGCCATCCGACTGGTTAGAGGCAGGCAGAGTTCAACAGTTGATATGTTAACTCGGATGGACCTTGAAGGAGCCCCATCAAGGAAAGATATAGCACAAGTTGCATGCAGTAGCGGCGAGGCGTATTCATATGGAGGGAGCAGTGCGAATGGCCGCCCTCCAATGAGCTTTATGAGATGAGCTAGCGAGCCTCGTAGGCGCCTCAAAATGAGTTGGCAGACAATGTACGGTAATCATCCGACAACTTTTCTCGTCATCCCACCAATCACGTCATGGGCCGTATCAACTGTAGAGTCCACGGAATATCTATCTAACACTTTGAGGTCTACCTACATCTCCAAGTATCACAACGCTCACCCGGCTTCTCCAGCACCACGCGTCTCTTGAATCTGGGGACAGCTAGACTCAATTGTCGGAGGATCGGAATCACTTCGATCGACCTAACGTCACCAGATGCGAGAAGGGGCTACCGCCTGAGACAGCGGACTTGCTGACAGTATCCGTTCGAAGCAATTTTATGTCGGCATAATTGCCCCTTCTGTTTGGGCTCAGTTAATAAATTGCCTGATTTCGTCACTGACTTAGACGACGACACTATAATACGTTTAGGCACCCACTGGACGGGTGGTGGTGACCTCGGTATACCATATCCATAGTGCGAACGCTACAGATGTAACCTGCATCAAATGGGTTAGATGCACCAACAATGTCTTACTACTTACGTGATGGCGATGACTAACTCCTGGTTAGGAACATCTCACTCAGCCCCGTCTACGGACTTATAGTTTTAAAACCGGTAACTGCATATTGGTGGTACGACTCGTTAGGTGGCGCTGATCACATAGTCAGGCCTACGAAATTTCCAAACAGCGGCGAATAGGGACGGAGGAGCAATACAGCGTACCGGCGTAACCGATGGCGCTTGGTTGGCCCCGTTAAGTCTCGCCCTATGGGCAACTTTAACGTACTCATGTACCGTAGGTAACCCTACGCCATCCCAGGACCCTTTGAGCTTCCATACATTGTGTAAATGCCAGATGGTCTTACACCCTGAGCACAAGCAAGCCCGCACCCCAGGCAATTTTCATTCACGAGCGTTAATCCAGGTCATCTGCTACGTGTCCATTGGGTTCACGGACAAAGATTAAATATGCAGATCTCATTAACTAGACTGGTCGTGCTCTAGGCGTCATATACCTCATTTGCGATGGCCAAGTTACGGGGGCGTGGCTGAGCGCCCAAGGATAATCCCTTAGCTGACATACGCTATCATAGTATTTCCAACCTTACAGCTGGGAGTTTAGTTGAGGTAAACGCACCGCTACGTTGCTGCTAAGTCACACGAGACGCTATGAACAATCTCGGGTACACTAGCCCGGTTGATCCTGCAGGTACGGATACAACTGGAACAATCTCGTTATCTTCACACCCGCCACATGCAGCATCCGCCTAGGAATGCATGTCATGAGCCTATTACCGGGCTCATCTGGACCTTCTGCCTTATTATACGGAACCACGATCCCGAATTGCCGCCCAGACTTTTTCCAGACGCGAATCATTGACTGTAAACATCATGCTCCAATGAACCAACTCTTAGAAGCCGGCCCTATCCTCAACCGGGTGATCACCCATGTGAATTCTCTGGTTACCGACAAAGAGTGTTAGCCTCCCAGCTAAGCCAACCAGGTGCTCAGCTTTTAACCGGATGGAAGACACTGCGAAAAGCAGCATCCAATATGTAGCCAGTAAATAATCTCGGGGCAACAAGTTCAGTCGCCTGCTTGGAGATATGCTGTTGCTCGTTCCGTGGCACAGACAAACTGGTAGGTTCCGCCAGTTCGACTAATCAAGGACATCGGCGATACACAAACGCTCGTCAAGGGTTGTCCCTTCGATTGTTGACATTGTCTTTGCGCACTCTTCCGGACATATAGTAGGTTGGTAACGATCCTCTATCAACACCCTCCCTCCCAACAGTACCGCTGCGTGTCGAGTTTCCTGGCGGTTATAGCGTAACGATCGGCCCCAGTACGCAACTCATACGTCTCAAAGGGATAGATCCCTTCAACCACCGACATTAATGGGTGTCTTGAAGTGGATACAGTAATATAATTTGGCCTCACCCACTGCGGGTCGACGAAGCTCCCAGTTATCCACTAAAGGTGTCGCTTCGCAAGGACCTCCCTGGGGGGACGTCACGTCTGGAGCGGGACTCGGTCCCT"; let text = "TTTCGAGTCGAATGAAAGTGGCTGCCGACAGAACTAGGAGATTAAGCAGGGAGGCAAGTAACGCAATCGCAGTCATAGGACGTATCAGCATAAGGTGACAACCGGTGCAGGTGGGACCAACATATATTTATCCAAACTAGCGTGGAATTGAGTCCTTCACGTCGAATGGTCCCCGGACCTCATGTGCGTTTGTATAAAAGCATTTCCTTCGGGGACTTGGTTATCATGAGCCCCGAATTGCAGTAGGGGTCGGCATAAGTCTTACAATTGTGCTCACTGATAATTCATCGGAGTCAGATAAGAGTGTTAACGCCGTTTAGTCCTGAGGTGGTATCGCCACAGTTGACCTTAACTCCTTAAACTGTTTTCCGCGGCTTTTGGGTGGTGGCGAAGACTTATTTGTTACAACCTACGTCCTCTAAGGCCGGTATTGTTCGCGGACTGATAGGGGCAAGTGCCCGAAGGTACCAGCCTGAGCACATGGCACAGTCTACGCGCACCGCAACCGAGTTGATGCTTCGTGTCGTTGACTAACACATTAGTCCCGCCACCAGGGCCAATACACAAGAGGGCGAACTCCCCTGTGCCCGTCTGGTAGTGAGTATACTCGGGATATGAATAGCGGTCACGTCGGCCCCCGTAGGTCAGTGGTGGCCGCGGCCAATGCACCATTGTATCAAATGGCCTCTTGATGTTATATGACTCCATTATGTAGGGTTATGTCAAGTCTCCTAGAGAGTGGCTAAAGTGCTCATCTATAGTTTTAGTGTTGGTTCTGCGTAATAGCGATGAGGCCGTGGGGAAACAGCCGTGAGTAGCTTTGACACTACGTGAGGGACAGTATCCGGCGCAACCGCTACAAAACGAGTATTTTGAAACCTGCCTCACCCGACGCCTTAAGAGATATAGCAGTCAAAGACCCTGGGGATATCCCCCCAAGACACCTAGTATACCAAATCCTGTCACGCCACGCGGGCGGGATGCAAACCTACCAGACTTCCGCTCAATCGATAAAACCCCTGCGCTCAACTGATGGAAGGCAACAGATAAACTGAGTACGCGAAGATGGGACGAGCCGCGAAACAGTAATCGGGGAAGCTATCTGCTTGCCCAAGCCTCGTACTATGTGAGCATAGTTGGCAGAGTCGCATCACAGATCGGGGTGAAATTTTTATGAAACACTCCGGTAACTGGATTGGCGCCACGCGGGCAAATGTGTACTTTGGGCACGACGCAGGCCAGTTTGCGAGATTCATCAGGATCCCTCCATGCCGTCAGAATTTCCTTCTAGCCAGTGCGGATTTCCGCTACTGCCACATGAAACGAGACTGGACTTGTTCTTCATCCGTGCTAACACCTGTCCACACGTAAGCACCGAGTTCTCTAATATTACTCTGTCCTAGCATGCGAAACCTGGGGGTTCTAGCCTATGTGCCCCCGTCCCGAAGATTGGACGGTCGCCAAATACAGGGCAACCAACCTATCGTCAGGGGTCGTGGCTAAGTGTTACGACACAAGCGATCACCTTGGAGCTCACGCCGGTGACTCACGCGGGCGGGCGCGACGGCCCTGTGCCTCGGAGACCGAAATGCTCACTCAGTCCTTAACCGGGGAGACCCGGACGGAAGCATCCCTATCACTGTACAGGGCACCGTTGAGACGTCCTCGCGGGGTTGGGTTATACTAATACCCAGAACTTTTGGTAACCGCACTGAGGCACCCCCGCCAGGAAACTAGACACCCAAGTGTCCAAAAGCATAAGTAAAGCATTGACCTCGCAGATCAAGTGTATCATTCAGGGGGAGTTCACATCAGCATATTAGAAAGGCACTGTAAAGAAGTGTATTTGATGTATAGCGGGACAGCCCGCACGCTAAAGGCCGTAGTACCCACAGCGATTGCAAGCACAGTCTCGCACGATTTCTAGGTTGAAACAGGCGCTTGATATATGCTGACCTAGCATGACAGTTACCGACTCAGCCCAGCGGTGTAAACTTGAAATAGATACGGCAGTAGCGCATTCGCGGCACGAGGGAGGACAAACGCAACAGTTACCTAGAGCATGATTAGGTACTGTGGTGCGCCGGGTGGGGCATTCTATCACATCCGTCCGTTTGGGATCAGTTCTGAGGTCAAGGTCCAGTTGTGTTGCGGATACGCGGAAGGATAGAATAACAGACCTGTAATTGGTGAGGGTAGAGGCGGTTGGTTGGCTGGCCCCAGGAGCGGTGCAAGAGACGTCCTTAGGTCATAGCCCTCAGAATACTCGAAGCATGCTGGTGAGTCTGGATATCACCGTCAGGTTATCCGATAGCAATACAGTACGGTGTGCGATAAATGTGATACACCCCTCGACATAACGGAGTCATTAGCGCCATCTCTAAACCTGCTGTCTGCAATCGGCTATCGAGCAGGCTCACCAAGGATTCCTTCGCATTGGCCCTTAGATCAGATTGTTTGATGAATGGCGGCGATTCGGCTCCCCTGCCGGACAACCTAGGCGCATTTGGGAGAGTCAAGGCAGGGGGTCGCTTTAATAGTTGCTCCTCGAAGGCTCTCATATATACAGAGCTCAGTACAATAAAGAACCCCCGTCGCCCGGGCTATAGTCGGACGATCCCTTTTCCATGTAGCCCACTTAGGTGCTGGCCAGCCTCAGCTCAAGCAATTAACCCTTAGAGACGGTTATACCATTCCCATCAGAATGAGGGAGAGTTCAACTTCGGACTAGACCGCCCCATCTATTTCGGCATACCAAAGAGGTTTACCCCCCTGCTATGGCTGCAAGCGAAGACTCTAAAGATAACGCGGGAGATAACTCGCTGTGTATCAGAGGCGGCACTTGGTTGCTATCCTTTTGGCCTCAGTCTAGGTACCAAGTCGATATCAATGCCGTTCCACTTAAACCACGAGTTGACGTTGAATCGAACTGACAGATTTAGCTCTCGTCACTACCGCGTTGAGGGCCTTCGCGACATCGCTCCAGATTTCACGCAAACCTAAGTCATAGCCTTGATCAGTAACTAGAACTGCAGGGGGTAACATTAATCACACGGAGACTATAACGGTCATGCTCAAATTTCCAGTTTCGTACTGAAAGATACGAAGCTGTCATATATCGAACATTTTGCTTAATAGTATCCATAGCTCGTCTCATGAGCATGTGTTGCGTGTGCGAACATCTAAAGTCGTGCACCTTATATCTAGCAGTTCCCTGGCTAACATGAACTTAAGCAGTGCGGTTTTTCTCCAAGGCGACCTTGTCTGAGCAGATCATTTAGAGTCCGTGTAGGCCGACGAGGGTGACCTCGGTACCCACCTAAAGGAGGAGTTGCTGCAGAGAATGCGTGGTAGGGACTGAGAACCTATCGTACAGAGATCTGGTTTTGGAAGTTTCACTGTGTCTCACTTGTATCAACTTAGATCGGTTGTCTGACGTATATATGGTTATAGGATGGAGCATACTCAGGTTCGCAGCCCGCGCGTAAACCGTTAATTCGCGCTGACCGGGATAGCTTTGAACAGTTAATAGTGACATCGTAACTTTCCAAGATGACCCAAGTTTACACGTTCTTATTTTCACGTCCTCCTTCATATAAAATTTCGAGGAAAGAAGCGTCCCCGACTCGGAACGACAAATTCAAGAGTGAGATATGTCAATAATCGAGAACTTACCAAATAAGTAATTACAGGTTAAGTTGACTCCACAGGTTCCTAAATACAATTATTTTGATAGCTCGGCTCAGTATACACCGCGCAAGTACAGTTCGCCCTAACTAGCCTTAAATATAATATATGTAGTACAATACCTTTCTTGATGTCTTCACTAGCGGGCGTGATTCTTGAGATCTCGGTGCCTACAGTATTGTGCTATAATGTACCAATCTTATGTTTTGGACGCAAAACTTATAAGAAACCACCCAACTATGAAACCCCCCGGGTCCGAGGTTACTAGGGTCTCAACCGCTAGTAGCTCTTGATCAAAGCTGGTTATATATCCCAAAACAGGACTACCACTAAGAACCCGTGGTATGAAGCGTAATCAATAACATCCGGCACTCGGGGCTTGGAAAACCCCACCCTATGACTCTCTGCCTCCGTGGCTAGTAGGTTCTCAGTTGCGCGCCATAGGGCAGCTTCTTCTTATTACTGAACGTCCTCAACACAAATTTTCCGCTCGTGGGTCCAGGGCAACAAGGCCAGATCCCGCTTATATTGAAAACCGCCCTCATATACGCAAGAGACAAGGACGTTAAAAATACAGTCCCTTCTGGTATGGATGACGAACTCCACCGTAGCGCCCTACTCCGCGCAAAGCTAATTCTCGTCAATTCACACCCGATAACTCGGTGTTAATTTGTTAAAGAGTGTTTGATTTGTACTAATATTCACTTCGAGTTACACCCTCGGCCTAACTGTCATTCCGCCAACGGGGTTCAAGGAGGCAACCAAACGGGTTTAATTTGGTGGATGCATGGCCCAATTCAAATAAGTTGGGCACCGGCTCTCATGACTGTGTCCGAGTCAAAGATCGAGGGAGCGTGTTTGTGATCTAGAACTGCACATATGTGACGATACTATCCATCCAGCCGCCGGTACGCGCAATATAAACCTGTCCATGCCATAGGATCGGTTCCTACTTTTTCCGTTTCGCTGAACACCGTACGGTCGTCAGGTTCATAGGGGCTGGGTAACAAGAGGAACCATTAAATTAAGCCTCTCGAGGCCCCCTACGTTCTGACCGGGGGGTATACTCCATTGTGTACACTTTCCTAGCCGAACAGCAGCACCCTACGTAGGACCTCATCTTTTACTTGCTCATGACAGATCCCAGATTCGAATAATGACACAGCACGAACCAGCCAGCCGACAAATCGGGATCGTGAGTCGCGGATTTGCCTCCCATGGGCTTGCGACACTGTTACCGTACAGAGTCTACTCCGCTTCTCATAACTCTGGAGCCCTACCTCCCTGGTCTTCTGGAGCATTATATATCATGTGATAGCGAGGGGGTCCGGTGGCCTGATCCGACTCTACTAACGGAAATGAGGCAAGAGTCCTACGCATTAAGCACTTGCATCTTGTAATACCCTACCGTATTGGCTCGCCCGAGGTTGTTGAGTATACCACGTTACGGGGGACGATCGTCCGGTGTAAGACGACGGTCATCTGTCATTTGCATCAGACAGTCGCAGACTATCGCGGGTGGTCTTAAGCTAAGCCTGTCTGTGGTCTTTAGCCATGAGCGGAAATGGAAGCCCTTTAGGATCCTAGATCCGATGACGCAGAGACCCTTGCAAGTGGCATCGAGTTTTGCGATATATGCCCTGTAGCTTAGCGAACCCAAATGTCTATCATCGAAAACCCTACCGGGTCCTCCTACCAAGCTAATCGGCACTGACCAAGGTACTCGGAGGACTCGTGCAAAGTCCCGGGGCCGGCGTCGCCTATCTCTAGAGCGATATGTATGGGCCTTACAACTCTTACACGTAGATAGGGCAGTCCATGCCCTAATACTTGCCGCGGCGAGCGAGGCTAGACTATATCGGTCGACCGATCTCTCAGTCGGGCTTGTATATTGCTGAAGATTACTGCGTCCCGCTCTCGTGCGATGTTTCTTGAGATTTGTAGTGTTTACGTGTAACTGGGCGTGCTTGGCCAGCCAACGAGATCTGTCCCATGAGGCCAACCTGACTTCGACACCGGGGTTGTGCCTTGATAGAACCCTGCATAGATCGTGCCCCATGTCTCTCCATTACCACCATCTGTTTAAGACTGAGAACATCCAACCGCTTTGAACCCACATTCCTCCCGCTTGCACAGATCCCTGCTGAACAACGCCCTTGCAACCTTGGCTCTCCGTAAACTAAAGACTATACTTAACCCGCAAACCGGAGCAGCGCTAGCTGCCCAGGCCGCCCCTGGGGAGTCTCACATGGACATAGACCCTGGTGCTGAGAATTTGTCCTGACTTGGTATATTGAGTACAGCCCACAGGAGCAAGCAACGGTAGATACCTCGTAACCGGTGGGCTGTTGGAAATAACACAACCCAGGCATTCACTCATAAGCCTGCCTACCGTTTCACCCCTCGGCAGATCCATGGTATAACTACTAGACAACGCGAAGTGAGTGAGTTTCGACCACCGGTATTAGTACGAGCATACATCCAATCGATAGGAGGCATGGATAGTTCGCACAGGAGGCCTCTTACGCGTTGGTTGATTCGAACTCCTGACGCCTACGAGCTGGCGAAAGCTAGACATCGTCAACATGTACCCGACCAAGATACTAGCTCGATTCTCGCGCTTCACCGGTCACCCACGGGATGTAGCTCCTTCCTTACCAATGGCAGGGATACGAAAGGTGTATGAGGTTCGTACGCGCCTTGCAAATTGGGTGCAAATGCTAACGAGTTTTGGACGAAGCTCCTCAGCCGCTTCAATGAGCTCTCACAGGTCGTGGTTGAAACTGGCCACCAACCTCGGCCTAGTTGGTGGCCACCCAGTTGTTATTTCCCAGACGGCGATGTGATGTCCCAATAAGCCGTTACCTGGCTGTGAGCTTCGACCACCGATCACCTAACTGCGCCTTCAGGTTTCCAACAAACACGAGCCACTAATGATAAGTTAAATCAGGCCTTTTGCTGTATTGAGGTCTAGATAGATAGTTGATAAGAAGAGTGTAGCTCAGCGAAGCAAAACCTGTCGTCACCTATGTCTCTATAGTCCTTTTTATAACCGTATGTTTCTCTGGACATGGTTTGACCACAACTCCTGAGTACTACGGTTTGGTCAGAAGATTGTTCTGGAGTCAACTGACAATAGCCCTCCTAGATAAGGCCGGAAGTAATCATGAGGACAAGATGATCAGCCTAGCGTTCTTGCTTGTCAACACCTTCTCCTGAAAGGCCCCCGAAAGCATGGCTTGAAGCGCTTTCACGGGCTCGATACACAGACCGGGCACGTAGGCTCAGTCTATTCATAACGAACAAGTAAAGCTCAATGTCTACCACGGAGATTCATGATTGTGGAGTATGCAATAGGAACAAAAATCAACGTTGCTAATGATAGGGTGGGAATCCTCACCACATTCGTCGTGTGTGATGCGCATTTAGTACCAACACAGATAGACACGTTTATTATAAAACCGAAGACCGGTGCGGTGGTATGGTGAGATCTCGTCCTTGGCGCTTGTCCGATAAGTTTTCAGTCGGTTGGGTCCTGAGGAACACCTCGGGCACATTACAAAGCGCCACGGGCCGGGGAAAAAAGCCCACGTCGTAGTCCGTGTTGAGAGCGCACTCTGGATCATCCATTATTGGCGATTCATAGCTTACGTGGTTATGAGCGCTACCCACATAGGGAGAGCGCCGCATACACCTGGGCGTGAAATGAGTTCCGGCAATTCTCGTTGGTATAGCAATCCGACAGCTTTACTCCAGTAAAAAACGGCTCTATTTCCTAAATGTCACGTGCATGCGTATGCAGTACACTTACTGATGCATCACTGCATACACGATTTGACAGGCCAGGCCACGAAAGTTAGATGGGCGCACAACTGGGTTCACTCACGTAAGCTGTATAACTTACGAGGCGCATCTCCATTACAATAGTTGGAGCTAAACAATAGATGCAAAAAATGGAAGCGCATAATCAAACAGACAGAGACTATCACCTCTGCGGCACTGAGCTAGACCTCGTGATTCGTCTCGATCGACCCAACTCGATCGCAAGATTCCGTTAATCGAGTTATATGACCGCCGACGAAATCTCGTGCTAACAACTCCAAGACAAGAGTGGGTCATCGACTTGTTAAGGCGGGCAAGTTCAACTTAGTTGATTAGTGTTAACTCGTGAGTGGACCTTGAAGGAAGCCCCATCAAGATATAGATATAGCACAAGTTGATGCATAGCGGCGAGGGTATTTGATAATAGAGGGAGCAGCGCGGAATGTCATCCCCTCCATGAAGCTTTATGAGATAGCTAGCGAGCCTCGTAGAGCCTCAAAGATGATAGGGAGCAATGTACGGGTGAATCATCCGACATATGTTTCTCGCAATCCCACAAGTAGTCCGATGGGCGTATCAACGATTAGGTAGTCACGGAATATCTGATCTGACACTTTAGTCCTTACATTCAAATATCACACGCTCACCCGGTCTTCTCCGCACCCGCGCCTCTGAATCTGGGTGACAGATATAGCTCAATTTTCGGACGTCGGAATCACTTTCAATCGACCTAACTCACAGATGCAAGAAGGGGGCTACTGCCTGAATCAGCGGATGGGAAGTTCTTAACAATTTTATGTCCGTATAATGCCCCCTCTAGTTTACGTCATTAATAAGCTTGCACCTCATATCGTGACTAACGTAGACGACGAGACTAGTAATACCGGGATTAGGCACCCCCTGGACGGGTGGTGGGTGCGTGGTATAACAACTTCATACTGAGATCGTTACAGATGTAACCTGCATCGTAATGGATAGGTCCCCAAACAATGTCGTAACTATTGACGTGATGGTAATACTAAATTTTGGGTTAGGGACACACCTCGTCCCTCTCGGCGTATGAGTTGTAAAAACTGTAACTGCATAATGTGGCGTGTACGACTCGTAGGTGGCCTGCACCATGTAGCCTACAATATTCTCCAAGTCAGGGCGAATAGGGATGAGCGCGCAATACAAGCTTACCGGCGTAACGATTGGCGCGTTCGGTGGCCTGGTTAAAGTCTCGCCTATGGCAACGTCTTAACAGTATCATGTCCCGTGGTAACCTGACGCCATCGCAGGACTTGTCACTTCCATGCATGTGTAAATCCCAGATGGTCTTACAACACTTGAAAGACAGCAAGCCCGCACAGGCAATCTTCATTCCGTAGCGTTATATTACTAGGTAGCTCTACATGTCCATTGGGACACGGATCAAGATTAATGTATGCGATCTCATTAACTAATGGTTTCGTGCCTAGGCGTCATTTACCTTCATTGCGAAGGTTCAAGTTCCGCGAGTGCTTGGCTGAGCGCCCCAGGGACTATTCCTTAGCTGAGCATACGCTATATAAATTTCTTAACTACAGCTGGCAGTATTATGAGGTAAACGCCATGCTACGTTGCTGCTATCAACACAGACGGCTATGTAACAATTCTGTTTTACACTAGCCCGGTTGATCATGCAGGCTCTGGATACCGGAAACTATACGTTATCTTACACGCTCCGCCACATGGAGCACCGCCTAGGGAAGCACTGTGCGATGAGGCCTACATCATCGGGGTCGTTGAGATCCTGCCTCTGATATACGGAACCACATCCCGAATCTGCCGCCCGCTTTTCAACGCGATCATTGACTGTAAACATCTATCTCTCAGTGAACCAACTCTTAGAAGCCCTACCCTTCCTGCAACTGGGTGCATCTTCGCCTGTCAATTTCTGTTCCCGACAAAGTAGTGTCTAGCCTCCCAGGTAAGCACCAGGTGCTCAATTTTAAACGATGGAAGACACCTGCTAAAGCAGATCCATACCGTACCAGTAAAGTAAGTTTGTGGGCAGCAAGTTCATGTCGCTCTGCTAGGAGATATCTGTTGCCTTTCCGTGGCAAGACAAACCGGTAGGTTCCACCGATCGACTAGAACTGCAGGAGCAGCGTGCGATACACACACGTTCGTCAAGGTTCCACCTGCGAGTGTTGAATTGTCTTGCATTTCGCCTCCGGACATATAGCAGGTTGTAACGATCCCCTACAAAGATCTCTCCTCCCAACCAGAACCGCGCGTTGTCCGAGTTTGATGCGGGTTATACGTAACGACGGCCCCAGTACGCAAACCTCACACGTCTCCGAACGGATAGATCCCTTCCAACAGCCGACTTAAGGCTTGTCTGACAGCTGGATAAGTAATAAGTTGGGGCCGATCCAGCGGCGCGGTCGACAAGTCTCTCAGTTATCCAACCTAAAGGTGAGCCACTATCAGACAAGGAGCCTTCCCTGTGGACGGGGACGTCAACGTCGGTAGGGGACTCGGATACCCT"; let pens = Penalties { mismatch_pen: 1, open_pen: 2, extd_pen: 2, }; c.bench_function("wfa length 10000 30% error", |b| { b.iter(|| wavefront_align(black_box(query), black_box(text), black_box(&pens))) }); } criterion_group! { name = benches_100; config = Criterion::default().significance_level(0.05).sample_size(10).measurement_time(Duration::from_secs(1)); targets = wavefront_bench_l100_e1, wavefront_bench_l100_e10, wavefront_bench_l100_e30, } criterion_group! { name = benches_1000; config = Criterion::default().significance_level(0.05).sample_size(10).measurement_time(Duration::from_secs(10)); targets = wavefront_bench_l1000_e1, wavefront_bench_l1000_e10, wavefront_bench_l1000_e30, } criterion_group! { name = benches_10000; config = Criterion::default().significance_level(0.05).sample_size(10).measurement_time(Duration::from_secs(60)); targets = wavefront_bench_l10000_e1, wavefront_bench_l10000_e10, wavefront_bench_l10000_e30 } criterion_main!(benches_100, benches_1000, benches_10000);