├── test
├── data
│ ├── tracks.conf
│ ├── tracks
│ │ ├── genes
│ │ │ └── Chr5
│ │ │ │ ├── hist-20000-0.json
│ │ │ │ ├── names.txt
│ │ │ │ └── trackData.json
│ │ └── tes
│ │ │ └── Chr5
│ │ │ ├── hist-5000-0.json
│ │ │ ├── names.txt
│ │ │ └── trackData.json
│ ├── test_smrna_short.bw
│ ├── names
│ │ ├── meta.json
│ │ ├── d.json
│ │ ├── 2.json
│ │ ├── 0.json
│ │ ├── 8.json
│ │ ├── 7.json
│ │ ├── 1.json
│ │ ├── e.json
│ │ ├── 9.json
│ │ ├── 6.json
│ │ ├── 4.json
│ │ ├── f.json
│ │ ├── a.json
│ │ ├── 3.json
│ │ ├── b.json
│ │ ├── 5.json
│ │ └── c.json
│ ├── test_smrna_short_adjusted.bam
│ ├── seq
│ │ ├── refSeqs.json
│ │ └── a59
│ │ │ └── b6d
│ │ │ └── 00
│ │ │ ├── Chr5-2.txt
│ │ │ ├── Chr5-0.txt
│ │ │ └── Chr5-1.txt
│ ├── test_smrna_short_adjusted.bam.bai
│ ├── .htaccess
│ └── trackList.json
├── index.html
├── run-jasmine.js
└── spec
│ └── SmallRNAPlugin.spec.js
├── .gitignore
├── img
├── demo_image.png
├── checkmark-red.png
├── smrna-filter.png
├── checkmark-blue.png
├── checkmark-gray.png
├── checkmark-green.png
├── demo_image_old.png
├── checkmark-orange.png
├── checkmark-purple.png
├── checkmark-yellow.png
└── smrna-filter-blank.png
├── .jsbeautifyrc
├── .travis.yml
├── LICENSE
├── package.json
├── js
├── SmallRNAPlugin.profile.js
├── View
│ ├── Dialog
│ │ ├── QualityFilterDialog.js
│ │ └── ReadFilterDialogCheck.js
│ ├── Track
│ │ ├── _NamedFeatureFiltersMixin.js
│ │ ├── _AlignmentsMixin.js
│ │ ├── smAlignments.js
│ │ └── smHTMLAlignments.js
│ ├── FeatureGlyph
│ │ └── smAlignment.js
│ └── StrandedBitmapRectLayout.js
└── main.js
├── CHANGELOG.md
├── css
└── main.css
├── yarn.lock
└── README.md
/test/data/tracks.conf:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/test/data/tracks/genes/Chr5/hist-20000-0.json:
--------------------------------------------------------------------------------
1 | [1,2,5]
2 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | npm-debug.log
3 | node_modules
4 | built
--------------------------------------------------------------------------------
/test/data/tracks/tes/Chr5/hist-5000-0.json:
--------------------------------------------------------------------------------
1 | [3,6,1,5,5,2,3,4,5,2]
2 |
--------------------------------------------------------------------------------
/img/demo_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bhofmei/jbplugin-smallrna/HEAD/img/demo_image.png
--------------------------------------------------------------------------------
/img/checkmark-red.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bhofmei/jbplugin-smallrna/HEAD/img/checkmark-red.png
--------------------------------------------------------------------------------
/img/smrna-filter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bhofmei/jbplugin-smallrna/HEAD/img/smrna-filter.png
--------------------------------------------------------------------------------
/img/checkmark-blue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bhofmei/jbplugin-smallrna/HEAD/img/checkmark-blue.png
--------------------------------------------------------------------------------
/img/checkmark-gray.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bhofmei/jbplugin-smallrna/HEAD/img/checkmark-gray.png
--------------------------------------------------------------------------------
/img/checkmark-green.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bhofmei/jbplugin-smallrna/HEAD/img/checkmark-green.png
--------------------------------------------------------------------------------
/img/demo_image_old.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bhofmei/jbplugin-smallrna/HEAD/img/demo_image_old.png
--------------------------------------------------------------------------------
/img/checkmark-orange.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bhofmei/jbplugin-smallrna/HEAD/img/checkmark-orange.png
--------------------------------------------------------------------------------
/img/checkmark-purple.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bhofmei/jbplugin-smallrna/HEAD/img/checkmark-purple.png
--------------------------------------------------------------------------------
/img/checkmark-yellow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bhofmei/jbplugin-smallrna/HEAD/img/checkmark-yellow.png
--------------------------------------------------------------------------------
/img/smrna-filter-blank.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bhofmei/jbplugin-smallrna/HEAD/img/smrna-filter-blank.png
--------------------------------------------------------------------------------
/test/data/test_smrna_short.bw:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bhofmei/jbplugin-smallrna/HEAD/test/data/test_smrna_short.bw
--------------------------------------------------------------------------------
/.jsbeautifyrc:
--------------------------------------------------------------------------------
1 | {
2 | "js": {
3 | "keep_array_indentation": false,
4 | "break_chained_methods": true,
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/test/data/names/meta.json:
--------------------------------------------------------------------------------
1 | {"hash_bits":"4","lowercase_keys":1,"track_names":["genes","tes"],"format":"json","compress":0}
2 |
--------------------------------------------------------------------------------
/test/data/test_smrna_short_adjusted.bam:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bhofmei/jbplugin-smallrna/HEAD/test/data/test_smrna_short_adjusted.bam
--------------------------------------------------------------------------------
/test/data/seq/refSeqs.json:
--------------------------------------------------------------------------------
1 | [{"length":50001,"seqChunkSize":20000,"end":50001,"name":"Chr5","description":"Chr5:12550003..12600003","start":0}]
2 |
--------------------------------------------------------------------------------
/test/data/test_smrna_short_adjusted.bam.bai:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bhofmei/jbplugin-smallrna/HEAD/test/data/test_smrna_short_adjusted.bam.bai
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - 7
4 | sudo: false
5 | cache:
6 | - pip
7 | - yarn
8 | before_install:
9 | - pip install --user RangeHTTPServer
10 | install:
11 | - TRAVIS_CI=1 yarn install
12 | before_script:
13 | - python -m RangeHTTPServer &
14 | script:
15 | - phantomjs test/run-jasmine.js http://localhost:8000/test/
16 |
--------------------------------------------------------------------------------
/test/data/names/d.json:
--------------------------------------------------------------------------------
1 | {"at5g332":{"exact":[],"prefix":["AT5G33285"]},"at5g3330":{"exact":[],"prefix":["AT5G33300","AT5G33306"]},"at5te44485":{"exact":[["AT5TE44485",1,"AT5TE44485","Chr5",9661,9965]],"prefix":[]},"tat":{"exact":[],"prefix":["TAT1_ATH"]},"atlantys":{"prefix":["ATLANTYS1"],"exact":[]},"at5te44470":{"prefix":[],"exact":[["AT5TE44470",1,"AT5TE44470","Chr5",4220,5365]]}}
2 |
--------------------------------------------------------------------------------
/test/data/names/2.json:
--------------------------------------------------------------------------------
1 | {"brodyag":{"prefix":["BRODYAGA1A"],"exact":[]},"at5te44480":{"prefix":[],"exact":[["AT5TE44480",1,"AT5TE44480","Chr5",9380,9661]]},"atm":{"exact":[],"prefix":["ATMUNX1"]},"helitron2":{"prefix":[],"exact":[["HELITRON2",1,"AT5TE44615","Chr5",44043,44283]]},"me":{"exact":[],"prefix":["META1"]},"at5g3335":{"exact":[],"prefix":["AT5G33350","AT5G33355"]},"at5te44475":{"exact":[["AT5TE44475",1,"AT5TE44475","Chr5",7462,8196]],"prefix":[]},"atlanty":{"prefix":["ATLANTYS1"],"exact":[]}}
2 |
--------------------------------------------------------------------------------
/test/data/tracks/genes/Chr5/names.txt:
--------------------------------------------------------------------------------
1 | [["AT5G33300","AT5G33300"],"genes","AT5G33300","Chr5",12426,15754]
2 | [["AT5G33310","AT5G33310"],"genes","AT5G33310","Chr5",27317,32196]
3 | [["AT5G33320","AT5G33320"],"genes","AT5G33320","Chr5",38834,41745]
4 | [["AT5G33330","AT5G33330"],"genes","AT5G33330","Chr5",41679,42893]
5 | [["AT5G33340","AT5G33340"],"genes","AT5G33340","Chr5",44463,45949]
6 | [["AT5G33350","AT5G33350"],"genes","AT5G33350","Chr5",46781,48095]
7 | [["AT5G33355","AT5G33355"],"genes","AT5G33355","Chr5",49249,49668]
8 |
--------------------------------------------------------------------------------
/test/data/names/0.json:
--------------------------------------------------------------------------------
1 | {"at5te4452":{"prefix":["AT5TE44520","AT5TE44525"],"exact":[]},"tat1_a":{"prefix":["TAT1_ATH"],"exact":[]},"meta1":{"prefix":[],"exact":[["META1",1,"AT5TE44535","Chr5",19135,19601]]},"brodyaga":{"exact":[],"prefix":["BRODYAGA1A"]},"brodyaga1":{"exact":[],"prefix":["BRODYAGA1A"]},"atdna":{"prefix":["ATDNA1T9A","ATDNA2T9C"],"exact":[]},"at5te44525":{"prefix":[],"exact":[["AT5TE44525",1,"AT5TE44525","Chr5",16839,18018]]},"arnoldy2":{"prefix":[],"exact":[["ARNOLDY2",1,"AT5TE44580","Chr5",35230,35856]]},"atcopia":{"prefix":["ATCOPIA30","ATCOPIA28"],"exact":[]}}
2 |
--------------------------------------------------------------------------------
/test/data/.htaccess:
--------------------------------------------------------------------------------
1 | # This Apache .htaccess file is generated by JBrowse (GenomeDB) for
2 | # allowing cross-origin requests as defined by the Cross-Origin
3 | # Resource Sharing working draft from the W3C
4 | # (http://www.w3.org/TR/cors/). In order for Apache to pay attention
5 | # to this, it must have mod_headers enabled, and its AllowOverride
6 | # configuration directive must allow FileInfo overrides.
7 |
Filter all visible smRNA tracks',
36 | //autofocus: false,
37 |
38 | constructor: function (args) {
39 | this.browser = args.browser;
40 | this.sizeProps = this._initializeSizeProperties(args);
41 | this.otherProps = this._initializeOtherProperties(args);
42 |
43 | this.isAnimal = args.config.isAnimal;
44 |
45 | this.setCallback = args.setCallback || function () {};
46 | this.cancelCallback = args.cancelCallback || function () {};
47 | },
48 |
49 | _initializeSizeProperties: function (args) {
50 | return {
51 | hide21: {
52 | id: 'hide21',
53 | hide: (args.config.hide21 === true ? true : undefined),
54 | 'class': 'smrna-select-blue',
55 | label: 'Hide 21-mers'
56 | },
57 | hide22: {
58 | id: 'hide22',
59 | hide: (args.config.hide22 === true ? true : undefined),
60 | 'class': 'smrna-select-green',
61 | label: 'Hide 22-mers'
62 | },
63 | hide23: {
64 | id: 'hide23',
65 | hide: (args.config.hide23 === true ? true : undefined),
66 | 'class': 'smrna-select-purple',
67 | label: 'Hide 23-mers'
68 | },
69 | hide24: {
70 | id: 'hide24',
71 | hide: (args.config.hide24 === true ? true : undefined),
72 | 'class': 'smrna-select-orange',
73 | label: 'Hide 24-mers'
74 | },
75 | hidepi: {
76 | id: 'hidepi',
77 | hide: (args.config.hidepi === true ? true : undefined),
78 | 'class': 'smrna-select-red',
79 | label: 'Hide piRNAs'
80 | },
81 | hideOthers: {
82 | id: 'hideOthers',
83 | hide: (args.config.hideOthers === true ? true : undefined),
84 | 'class': 'smrna-select-gray',
85 | label: 'Hide other sizes'
86 | }
87 | }
88 | },
89 | _initializeOtherProperties: function (args) {
90 | return {
91 | hideReverseStrand: {
92 | id: 'hidereverse',
93 | hide: (args.config.hideReverseStrand === true ? true : undefined),
94 | label: 'Hide reverse strand reads'
95 | },
96 | hideForwardStrand: {
97 | id: 'hideforward',
98 | hide: (args.config.hideForwardStrand === true ? true : undefined),
99 | label: 'Hide forward strand reads'
100 | },
101 | hideMultiMappers: {
102 | id: 'hidemulti',
103 | hide: (args.config.hideMultiMappers === true ? true : undefined),
104 | label: 'Hide multi-mapped alignments'
105 | },
106 | filterQuality: {
107 | id: 'filterquality',
108 | hide: (args.config.filterQuality === undefined ? 0 : args.config.filterQuality),
109 | label: 'Minimum mapping quality'
110 | }
111 | }
112 | },
113 |
114 | _fillActionBar: function (actionBar) {
115 | var ok_button = new Button({
116 | label: "OK",
117 | onClick: lang.hitch(this, function () {
118 | this.filterCallback();
119 | var out = {
120 | isAnimal: this.isAnimal
121 | };
122 | for (var size in this.sizeProps) {
123 | out[size] = this.sizeProps[size].hide;
124 | }
125 | for (var opt in this.otherProps) {
126 | out[opt] = this.otherProps[opt].hide;
127 | }
128 | this.setCallback && this.setCallback(out);
129 | this.hide();
130 | })
131 | }).placeAt(actionBar);
132 |
133 | var cancel_button = new Button({
134 | label: "Cancel",
135 | onClick: lang.hitch(this, function () {
136 | this.cancelCallback && this.cancelCallback();
137 | this.hide();
138 | })
139 | }).placeAt(actionBar);
140 | },
141 |
142 | filterCallback: function () {
143 | var dialog = this;
144 | var hide = lang.mixin(dialog.sizeProps, dialog.otherProps);
145 | var tracks = dialog.browser.view.visibleTracks();
146 | array.forEach(tracks, function (track) {
147 | // operate only on smAlignments tracks
148 | if (!/\b(smAlignments)/.test(track.config.type))
149 | return;
150 | for (var o in hide) {
151 | // handle quality filter info
152 | var h = hide[o].hide;
153 | if (h !== undefined)
154 | track._toggleFeatureFilter(o, h);
155 | }
156 | });
157 | },
158 |
159 | show: function (callback) {
160 | var dialog = this;
161 | dojo.addClass(this.domNode, 'smrna-filter-dialog');
162 |
163 | // left pane for filtering by size
164 | var leftPane = dom.create('div', {
165 | id: 'smrna-filter-dialog-sizes',
166 | 'class': 'smrna-filter-dialog-column'
167 | });
168 | dom.create('h3', {
169 | innerHTML: 'Filter by size'
170 | }, leftPane);
171 | var size;
172 | for (size in this.sizeProps) {
173 | if (size == 'hidepi' & dialog.isAnimal !== true) {
174 | continue
175 | }
176 | var obj = dialog.sizeProps[size];
177 | var box = new dijitCheckedMenuItem({
178 | id: 'smrna-dialog-' + obj.id + '-box',
179 | title: obj.label,
180 | _prop: size,
181 | 'class': obj.class,
182 | checked: (obj.hide === true ? true : false)
183 | });
184 | box.onClick = lang.hitch(this, '_setSizeProp', box);
185 | leftPane.appendChild(box.domNode);
186 | dom.create('label', {
187 | "for": 'smrna-dialog-' + obj.id + '-box',
188 | innerHTML: obj.label
189 | }, leftPane);
190 | leftPane.appendChild(dom.create('br'));
191 | }
192 |
193 | //Right pane - other filter types
194 | var rightPane = dom.create('div', {
195 | id: 'smrna-filter-dialog-others',
196 | 'class': 'smrna-filter-dialog-column'
197 | });
198 | dom.create('h3', {
199 | innerHTML: 'Filter by other properties'
200 | }, rightPane);
201 | for (var opt in dialog.otherProps) {
202 | var obj = dialog.otherProps[opt];
203 | var box;
204 | if (opt === 'filterQuality') {
205 | box = new dijitNumberSpinner({
206 | id: 'smrna-dialog-' + obj.id + '-box',
207 | title: obj.label,
208 | _prop: opt,
209 | value: obj.hide,
210 | constraints: {
211 | min: 0,
212 | max: 255
213 | },
214 | smallDelta: 5,
215 | intermediateChanges: true,
216 | style: "width:50px;margin-right:5px;"
217 | });
218 | box.onChange = lang.hitch(this, '_setOtherProp', box);
219 | } else {
220 | box = new dijitCheckedMenuItem({
221 | id: 'smrna-dialog-' + obj.id + '-box',
222 | title: obj.label,
223 | _prop: opt,
224 | checked: (obj.hide === true ? true : false)
225 | });
226 | box.onClick = lang.hitch(this, '_setOtherProp', box);
227 | }
228 | rightPane.appendChild(box.domNode);
229 | dom.create('label', {
230 | "for": 'smrna-dialog-' + obj.id + '-box',
231 | innerHTML: obj.label
232 | }, rightPane);
233 | rightPane.appendChild(dom.create('br'));
234 | }
235 |
236 | this.set('content', [
237 | leftPane,
238 | rightPane
239 | ]);
240 |
241 | this.inherited(arguments);
242 | this.domNode.style.width = 'auto';
243 | },
244 |
245 | _setSizeProp: function (box) {
246 | if (this.sizeProps.hasOwnProperty(box._prop)) {
247 | this.sizeProps[box._prop]['hide'] = box.checked;
248 | }
249 | },
250 | _setOtherProp: function (box) {
251 | if (this.otherProps.hasOwnProperty(box._prop)) {
252 | this.otherProps[box._prop]['hide'] = (box.checked === undefined ? box.value : box.checked);
253 | }
254 | },
255 |
256 | hide: function () {
257 | this.inherited(arguments);
258 | window.setTimeout(lang.hitch(this, 'destroyRecursive'), 500);
259 | }
260 | });
261 | });
262 |
--------------------------------------------------------------------------------
/test/data/seq/a59/b6d/00/Chr5-2.txt:
--------------------------------------------------------------------------------
1 | GCTTGTTCTTGAGATTTGTCACTCACTCTGATATGTTTACCTTGATAGCTAGCTGCCATCTTGCCGCTTGCTGTTGTGCACACACTTGGTAATCTGTTTACGAACATGAGTCTTGGGAAAGTTTCTGTTTCCTTTACTCACACCATTAAAGCCATGGAGCCTTTCTTCTCTGTTTTATTGTCTGCTATGTTTCTCGGGGAGGTGAGCTCTTTTTTTTATTTGGGTTTTTCTTTGACGTCTCGGAGTTGATTAATGCACTCGTACCTATTGTCCTCCTGTCTGGACTAAGTTGCTATGTGATTCTTGTTTCTAATGGCTTGTTAATGATAGTCTATATTACTCATCGCTTTTGTTTGATTTGTGTAAAGCATAATTCGTTTACTAACTCTTTCTTAGAAACCTACTCCATGGGTACTCGGTGCCATTGTACCAATTGTTGGTGGAGTTGCACTTGCTTCAATTTCGGAGGTCTCATTCAACTGGTTAGTTTGTCGACGAGTATTGTGACATTTAAGTCGGTGGTTATCTATTCTTCTGATAACTCTCAGATATTTACTACGGTTACTTGTTTTGTGGTAGGGCTGGATTTTCGAGTGCAATGGCATCAAACTTGACTAACCAATCCCGTAATGTGCTGAGTAAGAAAGTCATGGTTAAGAAAGATGTAAGTTTCCTATGTGTGGATCAAACTTTCAATCTTCGTGTTTTGGAATAAATTAACTAAAACTTGATTTTGTGTCTCGGCAGGATTCTCTTGACAACATCACTCTCTTCTCAATTATAACATTGATGTCTCTCGTTCTGATGGCTCCTGTGACTTTCTTTACGGAAGGCATCAAGTTCACTCCTTCATACATTCAATCAGCTGTGAGTTTAGTATATATTACGATTCTATTTTTTCTATATCCTTCTCAAATGTTTGCAGTTCCTAACAACCAATCTCGGTTTTGCAGGGTGTGAATGTTAAACAAATATATACAAAGTCTCTTATCGCTGCACTCTGCTTCCACGCATACCAGCAGGTTAGGCTTTTTTTTCTCTTAATGATTTGGTTGCTTTACTTGAGTATATAACGAATTTGAATTGACATTTCTGAAATGTGGATAATACAGGTGTCGTACATGATATTGGCGAGAGTATCACCGGTTACACATTCTGTCGGAAACTGTGTGAAACGTGTTGTGGTTATTGTGAGCTCTGTCATCTTCTTCAAGACACCCGTCTCGCCTGTTAATGCTTTCGGTAACATCCAGTCTTATTCTCTTCTCGGCTTCAGTGAATACGCAATACTTTGGAACTCATTGTCGTTTATTTTTGTCTCTGCGGCAGGAACTGGAATCGCCCTTGCGGGTGTCTTCTTATACTCCAGAGTGAAGGGTATTAAGCCAAAGCCAAAGACTGCTTAAGCAAATATCGGCTAATACCTAATGTCATATCACTCCCGCGCTTTGGATTTGTATACAATTTCTCGAGCTAAAGTTTTCAGATAGATGGTTTTATTCTTTTGCGGGTTTTTTCACGAAGTTTCATCATCCCTTTCTAAGCTTTTCGCTGCAGCCATCGGTTCTCTTAGAGTTTGTTATAAGTTCTCTTCTGTGTCTAGACAAATGCTAAACTCTTAAATTTCTTACAGTTTTTCCAAGAATAACTTGTCAACACATTCTCATTACTGCTTTTAGTTTACACGTTTAAGGTTTATTAGGAGGAGCACGTGAATTGTTCCTTTTGCTATGGTGATAAAAAGCACAATATTAAGCATTTGAGGATACCTCTTGACTTGCATTTGCACCCGATTCAGTAGTCTGCACGAGTTGTTTGAACTCCTTATCCACAGTTCAATACCTCTAAGTGATATGGATTCGACATATTTTAAAGTGATATTATACTTCAAAACTTTAGTTTATTTCCGTTAAGGACATTCATCGTGAACAACCATAATTTGAATCGCACAGAAATTTTTAAAAATGCTTTAAACTATTAGATCTCAGTAATTATTTAACATAATTTCTTGTATGCCATAAATTTTGTATATAAAATCATTCTTCCATTTATGCTATGCCCAAAAGTCATAATCTTAGCATTATACAGCTACATATTTACTGATCATAAAATTACGTATTGATCACATAATTTGTATCTATTTTTTAAAAGGTTAATACTCTTATATATCGTTGAATTAAAAAAAAAAAAAAACATTCGAAGACAATAAAATACTCGTTTCTATTGATTCGCTAGGTGAATTTACGAAGGAAAATTTTGATTTTTGGTCATAAAAAGAGTAATCTCGTTTGAAATAATATATTTGTTTTGAGAAATAATCTATTTTGATAGTTGTAAAGTGGGTAAACTGAATCGAACCATGTTTACTTTTTTTTTTTTTTGTCGTCATTTTCATTACTTCACAACTAACTTACATGAGTCCATGATATTACATATTGCATCTTTTTGGATCTTGCTACTTTTGCGAGATGATCAGCTACATCATTGATTGTACTATTCACTTTACTTACAACAAAAGAAGCTGAAATTGTAGCAAGTTTTTGTATGTCCTGGATATAAGCGGCCAAAGGGGAGTTAGTTGTGGGGCATGCCTTCTTGTCCTTTTGCAGATATGGCGCTACATTCTGATACAGGATTGAAGCATCGACACAAAATTTAACCTCTTCGTAACCCAGTCTCCGTACTTGCATCATTGCCGACCTAAGGGCTTCCGCTTCCGCTTCAATCGAAGAGTTAGTTGGAGGTATAGAGGCCATACCTTTGAGAACCATTTGAGCTTTGTCATTGTAAAGGACCCACCCAATTCCTGCACATTCAGTTGGGGAAACCCAAGATGCATCCACAAAGCAGCAGTATGCTTTGGCTTCTTTCATGATATCTTGTACATTCCCCATTAATGCCCCGGTCTTCTGTTGGTCTTGTTGAGAATTTGGTTGGGGCTGAGTCAAATCGATGAGCGCTTTGTTGATAATATCTGGTATAGACCATTTTCAGTTGTTGAAGATAAGGTCATTGCTCATTTTCCAGATACGCCAACCAATGAAAGGGAATAGACTTACATCCTTTCTGTGGTTTTTTGTCAGACTCATCAATTTCTCAATATTCTCCATATAAGAGTTTAAGTTCCAAGATGCACCTGGTATAGAAAGGTTCGGTGCCTGCTCCCAGATTTCTCTGCTGATTCGGCATTGAAAGAGCAAATGGTTTATGTTTTCCGGAGCTTCACCACATCTGAAACAAATGTCATCTGAAGTCAACTTTCTCCTCTTGAGGTTATCTGCAGTCGGTAAAGCATTATGGAGTACTTTCCACCAAAAGTGTTTAATCTTTGGTGGAGTATTAAGGTTCCATAATGTTGACTTTTAAATTTTATGATAAATGTCTTAAATTATATAAATACGATCTAAAAGTAACTTTAAATTTAAAGTTTACATTTAGATATTTGATAAACTTCATTTAATAATCTTTGTCAATGTGTCTATATAACCTAATGTTTTGTTCTTGTTTTGTTCTTGTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTATGAAAAGTATTATTACCTGATGTATATTAATTGTTATGTTGTGATTGGTTTCTGTTGGAGCTTCTCTGCTTATGTGTATGAGTTGTTTTGTTTTGATTGGTTAATCTTTTTAATGATGTGTCTAGCGAGAGTTATTTTATTTTAATTGTACTATATTTATATTGTGATGTTTCTCTTAAATTAAAAATTTATGACTATATATATGACAATATATATATATATATATATATATATATACATTATTGAGATAGATAATGAATACATTAGTTTATCATTAAATTTAATAGGTACTGATCTTCAAATTATTTTCAAACGATTCTCTGTCAATTTCTTGATATTTTTAAACTAAAATCCATTTTTTAAAAAATAGACTGATTTAACAAACATTAAAAGTTAATTGTTTCTGTACATGCCACGGATCGAAAATGAGTCAGTAAATGAATATTTTTTACCTAAAGTCACACATTGTATATACCTAAGTAAATGATACATGACCAAAATTAGAAGATCAAGAATCCTTATATTACGAAAATATCCGGTTACATTCGTTGAATACTTTAATGAAGAATCTAGGATATAATTAAAGAAGAAGAAAATATGTAAGCATTTAGAAATAAAATAACTTGGAGATATAAGCAAACCATAAACACGTCCATATGAATGAATGGTACACTCCTCGTAAATAAATAAATATATGCATCAAAATGAGAAAATCTTCACTTTTATTTATTCTTAATACGTCAGATTCTCTGAACACAAAATGATATAATTTGTAGATAACTTACTCAAAACGTAAGAACTCACTATCTATTATCATTTATTAACCACCATCTCATTAATCTTATAAATATGTACTCATTAGATTGTCAAAAGTAAAACCTCACAATACACTTTAAACTACAAATCAAAACAATGGCCTCTCTATTCTCTTCAGTTCTCTTGTCTCTTTGTTTACTCTCTTCACTTTTTCTCTCAAATGCAAACGCTAAGCCAAAACTAGGCTTCACCGCGGATCTAATCCACCGTGATTCTCCTAAATCGCCGTTCTATAACCCGATGGAAACCTCTTCCCAGCGTCTACGAAACGCGATCCACCGATCCGTTAACCGTGTTTTCCATTTCACTGAAAAGGATAACACACCACAACCACAGATTGACCTCACCTCAAATAGCGGTGAATATCTCATGAACGTATCCATTGGAACACCTCCTTTCCCGATCATGGCCATCGCCGACACCGGAAGTGATCTCCTCTGGACGCAGTGCGCACCATGCGATGATTGTTACACTCAAGTTGATCCTCTCTTTGACCCTAAAACGTCTTCCACATACAAAGACGTTTCTTGCTCCTCAAGTCAATGTACTGCCCTAGAAAATCAAGCCTCTTGTTCCACAAATGACAACACTTGTTCTTACTCATTGTCTTACGGGGATAACTCATACACAAAGGGTAACATCGCCGTGGATACCTTAACGCTCGGCTCCAGCGATACCCGCCCTATGCAGCTTAAGAATATTATTATCGGTTGTGGTCACAACAACGCTGGAACGTTTAACAAGAAAGGCTCTGGAATCGTCGGACTAGGTGGTGGTCCGGTTTCGCTTATCAAGCAACTTGGCGACTCCATCGACGGTAAATTCTCATACTGCTTGGTTCCTCTAACTTCCAAAAAGGATCAAACGAGTAAAATCAACTTCGGAACCAATGCCATCGTGTCGGGATCAGGAGTTGTCTCAACTCCTCTGATCGCAAAGGCGTCTCAAGAGACCTTCTATTACCTAACCCTAAAATCCATTAGCGTGGGAAGCAAGCAAATCCAATACTCAGGCTCAGATTCTGAAAGCAGCGAGGGAAACATCATCATCGATTCAGGCACAACTTTAACGTTATTACCGACTGAATTTTACTCCGAGCTCGAGGATGCGGTTGCATCCTCTATCGATGCTGAGAAGAAGCAAGATCCACAAAGCGGTTTGAGTCTATGTTACAGTGCAACCGGAGATCTAAAAGTTCCAGTCATTACTATGCATTTTGATGGAGCCGATGTGAAGCTTGACTCCTCCAATGCCTTTGTACAAGTCTCGGAGGATTTGGTTTGCTTTGCCTTCCGCGGAAGCCCGAGTTTCTCCATATACGGTAATGTGGCGCAGATGAACTTTCTTGTTGGATACGACACTGTTTCCAAAACGGTGTCATTTAAGCCAACAGATTGTGCAAAGATGTAGTTGTTTCATCTCAACATGTTTTTCAAAATTGTGTTTTCAATTACAATAATGGCTGATTTAGTTTCAGCCTTAGTTCTTTTGAATTTTTCTAATTCACATGTAGTAGTCTATCTTTTCAAGGGAGAGTTAAATTCTCGACCTTTTGTTCTTTTGGTGATGCTTTGTATTTCCTTGAATTTTCAATCACAATTAAAATCATGAAAACCTTATCTCCGGTAACTATTTTCTTGTCCATCTCTATACTCTGTTTTAGTTTATAATCATCTCTATGATGTAAACCAAATATGACAAGACAATTCTATAATTTTGTTCAAAATTTAGTTTTTTTTTTCATTTTACTAATAAAATCTAGAAATACTACTTTTGTGTCTATTATATTATTGTGATGAAATACTTATAAGAAACAGATGAATGTGATTCTAATTCAATATTGCTTTTAAGGAATTATATTGGTCCTACTATTCTATTTTGATGTGTTCTATATTTTACTATATTCAATGGGATTATGGATTATAGAAATATTTTGAAAATATTATACTATTATTTATAAATAATTCAATTAGTTTTTCTTCTTAAGTTTCTTATAAAAAATAAATATATCTTATAAGAAATAAATATATTTTATATTTCATAAAAATCATACATTGTACATATCTAGGTGGATGATACATGGCCTAAATTAGATCATGAATCATAAAAATCCAGCTGTAGATAAACATAACAAGGATGAATGGTACAATCCTGGTCAAAAAAAATAAAAGGAAAAGTTATATGCATTAAAATGAGAAAATCTTCGCTTTTATTGTTTCTTATTTATCAGATTCTCTAAATGTAAATGACACAATTTGTAGATAATTTACTAAAAATGTAAGAATCTCATCATGTACTACCATTTATGAATCCTTATCCAATTGACCTTATAAATATTACTCATCAGATTGTCAAAAGTAAAAACTGACCATTCAGGCAATCACTTAAACTACAATCTAAGAAAATGGCCTCTCTATTCACTTCACTTCTCTTGTCTCTATGTTTATTCTCTTCTCCTATTTTCTCAAACGCAAACGCCAAACCAAAACTAGGCTTCACCGCGGATCTGATCCACCGCGATTCTCCTAAATCGCCATTCTATAACCCGGCGGAAACCCCTTCCCAACGTATGAGAAACGCTATCCACCGATCCTTTAACCGTGCTTCCCATTTCAGTAATCTTTTTGAAAAGGATGCATCACTTAACGCACCACAAACTGATATCACCAAATATTTCGGTATATATCTTATGAACGTATCCCTTGGGAGTTGGGACACCTCCCGTCCCAATCATGGCGGCCGCTGACACCGGAAGTGATCTCATCTGGACGCAGTGCAAACCATGCGATGATTGTTACACTCAAGTTGATCCTCTCTTTGACCCTAAAGCGTCTTCCACATACAAAGACGTTTCTTGCCCCTCAAGCCAATGTAGGGCTCTAAAAGATGATGCTTCTTGTTCCAAAAAAGACAACACTTGCTCTTACTCAATGAATTACGGGGATAACTCATACTCACGGGGTAATGTCGCTGTGGATACCTTAACGCTCGGCTCCACCGATAACCGTCCGGTGCAGGTTAAGAATATTATCATCGGTTGTGGTCACGAAAACGCTGTAACATTTAGAAACAAGAGCTCTGGAATCGTTGGACTTGGTGGTGGTGCGGTTTCGCTCGTTAAACAACTCGGAGACTCCATCGAAGGTAAATTCTCATACTGCTTGGTACCTGAAAATGATCAAACGAGCAAGATTAGTTTCGGAACCAATGCGGTTGTGTCGGGACCGGGAACTGTCTCAACTCCTTTGGTCGTGAAGTCTCCAGAGACCTTCTATTTTCTAACCCTAAAATCTATTACCGTGGGAAGCAAGAATATGCCAACCCCAGGCTCTGATATCAAGGGAAACATGGTCATCGATTCGGGCACAACTCTAACTCTGTTACCTGGGAAATATTATTTCCAGATTGAGAGTGCTGTTGCGTCTTTAATCGATGCAGAGAGGTCGAAAGATGAAAGAATCGGTTCGAGTCTTTGATACAATGCAACCGCAGATCTGAAAGTCCCAGTCATTACTATGCATTTCGATGGAGCAGATGTGAAGCTTGATTCCTATAATTCATTTTTTAAAGTCTCAGATGATTTGGTTTGCTTTGCCTTTGGCTTGAACTTGATTACGAGGGATGGGATATACGGGAATGTGGCGCAGAAGAACTTTCTTGTTGGATACGACACTGTTTCCAAATCGTTGTCATTTAAAAAAACAGATTGTGCAAAGATGTAGATGGTTCAGCTTAGCATGTGGCTAATTTCCTTTTTTCAAAAGTATGTTTTCAGTTATCATTATGGCTGATTTGATTTTAGCCTTAAAATAGTTATTTGAATTCATTCAGCAGGACCATAGCACTGCAAGAGAACAAAGCCTTTTTCGACAGACTTTCCAACGATACATAAACGGTCGGAAATTCTCGACAGTTTTGTAATGATATTCCGACGGATTTCGCACGACATGTTTCCCGTTCTCGCACTGCAACCGGTTTCGCAACCATAGTTATCGTCAGAATAGCGTAGAGAAATTGTCAGAAAATACCTCATCGAAAACCCGTCGGTAATTTGTAACACGTTTGCAACGACATTCAGATTTCCAACGAGATAAAATCGACCAATTTATGTCATTGAAAATTCGTCGAATACGGCTGTTTCCGACGTTATTCCGACGATTTCATCCGTTGGAAATATCCTATCGAACGTTATAGCATGTAATAAAATCGCCTTTAAAAGCGACTAAGCTTGCACCTTTGTGTCCAAAAAACTTTTTATCAACTAGAGATAAAATAGGTTATTAGTTTACCTTGCCAGAAAAATAAATAAAAACAATGTGAAACTTAAGATAAAAGGCAGACGAGATTTTTTAGGTTCTGTAAGACAATCCTTTGCTATTTTGTTTTGACATGCATAGAAGTTAACACATACTACGGAAATGTTAAAAAAAAAACGAGATAGTGTCGCCATGATAACTGCAATGCTGCTGAAACCCTAAACTTTATTAATGAACTAATGAAGCCAAATCATTTTTCTTTTATGATTAAAAAGTTGCCAAGATTCGTGCTCACTCTGTCAAAGACAACAACATTATCATTTTTCAAACAGTAGTTGATTAAACTAAATTAAAAATGGGTATATAAAATGAGTTATAACGATAAAGACAACAACGACTTTCCCTTTGCTTGATTATTTAAAACAAGTCCCTGATAAGAAGAAGACGTCTAGTGGAAAATAAAATGTTACAGAAAAGGCGCCAATACACAATTGTGGCGACATTATGAACTTGCTCAATAAGAGAAAACTTTAAAGAAAAGAGGGGGATATTAAACAATTATAACAAATCTACCAAAATTTTGACTATAAATAGATCACTACACATATGGATTTGTCTCATCGAAGTAAATATTAAATTGAAAGAGCAAAAAAATAAGTCTTAATAAACGCAAAGCATTAAAGAGATGGCAAAGAACCTCAACTCCGTTAGCTTCATCGTTCTCTTGCTGGTTCTTTTGGTGGCTTCCACCGGTATGAATTTATTCTCTAATCTCTATTATACTTTGTGTGTATATGTATATGCAAAAAACATTTACATAATAATCTTTTGCTGATGAATTTACTGAAATGTCAAAATGTAGAAATCCTGAAGAGCGATGCTGCATGCTTCACGTTCTTAGGCGAGTGCGGGCCGGAGCCGTTTACAGGTTCAAATGCTGATTGCTTAGCGTGTTGTGTAGCTCTCTACAAGAGTCCACCAGTTTGTGCTGGACGTGTTGAGGGAGTCCCGGCTCACTGCCATTGCTACAAATCGTAAAGAGGTTCAAAATAAACCTCATATATATAATTACCAAGTGTAACTTTTCTTTTCATTCGGTGTGATAAGGACATTACATGTGTGTGTGTGTGTGTCTGTGTGTGGTAAACTGGTGTCTGGTAAGTTTCTTTTGAATCCAAATAAAACATCAAGGGCAAAGCTTCACTGCTTCCCCTTAATAAATGTAAGCTCATGTTGTCTTCACTTTTGATTCGTTTTGAATAATAAACTCGTTTTTTGTTCCCCATTTCATTCGAAACTATATTCAAATTTCTGTCACTCCAAATTATCTAACAAATATTGACCATTTATTGGATAGTAAAATCTGATTT
--------------------------------------------------------------------------------
/js/View/Track/smAlignments.js:
--------------------------------------------------------------------------------
1 | define("SmallRNAPlugin/View/Track/smAlignments", [
2 | 'dojo/_base/declare',
3 | 'dojo/_base/lang',
4 | 'dojo/_base/array',
5 | 'dojo/promise/all',
6 | 'dojo/dom-construct',
7 | 'dojo/dom-class',
8 | 'dojo/Deferred',
9 | 'JBrowse/Util',
10 | 'SmallRNAPlugin/View/StrandedBitmapRectLayout',
11 | 'JBrowse/View/Track/CanvasFeatures',
12 | 'SmallRNAPlugin/View/Track/_AlignmentsMixin'
13 | ],
14 | function (
15 | declare,
16 | lang,
17 | array,
18 | all,
19 | domConstruct,
20 | domClass,
21 | Deferred,
22 | Util,
23 | Layout,
24 | CanvasFeatureTrack,
25 | AlignmentsMixin
26 | ) {
27 |
28 | return declare([CanvasFeatureTrack, AlignmentsMixin], {
29 |
30 | constructor: function (args) {},
31 |
32 | _defaultConfig: function () {
33 | var thisB = this;
34 | var c = Util.deepUpdate(
35 | lang.clone(this.inherited(arguments)), {
36 | glyph: 'SmallRNAPlugin/View/FeatureGlyph/smAlignment',
37 | maxFeatureGlyphExpansion: 0,
38 | maxFeatureScreenDensity: 6,
39 | hideMultiMappers: false,
40 | hideForwardStrand: false,
41 | hideReverseStrand: false,
42 | hide21: false,
43 | hide22: false,
44 | hide23: false,
45 | hide24: false,
46 | hidepi: false,
47 | hideOthers: false,
48 | maxHeight: 400,
49 | filterQuality: 0,
50 | isAnimal: thisB._isAnimal(),
51 |
52 | histograms: {
53 | description: 'coverage depth',
54 | binsPerBlock: 200
55 | },
56 |
57 | style: {
58 | showLabels: false,
59 | label: "seq_length",
60 | description: false,
61 | origin_color: 'black',
62 | clip_marker: true,
63 | solidFill: false
64 | }
65 | }
66 | );
67 | return c;
68 | },
69 |
70 | _isAnimal: function () {
71 | return false;
72 | },
73 |
74 | /* Functions from Canvas tracks that need to be changed for small-rna specific purposes */
75 | _getLayout: function (scale) {
76 | if (!this.layout || this._layoutpitchX != 4 / scale) {
77 | // if no layoutPitchY configured, calculate it from the
78 | // height and marginBottom (parseInt in case one or both are functions), or default to 3 if the
79 | // calculation didn't result in anything sensible.
80 | var pitchY = this.getConf('layoutPitchY') || 4;
81 | this.layout = new Layout({
82 | pitchX: 4 / scale,
83 | pitchY: pitchY,
84 | maxHeight: this.getConf('maxHeight'),
85 | displayMode: this.displayMode
86 | });
87 | this._layoutpitchX = 4 / scale;
88 | }
89 |
90 | return this.layout;
91 | },
92 |
93 | fillFeatures: function (args) {
94 | var thisB = this;
95 |
96 | var blockIndex = args.blockIndex;
97 | var block = args.block;
98 | var blockWidthPx = block.domNode.offsetWidth;
99 | var scale = args.scale;
100 | var leftBase = args.leftBase;
101 | var rightBase = args.rightBase;
102 | var finishCallback = args.finishCallback;
103 |
104 | var fRects = [];
105 |
106 | // count of how many features are queued up to be laid out
107 | var featuresInProgress = 0;
108 | // promise that resolved when all the features have gotten laid out by their glyphs
109 | var featuresLaidOut = new Deferred();
110 | // flag that tells when all features have been read from the
111 | // store (not necessarily laid out yet)
112 | var allFeaturesRead = false;
113 |
114 | var errorCallback = lang.hitch(thisB, function (e) {
115 | this._handleError(e, args);
116 | finishCallback(e);
117 | });
118 |
119 | var layout = this._getLayout(scale);
120 |
121 | // query for a slightly larger region than the block, so that
122 | // we can draw any pieces of glyphs that overlap this block,
123 | // but the feature of which does not actually lie in the block
124 | // (long labels that extend outside the feature's bounds, for
125 | // example)
126 | var bpExpansion = Math.round(this.config.maxFeatureGlyphExpansion / scale);
127 |
128 | var region = {
129 | ref: this.refSeq.name,
130 | start: Math.max(0, leftBase - bpExpansion),
131 | end: rightBase + bpExpansion
132 | };
133 | this.store.getFeatures(region,
134 | function (feature) {
135 | if (thisB.destroyed || !thisB.filterFeature(feature))
136 | return;
137 | fRects.push(null); // put a placeholder in the fRects array
138 | featuresInProgress++;
139 | var rectNumber = fRects.length - 1;
140 |
141 | // get the appropriate glyph object to render this feature
142 | thisB.getGlyph(
143 | args,
144 | feature,
145 | function (glyph) {
146 | // have the glyph attempt
147 | // to add a rendering of
148 | // this feature to the
149 | // layout
150 | //console.log('feature', JSON.stringify(feature.data));
151 | var fRect = glyph.layoutFeature(
152 | args,
153 | layout,
154 | feature
155 | );
156 | if (fRect === null) {
157 | // could not lay out, would exceed our configured maxHeight for negative strand
158 | // mark the block as exceeding the max height
159 | block.maxHeightExceededBottom = true;
160 | } else if (fRect === undefined) {
161 | // could not layout because would exceed for postive strand
162 | // mark as exceeding top max height
163 | block.maxHeightExceededTop = true;
164 | } else {
165 | // laid out successfully
166 | if (!(fRect.l >= blockWidthPx || fRect.l + fRect.w < 0))
167 | fRects[rectNumber] = fRect;
168 | }
169 |
170 | // this might happen after all the features have been sent from the store
171 | if (!--featuresInProgress && allFeaturesRead) {
172 | featuresLaidOut.resolve();
173 | }
174 | },
175 | errorCallback
176 | );
177 | },
178 |
179 | // callback when all features sent
180 | function () {
181 | if (thisB.destroyed)
182 | return;
183 |
184 | allFeaturesRead = true;
185 | if (!featuresInProgress && !featuresLaidOut.isFulfilled()) {
186 | featuresLaidOut.resolve();
187 | }
188 |
189 | featuresLaidOut.then(function () {
190 |
191 | var totalHeight = layout.getTotalHeight();
192 | var c = block.featureCanvas =
193 | domConstruct.create(
194 | 'canvas', {
195 | height: totalHeight,
196 | width: block.domNode.offsetWidth + 1,
197 | style: {
198 | cursor: 'default',
199 | height: totalHeight + 'px',
200 | position: 'absolute'
201 | },
202 | innerHTML: 'Your web browser cannot display this type of track.',
203 | className: 'canvas-track'
204 | },
205 | block.domNode
206 | );
207 | var ctx = c.getContext('2d');
208 |
209 | // finally query the various pixel ratios
210 | var ratio = Util.getResolution(ctx, thisB.browser.config.highResolutionMode);
211 | // upscale canvas if the two ratios don't match
212 | if (thisB.browser.config.highResolutionMode != 'disabled' && ratio >= 1) {
213 |
214 | var oldWidth = c.width;
215 | var oldHeight = c.height;
216 |
217 | c.width = oldWidth * ratio;
218 | c.height = oldHeight * ratio;
219 |
220 | c.style.width = oldWidth + 'px';
221 | c.style.height = oldHeight + 'px';
222 |
223 | // now scale the context to counter
224 | // the fact that we've manually scaled
225 | // our canvas element
226 | ctx.scale(ratio, ratio);
227 | }
228 |
229 | //console.log(block.maxHeightExceededBottom,block.maxHeightExceededTop);
230 | // bottom overflow, aka negative strand
231 | if (block.maxHeightExceededBottom)
232 | thisB.markBlockHeightOverflow(block, false);
233 | if (block.maxHeightExceededTop)
234 | thisB.markBlockHeightOverflow(block, true);
235 |
236 | thisB.heightUpdate(totalHeight,
237 | blockIndex);
238 |
239 | thisB.renderFeatures(args, fRects);
240 |
241 | thisB.renderClickMap(args, fRects);
242 | // add origin
243 | thisB.renderOrigin(args, layout.getOriginY());
244 |
245 | finishCallback();
246 | });
247 | },
248 | errorCallback
249 | );
250 | },
251 |
252 | markBlockHeightOverflow: function (block, top) {
253 | if (block.heightOverflowedBottom && !(top))
254 | return;
255 | else if (block.heightOverflowedTop && top)
256 | return;
257 | // don't draw if we turned off clip markers
258 | if (!this.config.style.clip_marker)
259 | return;
260 | if (top)
261 | block.heightOverflowedTop = true;
262 | else
263 | block.heightOverflowedBottom = true;
264 |
265 | var topHeight = (top ? 0 : this.height - 16);
266 | block.heightOverflowed = true;
267 | domClass.add(block.domNode, 'height_overflow');
268 | domConstruct.create('div', {
269 | className: 'smrna_height_overflow_message' + (top ? '_top' : '_bottom'),
270 | innerHTML: 'Max height reached',
271 | style: {
272 | top: (topHeight) + 'px',
273 | height: '16px'
274 | }
275 | }, block.domNode);
276 | },
277 |
278 | renderOrigin: function (args, originY) {
279 | var canvas = args.block.featureCanvas;
280 | var ctx = this.getRenderingContext(args);
281 | if (ctx) {
282 | var originColor = this.config.style.origin_color;
283 | if (typeof originColor == 'string' && !{
284 | 'none': 1,
285 | 'off': 1,
286 | 'no': 1,
287 | 'zero': 1
288 | }[originColor]) {
289 | ctx.fillStyle = originColor;
290 | ctx.fillRect(0, originY, canvas.width, 1);
291 | }
292 | }
293 | },
294 |
295 | _trackMenuOptions: function () {
296 | var track = this;
297 | var displayOptions = [];
298 | return all([this.inherited(arguments), this._alignmentsFilterTrackMenuOptions(), displayOptions])
299 | .then(function (options) {
300 | var o = options.shift();
301 | options.unshift({
302 | type: 'dijit/MenuSeparator'
303 | });
304 | return o.concat.apply(o, options);
305 | });
306 | }
307 | });
308 | });
309 |
--------------------------------------------------------------------------------
/js/View/Track/smHTMLAlignments.js:
--------------------------------------------------------------------------------
1 | define("SmallRNAPlugin/View/Track/smHTMLAlignments", [
2 | 'dojo/_base/declare',
3 | 'dojo/_base/array',
4 | 'dojo/_base/lang',
5 | 'dojo/promise/all',
6 | 'dojo/dom-construct',
7 | 'dojo/dom-class',
8 | 'dojo/Deferred',
9 | 'JBrowse/Util',
10 | 'SmallRNAPlugin/View/StrandedBitmapRectLayout',
11 | 'JBrowse/View/Track/HTMLFeatures',
12 | 'SmallRNAPlugin/View/Track/_AlignmentsMixin'
13 | ],
14 | function (
15 | declare,
16 | array,
17 | lang,
18 | all,
19 | domConstruct,
20 | domClass,
21 | Deferred,
22 | Util,
23 | Layout,
24 | HTMLFeatures,
25 | AlignmentsMixin
26 | ) {
27 |
28 | return declare([HTMLFeatures, AlignmentsMixin], {
29 |
30 | constructor: function (args) {
31 | this.glyphHeight = 4;
32 | },
33 |
34 | _defaultConfig: function () {
35 | var thisB = this;
36 | var c = Util.deepUpdate(
37 | lang.clone(this.inherited(arguments)), {
38 | maxFeatureScreenDensity: 6,
39 |
40 | hideMultiMappers: false,
41 | hideForwardStrand: false,
42 | hideReverseStrand: false,
43 | hide21: false,
44 | hide22: false,
45 | hide23: false,
46 | hide24: false,
47 | hidepi: false,
48 | hideOthers: false,
49 | maxHeight: 400,
50 | filterQuality: 0,
51 | isAnimal: thisB._isAnimal(),
52 |
53 | style: {
54 | _defaultLabelScale: 50,
55 | className: 'smrna-alignment',
56 | arrowheadClass: 'arrowhead',
57 | origin_color: 'black',
58 | centerChildrenVertically: true,
59 | showSubfeatures: false,
60 | showLabels: false,
61 | clip_marker: 'black'
62 | }
63 | }
64 | );
65 | return c;
66 | },
67 |
68 | _isAnimal: function () {
69 | return false;
70 | },
71 |
72 |
73 | /* Functions from html tracks that need to be changed for small-rna specific purposes */
74 | _getLayout: function (scale) {
75 | if (!this.layout || this._layoutpitchX != 4 / scale) {
76 | // if no layoutPitchY configured, calculate it from the
77 | // height and marginBottom (parseInt in case one or both are functions), or default to 3 if the
78 | // calculation didn't result in anything sensible.
79 | var pitchY = this.getConf('layoutPitchY') || 4;
80 | this.layout = new Layout({
81 | pitchX: 4 / scale,
82 | pitchY: pitchY,
83 | maxHeight: this.getConf('maxHeight'),
84 | displayMode: 'normal'
85 | });
86 | this._layoutpitchX = 4 / scale;
87 | }
88 |
89 | return this.layout;
90 | },
91 |
92 | fillFeatures: function (args) {
93 | var blockIndex = args.blockIndex;
94 | var block = args.block;
95 | var leftBase = args.leftBase;
96 | var rightBase = args.rightBase;
97 | var scale = args.scale;
98 | var stats = args.stats;
99 | var containerStart = args.containerStart;
100 | var containerEnd = args.containerEnd;
101 | var finishCallback = args.finishCallback;
102 | var browser = this.browser;
103 |
104 |
105 | this.scale = scale;
106 |
107 | block.featureNodes = {};
108 |
109 | //determine the glyph height, arrowhead width, label text dimensions, etc.
110 | if (!this.haveMeasurements) {
111 | this.measureStyles();
112 | this.haveMeasurements = true;
113 | }
114 |
115 | var curTrack = this;
116 |
117 | var featCallback = lang.hitch(this, function (feature) {
118 | var uniqueId = feature.id();
119 | if (!this._featureIsRendered(uniqueId)) {
120 | if (this.filterFeature(feature)) {
121 |
122 | // hook point
123 | var render = 1;
124 | if (typeof this.renderFilter === 'function')
125 | render = this.renderFilter(feature);
126 |
127 | if (render === 1) {
128 | this.addFeatureToBlock(feature, uniqueId, block, scale, containerStart, containerEnd);
129 | }
130 | }
131 | }
132 | });
133 |
134 | this.store.getFeatures({
135 | ref: this.refSeq.name,
136 | start: leftBase,
137 | end: rightBase
138 | },
139 | featCallback,
140 | function (args) {
141 | curTrack.heightUpdate(curTrack._getLayout(scale).getTotalHeight(),
142 | blockIndex);
143 | if (args && args.maskingSpans) {
144 | //note: spans have to be inverted
145 | var invSpan = [];
146 | invSpan[0] = {
147 | start: leftBase
148 | };
149 | var i = 0;
150 | for (var span in args.maskingSpans) {
151 | if (args.maskingSpans.hasOwnProperty(span)) {
152 | span = args.maskingSpans[span];
153 | invSpan[i].end = span.start;
154 | i++;
155 | invSpan[i] = {
156 | start: span.end
157 | };
158 | }
159 | }
160 | invSpan[i].end = rightBase;
161 | if (invSpan[i].end <= invSpan[i].start) {
162 | invSpan.splice(i, 1);
163 | }
164 | if (invSpan[0].end <= invSpan[0].start) {
165 | invSpan.splice(0, 1);
166 | }
167 | curTrack.maskBySpans(invSpan, args.maskingSpans);
168 | }
169 | if (block.maxHeightExceededBottom)
170 | curTrack.markBlockHeightOverflow(block, false)
171 | if (block.maxHeightExceededTop)
172 | curTrack.markBlockHeightOverflow(block, true);
173 | curTrack.renderOrigin(block, curTrack.layout.getOriginY());
174 | finishCallback();
175 | },
176 | function (error) {
177 | console.error(error, error.stack);
178 | curTrack.fillBlockError(blockIndex, block, error);
179 | finishCallback();
180 | }
181 | );
182 | },
183 | renderFeature: function (feature, uniqueId, block, scale, containerStart, containerEnd) {
184 | //featureStart and featureEnd indicate how far left or right
185 | //the feature extends in bp space, including labels
186 | //and arrowheads if applicable
187 |
188 | var featureEnd = feature.get('end');
189 | var featureStart = feature.get('start');
190 | if (typeof featureEnd == 'string')
191 | featureEnd = parseInt(featureEnd);
192 | if (typeof featureStart == 'string')
193 | featureStart = parseInt(featureStart);
194 | // layoutStart: start genome coord (at current scale) of horizontal space need to render feature,
195 | // including decorations (arrowhead, label, etc) and padding
196 | var layoutStart = featureStart;
197 | // layoutEnd: end genome coord (at current scale) of horizontal space need to render feature,
198 | // including decorations (arrowhead, label, etc) and padding
199 | var layoutEnd = featureEnd;
200 |
201 | var strand = feature.get('strand');
202 |
203 | var levelHeight = this.glyphHeight + this.glyphHeightPad;
204 |
205 | layoutEnd += Math.max(1, this.padding / scale);
206 |
207 | var top = this._getLayout(scale)
208 | .addRect(uniqueId,
209 | layoutStart,
210 | layoutEnd,
211 | levelHeight,
212 | feature);
213 |
214 | if (top === null || top === undefined) {
215 | // could not lay out, would exceed our configured maxHeight
216 | // mark the block as exceeding the max height
217 | //if (top === null && block.maxHeightExceededBottom !== true)
218 | if (top === null)
219 | block.maxHeightExceededBottom = true;
220 | //else if(block.maxHeightExceededTop !== true)
221 | else
222 | block.maxHeightExceededTop = true;
223 | return null;
224 | }
225 |
226 | var featDiv = this.config.hooks.create(this, feature);
227 | this._connectFeatDivHandlers(featDiv);
228 | // NOTE ANY DATA SET ON THE FEATDIV DOM NODE NEEDS TO BE
229 | // MANUALLY DELETED IN THE cleanupBlock METHOD BELOW
230 | featDiv.track = this;
231 | featDiv.feature = feature;
232 | featDiv.layoutEnd = layoutEnd;
233 |
234 | // border values used in positioning boolean subfeatures, if any.
235 | featDiv.featureEdges = {
236 | s: Math.max(featDiv.feature.get('start'), containerStart),
237 | e: Math.min(featDiv.feature.get('end'), containerEnd)
238 | };
239 |
240 | // (callbackArgs are the args that will be passed to callbacks
241 | // in this feature's context menu or left-click handlers)
242 | featDiv.callbackArgs = [this, featDiv.feature, featDiv];
243 |
244 |
245 | block.featureNodes[uniqueId] = featDiv;
246 |
247 | // hook point
248 | if (typeof this.featureHook1 === 'function')
249 | this.featureHook1(feature, featDiv);
250 |
251 | // record whether this feature protrudes beyond the left and/or right side of the block
252 | if (layoutStart < block.startBase) {
253 | if (!block.leftOverlaps) block.leftOverlaps = [];
254 | block.leftOverlaps.push(uniqueId);
255 | }
256 | if (layoutEnd > block.endBase) {
257 | if (!block.rightOverlaps) block.rightOverlaps = [];
258 | block.rightOverlaps.push(uniqueId);
259 | }
260 | // update
261 | domClass.add(featDiv, "feature");
262 | var className = this.config.style.className;
263 | domClass.add(featDiv, className);
264 | var seqLen = feature.get('seq_length');
265 | // pi rnas
266 | if (seqLen > 25 && seqLen < 32 && this.config.isAnimal)
267 | domClass.add(featDiv, 'smrna-' + 'pi');
268 | // other
269 | else if (seqLen < 21 || seqLen >= 25)
270 | domClass.add(featDiv, 'smrna-' + 'other');
271 | // otherwise it's fine
272 | else
273 | domClass.add(featDiv, 'smrna-' + seqLen);
274 |
275 |
276 | // check multimapping
277 | if (feature.get('supplementary_alignment') || (typeof feature.get('xm') != 'undefined' && feature.get('xm') > 1) || (typeof feature.get('nh') != 'undefined' && feature.get('nh') > 1)) {
278 | if (!this.config.style.solidFill)
279 | domClass.add(featDiv, 'multimapped-read');
280 | }
281 |
282 | // Since some browsers don't deal well with the situation where
283 | // the feature goes way, way offscreen, we truncate the feature
284 | // to exist betwen containerStart and containerEnd.
285 | // To make sure the truncated end of the feature never gets shown,
286 | // we'll destroy and re-create the feature (with updated truncated
287 | // boundaries) in the transfer method.
288 | var displayStart = Math.max(featureStart, containerStart);
289 | var displayEnd = Math.min(featureEnd, containerEnd);
290 | var blockWidth = block.endBase - block.startBase;
291 | var featwidth = Math.max(this.minFeatWidth, (100 * ((displayEnd - displayStart) / blockWidth)));
292 | featDiv.style.cssText =
293 | "left:" + (100 * (displayStart - block.startBase) / blockWidth) + "%;" +
294 | "top:" + top + "px;" +
295 | " width:" + featwidth + "%;" +
296 | (this.config.style.featureCss ? this.config.style.featureCss : "");
297 |
298 | // Store the containerStart/End so we can resolve the truncation
299 | // when we are updating static elements
300 | featDiv._containerStart = containerStart;
301 | featDiv._containerEnd = containerEnd;
302 |
303 | // fill in the template parameters in the featDiv and also for the labelDiv (see below)
304 | var context = lang.mixin({
305 | track: this,
306 | feature: feature,
307 | callbackArgs: [this, feature]
308 | });
309 | if (featDiv.title) {
310 | featDiv.title = this.template(feature, this._evalConf(context, featDiv.title, "label"));
311 | }
312 |
313 | // render the popup menu if configured
314 | if (this.config.menuTemplate) {
315 | window.setTimeout(lang.hitch(this, '_connectMenus', featDiv), 50 + Math.random() * 150);
316 | }
317 |
318 | if (typeof this.config.hooks.modify == 'function') {
319 | this.config.hooks.modify(this, feature, featDiv);
320 | }
321 |
322 | return featDiv;
323 | },
324 |
325 | addFeatureToBlock: function (feature, uniqueId, block, scale,
326 | containerStart, containerEnd) {
327 | var featDiv = this.renderFeature(feature, uniqueId, block, scale,
328 | containerStart, containerEnd);
329 | if (!featDiv)
330 | return null;
331 |
332 | block.domNode.appendChild(featDiv);
333 | if (this.config.style.centerChildrenVertically)
334 | this._centerChildrenVertically(featDiv);
335 | return featDiv;
336 | },
337 |
338 | markBlockHeightOverflow: function (block, top) {
339 | if (block.heightOverflowedBottom && !(top))
340 | return;
341 | else if (block.heightOverflowedTop && top)
342 | return;
343 | // don't draw if we turned off clip markers
344 | if (!this.config.style.clip_marker)
345 | return;
346 | if (top)
347 | block.heightOverflowedTop = true;
348 | else
349 | block.heightOverflowedBottom = true;
350 |
351 | var topHeight = (top ? 0 : this.height - 16);
352 | block.heightOverflowed = true;
353 | domClass.add(block.domNode, 'height_overflow');
354 | domConstruct.create('div', {
355 | className: 'smrna_height_overflow_message' + (top ? '_top' : '_bottom'),
356 | innerHTML: 'Max height reached',
357 | style: {
358 | top: (topHeight) + 'px',
359 | height: '16px'
360 | }
361 | }, block.domNode);
362 | },
363 |
364 | renderOrigin: function (block, originY) {
365 | var originColor = this.config.style.origin_color;
366 | if (typeof originColor == 'string' && !{
367 | 'none': 1,
368 | 'off': 1,
369 | 'no': 1,
370 | 'zero': 1
371 | }[originColor]) {
372 | var origin = domConstruct.create('div', {
373 | style: {
374 | background: originColor,
375 | height: '1px',
376 | width: '100%',
377 | top: originY + 'px'
378 | },
379 | className: 'feature'
380 | }, block.domNode);
381 | //block.domNode.addChild(origin);
382 | }
383 | },
384 |
385 | _trackMenuOptions: function () {
386 | var track = this;
387 | var displayOptions = [];
388 | return all([this.inherited(arguments), this._alignmentsFilterTrackMenuOptions(), displayOptions])
389 | .then(function (options) {
390 | var o = options.shift();
391 | options.unshift({
392 | type: 'dijit/MenuSeparator'
393 | });
394 | return o.concat.apply(o, options);
395 | });
396 | }
397 | });
398 | });
399 |
--------------------------------------------------------------------------------
/test/data/seq/a59/b6d/00/Chr5-0.txt:
--------------------------------------------------------------------------------
1 | GCAAGTTTATGTTACAAATTTGTATTTGATTTCTCTTTGATTGGGGTACAGATCATTGGGAACATATCTGCAGTATCAGCGTCTCTTCTCATTGGAAAGGCAGGGCCTATGGTGCATACTGGTGCTTGTGTTGCATCTATACTTGGTCAGGGTGGCTCCAAAAGATATAGATTGACCTGGAGATGGCTCAGATTTTTCAAAAATGATAGAGACAGAAGAGATCTTGTAACTTGTGGGGCAGCTGCTGGTATCGCTGCTTCGTTTCGTGCTCCGGTTGGTGGTGTCCTGTTTGCGCTTGAGGAAATGTCATCTTGGTATGTTAAGTTATTCTCTTCAACTCAAAAGATATCTTTTTTAGTTCATTAGTTACCGGTCACTATATCTGTTCTTATTTAGTTCATTGTGAATGATTCATTGAAGCTAGAATGGGGTTCCGTTGTAGGTGGAGGAGTGCACTTTTATGGAGAATCTTCTTTTCGACAGCTGTTGTGGCAATAGTTCTCAGAGCTCTAATCGATGTGTGTTTAAGTGGAAAGTGTGGGTTATTTGGTAAAGGAGGCTTAATAATGTTTGATGTCTACTCAGAAAATGCGTCATATCATTTAGGGGATGTACTTCCTGTTCTTCTTCTTGGGGTTGTTGGTGGTATTTTAGGAAGCTTATACAACTTCTTACTGGATAAGGTTCTGCGAGCTTACAACTACATATATGAGTAAGCTTACAACTACAGACACATACACACAAGTAAATGTTTTCTTGATTTCTAACAGTTTTTTCTGTCCAGGAAAGGGGTTACTTGGAAAATCCTCCTCGCTTGTGCGATATCGATTTTCACGTCCTGCCTTCTTTTCGGATTACCATTTCTTGCATCATGCCAACCTTGTCCTGTCGATGCCTTAGAGGAGTGCCCTACAATTGGACGGTCTGGAAACTTTAAGAAATACCAATGCCCTCCTGGTCACTACAATGATCTAGCTAGCCTTATTTTCAACACAAATGATGATGCCATCAAAAACCTTTTCAGCAAAAACACTGACTTCGAGTTTCATTATTTTTCGGTTCTCGTATTTTTTGTCACCTGCTTCTTCCTCAGTATCTTTAGCTATGGCATTGTTGCTCCAGCAGGGCTCTTTGTGCCAGTTATTGTAACAGGAGCATCGTATGGACGGTTTGTAGGGATGCTGCTTGGTTCAAACTCAAATCTTAATCATGGTCTGTTTGCTGTGCTCGGTGCTGCATCCTTTCTTGGCGGAACAATGAGGATGACAGTTTCCACTTGTGTTATTCTCCTTGAGCTGACCAACAATCTGCTGCTACTACCTATGATGATGGTGGTCCTTCTGATTTCAAAAACAGTTGCTGATGGTTTCAATGCTAACATCTACAACCTCATCATGAAGTTAAAAGGATTTCCCTACCTCTACAGCCATGCAGAGCCTTACATGAGGCAGCTTCTAGTTGGTGATGTAGTCACCGGCCCACTTCAAGTCTTCAATGGCATTGAGAAAGTCGAGACTATTGTACACGTTCTCAAAACGACCAATCACAATGGCTTCCCCGTGGTTGATGGGCCACCACTAGCTGCAGCTCCTGTTCTACACGGTCTAATCCTCCGGGCTCATATTCTGACTCTGTTAAAGAAACGAGTATTCATGCCTAGTCCAGTAGCTTGTGACTCCAATACCCTTTCCCAATTCAAGGCAGAGGAGTTTGCTAAGAAGGGTTCTGGGAGGAGTGATAAGATAGAAGATGTGGAATTAAGCGAGGAAGAATTGAATATGTATTTGGATTTGCACCCATTCTCTAATGCCTCTCCGTACACTGTTGTGGAGACAATGTCACTTGCAAAGGCCCTTATTCTCTTCCGTGAGGTTGGCATAAGGCACTTACTGGTTATACCAAAAACCTCCAATGTAAGTGATTTTGGTTTCTTCTTTCTCCCTGGTCCTTATTAGATTATGGTAGGCACTAGTACGTGTGATACTTGATACCTATAGATGAATAATAAGTAAAATGGTGAACACAGTAGAGTCTCTTGAGTTTTGTATGTTTGTTAAGGGAATCAATAACAAAACTCGAAATCTCGAACCACCAATTAGTTCTCTATATATCTGGTAGCTCTTTGGTTTCTTGGTTCATCAGTTATCGAATATTAAATTCGTTGATTTGCATTGCAGAGACCTCCAGTGGTAGGTATATTGACACGGCATGACTTCATGCCGGAACATATACTAGGCCTGCATCCCTCCGTTTCTCGGAGCAAGTGGAAAAGGCTTCGGATTCGGCTGCCTTTCTTCTCATGAAGTATTAAGCTGCCTACCAAGTTTCAGGTATGACAGTTCAGATAAACTCTGTACAGTATATTAAAAGCAGCCTTGTGGTGCTATGTCGAACTCTTAGATACAGAAAGATGTAGAGAGATTTATAAATGTTGTATTGCTCTTATTGCATCCGCTACAGCTTTTGTTGGTTCTTTTTTATTTGTTGTATATAGGTTCTTCTATCTTTCGACCTTCTTCAATTTCTCGGTCCGAGGACTAAATACAAATTTAGACTCCCTTAATACAATTTGCGTAACGCGTAGGGCCACAAACATACTTTTAGGAAAACCTGCAAGATCTCAACGAACATGAATTAGCTCCTACCATACAAAACTGAAACAGAATCATAGAACATTTTAGGACAGCATACACGAATATAACTGGTGTATAATATAGGCATAAGATGATAAAACTAAATGAATAGTATTAGTTCTCTACATTTTTACGCCATTCTCTATATACACACTGATTATAAGAAGTGAGTTGGCTGCTTTAATGCTTTTAAACACTAAAAGTTAGATTTACTTTTTTTTGCTCTTTGTTTTTGATAGAAATATATAATGAGAAGTTAGATTTACTTTATTTTATTATAATCTACTCATATTCTACCAATTTTACTGAAACAAAATATTTTCCAACCAAAAAAAGTTGAAAATAACATCTGAGCTGCTTTCTCAATAAACAACCAAGATTTACAGAAGAATCAATTATGGATTTGCTATTTTTTGGAATGACATTTGTGGATTTTGTCCTTTTATGAATAGTTTGTGGATTTGCCCTTTTTCAGGCTACAAAAATATGATTTAACATGCGTTTTATTCGTTATGTTTGGGTTTAGTCGGTTGTGGTTGTTCTTAGGCTTCAGTATTTTGTATAAATTACGTATTTTTATCAAAAGAAATCATAAATACGTATATTTTTAAATATTAGAAAATAGTATATCCGTAAGATTTTAGTAAAAATGGTAATTTTAAAAGATTTATTTGAAAAATAGCAAAATCAACAATAATCCCTTTACAGAATGGAAAAAGTTTAATTCCCTGCCAGTATGTGTTTCCAAAACTTTATTTACAACCTCAAACATTCCTTAAAAAGATACGCCAATAGTAATTTTTCTGATTGGAACAATAGATAATACATAGATATTTCTTACCTAACACTAGTATACAATGAATTCTCTTCAGTATTACTCGTGGGGTTTAAATTTTCCAAATGAAGAAATCTTCACGTGAATCTATTCGGTCTTTTGGTCCCCATCATTTCGTTTTCTCATGTCAGTATAATGTATTTTTAAATGTTTGTGAAATAGTCAAGAATGATGTTGTAATTGATATATATACTAGTAGGTGAATATCTACAAAACACACGGATTTTTATTCTTATACTAGTTTCTTTTGCGACTAAGCCAATTTCCTTGTACCGTTATATTTTCTTGTTAAAGCTACATCTTTGAAATAGGGCTGATTATGCTTGCTATGTTTTATATGAAAAAAAACTCGTAATTATTTTTTGGGATGTTAAATATTGAGGAGGTGCATGCATTTGAGGAAAAGATCCAGCACAATTTAAACATCAACCTCTTTTGTTCAAAATGGTTTCTTGTATTATAACTACCCATAAAGATTTAACAAAATAACTCATTAGAATTTTGTTTTTTTATTCGCAGTTTAAAGTTGAGTTTTTTTTGTATGCAAAATCCTAATATGTTACTTTTTCCACGTTGTTCGATTTTGCAACCGTGTTTCGGATGCACGCTTTCTGTTTTGATGTCATCACATTTACTTTTTAAGTCTTAAAATCAATACTTTTAAACATACAAAAATGATCAAATTTAGTGTTCTCTTACATATGTAACCAAAAATGTGTCATCATTTATATGAGTGTGGAAGCAGAGCCGTACCAACGTTAACTCTTCAAATTTAATATTAAAATTAAAAATAAAATGCTCTAATTAAAAAAGAAATAACGTCAACAAAAATAAACATATCTTCATATAATTTTTTCTAAATAAACTATAAAAAAAAAAGTAAAAAAAAAATAAAAACAAACTAGCCAACAAAATATCTATATATACATTTTCACAACACTTTTATGAAATAAATCCTCAAATTATAACTTATTTACAAAGAATGTCATTAATATTAATTATTATCAATTAATTAAATCTCTAATTACTATTATTTCTTTATCTAATATATGTCTATCAATTCTAATTACTTAAAAAAAAAGAAAAATCTTAGGATATTATTAATAGTATACTTTATTAAAAGTAAATATTGTAGTTATTAAACGTTTACAATATTTATAATATGTGAAATTTATAAAAGTTAAATAACCATTTCAAAGAAAACTTTTAAATTGATTTGAATTATAATTTTTTTAATAAAAGTATTATTAAAACAAAAACAAATAAAAAAAATTTAATTTCACCGAACAGGATTAGATGATAGGACGAGTTTAAAAATATTATAATATATAAAATTTATAACAATTAAATAACCATTTGAAAGAAAACTTTTACATTGATTTGAATTATATATCTTTTAAATTAAAATATTATTAAAAAAAATAACAAAATAATGTTTAATTTCACTTAACGAGATTAGATGGTCGGACATGTTTGGATCGACAGTATTACAAGACGGTATACCACGGGCAAAATCCTAAATATAACAATCAAAATACAATTATATTATCTTAAACAATAAACAAAACAAACAATATGAACAAAACAAATGTAATTTAAATTTAAATTATTTAGTTATAATCTAAATTTTAATTTAATGAACTGTATGTTATTGCTCCTATATTTTTAAACAGTAAATATCTAACATAGTAATTGTATGTTATTGCTCCTATGACTTAATGAACTGTATGTTATTTCTAATTTCTTTTGGAATAGCTTCTCTTAGAACTTTATGTTCAAAAAAATATCATTACCAACAACATGTGAATGCTTTCCATGGTTAGAAAATCTTCAAGATTGGCATAAAAAGCCATCAAACTATCATCACTTGTTGATTGCAATTTTCTCAACAAAAAAAAAAAACTTGTTTGTATCTTTGAAATTGCTCAAATCTTAATTTAGTAGAAAGCTTGATCCATGATTTGAATAAAGTCGTCAATCCTGAAGCTGTCCTCGTATGATAATGTCACACTTCTCTCAACATTCTCTGATTTTCACCATAATGTAGTTTAGTTTTTTTTTAGGAAATAGATGATCGATCTCCAAAAATTCTGCAGTTTTTTAGCTTATGCTTTTGCTCTCTTAAAATCTTACTCTATATTTTTAAAAATAAGAAACCAACCTCGTGAGTTGAGAAATAGCTACATCAATGCTCATATCTTCTAAATGCAAATTTTTACTCACGATGTTAAAGTATATAAGATTATACCAAATAATCATTGAAACTAGAAACTCAAAACTTCCAATTCCATGTATTTTACTTGTTGCAAGACATTAAGTATCGCTCGACTCTTTCGGATCATCACAATTTTCAGCAATATATACTAACACATTCATGATTTTAAGAACTTGAAATCGTATTGTTTTAACACTTTCGACATATCCCTACTTCCAATATACATTTCAAAATCATATTGCCTTAAAAGCTTAAGTGGTATGTCATCCACGTAATATGTAAATATTTTTCACCGTTTATTTGAAGATGAAAAAAGGTAATAAGTATGTTGAATAATCTCCAAAAATAAGATTGCTTTTGAAGAAGTTGTTATATGTGACAACAACATGGTGTATATAAAAAAAAACACCCTAAATTTATCTCAAGAAACTGTTTTTGTACTCCCTTATGTTTTTTTTTTCATTATAAAACCATTATCATAACCTTTGTTCCCTCACATCCTTAATTTTTAAGTTAAAAACAGTCAAAACATCATGAAAGTCAGGGTAAAAAATTATCATCGGATATATCAACTTTCAAGAACATTAAAAAAAATATTTGATTGTTGAAGTTGAGTTAAACATCTACACACTAAGTGATGATAGTGATGTGTCCATGATAGCTGATATTTGGAATACAGTAGAAAATGACGGAGAAGTTCTTTGTACCTTGAGTTTTCTGAACACTAATAACTTTTACCTCATCCGCTTACCAAAAACAGTTAACTTGTTCTGAGTTCCTTATTAGTAAATTTATCCTATTTTTTATTTCTTTCTAATAACATAGAGTTAGCAAAACTTTTAAGCAAATATTAATTTTGTTCTGAATTCTTTATTAGTAAATTTATCATATTTTTTATTTCTTTCTAATAACATAGAGTTAGCAAATGTTTTAAGCAAATATTAATTTATTTCATCGGATGACACATCACTGCATAATATTGAATTTATTTTTCTAATTTTGCCTTTACAGCCATATTTGTTACAAGTTTTGGTTCACTATATTATTATACTTATATAATCTAGCAGAAAATATTTAAAACTAATCAATTTTGTTGCGATGTCACATTGATAACAGACTAGCAGTAAACGGAGATGACTCATGTCAATTTATATTTTAAATACCAAACAGCAATTATCAATTTAAACGCATTTATTGTAGTATTATAAATCTTTGTGTCTAAATGACGTCAAAAGATAAACCAAATTTGTATCAAACTTCTTTGTCCCACCTCACCAAAAAAAGAACACTTCTTTGTCCCGCAGTATACTGAAGCAAGTTTACTGCTATTTTCTAAAATAATTTAAATGGTTAGTGTTATAGGACTATTTAAATTAGCAAATATTAAAGAGAAAATTGTGTGGGGAGTCAAAAATATATATGAATTAAAATAACGTGTTTTTGATAAAAATCAATATGGTCCATATATTTAGGTCAATGAATATATTTCAAAACCAAAATCAGTCAATTAAATAACGTGTCATTCAAGAAAAAAATTGATACCTTTTTATTTTTAATTTACAGTTTAGAACATTCTAAATTATCATTCAGAAACTGTAGTTTTAGTAAAACTGTATCATGTTCTAGTATCAAGGAAGAGACGAGATTCAAATTCTGAGGGGAATGTCTGCGAAATAGAACTAGTCAATTTGCTATCATTTTTTATCTGTAGATATTATGTATATGATGAACTAGAACACATGATTAGACGTAAAAAAAAAAAAAGTACGTATCTAATCCCAAAAAATTTACATATCAAAAAATAATAATCCAATCGTCCCTTAGTAATTTAATTTATTACTTTTACCATTTAGCAAAAGAACTTTTCAATTTTTTTAATACGTTAAAAAAAGTATTATTTAAATTATCAGTTTATTATTTTTGTTGGTTTAAAGCATGCATAAACTTGAGATTTGCTAATTTAAATCCTTAATTGTATGTTGACTTTCAATTTAATCATAAATTTTCGTTGACTAAGCCAATTGAGGTACTAATTTTTTTTTCGACGTCATTAATTAACTTAAAAACGAGAGATTACTTCGAATTCTAAAAAGAATAGAAAATCCGAAAAAGAGGAGATAATCCAAAGAAAAATTGAAAAAAAATCTAAAATCAATTTTGGAGATCTAAAGTTTGTTCGTGGTTAGGAGAATTTTTAACGATGTGTTTTAATTAGCTTAGTAAACGAGAATTCGTAATTAAATTAAAAATTAACATAAAATTAAGGATTTCAATCACCAAATTAAAAGTTAAACCAATAAAAATGATAATTTGGTGATTTAAATACTATATTTCCCAAAAAATAACCCCAATACTAGTTAGAAAATATATAGCAGTGATGCAAACGTACGGCATGTAAAGCTTTCTACTAAAAATAATGTATAAAAATATCTAAATTTTAGTAAACGTGTCGAAAAAGAAAAAGGGTTCTCAAATTAAACGCATTATTTGTTAAGATTATAAATGCATACTATAAACGAATACAAGGAAGAAAAAAAATACAACAAGTCTTTGACAAAAAAATAATAATACAACAAGTTGCTTGGTGATGCAAAACTCATTTCTCCTCCCACTAATGATCGATGATAGAGACATAACAAAGAATCTTTCATGACTTTTCTTCTTTTTCTCCTCACTTCCAAAAATTCTCTCTTGTCTTCCTCTTAAGATGAAAGAATCATAAAAGGAACCCAAAGAAAAGCAAAAACATAACCATGGCTGCTCCAAGATCAAGAAGATGCTCTCTTTCTCTCTTAACTCTTTTCTCCATCACTCTTATTCTTATTTCTGTTTCACTCTTTGTCTCCACAAAACCAGCTAATAAGCCTTTCCTCGATTACAGAAACCAGTTTTCTATTTCCATCTCTATCTCTTCTCCTCTTGAACAAAACACAACAAACACTAGTTTTGTCTCAGCCTCTCCTCCTTTGTCCCCTCTTGGTCAGAGCAACACAACAAACACTATTCTTGCTTCTTCTTCTTCTTCTTCCTCTTTTTCTGATCACCAAAACCAAAATAAGTCTCCAAGTCCTACAAGTAAAAAAATTGTTATCAGGGTATGTAATCATTCTTTCTCTCTTTGTTTTTTTCTTTTTCAAGTCTCACAAATAAATAATTTTGTATTGATCAAACTCTTTTTCTTTCTAATACTTTTCTTTGTCAAAGTAAATAATAATCTTTACTTTTATTTTTACTATGATCAGAAAAGAAGTGGGTTAGACAAAATAGAATCAGATTTAGCAAAAGCAAGAGCAGCAATTAAGAAGGCAGCTTCTACACAAAATTATGTCAGCTCTCTCTATAAAAATCCAGCCGCCTTTCATCAGTTGAGTTTTGCAATTCTTCTTCTTCTTCTTTTTTTAACCATTTGAGGTAAAAAAAAAGATTTCTTCTTTTATTAAACAGTAATTTAATACTAGTACAGTATTTGACAGTTCCTAGATTTTTAGTCAAATATGATAGCGCTGACAATTTTTCACATGGATTTTGCTGTTTTTTCAAACTATTTGACATCGATTTCATCAAAGAATTCAGCATTTAATTACGGTTACAATAAAGACAAATTAAACAAATACGCAACGTACACATAGAGTTTTAACGGCTCCTGTGAGATGCCTCTTTCTAAGCAAAAGTTTACTCTTCTTTTTGTTTGTTTATTTTCATATCCGAGATTTTGCAGTACATAATATTGGAATTGAGCTTTTGAGGTTTCAATTGAACTAAAAAGAAGTTTTAATGTATTCAACTACTTTTCTACTAAAAGAGTTTGTTTATTCTCATGGCTTCTTTTTTATAACATAATTAGTTTAAAAGCTAAGATTAAAAAAGGTTTTAATCATTAACTATGTGTTGGAAAACAAAATTAAAGAAAGCTTTTGAACTTTTTGCTAATCATATTTAATTTATTTTTTTAATCAAAATTATCAAATTAGGATTTTTTTTAATAGTCCTTCTTCTCCTTTTTAATTGATTTTTTAGAAAACAAAACACACAGATTAAGAAAACATATTAAAACTGATTATAAATGTATTAATTTTTAGGATTTACATTTTACTATAATTTTAAATTAATGATATTTAATTATTTGTTTTGAAGTTTAAAATTTATCAATAAATAACTAATAAATAGTAAATAGTAAATCTAAAAAATCAATTGTTTGAAACAAATTGTTTTCTAAAAAATTAATTAATAAGGAACAGAGAGAATATACAAATAAAATATTGAGATGTTTCTTTTTTGTTTAAAGTATTGAGATGTTTGTTCATTAGAATAGAAGACTATTCGATTCTTTCAAAACAAGTAAACAAGTAGGAGATAGAATGAATATTTAAACTCCAATACGAACGTGGCGTAGCTCACCTCAGTGATATTATTACTTGCTTTGTAATAAATAAAACATTGATGTCATACTCGTGTATGCACAAAATATCAGGAGTCACACGGAGATGATGAATCGTTTTAAGGTGTGGACATACACAGAGGGAGAGGTCCCATTGTTCCATGACGGCCCTGTGAATGACATTTACGGCATAGAAGGACAATTCATGGACGAAATGTGCGTGGACGGACCGAAGAGTAGAAGCCGTTTTCGGGCAGATCGACCCGAGAATGCTCATGTTTTCTTCATACCATTTAGCGTCGCCAAGGTCATCCACTTCGTCTACAAGCCCATCACCTCTGTCGAAGGGTTTTCGCGGGCTCGCCTACACCGCCTTATAGAGGATTATGTTGATGTAGTTGCTACTAAGCATCCATATTGGAACCGAAGCCAAGGAGGCGACCATTTCATGGTATCATGCCATGACTGGGTACGTATACTAATTTTCTTTTTTTAATTGATGGCTAAGAGTTTGAATATTAAACATCTTTAATTAATATCGTAGTTATTTTTGGTTAATTTTTTATTTAATTTTTTGTCGACAATTTTATCAGATTAGCTTATATAAGCCAATGTCGGGAAATATTGTTTACATAAGTAAAAATATGCGGTTAATTATTTTTGGTTAGTAAACAAATTTGGCTTGAATTTTAAACCAAATTTTGTTTGGCTTGAATTTTAAATAAGCAAAGACCTCCTTGATATTACAAATTGCTAAAAACAAAAGAGATGTAGTGAGTTGATGAGGCTAACACTAAAATAGACTATAGTCTCTACGGGAGTGTAGTATATTAGTATATCACTTGATTTATCTTATTAAGAAAAAAGTATTATGTATTATATCGAATAATCTTGTTAGAAACATAACAAAACAAGAAACGATTTTTGAGATTTGAATTAGAGAAATAATTTACGTATTGAAATTGGCTTAAACCTATACAAGTTTTATATTATTGTTGTTGATTTTACGTAGTTGCTTGATTCTATTAATTTGATTAATATTATATCAAGAAAATTATCATCTAAATTCCTGATTTTTTTTTAATGAATATGATTTACATTTGTGTGTGTATAGGCACCAGACGTGATTGATGGGAATCCAAAGTTGTTTGAAAAATTCATTAGGGGACTTTGCAATGCTAACACCTCGGAAGGTTTCCGACCTAACGTGGACGTATCCATTCCGGAGATCTACCTTCCTAAAGGTAAATTGGGTCCGTCTTTTCTCGGGAAATCACCGCGAGTTCGATCTATACTCGCATTTTTCGCTGGAAGAAGTCACGGTGAAATCCGAAAAATCTTATTTCAACATTGGAAAGAAATGGACAATGAAGTCCAAGTCTATGATCGTCTTCCGCCAGGAAAAGACTATACAAAAACTATGGGAATGAGTAAGTTTTGTCTGTGTCCGAGTGGTTGGGAGGTCGCTAGCCCGAGGGAGGTCGAGGCGATATATGCTGGTTGTGTACCAGTGATCATATCGGATAATTATTCATTACCATTCAGTGATGTGCTGAATTGGGATTCCTTCTCCATACAAATCCCTGTTTCTAGGATAAAAGAGATCAAAACCATTCTACAAAGTGTCTCTCTCGTAAGATACTTGAAGATGTATAAGAGAGTTTTAGAAGTGAAGCAGCATTTCGTGTTGAATCGTCCAGCTAAACCCTACGATGTGATGCATATGATGCTTCATTCGATCTGGTTAAGACGACTTAATCTTAGGCTTGGTACATAGTATACAATTTTTTGTTATGTTGCAAATAAATATTAAGTGTCTAAGTTCATATGAGTTACTAGCTTTGTATTCTTTCCATAAATTTGCATAGTTCTCTCTTGTAAAAAAATATACAACAACAAACACAATATCAAAGATTTCCTTATTAATAAGAGAAACAAAGCATTTGTTATTTTTGTTAATTAGCATTTGTTATTACTGTTAATTAATACTTGTTGTTTCTTTTTTTCTTCTTAGTTATTGTAACTCCGACTCATTCGTCTTGATCTAGACATTTTTGTAGCTCTTTTGAAAGATTGATGATCATTCTTTACGTAAAGATATTCATAACATTTTCTTCCTACTGTAAGAAACCTACCATGTCTCTCTTATTTCTATTAGCATTTATGTGTGAGTAGTGATCATATATTTGGGTCTATGTGGTTGAATGTTGTTCTATTTTTGAGATTCTTCGTTAGTTCGTTCATAAATTCCATGATTAATCCTTTAATATTTAGTTAAATAGACACTAACATAGCTTGGGAGATACTTTAGCCATATGTTACTATGTTTAGTGTCTTGCCTACATATGAACAGTTTTTTTTTTTTTGAACTTCAAAAAACAAACCAAGTCTCTTATCATCTTCAGACCTCAAGTTGCAAAATAGCTCTAAAATCAAACGATTCATAGCCAAATGTCTGAGACACCTTTTCTTTTACAACGTTTAGATAATGATTGCAGCGGTTTTGGTATATAAACCAAAAGAAAAACGTTTAAGCTTCTTAAAGTGTTTCTCTGTTTACTTTCATATCCTTTTATCAATTTTCATTATTTCTTAGCAACCCGTTTCTGCACTTTCCTCAACTTACCAACTTTTACAGCTTCCTGTAAAATCCAAAATTAAAGTTATAACCAAATATGTGAAAATGGCTGGTCATAAATTAGAGGTTGCAGAAGAAGAAGTTTACTTGTATATTCCCTATGTCACGTAATGGTTGTTTATTTGCGCCTTTGTCGTCATGGCTAATTCCAGCAGGCTTCTTAACATCTATTGGTTCCATTGGTTTGTCGGGTTTCGCACTTTCGTCTCTGTTGCTACATTTGGAAGCTAAGCAGCCACAAGAGTCCCCACATCCACTTCCATTTGCCTTGCATTTGCAACTTTTGGTCTTGCACAAAGATTTTTTAGTGCAAGAGCAACACACTTCTGCTTTGCTCTGTTCCTTTTTGCAAAGTGTTTCCTCAGAAGTTTCCGGTTGAAATGGCTCCGAGTTTGATTCATCGTCGATATTCTTGCTGGTGATAGAGCGTTCCACTGGTTCGCTCTGATCACAACAATTGGAATCGAAAAATCAGACAACAAACCAGGAGAAAAATTGGCATTTGTTATTAAGGTATAAAATTAACCTGAACTTTATCAGTTTCACTGAATTGTGATTTGGTCATTTCCATCTGGCTGACAAGAGTACTCAGTTTGTTAAATTCCTCTTTGAGTTCCTTTAGTTCTGAGTCCATTGGAGTGTGGTTGATTTGGTTGTCACAAGACGCAGAACTAAATAAGAGAAGCAAAGATAACCAATCACCAAAGAGAACACAACTTGAGGCTACAACAAAAGTTTAGCTACGATCAAACTTACCATGAGCTTTGCTCTCCCTCAAATTCTGCCTTCAACAAACCTGCCTCTAAGCTGAACCTTTTGATCTCTTCAGCCATTCTGATAAAAATAGTAAAGAATACATAATTTCATGCTACTGAAGTAATAGAGTAGCAATAGCAAAAAGAAAGGGATATAAAATCCCACAGCTTTTCTTTTGAAAGCTTACTCTTTCATTTGGCGTTCGTAATCAGAATGAATTTTATTCAGTTTCATTAGTAGGCCTGATTCATTGCTAGACTCCTGCACAACCAGAATAAGAAACCATTTGGAGTTCCAAAATGTAGAAATCAATACAACACCACGTATATCATCCAATAACAAAAATCTGAATCTTTGTCACGAGTGTAACATATACTAAAGATCCTAAATAGAGGTTCCAAAAAATTAGTGCTGTTGAGAGCTTATGTAACACTTAACCAATTGCTTAAACTCTCGTTGAAAATAAGATGTTACATTGATGCTTAGGCTCAGGTATCCATACCTGAATCTCGGAGCTTGTTCCTTTTGATGGGCCTGGAAAATACAAAGAAGACACTTACACAATTTAGCAAAAGAAACAAGGAAAAGAAAGGAACGGATACCAGCTATCTGTTATGTTACCTTTCTTTTTGTTGGAAGAAATCTTTTTAGATTGAAGCAGCATTTTTAGACGCTTCAGGGCTGTCAAAGCTTGTGTATTCTTCAGCTGCAAAATCTGAGTAAAAGAATATAGACATTAACAAGTCACATGGAGTCAGTAGTAAACCACGGTTGCTGAAATATACATATAGCATAGTACAATCAGCAGAAAATATACCAGCTTCTGGCGATTGTTCAGAGCTGACAGGACATGTTTCTCAAACTCACTTTTCCTTAGCTCTTTTTTGAGCTGTTACAATAGAAGCACTATATAATTAAAAGCCTGAGGTATCATATATGAGGGAAAACATGATCAAACTAAGAGAGCACTGAACAAGGCAAGCACAATTGGCTAACAATCTCATCAAGAAAGAATGTATCCAAACTGATCTTGGAATACAATTCTCAAAATCAAACTACCATAACTAGAACCCCTGTTGTGTACTGTATATATATGGAAAACCATATGTGCAACAAACAATTTGAACAAAAAACATGGGGATTTTGAGAACGTTTATCAATCATACATAAGTATAAATCAAGTATGGCATGTAACCAGATTATCAACTATCATCTATGTCCATCAGAACTTGACTGCATTATGATGTAACCCGAAGTGGGAATCTACAACTTGATGATTTGACATTCACTCATAAACCAAAGAAAAAATGTATAGATACTAGACCTGCTACTCTCGTTACCTGAAGAACTTCCTTTTCTAGTGAAGCTTTCAATAGTCTGAACTGCATAGAGTCTAGCTTGATCTTGCAATGCAACTTAACCTGAAGAATATACACAACTCACAAAACTAAAAACCCAAAACAAACTGCTGCATTTTCCATTGATCATAAACATTATTTACAACAATATACTTCACCTTTTGCGCCTTCAATTTCTGAACTTCACCATCAAATTGCTTAACAGAACTCTCAGTTTTATACTTCTTTGTGGAGCACATAGACTTACTCCTTGAACTCATACCCTATACAAGTATCAAGGTCAAAAAAATATGCGTAGTATAGCATAAATGTCTCTTTTTAAAAATTGAAACCTGAGAAACAAAATAATCCACCTCCTCTTTGTTAGCAATAGACTTTTGAGAAAACTTTCTGCTTGACTGTAACGTACCAACCGATGAGCTTATCGAAACATCAGCCAATTTTGACCTTAGCTCTTCCACATCACTCTGCCGAAATCCGAAACAATCATTTCAACATTACACAATACACAATAAGTTCTATAGAATGATTCTATACATTTATATTAATGCGAATTGATCAATTTCACAGTTCTCTAAGATATTTTTCTGCAAATTGGAAACTGAAGCGACGAATATCATTCATAAATTGAGATCTTAAGCGAGATATTTTCGAGAGATTATCTTCCACAAGTACGAAATCGAAGCAAAAGAAGCGATTCTAAATTTGATAATCGGAGAAAAAATTCAAAATGAAAAATGGGGGGAAACCTTGAGAGCTTCGTTCACGGACTCCAGATCCAGAATCTTCTTCTCGTAGAGTTTCTCAGCATCGTCTCCGAGAGATGAATCCTTTGATCGGAGATTTGGCTTCTTCGTCATCTTCGGCGAAGAGTTTGTACTTTCTCGATGCGAGTGTGAGAGACAACAACGCTCCTTCTTCTCTCTCTCTTTCCTAATTGATGAAAAGGTGCGGAGAGAAGTATTTGAATTTACAATTAGTTTTAGTTTCATTATGGGCCTAAAATAACGAAAGCCCATCTTATTTTTTCAACCTAAGGCCCACAACCAAAATAATTTTATCATTTTTAAACAAAGACCCAACAGGAAAGAAGGTTTAAGGTGTTGTTCCTTTATGGACATGTCCTAGGGTTCCACACTTTTGGGAGGGTATTCAATGATTGAATTAAAAGAATTTAGTTTAACAGAATTTAGTTGGATTCTAAAAACACGTCGAGATAAGTATGAGAATTTGTTTTTTTTTGTTTGTTTGTATTGGTTTTGTTAAAAAGGCATAAAAAATAAGAATATGTTTTGGATAAGACTAATAAAATAATACTGTTGATTTTTTTTTTTTTTTTTTTAAATTATATTAAGACTCCTGTGACATTTTGGAGATGAGACTTGCTTGTAACGCCATTGTTTTCATCGTAAGTGTTGTTCTCTTCGGATGTCACGTAGAATCTCCATGAGATACACAGTTTTCATCAGCTATGTGAGCAAAAAGAGAAAAGGAAATATTTGTTTTGTGTCTTGATGGGAGAAGAACTAATTAGAGTTTTAGAGTAATATTGAACTCTGTCATCCAAAGGTGTAACAACAAAACATCTTTCGCCCGGCAAGCATCATCTGAACAGGGTTTTTTATGAGTCCGGCTTCACCCGATGATGTCTTTGAGGTACCATAAGTTCTTGATTATGTTTTTAAGTCCCTCCTTCTTCTCTGGTCATTGACTGTCTGACTATAATTAGTTAGAGAAGTCATATCTGCAATATAAAATGTCATGTTTATGATTGAGTATAAGAACTGGAATCGCACCATCAATGTCTCAAACATACTGGCATCAAATTTTAATCTTTAAGTACTTTTTCGGGCCTTTCCGTGATCTGTGCTATATTACGGACCCAAAATTACTTGTTCAAACATTATTTTCAAATAATTTTCATGTATCAAAGCTCGTTAAGACTAGATGGGGTATCTCTACATAGCGGGTGGGACCCATGGCGAATGGGTGATAAAGTCAAAATACGATAGCAGAATTGTTTCTTCACATTTTTTAGTGTACTTGTTATTGACTAATTTACATATTTACATTTACATTATTTAAAAAATCAGTAACTAAATAACACTATAATTTAAACTACTCTTTGAAATATATAAGGGAATAACGTAAGAAGTATATGGAATGTCAAACAAAATTATTTCTAATTTACTACTAATAAAAAAAACATTCGAAACTTCTCAAGCTATACTCATCATCACTCCAAAAATCATTTTAGAGGATGCCACATCAGATCTGTTTTAATACTTTCTCCAAATGTCATGTCAGCAAGTTATTTTTGTTTTAGAAAATAAAAGAAAAAATATTTTAATAAATATTGTCAGAAAATCAGTGTTAATATTTTTTACTCCAAAAACAAAAAACAAAACAATACTTAAAATAAAATATTGATCTTTCTTGGATTCCAATTAAAATGGTTTAAACTAACAAAAAAATAGTTGAAAAGAAACTTAATATTTTATAATTTATTTCTGAGATGACAAACTCCAATTTTTTAATGACAGTTTTTATAAATTTTAGGTAATATAATTCATTAGTTGACAAAAAGGTAATATAATTCATTATTTTAATTAAAAATTAAATTTAGGTAAATTACAATTAACTAATTTTGAGAACATTAAGAATCTTTACACATAATAAGCACTATAAACTCTTTTAATTATATAAAGGATTAACATATATGCATAATTGAACAATATGCTAGCAATCTAATAATAAAATTAGCTTCTACAAATTAATTTTACAGATTATCCACCCATTAAGTTTAATTCGTTTACTATACATAATTCCAACTAATGAACCAAACTCAACAAAAACCAAAATCCAATAATTATTCAAAACAAAACCTCAATGAAAATGAATGAATAAATAAAAAAATAATGAAAACAAACCCAAAGTTTGTTTTGGGTTAAGAAAAACTATTTCTATTACAATCATCTTTAATAAAATAAAAATAAAACAAAGAAAAGGTACTTCAATTTGATTTTAAATATCATAAATAGATAGAATGTAAAAATATAAGCAATATAAACTAATTTTATATTTATAGTTAGGAAATTCTAAAAAATAATAAGAACTAAAAAACAATAAAAACATAAATTAAAATTTAATATAAACCGGGTGTATCCCGGTATTAACTCTAGTCATTAGAAAAATCATCATTAAGCAATCCCAAATGCGTTTGATCCACCATCAATGTCGCTTGGATCAAATCAAAACTGTGATGATTGACATATATAGTTAATACTTTTGAAACAATTTTCTCTGCCACACAATAAGAAAGGCGCATATGTATATAAAAAAGGGAAAATTTCTGAAAAAAATCCAATGCCAAAAAACTACCTAAACTTTTTTTGTTGTCAGAAAATACACAAATTAATCTGGGTTGGAAATAAAAAAACACGACCTATTATTTTTTCCGACTACCTCCTTTCGCTGTAACGGGCTGTTAACAACGTTAACCTAATTGTCAAACGCTGTTAATTTTACTTACAGAAAATTCCTGAAAAACACGATTTATTTAATATTTGCCAAAACAATACTAGAACTTTTTTTCGTTGCTAGAAATATATACATATTAGTTTAAAATTGAAATAAAAGCATGACTTAGTTTTTTTGTTCCAATTTCTCCCACTTTGTTGTAATGGTTATCAATAGGGTCAACCAAATAAAAATATAATTATTTTCTCATTTTCTTTGCACGTGATAAATAAGAATAGCTATAAAATCGATATTATCCCCTAATAAACCCATAATCGATTGTGGACATATCTTGAACCCTAGTTTTAACATACCACATCTATCTATTTAAGAAGCTAACCACAATAAATTGAAGAAATTAATAAGAAGAACCTTTAGTAACAACGGAGGTATTTTTTAATTTATTGTTGTTTAATTTATATGAAAGATGTTGAAAAAAACATTAGCAATTTAGGAAAAAACTTACCCATCAATAACATGATTTAGGTTGAAATTATTCAAGAACTTAAGGTTTCAAAGGATTTTTTTAATAGTCAAGTTTTTTAAGAATATTTTGTAAATAAAATTAACAACATTTGACTATTTGGTTAGGGAAATCGAAAAAATAAAAATAGATCGTGTTTTCTATTTCCAAGTTAAGTTAGTTTGGGTATTTTTCTGACAACAAAAATCTTCATGTATTGTTTTTGGCAAATATTAATTGTGTGATTGCTTCGTCTGTAACTATAGTTTTTTTGTTGTAGAATTTTTGCTGTATAAATGATGACTGTAGCTGTAGATTTTATTGCTGTATAAATTAGGTCGTGTTATGAATAAAGATGGATGCCCATTATAAGGCTAATCATCTAAGCCCATCATCTAGATGTTTCTAGGGTTTTACCCTTTCCTTGTACTCCTATATAAAGAACCTTTTTCTCAATGGAATACTACACTCATTTTCTTTTATATCTTTCTCTAGTTACAACACGTTATCAGCACGCTCTAAAAGGTAGATATAGAGATTCTTACATTTTTTTAAGAACAATGTTTACTTATCGACTCATGGTTCATAGTACTTATTTTATATTATTGAAACAAAACAATATGAGCCGATCGATGATTATAGTATAGATCGGTAAAAGCATGTTTTCAATGATTCAATAAAGAAGAAAATCATGCTTATCATTTGTTTCTCTAATTACTATTGCATGATTCAATGATTCTACAAAGAAAATCGTTAAAGAAGAGAATCATGCTTGTTAGTTGTTAATTTTTGTGATTTACTATTATAATATTGAATATATAAATTACCAATTTTATAATTATATAACTAATTTTGTAACTATTCACAGCCTGGTGGTGGGTGATGCAAGCATGTATTAATGTTTTAGCATTCCAGTTTCGAATAGTTGCATCTATATTCAATATCGTTTTGTAAATATTATATTGTCTAAAATCCATTTATGATTGATACGATATCCCTTATTTAACTCCTTTGATTAAAATGTTATACATATCTTATCACCTTTAGATATTGACTTTTCCATATTAAATATTTGATTTCCATATATTTGATTGTGTTATTATTATTTTTACTAAAAGTGTTGCAAGATAATTTTCTTTTTATAAGATACTTGTAATATTTTATTTTTCTAAATCTTTGTGGCATCTAAAAAAAACGAAAAAAAA
--------------------------------------------------------------------------------
/test/data/seq/a59/b6d/00/Chr5-1.txt:
--------------------------------------------------------------------------------
1 | AACGATAGATAATCTTATTTTGTGAATTTTCGTTACAAATAATATCTTATTGTTATAAAATATCTGTAATATTTTATTTGTTAATATATTTTGAAAATTAACATATATTCTTGAAATTTATATGATATGTAATCATTTATTTTTAATATTTCAGTGAATCATGTCAAAAACTCATGAGCTTTGAATTTGGAGCTCTTGATATCACGGGAGATAACTACTTGGCATGGGCACTAGATGCTAAAATTCATCTAGATTCAAAGGATCTCCTTGATACTATTAAAGATGGTAATCAAACTCCAAGCAAAGATAAATCAAAAGCTATGATTTTTTTGCGACACCATCTCCACGAGGATCTCAAGAATGAGTACCTCAATGTGAAAGATCCACAGATCCTTTGGAACGATCTAAAGGATAGGTATGATCATCAAAAGACAGTGATCTTACCTAAGGCCCGATATGATTGGACTCATCTGAGACTCCAGGACTATAAGTCTGTAAGTGAGTACAACTCAGCTTTGTTCAAAATAACATCCAAATTGGAGTTATGTGGAGAGAAAATCACGGATGCAGATAAGTTGGAGAAAACATTCTCTACTTTTCATGCTAAAAATATTGTCCTCCAGACACAGTACCGTGAAAAGAGATTCGTAAAGTATTCCCAACTTATTTCTTGTCTCTTTGTAGGTGAGAAAAACAATGAGTTGCTTTTGAAAAACCATGGACTACGCCCATCAGGTTCTGCTCCATTCCCTGAAGCGAATGTGACATCCTATGGTCAAGAAAGTGGTTACAACCATGGTTGTGGCCGTGGTCATGGTCGTGGTCGTGGTCGCGGTCGTGGTCGTGGGCGTGGATACACTGGAGGACGAGGCAATGGAGTTCACTTTAAGAACTCAAACTCTCACAAGAAGTGGGAAAACAAAGATGGTAACAAACAAGTGAAAATACCGTATGCGAATATCTGTTACCGTTGTGGAGCGAAAGATCACTGGTGTTGGTGTCGGATCCCGCACCATGGACTTGGGACCGGTCAAAGATTGCCACATAAGCAGGAGAGGCCCAAAAGAAGAGAAGCCCATAGGATACCCCGAGTTGATAGCACAAGCGAGGTTTGACCTGCGAAGTGGATACGGAATCAAGGTCAAAGTTACCCGGAGTGAAGTGTCGAATGGGCCGACAGTTGAAGCCCAAGAAGTTCGGAGTCAATTCAAATTCGACGTTTGAATAGATAATTCAAAGACTGAAACGGATATATTTAAGATAGAATAATTTTGTGTAAATGGGAATTTAATGTATTCTTTGGGTATAAATTATGGGTCAAAGACCATGTAAAGGGACACGCATTTTTGGGCAAACACACTATAGGCATTTTCCTACAAAGCTCATAGTTTTCTCGATAGTCATCAATCTATTTTCTAGTACATTTGTCCTCAAGAATAATCCTTCTCACTAAATAAATAAATACTTGAGTGTGTGAATCCGACATCCATATTTTGGCGCCGTCTGTGGGGACGGAGGATTCTTGAGTCGTCAGATTTTTTCTATATATTACATTTCCGAAGTGAGCCGTAATGTCTGGAGAATATGCTACCAAGGCTTCATTAGCCGAAACCCTCAAGACCATGCAACAAACTATGGCCGATATGGCGCAGAAGTTTTCGAATGTGAAAAAAACCGTCGAAACACTGCAAACAACCCATGTATCACTCAGCCAAAATGTTAGTACTATTCAGTCTCGTGTCCGTTCTTTGAATGCAGGCAATTCTACTAGAGTTCGGAGAACTATCTTCGGATCACCAAACTCCCTTCTGCGAAATGCAACGAGTGATCAAACGACCCCAGATGGTACAAACGCGGATAACCAACCGGAAGATGGAGAAACGCACCTCGAAGACGACAACCAGTTCGTCGATCAACACGAGCAATAAAACTTCGACCAGTTCGAAACCATGAAAGAAGTAAGCCGGGAATTGAAAGAAATGAGGTCAAAATTCTATCAAGCAACATGCTCGGAGCCGGATATCAACCGGGTCATCTAAGAAGCTAGGCGAACACCTTTCACCCCGCAAATTGCAAGCTTGAGAATCAGGGATTCTCGAAGACTCAACTTAGAACCGTACAACGGTTTGGAAGACCCGAAAGGCTATCTCGCCGCTTTTCTAATAGCCGCTGGGCGAGTTGATTTGAACGAAGCCGATGAAGACGCAGGATACTGCAAGCTTTTCTGTGAAAATCTGTGTGGACAAGCCCTGATGTGGTTCACTCAGTTGGAACCAGGATCGATCTACAACTTCAACGAACTATCGACAGTATTTTAAAACAATACTCAATTCTTCTGGATAAGAGCATTTTGGATACCGATCTCTGGAATTTATCTCAAGGGCCGAATGAGACACTTCGGGCTTTCATCGCTAAATTTAAGAACGTACTTTCAACGCTCCCGAGGATCTCACAACAGTCGGCTCTAGCGGCTTTGCGAAAAGGATTATGGCATGATTCGAGATTCAAAGAAGATTTGATACTTCACAAACCTGATACTATTCAAGATGCATTATTCTGAGCGAATAATTGGATGGAAGTCGAAGATGAAAAAGAAAGTTTCGCAAAGAGAAATAAGCAAGCGAAACCAGCAGCTACTTTTTCACCCAAGAAGTTCGAACCTCGGGAGAATCAAGGACCAAGGAAGTTTGGTTCACAACCATTCAATAATAACGTTGAAAAGTAATTTCAGGGGAAAGGAAGGTCAAATACCTGGGTTCGGGATGAGAGCTTGTATTGTGATATACAAAAAGTCACCGGGCATCTGACCAAAGACTGCAGTGTTTTTAAAAGGCATCTCGCAGAATTATGGGCAAGCGGAGATCTTTCAAAATTAAATATGGAGAACTTCGTCAAGCAATATCATGAGTCGAGAGATAACTCAGAAGCTCAAAACTCTAAGAGACCAAGACCGGCTGGCGAAGAAGAACCAAGAAGTTCAAAAGATAAAATCAACGTAATTCTTGGAGGATCTAAACTTTGCCGTGATTCCATCAGCGCAATCAAAAAGCATAGACGGAATGTTCTTCTAAAGTCAAGTTTAAGTGAAGAAGTAGATTTTCAAGGCGCTTCAATATCATTCAAGGAAAAGGAGACACAGCACCTCGAAAGACCTCACGATGACGCTCTAGTAATTACGTTGGATGTGGCTAACTTCGAGGTTTCAAGAATCCTCGTCGATACCGGCAGCTCGGTAGATCTAATTTTTCTTAGCACTTTGGAAAGGATGGGGATAAGCAGGGCCGATGTGGTAGGACCGCCATCTCCCTTAGTAGCTTTTACAAGTGAGTCAGCAATGTCTCTCGGAACAATCAAACTACCAGTTTTGGCGGGAAAGATGTCGAAGATTGTAGATTTTGTCGTTTTTGATAAACCAGCAGCTTATAACATCATCCTCAGAACTTCGTGGATCTACCTAATGAAAGCTGTCCCCTCTACGGATCATCAATGCCTCAAATTCCCAACTCCAAACGGAGTGGAAACAATTCGGGGAGACCAAGAAGCTTCGAGAACTTGTTATTTAGCTAGCCACCGATTGAAAATCCAATAGCAATTAACGAAGCCCGCAAAGAAAGAAGTAGTCCCGAGCTTTCCTAGCGGGCAAAAGGTGGACGATGTCGTGGTCTGAGTAATTCTAGAAGCAGACAAACCGGATCAGAAAGTTTGGATTGGAGCTACTTTGTCAGGCGAAATAAAGGGAGCTTTAATCGAGCTGTTAAAAAGAAACAAGAAATCATTTGCTTGGTCAGCAGCAGATATGCCCGGCATAGATTCGAATATAATTTGTCACGAGTTGAATGTGGACCCGAGCTTCAAACCAATAAAGCAGAAAAGAAGAAAATTCGGAGTGGAGGGAGCAAAAGCAGTAAACGACAAAGTGGTTAAACTCTTAAAAATAGGATCTATAAGGGAGGTGCAAAACCCGGATTGGGTGGCAAACACCGTTGTGGTCAAAAAGAAGAATGGAAAGGATAGGGTGTGCATCGACTTCACAGATCTCAACAAAGCTTGTCTAAAAGATAGTTTCTCACTCCCATATATAGATCGTCTCGTGGAATCAACTTGCCGGAAACGAATTGCTATCCTTTATGGATGCCTTTTCGGGATACAACCAAATCATGATGAATCCAGAAGATCAAGAGAAAACTTTATTTATCACGGATAGGGGCATCTATTGTTACAAAGTTATGCCATTCTGGTTGAAGAACGCGGGAGCGACCTATCAACGGCTGTTTAACAAGATGTTCAACGAGCATCTCGGGAAAACAATGGAAGTCTACATCGATGATATGCTAGTCAAATCATTGAAAAAGGAAGACCATGTTAAGCATCTAGAAGAGTGTTTCGCAATCCTTAACCAATATCAAATGAAGCTGAACCCAGCAAAATGTACATTTGGAGTCCCGTCCGGGGAATTTCTCGGTTATATTGTCACAAAGAGAGGAATTGAGGCAAATCCAAACCAAATTAACGCTTTTCTCAACATGCCATCTCCAAGAAATTTCAAGGAAGTATAACGGTTAACCAGTCGGATTGCAGCATTCGACAAAGAGTTTCTTTAGGATGAGAAGTGTGAAGAAGCATTCGGACAGCTTAAAGCGTATCTGTCCACTCCACCTGTATTATCCAAACCTGAGGCGGATGAGAAGCTCTATCTATACGTTTCGGTCTCAGGCCATGCGGTTAGTGGAGTCTTAATCTGGGAAGATTGGGGAGAGCAAAAACCAATTTACTACATAAGCAAATCCATGACAGATCCGGAGACCAGGTATACGATGATGGAAAAGCTTGCACTTGCAGTGGTAACCTCAGCTCGGAAGCTTCGTCCGTATTTTCAATCCCACCCAATCGAAGTGTTATCAAATTAACCGCTTCGAACAATTCTCCATAGCCCAAACCAATCCGGAAGATTGGCGAAGTGGGCAGTGGAGTTAAGTGAGTATGATATAGAGTACAAGAGCCGAGTCGCGATGAAGGCTCAAGTTCTTGCTGATTTTTTAAAAGAATTACCGGTACTTGGAGGACAGGAGCAGCCGGAAAATCAGTCTTGGAAGTTACATGTTGCTGGATCATCATCAAAAAATGGATCCGGGGTGGGAATCAAGTTAGAATCTCCCACTTCGGAAATCCTTGAGCAGTCATTCCGATTATTATTCACCGCATCTAACAATGAAGCAGAGTATGAAGCGTTAATTGCCGGACTCAGGTTGGCACAAGGAGTTGGAGGCGATGAAGTGGTCGCATATTGTGATTCGCAGCTGGTTGTTAACCAGTTCAATGGTGACTATGAAGCCAAAGATTCACGAATGAAGGCATATCTTGAGGTGGTCAAAGACTTGGCTAAAAATTTTAAGAAGTTCGAACTCATTCGCATACCACGAGGAGAAAACATAACTGCGGACGCACTTGCGGCTCTAGCGTCAACATCAGATCCCGAAGTCAAGAGAATCATTCCGGTATAATGTATTTCAGAAAGGACCATTAAGGAAGAAAAGGAAACACTCGTCGTTACAAGGTCTCGAGCCGCAGCCCAAGATCGCGGTGAACCTGCGATCGAAGTACCACCTGTCAAAAGACGAAAGTCAAAAGGAGCAACCGTACCTAAGCCTGTTGTGCAAGAAGATAATAGGCTCGAAGAAAATGTTGAACCAGTAACAGAACTCGCCCCGAAAAACACTATCGAAGCAGAGGCTGAACCATGGGTTGACGAAGACATCCTTCGAGCCGAATGAACATCCCGAACAGGAAGCTCAAATATTTCACGAAATCGACCAAATTCCGGCTAAAGATTGGGGGCTGATTGGAGGGAGCCAATAAAACATTACATTGTTACAGAGAGCTCCCAAAGAATAGATGGCAGGCTAGGAAAATGAGAATCGTTAGCGCGAAATTTTATCTATCGAAGGATTCTTTGTATAGACGAGGTGTAAGCGATCCCTATTTACTTTACATCTTTGGGCCCGAAGTTGAGATCGTTATGAGCGAAGTGCACGAAGGTTTGTGTGGAAGTCATTCCTCGGGTAGGGCTATGGCTTTCAAGATTAAGAGGATGGGATACTATTGGCCTACTATGATCACGGACTGTGTTAAGTATGCTCAGCGATGCAAACGTTGCCAACTCCACGCACCTCTCATCCATCAACCTTTAGAGTTATTTTCTTCGATCTCTGCCCCATACCCGTTCATGTGATGGTCGATGGATATCATTGGACCATTGCACAGGTCAACTCGAGGTGTACAGTATCTCTTGGTCCTAAATGATTACTTTTCGAAGTGGATTGAAGCTGAAGCATATGTAAACATCGAAGATTCGGCGGTAAAAACTTTCATTTGGAAGAATATCATATGTAGGCACGGCGTCCCATACGAGATAGTTACGGACAACAGACCACAATTTATCTCACATGAATTCGAAGCTTTTTGCTCGGATTGGGGGATTAAAGTTAGTTATTCCACAACGCGATATCCACAAGGGAACGGTCAGGTCGAGGGTGCGAACAAGACAATTCTAAGCAATCTTAAGAAACGATTGAGTCATTTGAAAGGAGGCTCGTATGACGAACTTCAGCCGGTTCTATGGGCATATCGCACAACTCCTAGGCGCTCGACCGGAGAAACCCCGTTCTCATTGGTGTACGGAATGGAGGCAGTTGTCCCAACTGAGCTTAATGTACCAGGACTTCGTCGAACAGAAGCTCCTTTAAACGAAGAAGAGAATTCTGCGATGCTGGACGATTCGCTAGATACCATCAACAAGAGGCAAGATTGATCCAAATTCAAAATTATCAATAAGCAGCAGCTCGGTATTACAATTCAAAAATCAAAAGCAGACCTTTCTTTGTGGGTGATTATGTTTTGAAACGTGTGTTCGATAACAAGAAAGAAGAAGGAGCAGGCAAACTTGGCATTAATTGGGAAGGTCCTTACATTGTTACCGAGGTGGTCCGGAATGGTGTTTATAGATTGAAAGACTTGGAAGACAGACCAGTCCAACGTCCTTGGAACGTGGTGAACTTGAAGAAATTTTATGTTTAAAAATGATACGCATTTTTGTACATGAACTACGGTGTGGCTTGATCCCGAAATGGGTACGTAGGCAGCTCGAAAACAAGTTCAGCTATTAATAAAATTTGTTTTATTCATTTTGAAGAATAGTTGATTATACGAACGAATCAAGGAAAGGAGTTCGACTATGCGAACGTACAAAGCAGGAAGCAAGGTTACATTTATTCAAAGGGAAAATGAGGAAAAGATGCCAAAATCTTGGACACACTTCAGGTTAGGAAATCCTTCTCGTCTTGCACAACACTTCGACCCCTTGGTTGGCGAGATCGAGAATGGGCATCATACAATCCGGGATACGTGCGAATTCAGCGATTCCGAGTTCGATCCAGTCTCTGTGGTGAGAGTTGAGGGTGTGTAACTCCCTTGATATCACGGTGATTCTCCGTAGCATCTGATTGATCTTCTTTCGAAGTTTCTTCTTTTCCGTTGAACGTTTTTGGTGTTGAGCCGCGAGAGCTTTGATGAAGGCCATCGCAATTTCTTGATCTATGCTTGAAAGATCTTTGATTAGTGCACACAGAACTTGGATCTGGGATCTAAAGTTGCGAAGTGGGGAGCGTCCCCTATCCGGCACATTCGGAATGTCCTCATCGATCATTCTGACCCTGGAAAAGTCTGGCATGGACTCCGAACATCGAAGGTTAAAAGCCATAACTGCACCAAAAAAGATATTATTATAAGAGGGACTCTTAACTTTCAAAGATGTGATTCCATTCAAGGCCGGAGTGATTCGCGGCAGCATTCACGTCGTCCTACTCGCCCTGCATTCAAAGAGTATCTCCGAGACGAATATTTAAAAATCAAGGAAATTTGGAAAGTCTCCTTAAATAAAAACGGGCCAAAGCCCAAAAGAAAAGTCCATACAAAAATAAAAAAAAAGGGTTTCAAGTTTCGGGGAACATTTAAGAAAGGGGTTTAGGAACAGGTTCCTTCATCGCCGGTTCGGGGTTCGAGATGGATGCCTCGTTCTTAACATCCACATCGGGCTCGTTCTTCACACGCTTCCAAGGGTTGCTGTCTTCTTCTTCATCGTCACCCTCTTCGCTGTCAGACGGGATCACTTGGATCAGAGCGTTTACGAGACCGGGGACTTGACCTCGAGCACGGAGGTACATCCGAAGCATGTGCGGGATCTTCGCCACACAGTCGAAGTTCCTCCACTCCCATTGAAAGGGATCGCTCTCCATAGCCCTTACCTTCCTCTCGATGCGGGCAATTCGGGCCTTGAGCGTTTGCCTCTTGAGGCCCAACCGTTGCCTCTCATCGCATAAGCGGCGGTGTTTGTTGACGACCTAGAACAAAGTTCTTTAGTTTGAGTGGGAGTCTTTCCGATAAGAAAGAGGGTAAAAGACTTACCTTGTCTATAAAATCGTACGCCTCTTTCTTGTCATTCGAAGGAAAGTGAAAGCAAGCATGAGGAAAGAGAACGCCGGCGGGCTCAAAGTCATCGCCGGACAGAAACAATGGACTTCTGGGGTCGAGATGGCATACGGTGGAGGCTCTTTCGTTTTCCATTCTTGAAGTGTTTACCAAATAAATTTCTGAGATCATATTTTGAGGCACTAATGACAGTTTATGCTCTTATTTATAGAGGGTTAGGGTTTTTACTCGAAACCACTAAATTAATAATTGTGGCGTGTCTGAATGGGTTAAACCGTTTTTGGGAATCGAGGAAAAGGCAATTATTGCCTTAGAGGCTTGAAGCTTTTCCTATTTTCCAAGGAAGAAAATGGCAACCATCGCATTTAAGACAAACGGTTCATTAAATAAAAGAAAAACAATTAAGGCTCAAGCACAGTAAATCGAACTGACCAAACCCGAGTTGGGGAGTTCGCGGAATTAAAACGAGTTCAAACTCACGTTTTCAGAGATAGGCCTGATCAACCTATAAATCTCGTAACTTGACCAAATGGTTAAACAAAGAAGCTATTTAAAAGATGGACTTTGCAAATCCATACTTAAATCTAGTAAAAACCCTCTTGGGATCATTGTCTTAAAAAAGGTTTAAAAGTCTCCTCAGGCAAAATACTTGTTAAGAAATTAAAGCCTACTTAGCCGATTAAAATAGTTCAGAAATAAACTTCGAGTTTGCTAACAAAAAGGGACAATCCCCATTAAGTGGACACAGCCACTACGGATCTTCAGCCACCTCGAGTTCAGGTTGAGTTGGCTCAGGATCGACCGGGTCCGCGGCAGCCGTTTCAGTTTCATCCGGTTCGTTGGCAGTGAGCTGTTCGGTAGGCATCCCAAATTCTGAACCATCGTCGTCCTCGATGACCACTGTTTCAGAGTTTGTGGATGGGGGAATTACTGGCGGGATGGCTGCCATTTCAGGAGTTTCAACCGGGATAACGGACACCTCGGGTTCCACGGGGTCACTGGGACCTGAAACAATTATCTCAAATCAAGAAAGACGCAAGAGTAACTTATTGTGGTTTTATTTCAAAATTTTGAGGCTTTTAAAACTTACCGGCCCAATCTAAACCAGACTCGCTCAAAGGAGGTGAGTCGGTAAAGAATTCCTCGAACTGTTGAGGGTTGAATGATGAAGAAGGAAGAGCGACCAAAAGACTTCGCTTCTCTGCTAAATCGGCTTCCAACTCGGACCTTTCTTGCTTCTCGGAAGAGTCTTTATCATGGGTTTGATCCAGAAGGAGGAGGTTGCTCTCGTATTCCTTGATGTCCGATTCCAGCTCCGTCCTTGCTTTCTCGGTTTGGATGAAAACGATCGCCCCTTGAATCAATTCCATCCCGTGACCTTTCACTTCCTTTCTGGCTTTCGATGCCGACCTCGCTAACTCAGCATCCAGTAGTTTGGCGATTGCCTTGTACTTGAGCTGCAATTCAGATAGCTGGTTGGACAAGTCGTAGGCACTGGATTCAGATTCCGAGAGTCTGTCCCGAGCGTTTGAGAGTTCCTCCTGGATCTTGTCATACCTCTGGTATTGATCCTGCAGCTCGTCGTTCGACTTCATGAGTTCAGAGGAAAGATTGTCCAATTGATCTTCTAGTTTTTGCCTTGCATCAGTTGAGGAGCGGAGCTCGGACTCGAGGGAAGAAAACATGTCTTTCCAGGCCAATACTCTTGTTCCCTGTCGAGCAACAACCTCTCATAGTATTCAATCATGTCGTTGAGTTCGCTGTTTGCCTGAACCAAGGGTTACAAAGGTAAGTTAGCATATGAGCGAAAAAATGGAGTTAAAAGATTACAAAAAAAACTAACCCGAGATGAGTGATAAGCGTGAAGAAGGAATCGCTCGCGAATTGCAGGGCGCCACCTGTCGAAGGTTGGCAGGATTGTGTCCTGCCGAGTCTTGAAGCATCGGAAGACGTTTCCTCTGTTTCCATCGCTGTCAAAGTAATAAAGAAGATTTGAAACTCATGTATGGGAAGTTAGGCCAGTGAATCGAACAATATAGTAAGTAAGAGAGTAAATGGTAATTACTAACGTGTGAGTGACTTGGTTTGAGGAACCAGTACGGCCTTAGGATTGACATCTCGGGGTTCAACTTCTTCTCGCCGAGGATTTTCACTCTGACCGGTCTTTTCGCTCCCAAATTTGGAAGAAGATGCGATGACTGGAGGAGGGGGACCAATTGAGCGAGGTGGGGGAGACAATCGAGGAGAACGGTCAGTTCGAGCTCTCGTCTTATCTCTTTTAGGAGAAGAACTGCTGCGGGTTGCTCTTTCCCTCTTTTTCCGATACAGGTCTGCTATCGGCTCGCTGCTTAACCTAGTCTGAGAAGCAGGTCGAGGCAAGTTGCGACGTGGTGATTGGTCTCTGCGAGGTGACCGGCTACCATGGCCTTCACGGTGAGGTGTAGGTCTGTATGCACCAGCAGATCTTGCACCTTCAGCGCTACCATCATCAACCAGGAGAGTTCTGCTATATTCCTTCTTGTCAACAGCGGACTGAAGGAACGACTTGTTTGCTTCACAAGCCTCTGTCATCGGCTTGGATAAAGTCTTGCGACGAGAAGCGATGGCCCTAGCAGAAGTTCCGTGAGGCAGAGGTGGAGGTGGTGGAAGTTGAAGTAGTTGTCCGGGAGGATTCGTCATGAGCTTGTGATTGGCTTCGACGAACCGGTCGAGAGTGAAAGAATTCCAAAGGGTCTCTCCTTCAATGACGATCTTGAAAAATTCGACGAACTCTACGGTCGGGAGGGTTAGAGTGATAAAAGCTGCGAGTTGAAAGCAATAAAATCGATTAAATCAGAAACAAGGATAAGCAAAAATCGTACGTGACCTAATTTCTACGAGGTTTCGCAGACCACTTCGATGGAAGCATATCGGAAAGGTTTCCAATCGAGGCAGGGGTTTTCTTGACCAGGAACCAAGGATGATGCCAATTCTCATCCTTGTTCAGGAGATTCGAAATGAGGTTCTGATTGGCGTTCGGGTACGCCGAGAAGTACCCAGTTTTCTTCGACGAACTCCTAACACTGAGAAGTTCATTCAATTCGGGAACCCTAATGACGAAACCGGCCTCCGCCGCAATGGTGATAATGCACAAGATGGTGCGGAGGAGATTGGGCGTCAACTGAGGTAGGGCGATTTCGAGAGCGGCCAAGTATCGAACCAAGGCTTCAGGAAGAGGGAAGGTCAGTCCGCAGCCTTTGAAGTAGATTTCATAGACGCAAAAGAACCCGGGACGGTGGTCCTCCGGCGATTCAGTGGGCTCCGACATCTGCGAATCTCTCATAATCTCAGCCGGAATCCGACAGAGCTCTCCCAATCGATTGAGGGATTGAAGAGTGCATGTGGATTGATAGTGAGGACCAGCGATATTGTTCGGCCGGGTGCAAAGGTCGTTACTAGAACCACATTTTCGAAAGATGGGGATTCGGGCCTTTCATTTTCAGAATTCATCGTGAGAGAATGAGTAAACTGAGGGTTCGAAGGATAGAAAATGTAGAGAGGAAGAAGAAAGGGACTTTGCTCTAAAAGAAAAATGAAGCGTGAAAAGTAATAAGGAGAGAGTAAAGCGAATTTACCTTACGCAAGCCAGTGACGATGATGGAACCGTCTTGGAAGTCGTGGGGGAAGTGGAAGAGTTTCCTCGCTTTAATAGTAAATAATTGATACGCAGTCATAATTGTGACAAATTTCACGAGAGTAATTATGGGTAATTCCGAAATCAAAGCAATAGCGTGGTTTTGGCGGGAAATCAGAAAGTCACTTGGCGCAATCTTCGCCCCTTAGAGCATTAAAGTCTTCCGAATTAGAGTTTCACTTCGAAAGACTTGGGGGGCTAATTGTTGGTGTCGGATCCCGCACCATGGGCTCGAGACCAGTCAAAGATTGCCACATAAGCAAGAGAGGCCCAAAAGAAGAGAAGCCCATAGGATACCCCGAGTTGATAGTACAAGCGAGGTGTTGACCTGGGAAGTGGATACAGAATCAAGGTCAAAGTTACCCGGAGTGAAGTGTCGAATGGGCCGACAGGTGAAGCCCAGGAAGTCTGGAGTCAATTCAAATTCGAACGTTTGAATAGATAATTCGAAAACTGAAACGAATACATTTAAGATAGAATAATTTTGTGTAAATGGGAATTTAATGTATTCTTTGGGTATAAATTATGGGTCAAAGGCCATGTAAAGGGACACGCATTTTTGGGCAAACACACTATACGCATTTTCCTACAAAGCTCATAGTTTTCTCAATAGTCATCAATCTATTTTCTAGTACATTTGTCCTCAAGAATAATCCTTCTCACTAAATAAATAAATACTTGAGTGTGTGAATCCGACATCCACAGACATGGGTTTGTTTTTTCCTAACCAATCCAAGGAAGATTTAATTGGTTTTGCAGATGCAGGATACTTATCTGATCCCCATAATGGTAGATCGCAAAGGATATGTCTTCACATGCGGGGGTACAGCTATTTCTTGGCGCTCTATGAAGCAAACTATTTCAGCCACATCTTCTAATCATGCAGAGATTTTAGCAATTCATGAAGCTAGCTGTGAGTGTGTATGGCTAAGATCCATAGTTCACCATATACAAGAAGACTGTGGTATGTATGCAGGGAAAAAGACTCCAACAATTATGTACGAAGACAATGCAGCATGCATCGCACAACTCAAAGACGGATACATCAAAGGCGATAGAACAAAGCACATCCTACCAAAATTCTTCTTCACACACGATCTACAAAAGAGCGGCGATGTACGAGTTCTACAGATCCGTTCGAATGATAATCTGGCTGACTTATTCACCAAGGCGCTACCTACTGCTATTTTCAAGAAGTTAGTCTATCGTATCGGATTACGCTGTCTCAAATATCTCGATGAATATACTCATAAGGGGGAGTAATTGTATGTTGCACTCTTTTTTTCTTAACCATGGTTTTTCTCATTGAGTTTTCCTGGTAAGGTTTTTAATGAGGCAGCATTTCAAATACTTTACCATTATGGTACTATAATGGTCATCAAGGGGGAGTGTTATGAATAAAGATGGATGCCCATTATAAGGCCCATCATCTAAGCCCATCATCTAGATGTTTCTAGGGTTTTACCCTTTCCTTGTACTCCTATATAAAGAACCTTTTTCTCAATGGAATACTACACTCATTTTCTTCTATATCTTTCTCTAGTTACAACAGGTTGTAGGTTTTATTAATTTAATATTATTACTTTGTAGAAATAAGATTATGGTTGTATGTATTTATAAACAAAAAAAATATTATTGGTAAATTGTACTTATGTGTTATATAATAGAATTCACAAATATCAAATTTAATATATATATATATATTGAAAATAATGTAAGTTATATATATGTCATAAAATAGATATTTACCTATTATTTATATCCATAAAACTAAATTTAATATATATATATATATATATATGAAAACTATAGTAATGTTTTTAAAGAAAATAAAGTGAAAAGAAAAAGAGAAAAAAGATACAAACCTTCTAAAGACCATAAAATTGTGCTTTAGAAAAACATGAACTTATCAGACAAAATAATTGAAAAAAAATACTATTTGGACTGTTAGAAAAAATAGGAAAGCTAAAGCATGATTATTTCAATTTTGGGGCTGTAAATTTTTTAGTGGCTTTAAAAATTTCCTACCGTCCAACCAATCATTTAAGTTAGGTTTTTTCGAGGAATTTTCTGTAAATAAAATTAACAGGGTTTGACGATTTGGTTAACATCGTTAACGGCCCGTTACGGTGAAGGGAGGTAGTCGGAAAAAAATAATAGGTCGTGTTTTTTTATCTCCAACCCAAATCAATTTGTGTATCTTTCTGACAACGAAAAAAATTTAGGTAGTTTTCTAGCAGATTTTAAATAGTTCGGATTTGTTTTGGGAATTTTCTCATACAGAAAATAAAATTGCACAAAAAATTATTTTGCTAAAAATATAGGTTCAGGACAACCAATACATATGGGTTTTTTCAGACAAAATATATCATAAAATTAACAACTTTAGGTGAAATTCAATATGATAAGGATTTGGTAAATTGAACTATAAACAATTGCAAATGAATAAGTGAAACAAAAAACAGCAAAGGAACTGCACCCGCCAATAAAAAAAAAAATCAAGCTAAGGAAGGCTGTATTTTGGAACATACAGTTTATATTAATGTTATACTGCTAAATTTAGTTATTTTCTAAAATTTGTTTAGTAAACATATTCAAGTAATTTTTTTCTTTGTAAATACTCTTAAAAATAGTATATGTTTTTTGGTTTTCTTTGTTTTTGTTAAACGATCTTGTAATAGCACTATTCGGGAAAACTAGATAATTCTCAGATCTCTTTCTTCTCTGCCTCTGTAAATCCGCCATGGCTCAATGAACTATTATGTAAAGACTTTTTAAATTAATATAAGTAATGTTCTATGGAAAAAAAATCAAGTAATAATAGTAGGAAAATTGTATTGTATAACCATCAAAAAACTTTATAATTAAACAACTAACCATTAAAAAAGAAGCAGTGATATTTTATGTAATATATACATATTTACCCTTGCTGATACATGTGCCTCAAAAGTCAATTCTCTACTTCTCCTTACCACCTTGAGTGCTTCATTTCTTTTATCTCGATTGGGTTTCCAAACCAGCTAAATAACGTGAATGTACTATACTGTTATCGTTATGGAATTAGCGATGTAATCAATAGGATTTTATTTGATTTGGAATTCTTACAAACAAATTTAACACTAAATACATATGTAACTAAGATTATCATGAACTATACTATTATTTTGATTAAAAACTAATTACAAGATTGCATGTTTTTTTCATAACTGTGAATATTCTATTTGATTATAGAAAATTAAAAATTATGTCAAGAATATTTAATTATATTTTAATTATCCGTAAACAAGTTTACAAAACAATTTCCTTGTATTTTTATGATATATAGTCCTTTTTTTGACGTGCATTTAACTCAATATTTTTAAATCTTATTTATTGTATCGTTTAGAATAAAACGTTACTTATTTGACTTCTGTTTAAATTTAACTTTTGGGTTTCCTATATAATATCTTTTAGGGTATAGTTTTTTCAGAAAATTTAACACATATATAAACAAGTCTTCAATCTTCCTCTTTATTGCTCCATGTTATTTCATAATCTACAAACATCTTCTGTTTAATCTCACCATTATTGATAATTTCATTAATTCCACAAATAAGAACCAAAAATTCATCATAAAACTTATAAATTTTGTTGCTTGGGTTTTTTATATACCATCTTAAGGTTTAGTTTTCTCTAATTAAAAACAATTAAAAATCTTATAGGAAAAAAGGAAGCAACCTTTGTTGAACAAAAAAGAGACATAGGCCTCACAACTAGCCTCCATCTCCTTGTCACTCTCACCACCACCACCGCCACCGCGGTGACCACCAACAACCATCACCATTATAACTAACACCACCACTACACCATCTCTATAATAAAATTAAAATTGATTTACGAATGATATATGAAAATAGTATAGTACACCATATTACTCCTATACATCCTAAATAGTACAACATATTTTTACTTACAAACACTATCTACTATTTTATAAATTTAAATCCTATTTTAAAAATTCAAACTATGTTTTATGTAGAAAAACATATATTTTTGTGTAATAAATTTCAGAATTGAAATCTATTTTTTGAAAAAGATATATAGCAAAAAAAATACAAATGAGTGAAAACTAAACTAAGTGTTACTAAATCATCTCACCAACAACTCTACACCAAAATTGTCTTTTCTCACCCTTTACATGCTATTTTCTTAATTTATATATATATGATGCTATATTCTTAATTAAGTATCAAAAATATCTAGTTTTGCAAATCACCCATAATAGTATTCATATATTAAAATAACAAAGCATGTAATTTTTATTAATCAAATAAATTATTCCAAAAAAATCTAACATTTTGAAACGAATGGGAATATTAATTATATTTGTCTATCGTATATGAAGACTCAACTACGTTTTCAAGACAAAAACAACGAATTTTTATTTTGTTTAGTAAACATAAATCTAAGAATTTGATTGATAATATACCAAATAAGGCCTTGATTCTGAAAATAGGTAGGACTATGGTCCCCCAACCTTGTCCAACGCATGTGTTTTGTACCATGCTTCCTCACCTACCCACTTCTCTCAATTCCATATTTATGTGTATTCAAAGAAATTTGGTGGAGGCTTTTTTTTGTATATATATATAAACTATGGCTACCAGAAAATTCTCAAAAAAACAGTTATCAGTTTGAGGATTTGGGAAAATTTTACAATTTCTATATGCTGGGTCAAAAGTCAAAAAATAAAATAAAGTATATATATATATATATATATATATATATATAATCAGAATTGTTTATCGTCCAAAATACTACGGAGTACGTAAACTCTTGTAAACGGATCACACAAGAGTACGGAAACCTTAGTTACCGACAACTAAAAGTATACAATGATCAAACGGACATAAGTGGATTTGATTGGCAACTAGTAAAGTCAAATAGATATATAAATTGAAATAATAAATAAAATGGATACAAATTAAAAGAAGTTTGACCCAAAAAAGAAGAAGAAATGGATACATAAGAGCTAATAAAAAGAAGGTTTAAACTTAAAAAACAACTGGATTCTCTTTAACACAAAAAACTTGAGATGCATTTTGTTGACGCTAATGTTTGATAACATTGCTCCTTAGGCGTGCTATACTAGGGGTGTGAGCCAAAGCACAATTAGCCTTACCTAAATGAATTATTGTGTTGCTTAGGCATGTTAAACTGAGAGTATGAGTGTAAACAAATATCAGCAAGTTCGTCCCAAAAATGATAAATTAAGCGATGAGGTAAAGAGATTCCTCTAATTTAAAAACCACGTAGCGCTAAACAATTAATCTAAGTTTTGAATTATGATGCAGATATTGCTGATCGAGAATTTTACAACTAGGCAACCAAAGTTAAGAAATAGATTGAGATTTTTGATTAGGTTGAGGCACAATAGGGTGTGGTTATGGTACATTGTTTTGTATAAGGATCATGTATGCGTGGGTGGTATGGGACTATGAGAGAATAATACGCGAACATGATCAATAAATATTGACAAGGTGGTTGAAGAAAAAAAAAGATGAAACTCGGGTTCATATAGAAAAAAATCCAAAGCTGTGAATGATGCATGCAAAATTCGGATTAACCCATTTATTTCTTATGTATAAAATGATTAGTGCGTGAGATAAAAAAATACTCATGATAGATAGACTAGATAAAAAAATACTCATGATAAATAGACTAAGATTTTTATTAGGATTTTGTAAAAAAAAACCTTCAAACTTGTTCATTTTTGCAATTTTATTTCCATTTCCAACAAATGTAAATTAATCCTATGAAGTATAAAATAATACGCATTATAACATTTTTGCCTATTTTTGCTATTATCAATTTTATAAAATATTGATATATAGTTTTTTAAACCGAACTCGAAAAGAAGAGTTTAACCTTACCTTCAAAATTTTAAAAATATAATCTAATGTGTGTGACCTTATAAACGTTTATAATATACGTATAAGGATCATATTGCGTATCATTTTAGACTTCAAATGATGAACCTGCATTTGTTGGAGATGAAGGATAAAATTCCAAAAATAGATTAGTTAAAGAATTTTTTTGCACAAAGCCTATTTTTTTCTTTGATGTATGTAAGCTTATCAACTGAGGTTGGTCAAAAATGGATTGAATAAGAACATGTCGACCATAAACCAAATAATTTAGGTTTTAGATGTTTTAACACTTTGCTAGAAGCCGAGTATATATAAAAGGATATATGACTCAAGTTTTAGGACCGAATTTTGTATAGTTGGTTTGGATCTCCATAATCTCAGAGCTTGGTGGTCAAGATTGTGCCTCGTAACCTCGTTATCCAAAAATGAAGTAGAATGTGAGTCGAATATCGTGAATTCGGTACCCTCTCGTTAGCTCATAGTGCGTTGAACCCTTTATCTCGAATTTGTCAAAACAAATTGATATTTTGTCGTGAAAAAAAAAAGTTCAGACGAAAAATAGTGGTCACAAGTCTTGTTCGAATTGATACCCGAAAAAACATCTTAACCAACTTAAAGTAAAAATTTAAAATCGGAAATTTAAATATTACCCTAAAGTTTTAAAAGGCGGACTTTTCAACGAAGGTTTATGCTAAGGTTAAAAAAAATACAGAAACGCTTTCTCACATTTCCATTTCAATAAATATATATCAGTCGCCACCCAAATTTCAGAATTGCTTCTCTTAGTATTTGCTTTCACCAACCCACTCGACGGAGTCTCCAACGCCTTCCTCCTCATTCTCCACTCTCACACCACCAACTTCTGATTCCAGATCTCAACGATGCAAAGCTCCGCCGTATTCTCCCTCTCTCCGTCGCTTCCTCTCCTAAAACCACGTCGGCTCTCTCTCCGCCACCATCCCATAACCACCGCCGCTTCTTCAAGCGATCTAAACGTTTCTCCAAATGTTGTCTCTATTCCTTCTTTATCTCGTCGATCTTGGCGTCTCGCTTCGTCTGATTCGCCTCTCCGTGCTTGGTCCGGTGTTCCTTCTCCGATCTCTCACTCCTTAGACACGAATCGTTTCAGAACCGCCGCTACTGCAGTTCCTGAAAGTGCTGAGGAAGGTGATAACAGTGGTAAATTGACGAAGGTTTTGGAACTTGGCTTGTTGTTCGCTATGTGGTACCTTTTCAATATCTACTTCAACATCTACAATAAACAGGTACTCCTTTGCTTCTCTACATGCTTAGTCTACTCCACTGTTTTGAATCAATGGAGAACTCAGAAATCTTATAGTCAATAGGATACTGGAGAGAGATTTTGTTCTGCTGATTCCGAAATTGGTACTGTTCATTGTGTTTTGGCTAATTGTTGTAAGTTCATAGTTTCAATAGATTGAACTAATCTTAACGATTGAGATTCATTTTTGTGTTTAATCGTGTTTTGATTAGGATGAAGTGTTCAGAAATTTGAGAGATATTTTGTTCTGCTGATTCAGAAAATTTCAGTGTTTATTGTGATTTGGCAAATTGTTAGAAGTCTAACTTTTGATTCTATCAAAAAATGTAAAGGTTTAGTTCAATCATGTTTTGATTAGGATGAAGAATTCAGAAATTTTATTATATCTTATACAGGAGAGAGATGTGTTTCACTGATTAGTTGATTTTATTGTTTGATTTTGAGGGAATCAATAGTTAGTTTCTTGTTTCTTCTTATTCTTGCAGGTTTTGAAAGCTCTACATGCTCCAATGACTGTGACTTTGGTTCAGTTTGCTGTTGGTAGTGTGCTCATTACTATCATGTGGGTTCTTAACCTGTACAAGAGACCAAAGATCAGTGGTGCTCAGGTGTGTGTGTGTGTGTGTGTTTTTAATGGAGGCTGGTAAAAGCT
--------------------------------------------------------------------------------