Repository 'metaphlan'
hg clone https://toolshed.g2.bx.psu.edu/repos/iuc/metaphlan

Changeset 13:ef65b083bd0c (2024-09-08)
Previous changeset 12:1a037928504c (2024-08-11) Next changeset 14:740fd2d16a28 (2024-09-20)
Commit message:
planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/metaphlan/ commit 8ab597f47a3a12919b55055380b6e725879cc5c0
modified:
metaphlan.xml
added:
test-data/SRS014464-Anterior_nares_mini.fastq
b
diff -r 1a037928504c -r ef65b083bd0c metaphlan.xml
--- a/metaphlan.xml Sun Aug 11 20:35:53 2024 +0000
+++ b/metaphlan.xml Sun Sep 08 06:59:00 2024 +0000
b
@@ -1,4 +1,4 @@
-<tool id="metaphlan" name="MetaPhlAn" version="@TOOL_VERSION@+galaxy1" profile="@PROFILE@">
+<tool id="metaphlan" name="MetaPhlAn" version="@TOOL_VERSION@+galaxy2" profile="@PROFILE@">
     <description>to profile the composition of microbial communities</description>
     <macros>
         <import>macros.xml</import>
@@ -26,7 +26,7 @@
                 <when value="s"/>
             </conditional>
         </xml>
-        <token name="@FILE_FORMATS@">fastq,fastq.gz,fastq.bz2,fasta,fasta.gz,fasta.bz2</token>
+        <token name="@FILE_FORMATS@">fastq,fastq.gz,fastq.bz2,fasta,fasta.gz</token>
     </macros>
     <expand macro="edam_ontology"/>
     <expand macro="requirements"/>
@@ -74,13 +74,19 @@
         #if $full_ext.endswith("gz")
             zcat '$inputs.in.raw_in.in_f' > 'in_f' &&
             zcat '$inputs.in.raw_in.in_r' > 'in_r' &&
-            #set file_path="-1 in_f -2 in_r"
         #else if $full_ext.endswith("bz2")
             bzcat '$inputs.in.raw_in.in_f' > 'in_f' && 
             bzcat '$inputs.in.raw_in.in_r' > 'in_r' &&
             #set file_path="-1 in_f -2 in_r"
+            ln -s '$inputs.in.raw_in.in_f' 'in_f' &&
+            ln -s '$inputs.in.raw_in.in_r' 'in_r' &&
+        #end if
+        ## paired data has by default no special treatment, i.e. it is given as comma separated list
+        ## except iff paired subsampling where -1 and -2 must be used
+        #if $subsample.selector == 'paired'
+            #set file_path="-1 in_f -2 in_r"
         #else
-            #set file_path="-1 '%s' -2 '%s'" % ($inputs.in.raw_in.in_f,$inputs.in.raw_in.in_r)
+            #set file_path="in_f,in_r"
         #end if
     #else if $inputs.in.raw_in.selector == "paired_collection"
         #set full_ext=$inputs.in.raw_in.in.forward.ext
@@ -91,13 +97,17 @@
         #if $full_ext.endswith("gz")
             zcat '$inputs.in.raw_in.in.forward' > 'in_f' &&
             zcat '$inputs.in.raw_in.in.reverse' > 'in_r' &&
-            #set file_path="-1 in_f -2 in_r"
         #else if $full_ext.endswith("bz2")
             bzcat '$inputs.in.raw_in.in.forward' > 'in_f' && 
             bzcat '$inputs.in.raw_in.in.reverse' > 'in_r' &&
+        #else
+            ln -s '$inputs.in.raw_in.in.forward' 'in_f' &&
+            ln -s '$inputs.in.raw_in.in.reverse' 'in_r' &&
+        #end if
+        #if $subsample.selector == 'paired'
             #set file_path="-1 in_f -2 in_r"
         #else
-            #set file_path="-1 '%s' -2 '%s'" % ($inputs.in.raw_in.in_f,$inputs.in.raw_in.in_r)
+            #set file_path="in_f,in_r"
         #end if
     #end if
 
@@ -983,6 +993,87 @@
                 <has_text text="Downloading" negate="true"/>
             </assert_stderr>
         </test>
+        <!-- Paired fastq file as collection, Cached db -->
+        <test expect_num_outputs="4">
+            <section name="inputs">
+                <conditional name="in">
+                    <param name="selector" value="raw"/>
+                    <conditional name="raw_in">
+                        <param name="selector" value="paired_collection"/>
+                        <param name="in">
+                            <collection type="paired" name="pair">
+                                <element name="forward" value="SRS014464-Anterior_nares_mini.fastq" />
+                                <element name="reverse" value="SRS014464-Anterior_nares_mini.fastq" />
+                            </collection>
+                        </param>
+                    </conditional>
+                    <param name="read_min_len" value="70"/>
+                    <section name="mapping">
+                        <param name="bt2_ps" value="sensitive"/>
+                        <param name="min_mapq_val" value="5"/>
+                    </section>
+                </conditional>
+                <conditional name="db">
+                    <param name="db_selector" value="cached"/>
+                    <param name="cached_db" value="test-db-20210409"/>
+                </conditional>
+            </section>
+            <section name="analysis">
+                <conditional name="analysis_type">
+                    <param name="t" value="rel_ab"/>
+                    <conditional name="tax_lev">
+                        <param name="tax_lev" value="a"/>
+                        <param name="split_levels" value="false"/>
+                    </conditional>
+                </conditional>
+                <param name="min_cu_len" value="2000"/>
+                <param name="organism_profiling" value="add_viruses"/>
+                <param name="stat" value="avg_g"/>
+                <param name="stat_q" value="0.2"/>
+                <param name="perc_nonzero" value="0.33"/>
+                <param name="avoid_disqm" value="true"/>
+            </section>
+            <conditional name="subsample">
+                <param name="selector" value="no"/>
+            </conditional>
+            <section name="out">
+                <param name="sample_id_key" value="SampleID"/>
+                <param name="sample_id" value="Metaphlan_Analysis"/>
+                <param name="use_group_representative" value="false"/>
+                <param name="legacy_output" value="false"/>
+                <param name="CAMI_format_output" value="false"/>
+                <param name="unclassified_estimation" value="false"/>
+                <param name="krona_output" value="false"/>
+            </section>
+            <output name="output_file" ftype="tabular" file="SRS014464-Anterior_nares-abundances.tabular" compare="sim_size">
+                <assert_contents>
+                    <has_text text="k__Bacteria|p__Actinobacteria|c__Actinobacteria|o__Corynebacteriales|f__Corynebacteriaceae|g__Corynebacterium|s__Corynebacterium_accolens"/>
+                    <has_text text="relative_abundance"/>
+                    <has_text text="NCBI_tax_id"/>
+                    <has_text text="clade_name"/>
+                </assert_contents>
+            </output>
+            <output name="bowtie2out" ftype="tabular">
+                <assert_contents>
+                    <has_text text="HWI-EAS109_102883399:3:107:9938:7093/1"/>
+                    <has_text text="90240__A0A378QWM4__NCTC12877_00123"/>
+                </assert_contents>
+            </output>
+            <output name="sam_output_file" ftype="sam">
+                <assert_contents>
+                    <has_size min="8450" max="8550"/>
+                    <has_text text="SN:13076__A0A2I1PE66__CYJ72_10760"/>
+                </assert_contents>
+            </output>
+            <output name="biom_output_file" ftype="biom1" file="SRS014464-Anterior_nares.biom" compare="sim_size">
+                <assert_contents>
+                    <has_text text="k__Bacteria|p__Actinobacteria|c__Actinobacteria|o__Corynebacteriales|f__Corynebacteriaceae|g__Corynebacterium|s__Corynebacterium_accolens"/>
+                </assert_contents>
+            </output>
+            <assert_stderr>
+                <has_text text="Downloading" negate="true"/>
+            </assert_stderr>
+        </test>
         <!-- SAM, cached DB -->
         <test expect_num_outputs="2">
             <section name="inputs">
b
diff -r 1a037928504c -r ef65b083bd0c test-data/SRS014464-Anterior_nares_mini.fastq
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/SRS014464-Anterior_nares_mini.fastq Sun Sep 08 06:59:00 2024 +0000
b
b'@@ -0,0 +1,4000 @@\n+@HWI-EAS109_102883399:3:100:10648:20124/1\n+TTGATATTTCATGTACAGTATAAAATATATATTTGGGTTACTTTGGTATTTTATGTACAGTATATAATCTATATTTGATGTACTTTCATATTTTATGTAC\n++\n+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\n+@HWI-EAS109_102883399:3:100:1079:13862/1\n+ATATTGATACTTGCATTAATATCACGGTCATGATTGGCATGGCAACTAGGACAAATCCAATGTCTAACCGCAAGTATCAAGTTTTCTTTTGCCATAATAA\n++\n+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\n+@HWI-EAS109_102883399:3:100:10822:2790/1\n+CACACACACATATACACACACACATATACACACACACATACACACACACACAAACACACACACACACAAGATCGGAAGAGCGGTTCAGCAGGAATGCCGA\n++\n+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\n+@HWI-EAS109_102883399:3:100:10896:21102/1\n+CTCTTCGTCCTAAGGACCACTGTCTGTGCTGTGTCTTTCAAAGGTCAGAAGAGATTGAACCTTTGTGTTTTTATTTTCCCTGTGTTTGCTTTTTC\n++\n+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\n+@HWI-EAS109_102883399:3:100:11210:16352/1\n+GTCTTTTCTTTTTGCTTGCCATTGTGGCTGTAAATTGATACAAAAACTTTTGTGCCTGTATGTTGCACATAAAGCCATAGCCCATTACCATCACTGATTT\n++\n+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\n+@HWI-EAS109_102883399:3:100:11502:9110/1\n+TCGCCCAGCAAATTCATCCACCTTGTCAGATGGCACACCCACACGACTTGGGCGAAATTCTACGCACAGTTTAAATAATTTATCCAAACGACCAAAGCCC\n++\n+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\n+@HWI-EAS109_102883399:3:100:11549:6243/1\n+TGGAAGCGTTGGGGATTTACGTAGTTTGTTGGATTTGCTTCCCGTCGCTGGTGGTGATGGCACGCTGGACGATCGTTACGCTGAGCTTTCT\n++\n+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\n+@HWI-EAS109_102883399:3:100:11778:13384/1\n+AAGTACATCAAATATATATTTTATTCTGTACATAAAATATGAAAGTACACCAGATATATATTCTATAGTGTACATAAAATATCAAAGTACCCAAACTATA\n++\n+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\n+@HWI-EAS109_102883399:3:100:12997:10542/1\n+ATAATATATGATACATATTATACATCTTATATATGAAATTATATAATTATAGATAACATAATACACATTTATATGTATTATGAAATATAACAAAGGTACT\n++\n+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\n+@HWI-EAS109_102883399:3:100:13379:16343/1\n+TATTATATACTGTACATCAAATATGAAAGTTCCCAAACATTTATAATAATCTGTACAGAAAATATCAAAGTACTCAAACTATAAACTGTACATAAAATAT\n++\n+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\n+@HWI-EAS109_102883399:3:100:13680:7440/1\n+AATGTTTATGCCCTATCGCCATGGTGACGGAATTAGGGGTCTCCTGCTCTTCGTCCTAAGGACCACTGTCTGTGCTGTGTCTTTCAAAGGTCAGAAGAGA\n++\n+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\n+@HWI-EAS109_102883399:3:100:14551:6350/1\n+CGGTTCAGCAGGAATGCCGAGATCGGAAGAGCGGTTCAGCAGGAATGCCGAGACCGATCTCGTATGCCGTCTTCTG\n++\n+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\n+@HWI-EAS109_102883399:3:100:14666:5491/1\n+TCGTATCTTGTCGACGGCTGGGCCTACCTGGTGTTTTACGGGGCGCTGGCGTTTTTGCTGATCGTTTTTGCCAACTATTCCGCCTTCGGGGTGCGG\n++\n+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\n+@HWI-EAS109_102883399:3:100:14711:18833/1\n+TATTTAATACGTATATTAACCGTATAATATATTCTATATATGATATATAACATATATTATATATGTCATAAATTATAATATATACTATATGTCATATTGT\n++\n+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\n+@HWI-EAS109_102883399:3:100:14778:2943/1\n+CCTTAACTAGTAATTTGAAGAGTTGGCATTTGTAAGGCCAGTATGAATATACCTTCAAAGCAGCAACACAGGTTCCCCATGAGAAAAAGCAAACTTAGGG\n++\n+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\n+@HWI-EAS109_102883399:3:100:15216:16187/1\n+TCAATACCAAGACTTTTATTCAGCACCAGCACCAGCACCAGCACCCATGCCATTTTATGCAACAGATTGATGCTAATTTATGCTTAATTTGCCCTATTTT\n++\n+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\n+@HWI-EAS109_102883399:3:100:15403:10319/1\n+GATCGGAAGAGCGGTTCAGCAGGAATGC'..b':3:13:7711:19090/1\n+AATCATTTGAGGACACTTCCTTTCGTGAGGTTCCTTGGTTAGGTAAATCAGGCATTTTTTGATACGTATTAGCAATGTTTTCATCGGTAAATGTAGTAGC\n++\n+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\n+@HWI-EAS109_102883399:3:13:8197:20004/1\n+AATATACAGTATCATATATATAATATATATAACCTATGTATAATATTGTTTTACATCCTGCATCCTATGTTATATATATTGTATAAAATATAATAATTGA\n++\n+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\n+@HWI-EAS109_102883399:3:13:9109:2242/1\n+TTATATAGTTATATATATTATATTACATATTTACATAAAATATTATACAGTTATATATAATTTCAAATAGTTATATATAACAGAATATAAAACATATAGA\n++\n+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\n+@HWI-EAS109_102883399:3:14:10216:8263/1\n+CATAAAATATCATAATATAATATATATTATAATATTTCATATTACATAATATATATTACATATCACCCAATATAACTAACATACATAATATTATAATATA\n++\n+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\n+@HWI-EAS109_102883399:3:14:10488:19578/1\n+GATCGGAAGAGCGGTTCAGCAGGAATGCCGAGACCGATATCGTATGCCGTCTTCTGCTTGAAAAA\n++\n+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\n+@HWI-EAS109_102883399:3:14:10532:1591/1\n+TAACACAGTCATATAATATATATTTAATATAGGTATTATACATACAACGTATTATATATAATATATAATATATATTACATATGTTATAAAATATAATATA\n++\n+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\n+@HWI-EAS109_102883399:3:14:10778:18870/1\n+TTCTTAAAACAAGTTATGAGATGGGAAAAAGGGCACCCACAAACATACGTATACATTATGTATATAATAATATACAGTATCATATATATAATATATATAA\n++\n+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\n+@HWI-EAS109_102883399:3:14:10898:13103/1\n+ATATATGATACATATTATACATCTTATATATGAAATTATATAATTATAGATAACATAATACACATTTATATGTATTATGATATATAGCAAAGGTACTATA\n++\n+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\n+@HWI-EAS109_102883399:3:14:10899:18822/1\n+TATTATACACACAACGTATTATATAAAATATATAATATATATTACATATGTCATAAAATATAATATATATTATATGTCGCATTTTATATATACAATTATA\n++\n+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\n+@HWI-EAS109_102883399:3:14:11137:9828/1\n+GGGTGTTGTGACTTTGCGACGCTTGATACCACCCAGGAAACGGAACTGAAGCGTTCGGTTTTTCTTGATCAGCTCGCGCGAATAGGGAAATTTTCGGAAA\n++\n+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\n+@HWI-EAS109_102883399:3:14:1168:2543/1\n+CTATCATACAGAAGTCTATTTCCATACAACCGATACGTATTTACCATACGCAAGAGTATTCAATGCAGAGATAC\n++\n+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\n+@HWI-EAS109_102883399:3:14:11698:7209/1\n+TGCCACCGTCTGCTGCAAATGTACTGTCCATCAAAATGGGGGCGAGTTGTTTTTTAAGTACTGTTGTCAGTTTTTGGTTTTTTATGGTGCTAATG\n++\n+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\n+@HWI-EAS109_102883399:3:14:11855:5277/1\n+CGGTTCAGCAGGAATGCCGAGATCGGAAGAGCGGTTCAGCAGGAATGCCGAGACCGATATCGTATGCCGTCTTCTG\n++\n+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\n+@HWI-EAS109_102883399:3:14:12525:11745/1\n+ATATGAAAGTACATCAAATATAGATTATATACCTTACATAAAATATAAAGGAACCCCAAATATATATGATATACTGTACATGAAATATCAAAGTTCACAA\n++\n+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\n+@HWI-EAS109_102883399:3:14:12957:3677/1\n+CACCTCGCGAACCTCCTGAGGAGTAGAGGCGGCCAGGAGCTGGTTACGGAAATCAGCCTTGACTAGGGAACGCGCCAACGAAGCGAGAAT\n++\n+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\n+@HWI-EAS109_102883399:3:14:13268:17482/1\n+GGAAGTACTTCGAGATCTAAGAGGAGGCTCACGTGGCTGAACAAAAGGCTTATCGTGGCCAAGCGCCAAAGGCGTCACCGATCGCCCGTGGGCTTGCTGT\n++\n+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\n+@HWI-EAS109_102883399:3:14:13657:17008/1\n+TAATTACATGTCACATATGTTATATATTATATATTTTACATAGAATGTACTGGTTACATACAATATATAGTATGTTACCTGTAATGTATAATTTATTACA\n++\n+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\n'