comparison test-data/test1_report.html @ 0:5367786dc871 draft default tip

Uploaded
author greg
date Tue, 14 Mar 2023 15:21:14 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:5367786dc871
1 <!DOCTYPE html>
2 <html lang="en">
3 <head>
4 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
5
6 <style rel="stylesheet">
7 /*!
8 * Bootstrap v2.0.4
9 *
10 * Copyright 2012 Twitter, Inc
11 * Licensed under the Apache License v2.0
12 * http://www.apache.org/licenses/LICENSE-2.0
13 *
14 * Designed and built with all the love in the world @twitter by @mdo and @fat.
15 */
16 .clearfix{*zoom:1;}.clearfix:before,.clearfix:after{display:table;content:"";}
17 .clearfix:after{clear:both;}
18 .hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0;}
19 .input-block-level{display:block;width:100%;min-height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;}
20 .tooltip{position:absolute;z-index:1020;display:block;visibility:visible;padding:5px;font-size:11px;opacity:0;filter:alpha(opacity=0);}.tooltip.in{opacity:0.8;filter:alpha(opacity=80);}
21 .tooltip.top{margin-top:-2px;}
22 .tooltip.right{margin-left:2px;}
23 .tooltip.bottom{margin-top:2px;}
24 .tooltip.left{margin-left:-2px;}
25 .tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;}
26 .tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;}
27 .tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;}
28 .tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;}
29 .tooltip-inner{max-width:200px;padding:3px 8px;color:#ffffff;text-align:center;text-decoration:none;background-color:#000000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
30 .tooltip-arrow{position:absolute;width:0;height:0;}
31
32 </style>
33
34 <style rel="stylesheet">
35 /* Main things */
36 html, body, div, span, h1, h3, h4, h5, h6, blockquote, pre,
37 em, sub, sup, dl, dt, dd, ol, ul, li,
38 fieldset, form, label,
39 table, caption, tbody, tfoot, thead,
40 article, aside, canvas, details, figure, figcaption, footer, header, hgroup,
41 menu, nav, output, section, time {
42 margin: 0;
43 padding: 0;
44 border: 0;
45 font-size: 100%;
46 font: inherit;
47 vertical-align: baseline;
48 }
49 body {
50 margin: 0;
51 font-family: Lucida Grande, Verdana, Arial, sans-serif;
52 font-size: 12px;
53 color: black;
54 padding-bottom: 30px;
55 }
56 a {
57 text-decoration: none;
58 /*color: #0c4f72;*/
59 color: #0077B5;
60 border-bottom: 1px solid #487b95;
61 border-color: #487b95; /* #487b95 */
62 border-color: rgba(12, 79, 114, 0.2); /* #0c4f72; */ /* #a0d2eb; */ /*rgba(0, 88, cc, 0.3);*/
63 }
64 a:visited {
65 text-decoration: none;
66 color: #8C66B2;
67 border-bottom: 1px solid #8c66b2;
68 border-color: #8c66b2;
69 border-color: rgba(102, 51, 153, 0.2);
70 }
71 a:hover {
72 text-decoration: none;
73 color: #b33; /* #0088cc; */
74 border-bottom: 1px solid #ffcccc;
75 border-color: #ffcccc;
76 border-color: rgba(255, 0, 0, 0.2); /* #55b2e0; */ /*#005580;*/
77 }
78 a.dark_bg_link {
79 color: white; /* #0088cc; */
80 border-bottom: 1px solid #cccccc;
81 border-color: #cccccc;
82 }
83 a.dark_bg_link:hover {
84 color: white; /* #0088cc; */
85 border-bottom: 1px solid white;
86 }
87
88 .leading_link_dot {
89 border-bottom: white solid 1px;
90 }
91
92 a.header_link, a.header_link:hover, a.header_link:visited {
93 color: black;
94 border-bottom: 1px solid #bbb;
95 }
96
97
98 .dotted-link {
99 cursor: pointer;
100 text-decoration: none;
101 /*color: #0c4f72;*/
102 color: #0077B5;
103 border-bottom: 1px dashed #487b95;
104 border-color: #487b95; /* #487b95 */
105 border-color: rgba(12, 79, 114, 0.2);
106 }
107 .dotted-link:hover {
108 text-decoration: none;
109 color: #b33 !important;
110 border-bottom: 1px dashed #b33 !important;
111 border-color: rgba(255, 0, 0, 0.2) !important;
112 }
113 .js:visited {
114 color: #0077B5;
115 border-bottom: 1px dashed #487b95;
116 border-color: #487b95;
117 border-color: rgba(12, 79, 114, 0.2);
118 }
119
120 .selected-switch {
121 background-color: #fafad2;
122 }
123
124 .json-code {
125 display: none;
126 }
127 .smallcapitals {
128 font-size: .875em;
129 letter-spacing: .15em;
130 margin-right: -.15em;
131 }
132 .highlight {
133 background-color:#FFF9B5;
134 padding: 0 3px;
135 margin-left: -3px;
136 }
137
138 ul.list {
139 list-style-type: none;
140 padding: 0 0 0 2em;
141 margin: -0.5em 0 0 0;
142 }
143 ul.list li {
144 margin-bottom: 0.7em;
145 }
146
147 ul.mdash {
148 margin: -1em 0 0 0;
149 padding: 0 0 0 2em;
150 }
151 ul.mdash li {
152 margin-bottom: 0.7em;
153 list-style-type: none;
154 text-indent: -1.3em;
155 behavior: expression(!this.before ? this.before = this.innerHTML = '&mdash;&nbsp;' + this.innerHTML : '');
156 }
157 ul.mdash li:before {
158 content: '\2014\a0';
159 }
160
161 .small_line_indent {
162 height: 0;
163 margin-top: -7px;
164 }
165 /************/
166
167 /* Tooltips */
168 .tooltip {
169 font-size: 0.9em;
170 margin-bottom: 5px;
171 }
172 .tooltip.in {
173 opacity: 1;
174 }
175 .tooltip-inner {
176 text-align: left;
177 }
178 .tooltip-link,
179 .tooltip-link:visited {
180 text-decoration: none;
181 color: #000;
182 border-bottom: 1px dashed #bbb;
183 cursor: hand;
184 }
185 .tooltip-link:hover {
186 text-decoration: none;
187 color: #b33;
188 border-bottom: 1px dashed #b33;
189 }
190 /************/
191
192 /*********/
193
194 .hs {
195 /* Полупробел для
196 разделения разрядов чисел:
197 10<span class="hs"></span>000 */
198 margin-left: .2em;
199 }
200
201 .rhs {
202 /* Полупробел на случай,
203 если реальный пробел важен,
204 например между ценой и валютой:
205 1<span class="rhs">&nbsp;</span>$ */
206 font-size: 50%;
207 line-height: 1;
208 }
209
210 /*9490<span class="rhs"> </span>€<br/>*/
211 /*12<span class="hs"></span>650<span class="rhs"> </span>$<br/>*/
212 /*379<span class="hs"></span>000<span*/
213 /*class="rhs"> </span><span class="b-rub">Р</span><br/>*/
214 /*100<span class="hs"></span>500<span class="rhs"> </span>+*/
215
216 /* for wrapping long words with no spaces */
217 /* http://stackoverflow.com/questions/3247358/css-how-do-i-wrap-text-with-no-whitespace-inside-a-td */
218 .wrapword {
219 white-space: -moz-pre-wrap !important; /* Mozilla, since 1999 */
220 white-space: -pre-wrap; /* Opera 4-6 */
221 white-space: -o-pre-wrap; /* Opera 7 */
222 white-space: pre-wrap; /* css-3 */
223 word-wrap: break-word; /* Internet Explorer 5.5+ */
224 word-break: break-all;
225 white-space: normal;
226 }
227
228
229 .space_1px {
230 height: 1px;
231 }
232 .space_2px {
233 height: 2px;
234 }
235 .space_3px {
236 height: 3px;
237 }
238 .space_4px {
239 height: 4px;
240 }
241 .space_5px {
242 height: 5px;
243 }
244 .space_6px {
245 height: 6px;
246 }
247 .space_7px {
248 height: 7px;
249 }
250 .space_8px {
251 height: 8px;
252 }
253 .space_9px {
254 height: 9px;
255 }
256 .space_10px {
257 height: 10px;
258 }
259 .layout-table {
260 width: 99%;
261 border-spacing: 0;
262 }
263
264 .layout-table td.layout-table-td {
265 vertical-align: top;
266 padding: 0;
267 }
268 .layout-table td.layout-table-fst-td {
269 min-width: 400px;
270 padding-right: 50px;
271 }
272 .layout-table td.layout-table-snd-td {
273 min-width: 200px;
274 }
275 .layout-table td.layout-table-trd-td {
276 }
277
278 .top-panel {
279 background-color: #444;
280 color: white;
281 min-width: 650px;
282 padding: 8px 10px 0 147px;
283 min-height: 70px;
284 text-shadow: -1px -1px 0 #111;
285 }
286 .top-panel span {
287 color: white;
288 }
289 .top-panel a {
290 color: white;
291 border-bottom: 1px solid white;
292 }
293 #to_main_menu_button a {
294 border-bottom: none;
295 }
296 .page_title {
297 margin-top: -3px;
298 margin-bottom: -3px;
299 color: white;
300 }
301 .page_subtitle {
302 line-height: 100%;
303 white-space: nowrap;
304 }
305 .content {
306 margin-left: 147px;
307 width: 90%;
308 /*padding-top: 20px;*/
309 margin-bottom: 0;
310 /*padding-bottom: 50px;*/
311 /*{# padding-right: 20px;#}*/
312 }
313 .p_after_content {
314 margin-left: 147px;
315 }
316 .links_after_content{
317 font-size: 14px;
318 }
319
320 p {
321 display: block;
322 font-size: 12px;
323 }
324
325 h1 {
326 display: block;
327 font-size: 26px;
328 padding: 0 -3px 0 5px;
329 -webkit-margin-before: 5px;
330 -webkit-margin-after: 0px;
331 -webkit-margin-start: 0px;
332 -webkit-margin-end: 0px;
333 font-weight: bold;
334 }
335
336 #header {
337 display: block;
338 width: 100%;
339 margin-bottom: 10px;
340 }
341
342 .logo_img {
343 height: 40px;
344 margin-bottom: -10px;
345 margin-left: -6px;
346 margin-right: -7px;
347 }
348 </style>
349
350 <style rel="stylesheet">
351 .report-and-plots {
352 margin-top: 15px;
353 }
354
355 /****************/
356 /* REPORT TABLE */
357 .report {
358 margin: 0 100px 50px 0;
359 float: left;
360 font-size: 1em;
361 }
362
363 #main_report {
364 /*min-width: 600px;*/
365 }
366
367 /*#extended_link {*/
368 /*margin-top: 5px;*/
369 /*}*/
370
371 #ref_report {
372 /*min-width: 300px;*/
373 margin-right: 0;
374 margin-bottom: 20px;
375 /*margin-right: 200px;*/
376 }
377
378 .report td {
379 margin: 0;
380 padding: 2px 0.6em 0 14px;
381 /*min-width: 100px;*/
382 max-width: 400px;
383 white-space: nowrap;
384 }
385 .report td.number {
386 text-align: right;
387 }
388
389 .report tr.top_row_tr td,
390 .report tr.group_header td {
391 font-weight: bold;
392 border-bottom: 1px solid #ddd;
393 }
394 .report tr.group_header td {
395 height: 20px;
396 vertical-align: bottom;
397 }
398
399 #ref_report tr.top_row_tr td,
400 #ref_report tr.group_header td {
401 font-weight: normal;
402 }
403
404 .report tr td:first-child {
405 padding-left: 0;
406 }
407 .report tr td:last-child {
408 padding-right: 0;
409 }
410
411 .report tr.row_hidden, tr.group_empty {
412 display: none;
413 }
414
415 .report tr.secondary_hidden {
416 display: none;
417 }
418
419 /*.report td.secondary_td {*/
420 /*padding-left: 10px !important;*/
421 /*}*/
422
423 span.heatmap_legend {
424 font-size: 11px;
425 display: inline-block;
426 }
427
428 #heatmap_header {
429 margin-right: 30px;
430 }
431
432 #combined_reference_length {
433 padding-top: 1px;
434 padding-bottom: 15px;
435 }
436
437 span.metric-name.expandable {
438 margin-left: -13px;
439 }
440
441 span.metric-name.secondary {
442 margin-left: 13px;
443 }
444
445 span.metric-name.expandable.collapsed::before {
446 content: '+ ';
447 color: #CCC;
448 cursor: pointer;
449 }
450
451 span.metric-name.expandable.expanded::before {
452 content: '\2212\a0'; /* &minus&nbsp */
453 color: #CCC;
454 cursor: pointer;
455 }
456
457 .report_legend {
458 padding-left: 15px; /* compensate drag handles */
459 }
460
461 #contigs_are_ordered {
462 z-index: 0;
463 position: relative;
464 }
465
466
467 /*.report .report-table-header {
468 font-weight: bold;
469 }*/
470
471 /*.report thead td {
472 border-bottom: 1px solid #bbb;
473 }*/
474
475
476 /*************/
477 /* Draggable */
478 table.moving_table {
479 box-shadow: -0px 0px 5px 1px #888888;
480 -moz-box-shadow: -0px 0px 5px 1px #888888;
481 -webkit-box-shadow: -0px 0px 5px 1px #888888;
482 /*outline: 1px solid #888888;*/
483 background-color: white;
484 z-index: 3 !important;
485 }
486
487 table.draggable .drag_handle {
488 padding: 2px 1px 0 1px;
489 margin: 0 2px 0 1px;
490
491 cursor: grab;
492 cursor: -moz-grab;
493 cursor: -webkit-grab;
494 }
495
496 table.draggable .drag_handle .drag_image {
497 height: 9px;
498 width: 9px;
499 display: inline-block;
500 background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAIAAABv85FHAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAiElEQVQImV2OsQ3FIAxEz2AhCAukyATZf5ZMQI8okZUjhfWj6F/pd09n6b1f1wUgxkgSAACS53lqSmnfdxHBLyJCMucsc877vv201nobKSUl2VoLIeATksdxKEmf+UqOxczGGDHGP7Ztm5qZmfmkYx8upehaq/fu4P2WZK1VAdRaAbjqXghBVR9BvlQcgtQsKgAAAABJRU5ErkJggg==") no-repeat;
501 }
502
503 table.draggable .drag_handle:active,
504 table.draggable td.cell_of_moving_table .drag_handle {
505 cursor: grabbing !important;
506 cursor: -moz-grabbing !important;
507 cursor: -webkit-grabbing !important;
508 }
509
510 /* Override the styles for the first and the last columns of the table.report.
511 The cloned table contains a single column which is both first and last,
512 and we don't need it to inherit those styles. */
513 table.draggable td.cell_of_moving_table {
514 padding-left: 14px !important;
515 padding-right: 0.6em !important;
516 }
517
518 table.draggable td.hovered_column_td {
519 background-color: #cccccc;
520 }
521
522 table.draggable td.second_through_last_col_headers_td {
523 padding-left: 0 !important; /* compensate handle images */
524 }
525
526 table.draggable td.cell_of_empty_space * {
527 visibility: hidden;
528 }
529
530 table.draggable td.cell_of_empty_space {
531 border: none !important;
532 /*border-left: 1px solid #888888;
533 border-right: 1px solid #888888;
534 margin-right: -1px !important;
535 margin-left: -1px !important; */
536 }
537
538 /*table.draggable td.bottom_cell_of_empty_space {
539 border-bottom: 1px solid #888888 !important;
540 }
541
542 table.draggable td.top_cell_of_empty_space {
543 border-top: 1px solid #888888 !important;
544 /*margin-top: -1px;
545 }*/
546
547 table.draggable td.top_cell_of_empty_space {
548 }
549
550 table.draggable td.left_to_cell_of_empty_space {
551 /*outline-left: 1px solid #888888;*/
552 }
553
554 table.draggable td.right_to_cell_of_empty_space {
555 /*outline-right: 1px solid #888888;*/
556 }
557
558 /********/
559 /* META */
560 #main_ref_genome {
561
562 }
563
564 table#refgenome td.last_row {
565 border-top: 1px solid #ddd;
566 }
567
568 /************/
569 /* PLOTTING */
570 .plot-switch {
571 margin-left: 10px;
572 }
573
574 .plot-mis-type-switch {
575 margin-left: 23px;
576 }
577
578 .plot-wrapper {
579 padding-right: 80px;
580 }
581
582 .plot-header {
583 margin-left: 0;
584 font-weight: bold;
585 height: 1.5em;
586 display: block;
587 }
588
589 .plots {
590 margin-left: -30px;
591 margin-right: 70px;
592 margin-top: 2px;
593 margin-bottom: 50px;
594 float: left;
595 }
596 .plots td {
597 vertical-align: top;
598 white-space: nowrap;
599 }
600
601 .plots div#plots-switches, tr#plots-into-tr p {
602 padding-left: 30px;
603 }
604
605 #legend-placeholder {
606 min-width: 80px;
607 margin-top: -2px;
608 margin-left: -5px;
609 position: relative;
610 z-index: 0;
611 }
612
613 .legendColorBox div {
614 display: none;
615 }
616
617 #legend-placeholder td {
618 vertical-align: top;
619 white-space: nowrap;
620 }
621
622 #plot-placeholder {
623 width: 986px;
624 height: 600px;
625
626 /* for auto sizing plots when resizing the page
627 min-width: 500px;
628 min-height: 500px;
629 width: 100%;
630 min-height: 400px;
631 height: 50%; */
632
633 margin-left: -55px;
634 margin-right: 20px;
635 float: left;
636
637 z-index: 2;
638 }
639
640 #change-assembly {
641 white-space: nowrap;
642 width: 0;
643 }
644
645 /*************/
646 /* Plot tips */
647 #plot_tip {
648 position: absolute;
649 opacity: 1;
650 padding: 2px 5px 2px 5px;
651
652 z-index: 1;
653 }
654
655 #plot_tip_vertical_rule, #plot_tip_horizontal_rule {
656 position: absolute;
657 border: 1px solid #BBB;
658 z-index: -2;
659 }
660
661 #plot_tip_vertical_rule {
662 border-left: 1px;
663 }
664
665 #plot_tip_horizontal_rule {
666 border-top: 1px;
667 }
668
669 .white_stroked {
670 color: black;
671 background-color: white;
672 text-shadow:
673 -3px -3px 0 white,
674 3px -3px 0 white,
675 -3px 3px 0 white,
676 3px 3px 0 white;
677 }
678
679 img.icon_plot {
680 width: 14px;
681 height: 12px;
682 display: inline-block;
683 content: '';
684 background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAANCAYAAACZ3F9/AAAACXBIWXMAAAsTAAALEwEAmpwYAAA7oGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS41LWMwMjEgNzkuMTU1NzcyLCAyMDE0LzAxLzEzLTE5OjQ0OjAwICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNCAoTWFjaW50b3NoKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAxNS0wOC0wN1QxNjowMzowNCswMzowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE1LTA4LTA3VDIxOjE2OjMyKzAzOjAwPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxNS0wOC0wN1QyMToxNjozMiswMzowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9wbmc8L2RjOmZvcm1hdD4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHhtcE1NOkluc3RhbmNlSUQ+eG1wLmlpZDphYjJhNzRkZi04MjcxLTQ1NjctOTgxNy0zNTVkNTAwNmQ5OTk8L3htcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnhtcC5kaWQ6ZWUxMmZkZGQtZWQ3OC00MTliLTk5MDctZTQ5OTkyZDUyNjRiPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPnhtcC5kaWQ6ZWUxMmZkZGQtZWQ3OC00MTliLTk5MDctZTQ5OTkyZDUyNjRiPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOmVlMTJmZGRkLWVkNzgtNDE5Yi05OTA3LWU0OTk5MmQ1MjY0Yjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNS0wOC0wN1QxNjowMzowNCswMzowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjQzY2E0MmJhLWQ2YmItNGQ5MC05MDQ0LTc2NDJiMjgxNGVjZTwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNS0wOC0wN1QyMTowMjo1NSswMzowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOmFiMmE3NGRmLTgyNzEtNDU2Ny05ODE3LTM1NWQ1MDA2ZDk5OTwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNS0wOC0wN1QyMToxNjozMiswMzowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+NzIwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U+NjU1MzU8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjE0PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjEzPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz6T8SobAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAD7SURBVHjaYvz//z8DOYCJgUxAHY393d3PGRgYPqDjG4sWfnh348ZzZLUsyJz///5JwNjPP/1guPbuG4MJ63cGtn9/GQSlpfhx2sjCx/ft8apVDF/OnmF4zcjG8OL7H4YDxy8wfPcMYnjNyv0Np8bf378xiGqpMzz9/Z/h7c6dDKab5jA4mOsyPPr+n+Hhq/cMOJ3K9OMbw0cdfYY3nxkYDPlvMHxh/MbALyvH4IklcFA0sjAzc737ysAg9vc3g4CmBoOApgayNBcyhxE5ASRERDwX4OXk5GDnYPjy8xcDAyMjA8P//wy/f/1mUFRW/l5RVy+JVePgTjmAAQCr211NDit/xwAAAABJRU5ErkJggg==");
685 }
686
687 #sortRefsBtn label {
688 display: block;
689 margin-left: 20px;
690 }
691 #sortRefsBtn input {
692 float: left;
693 margin-left: -20px;
694 margin-right: 7px;
695 }
696
697 #mincontig {
698 margin-bottom: 0;
699 }
700 </style>
701
702
703 <script type="text/javascript">
704 /*! jQuery v1.8.2 jquery.com | jquery.org/license */
705 (function(a,b){function G(a){var b=F[a]={};return p.each(a.split(s),function(a,c){b[c]=!0}),b}function J(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(I,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:+d+""===d?+d:H.test(d)?p.parseJSON(d):d}catch(f){}p.data(a,c,d)}else d=b}return d}function K(a){var b;for(b in a){if(b==="data"&&p.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function ba(){return!1}function bb(){return!0}function bh(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function bi(a,b){do a=a[b];while(a&&a.nodeType!==1);return a}function bj(a,b,c){b=b||0;if(p.isFunction(b))return p.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return p.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=p.grep(a,function(a){return a.nodeType===1});if(be.test(b))return p.filter(b,d,!c);b=p.filter(b,d)}return p.grep(a,function(a,d){return p.inArray(a,b)>=0===c})}function bk(a){var b=bl.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function bC(a,b){return a.getElementsByTagName(b)[0]||a.appendChild(a.ownerDocument.createElement(b))}function bD(a,b){if(b.nodeType!==1||!p.hasData(a))return;var c,d,e,f=p._data(a),g=p._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;d<e;d++)p.event.add(b,c,h[c][d])}g.data&&(g.data=p.extend({},g.data))}function bE(a,b){var c;if(b.nodeType!==1)return;b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c==="object"?(b.parentNode&&(b.outerHTML=a.outerHTML),p.support.html5Clone&&a.innerHTML&&!p.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):c==="input"&&bv.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):c==="option"?b.selected=a.defaultSelected:c==="input"||c==="textarea"?b.defaultValue=a.defaultValue:c==="script"&&b.text!==a.text&&(b.text=a.text),b.removeAttribute(p.expando)}function bF(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bG(a){bv.test(a.type)&&(a.defaultChecked=a.checked)}function bY(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=bW.length;while(e--){b=bW[e]+c;if(b in a)return b}return d}function bZ(a,b){return a=b||a,p.css(a,"display")==="none"||!p.contains(a.ownerDocument,a)}function b$(a,b){var c,d,e=[],f=0,g=a.length;for(;f<g;f++){c=a[f];if(!c.style)continue;e[f]=p._data(c,"olddisplay"),b?(!e[f]&&c.style.display==="none"&&(c.style.display=""),c.style.display===""&&bZ(c)&&(e[f]=p._data(c,"olddisplay",cc(c.nodeName)))):(d=bH(c,"display"),!e[f]&&d!=="none"&&p._data(c,"olddisplay",d))}for(f=0;f<g;f++){c=a[f];if(!c.style)continue;if(!b||c.style.display==="none"||c.style.display==="")c.style.display=b?e[f]||"":"none"}return a}function b_(a,b,c){var d=bP.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function ca(a,b,c,d){var e=c===(d?"border":"content")?4:b==="width"?1:0,f=0;for(;e<4;e+=2)c==="margin"&&(f+=p.css(a,c+bV[e],!0)),d?(c==="content"&&(f-=parseFloat(bH(a,"padding"+bV[e]))||0),c!=="margin"&&(f-=parseFloat(bH(a,"border"+bV[e]+"Width"))||0)):(f+=parseFloat(bH(a,"padding"+bV[e]))||0,c!=="padding"&&(f+=parseFloat(bH(a,"border"+bV[e]+"Width"))||0));return f}function cb(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=!0,f=p.support.boxSizing&&p.css(a,"boxSizing")==="border-box";if(d<=0||d==null){d=bH(a,b);if(d<0||d==null)d=a.style[b];if(bQ.test(d))return d;e=f&&(p.support.boxSizingReliable||d===a.style[b]),d=parseFloat(d)||0}return d+ca(a,b,c||(f?"border":"content"),e)+"px"}function cc(a){if(bS[a])return bS[a];var b=p("<"+a+">").appendTo(e.body),c=b.css("display");b.remove();if(c==="none"||c===""){bI=e.body.appendChild(bI||p.extend(e.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!bJ||!bI.createElement)bJ=(bI.contentWindow||bI.contentDocument).document,bJ.write("<!doctype html><html><body>"),bJ.close();b=bJ.body.appendChild(bJ.createElement(a)),c=bH(b,"display"),e.body.removeChild(bI)}return bS[a]=c,c}function ci(a,b,c,d){var e;if(p.isArray(b))p.each(b,function(b,e){c||ce.test(a)?d(a,e):ci(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&p.type(b)==="object")for(e in b)ci(a+"["+e+"]",b[e],c,d);else d(a,b)}function cz(a){return function(b,c){typeof b!="string"&&(c=b,b="*");var d,e,f,g=b.toLowerCase().split(s),h=0,i=g.length;if(p.isFunction(c))for(;h<i;h++)d=g[h],f=/^\+/.test(d),f&&(d=d.substr(1)||"*"),e=a[d]=a[d]||[],e[f?"unshift":"push"](c)}}function cA(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h,i=a[f],j=0,k=i?i.length:0,l=a===cv;for(;j<k&&(l||!h);j++)h=i[j](c,d,e),typeof h=="string"&&(!l||g[h]?h=b:(c.dataTypes.unshift(h),h=cA(a,c,d,e,h,g)));return(l||!h)&&!g["*"]&&(h=cA(a,c,d,e,"*",g)),h}function cB(a,c){var d,e,f=p.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((f[d]?a:e||(e={}))[d]=c[d]);e&&p.extend(!0,a,e)}function cC(a,c,d){var e,f,g,h,i=a.contents,j=a.dataTypes,k=a.responseFields;for(f in k)f in d&&(c[k[f]]=d[f]);while(j[0]==="*")j.shift(),e===b&&(e=a.mimeType||c.getResponseHeader("content-type"));if(e)for(f in i)if(i[f]&&i[f].test(e)){j.unshift(f);break}if(j[0]in d)g=j[0];else{for(f in d){if(!j[0]||a.converters[f+" "+j[0]]){g=f;break}h||(h=f)}g=g||h}if(g)return g!==j[0]&&j.unshift(g),d[g]}function cD(a,b){var c,d,e,f,g=a.dataTypes.slice(),h=g[0],i={},j=0;a.dataFilter&&(b=a.dataFilter(b,a.dataType));if(g[1])for(c in a.converters)i[c.toLowerCase()]=a.converters[c];for(;e=g[++j];)if(e!=="*"){if(h!=="*"&&h!==e){c=i[h+" "+e]||i["* "+e];if(!c)for(d in i){f=d.split(" ");if(f[1]===e){c=i[h+" "+f[0]]||i["* "+f[0]];if(c){c===!0?c=i[d]:i[d]!==!0&&(e=f[0],g.splice(j--,0,e));break}}}if(c!==!0)if(c&&a["throws"])b=c(b);else try{b=c(b)}catch(k){return{state:"parsererror",error:c?k:"No conversion from "+h+" to "+e}}}h=e}return{state:"success",data:b}}function cL(){try{return new a.XMLHttpRequest}catch(b){}}function cM(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function cU(){return setTimeout(function(){cN=b},0),cN=p.now()}function cV(a,b){p.each(b,function(b,c){var d=(cT[b]||[]).concat(cT["*"]),e=0,f=d.length;for(;e<f;e++)if(d[e].call(a,b,c))return})}function cW(a,b,c){var d,e=0,f=0,g=cS.length,h=p.Deferred().always(function(){delete i.elem}),i=function(){var b=cN||cU(),c=Math.max(0,j.startTime+j.duration-b),d=1-(c/j.duration||0),e=0,f=j.tweens.length;for(;e<f;e++)j.tweens[e].run(d);return h.notifyWith(a,[j,d,c]),d<1&&f?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:p.extend({},b),opts:p.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:cN||cU(),duration:c.duration,tweens:[],createTween:function(b,c,d){var e=p.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(e),e},stop:function(b){var c=0,d=b?j.tweens.length:0;for(;c<d;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;cX(k,j.opts.specialEasing);for(;e<g;e++){d=cS[e].call(j,a,k,j.opts);if(d)return d}return cV(j,k),p.isFunction(j.opts.start)&&j.opts.start.call(a,j),p.fx.timer(p.extend(i,{anim:j,queue:j.opts.queue,elem:a})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}function cX(a,b){var c,d,e,f,g;for(c in a){d=p.camelCase(c),e=b[d],f=a[c],p.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=p.cssHooks[d];if(g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}}function cY(a,b,c){var d,e,f,g,h,i,j,k,l=this,m=a.style,n={},o=[],q=a.nodeType&&bZ(a);c.queue||(j=p._queueHooks(a,"fx"),j.unqueued==null&&(j.unqueued=0,k=j.empty.fire,j.empty.fire=function(){j.unqueued||k()}),j.unqueued++,l.always(function(){l.always(function(){j.unqueued--,p.queue(a,"fx").length||j.empty.fire()})})),a.nodeType===1&&("height"in b||"width"in b)&&(c.overflow=[m.overflow,m.overflowX,m.overflowY],p.css(a,"display")==="inline"&&p.css(a,"float")==="none"&&(!p.support.inlineBlockNeedsLayout||cc(a.nodeName)==="inline"?m.display="inline-block":m.zoom=1)),c.overflow&&(m.overflow="hidden",p.support.shrinkWrapBlocks||l.done(function(){m.overflow=c.overflow[0],m.overflowX=c.overflow[1],m.overflowY=c.overflow[2]}));for(d in b){f=b[d];if(cP.exec(f)){delete b[d];if(f===(q?"hide":"show"))continue;o.push(d)}}g=o.length;if(g){h=p._data(a,"fxshow")||p._data(a,"fxshow",{}),q?p(a).show():l.done(function(){p(a).hide()}),l.done(function(){var b;p.removeData(a,"fxshow",!0);for(b in n)p.style(a,b,n[b])});for(d=0;d<g;d++)e=o[d],i=l.createTween(e,q?h[e]:0),n[e]=h[e]||p.style(a,e),e in h||(h[e]=i.start,q&&(i.end=i.start,i.start=e==="width"||e==="height"?1:0))}}function cZ(a,b,c,d,e){return new cZ.prototype.init(a,b,c,d,e)}function c$(a,b){var c,d={height:a},e=0;b=b?1:0;for(;e<4;e+=2-b)c=bV[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function da(a){return p.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}var c,d,e=a.document,f=a.location,g=a.navigator,h=a.jQuery,i=a.$,j=Array.prototype.push,k=Array.prototype.slice,l=Array.prototype.indexOf,m=Object.prototype.toString,n=Object.prototype.hasOwnProperty,o=String.prototype.trim,p=function(a,b){return new p.fn.init(a,b,c)},q=/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,r=/\S/,s=/\s+/,t=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,u=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,y=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,z=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,A=/^-ms-/,B=/-([\da-z])/gi,C=function(a,b){return(b+"").toUpperCase()},D=function(){e.addEventListener?(e.removeEventListener("DOMContentLoaded",D,!1),p.ready()):e.readyState==="complete"&&(e.detachEvent("onreadystatechange",D),p.ready())},E={};p.fn=p.prototype={constructor:p,init:function(a,c,d){var f,g,h,i;if(!a)return this;if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?f=[null,a,null]:f=u.exec(a);if(f&&(f[1]||!c)){if(f[1])return c=c instanceof p?c[0]:c,i=c&&c.nodeType?c.ownerDocument||c:e,a=p.parseHTML(f[1],i,!0),v.test(f[1])&&p.isPlainObject(c)&&this.attr.call(a,c,!0),p.merge(this,a);g=e.getElementById(f[2]);if(g&&g.parentNode){if(g.id!==f[2])return d.find(a);this.length=1,this[0]=g}return this.context=e,this.selector=a,this}return!c||c.jquery?(c||d).find(a):this.constructor(c).find(a)}return p.isFunction(a)?d.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),p.makeArray(a,this))},selector:"",jquery:"1.8.2",length:0,size:function(){return this.length},toArray:function(){return k.call(this)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=p.merge(this.constructor(),a);return d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")"),d},each:function(a,b){return p.each(this,a,b)},ready:function(a){return p.ready.promise().done(a),this},eq:function(a){return a=+a,a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(k.apply(this,arguments),"slice",k.call(arguments).join(","))},map:function(a){return this.pushStack(p.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:j,sort:[].sort,splice:[].splice},p.fn.init.prototype=p.fn,p.extend=p.fn.extend=function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;typeof h=="boolean"&&(k=h,h=arguments[1]||{},i=2),typeof h!="object"&&!p.isFunction(h)&&(h={}),j===i&&(h=this,--i);for(;i<j;i++)if((a=arguments[i])!=null)for(c in a){d=h[c],e=a[c];if(h===e)continue;k&&e&&(p.isPlainObject(e)||(f=p.isArray(e)))?(f?(f=!1,g=d&&p.isArray(d)?d:[]):g=d&&p.isPlainObject(d)?d:{},h[c]=p.extend(k,g,e)):e!==b&&(h[c]=e)}return h},p.extend({noConflict:function(b){return a.$===p&&(a.$=i),b&&a.jQuery===p&&(a.jQuery=h),p},isReady:!1,readyWait:1,holdReady:function(a){a?p.readyWait++:p.ready(!0)},ready:function(a){if(a===!0?--p.readyWait:p.isReady)return;if(!e.body)return setTimeout(p.ready,1);p.isReady=!0;if(a!==!0&&--p.readyWait>0)return;d.resolveWith(e,[p]),p.fn.trigger&&p(e).trigger("ready").off("ready")},isFunction:function(a){return p.type(a)==="function"},isArray:Array.isArray||function(a){return p.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):E[m.call(a)]||"object"},isPlainObject:function(a){if(!a||p.type(a)!=="object"||a.nodeType||p.isWindow(a))return!1;try{if(a.constructor&&!n.call(a,"constructor")&&!n.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||n.call(a,d)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},error:function(a){throw new Error(a)},parseHTML:function(a,b,c){var d;return!a||typeof a!="string"?null:(typeof b=="boolean"&&(c=b,b=0),b=b||e,(d=v.exec(a))?[b.createElement(d[1])]:(d=p.buildFragment([a],b,c?null:[]),p.merge([],(d.cacheable?p.clone(d.fragment):d.fragment).childNodes)))},parseJSON:function(b){if(!b||typeof b!="string")return null;b=p.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(w.test(b.replace(y,"@").replace(z,"]").replace(x,"")))return(new Function("return "+b))();p.error("Invalid JSON: "+b)},parseXML:function(c){var d,e;if(!c||typeof c!="string")return null;try{a.DOMParser?(e=new DOMParser,d=e.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(f){d=b}return(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&p.error("Invalid XML: "+c),d},noop:function(){},globalEval:function(b){b&&r.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(A,"ms-").replace(B,C)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,c,d){var e,f=0,g=a.length,h=g===b||p.isFunction(a);if(d){if(h){for(e in a)if(c.apply(a[e],d)===!1)break}else for(;f<g;)if(c.apply(a[f++],d)===!1)break}else if(h){for(e in a)if(c.call(a[e],e,a[e])===!1)break}else for(;f<g;)if(c.call(a[f],f,a[f++])===!1)break;return a},trim:o&&!o.call(" ")?function(a){return a==null?"":o.call(a)}:function(a){return a==null?"":(a+"").replace(t,"")},makeArray:function(a,b){var c,d=b||[];return a!=null&&(c=p.type(a),a.length==null||c==="string"||c==="function"||c==="regexp"||p.isWindow(a)?j.call(d,a):p.merge(d,a)),d},inArray:function(a,b,c){var d;if(b){if(l)return l.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=c.length,e=a.length,f=0;if(typeof d=="number")for(;f<d;f++)a[e++]=c[f];else while(c[f]!==b)a[e++]=c[f++];return a.length=e,a},grep:function(a,b,c){var d,e=[],f=0,g=a.length;c=!!c;for(;f<g;f++)d=!!b(a[f],f),c!==d&&e.push(a[f]);return e},map:function(a,c,d){var e,f,g=[],h=0,i=a.length,j=a instanceof p||i!==b&&typeof i=="number"&&(i>0&&a[0]&&a[i-1]||i===0||p.isArray(a));if(j)for(;h<i;h++)e=c(a[h],h,d),e!=null&&(g[g.length]=e);else for(f in a)e=c(a[f],f,d),e!=null&&(g[g.length]=e);return g.concat.apply([],g)},guid:1,proxy:function(a,c){var d,e,f;return typeof c=="string"&&(d=a[c],c=a,a=d),p.isFunction(a)?(e=k.call(arguments,2),f=function(){return a.apply(c,e.concat(k.call(arguments)))},f.guid=a.guid=a.guid||p.guid++,f):b},access:function(a,c,d,e,f,g,h){var i,j=d==null,k=0,l=a.length;if(d&&typeof d=="object"){for(k in d)p.access(a,c,k,d[k],1,g,e);f=1}else if(e!==b){i=h===b&&p.isFunction(e),j&&(i?(i=c,c=function(a,b,c){return i.call(p(a),c)}):(c.call(a,e),c=null));if(c)for(;k<l;k++)c(a[k],d,i?e.call(a[k],k,c(a[k],d)):e,h);f=1}return f?a:j?c.call(a):l?c(a[0],d):g},now:function(){return(new Date).getTime()}}),p.ready.promise=function(b){if(!d){d=p.Deferred();if(e.readyState==="complete")setTimeout(p.ready,1);else if(e.addEventListener)e.addEventListener("DOMContentLoaded",D,!1),a.addEventListener("load",p.ready,!1);else{e.attachEvent("onreadystatechange",D),a.attachEvent("onload",p.ready);var c=!1;try{c=a.frameElement==null&&e.documentElement}catch(f){}c&&c.doScroll&&function g(){if(!p.isReady){try{c.doScroll("left")}catch(a){return setTimeout(g,50)}p.ready()}}()}}return d.promise(b)},p.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){E["[object "+b+"]"]=b.toLowerCase()}),c=p(e);var F={};p.Callbacks=function(a){a=typeof a=="string"?F[a]||G(a):p.extend({},a);var c,d,e,f,g,h,i=[],j=!a.once&&[],k=function(b){c=a.memory&&b,d=!0,h=f||0,f=0,g=i.length,e=!0;for(;i&&h<g;h++)if(i[h].apply(b[0],b[1])===!1&&a.stopOnFalse){c=!1;break}e=!1,i&&(j?j.length&&k(j.shift()):c?i=[]:l.disable())},l={add:function(){if(i){var b=i.length;(function d(b){p.each(b,function(b,c){var e=p.type(c);e==="function"&&(!a.unique||!l.has(c))?i.push(c):c&&c.length&&e!=="string"&&d(c)})})(arguments),e?g=i.length:c&&(f=b,k(c))}return this},remove:function(){return i&&p.each(arguments,function(a,b){var c;while((c=p.inArray(b,i,c))>-1)i.splice(c,1),e&&(c<=g&&g--,c<=h&&h--)}),this},has:function(a){return p.inArray(a,i)>-1},empty:function(){return i=[],this},disable:function(){return i=j=c=b,this},disabled:function(){return!i},lock:function(){return j=b,c||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return b=b||[],b=[a,b.slice?b.slice():b],i&&(!d||j)&&(e?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!d}};return l},p.extend({Deferred:function(a){var b=[["resolve","done",p.Callbacks("once memory"),"resolved"],["reject","fail",p.Callbacks("once memory"),"rejected"],["notify","progress",p.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return p.Deferred(function(c){p.each(b,function(b,d){var f=d[0],g=a[b];e[d[1]](p.isFunction(g)?function(){var a=g.apply(this,arguments);a&&p.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f+"With"](this===e?c:this,[a])}:c[f])}),a=null}).promise()},promise:function(a){return a!=null?p.extend(a,d):d}},e={};return d.pipe=d.then,p.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[a^1][2].disable,b[2][2].lock),e[f[0]]=g.fire,e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=k.call(arguments),d=c.length,e=d!==1||a&&p.isFunction(a.promise)?d:0,f=e===1?a:p.Deferred(),g=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?k.call(arguments):d,c===h?f.notifyWith(b,c):--e||f.resolveWith(b,c)}},h,i,j;if(d>1){h=new Array(d),i=new Array(d),j=new Array(d);for(;b<d;b++)c[b]&&p.isFunction(c[b].promise)?c[b].promise().done(g(b,j,c)).fail(f.reject).progress(g(b,i,h)):--e}return e||f.resolveWith(j,c),f.promise()}}),p.support=function(){var b,c,d,f,g,h,i,j,k,l,m,n=e.createElement("div");n.setAttribute("className","t"),n.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",c=n.getElementsByTagName("*"),d=n.getElementsByTagName("a")[0],d.style.cssText="top:1px;float:left;opacity:.5";if(!c||!c.length)return{};f=e.createElement("select"),g=f.appendChild(e.createElement("option")),h=n.getElementsByTagName("input")[0],b={leadingWhitespace:n.firstChild.nodeType===3,tbody:!n.getElementsByTagName("tbody").length,htmlSerialize:!!n.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.5/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:n.className!=="t",enctype:!!e.createElement("form").enctype,html5Clone:e.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",boxModel:e.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},h.checked=!0,b.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!g.disabled;try{delete n.test}catch(o){b.deleteExpando=!1}!n.addEventListener&&n.attachEvent&&n.fireEvent&&(n.attachEvent("onclick",m=function(){b.noCloneEvent=!1}),n.cloneNode(!0).fireEvent("onclick"),n.detachEvent("onclick",m)),h=e.createElement("input"),h.value="t",h.setAttribute("type","radio"),b.radioValue=h.value==="t",h.setAttribute("checked","checked"),h.setAttribute("name","t"),n.appendChild(h),i=e.createDocumentFragment(),i.appendChild(n.lastChild),b.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=h.checked,i.removeChild(h),i.appendChild(n);if(n.attachEvent)for(k in{submit:!0,change:!0,focusin:!0})j="on"+k,l=j in n,l||(n.setAttribute(j,"return;"),l=typeof n[j]=="function"),b[k+"Bubbles"]=l;return p(function(){var c,d,f,g,h="padding:0;margin:0;border:0;display:block;overflow:hidden;",i=e.getElementsByTagName("body")[0];if(!i)return;c=e.createElement("div"),c.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",i.insertBefore(c,i.firstChild),d=e.createElement("div"),c.appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",f=d.getElementsByTagName("td"),f[0].style.cssText="padding:0;margin:0;border:0;display:none",l=f[0].offsetHeight===0,f[0].style.display="",f[1].style.display="none",b.reliableHiddenOffsets=l&&f[0].offsetHeight===0,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",b.boxSizing=d.offsetWidth===4,b.doesNotIncludeMarginInBodyOffset=i.offsetTop!==1,a.getComputedStyle&&(b.pixelPosition=(a.getComputedStyle(d,null)||{}).top!=="1%",b.boxSizingReliable=(a.getComputedStyle(d,null)||{width:"4px"}).width==="4px",g=e.createElement("div"),g.style.cssText=d.style.cssText=h,g.style.marginRight=g.style.width="0",d.style.width="1px",d.appendChild(g),b.reliableMarginRight=!parseFloat((a.getComputedStyle(g,null)||{}).marginRight)),typeof d.style.zoom!="undefined"&&(d.innerHTML="",d.style.cssText=h+"width:1px;padding:1px;display:inline;zoom:1",b.inlineBlockNeedsLayout=d.offsetWidth===3,d.style.display="block",d.style.overflow="visible",d.innerHTML="<div></div>",d.firstChild.style.width="5px",b.shrinkWrapBlocks=d.offsetWidth!==3,c.style.zoom=1),i.removeChild(c),c=d=f=g=null}),i.removeChild(n),c=d=f=g=h=i=n=null,b}();var H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,I=/([A-Z])/g;p.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(p.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){return a=a.nodeType?p.cache[a[p.expando]]:a[p.expando],!!a&&!K(a)},data:function(a,c,d,e){if(!p.acceptData(a))return;var f,g,h=p.expando,i=typeof c=="string",j=a.nodeType,k=j?p.cache:a,l=j?a[h]:a[h]&&h;if((!l||!k[l]||!e&&!k[l].data)&&i&&d===b)return;l||(j?a[h]=l=p.deletedIds.pop()||p.guid++:l=h),k[l]||(k[l]={},j||(k[l].toJSON=p.noop));if(typeof c=="object"||typeof c=="function")e?k[l]=p.extend(k[l],c):k[l].data=p.extend(k[l].data,c);return f=k[l],e||(f.data||(f.data={}),f=f.data),d!==b&&(f[p.camelCase(c)]=d),i?(g=f[c],g==null&&(g=f[p.camelCase(c)])):g=f,g},removeData:function(a,b,c){if(!p.acceptData(a))return;var d,e,f,g=a.nodeType,h=g?p.cache:a,i=g?a[p.expando]:p.expando;if(!h[i])return;if(b){d=c?h[i]:h[i].data;if(d){p.isArray(b)||(b in d?b=[b]:(b=p.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,f=b.length;e<f;e++)delete d[b[e]];if(!(c?K:p.isEmptyObject)(d))return}}if(!c){delete h[i].data;if(!K(h[i]))return}g?p.cleanData([a],!0):p.support.deleteExpando||h!=h.window?delete h[i]:h[i]=null},_data:function(a,b,c){return p.data(a,b,c,!0)},acceptData:function(a){var b=a.nodeName&&p.noData[a.nodeName.toLowerCase()];return!b||b!==!0&&a.getAttribute("classid")===b}}),p.fn.extend({data:function(a,c){var d,e,f,g,h,i=this[0],j=0,k=null;if(a===b){if(this.length){k=p.data(i);if(i.nodeType===1&&!p._data(i,"parsedAttrs")){f=i.attributes;for(h=f.length;j<h;j++)g=f[j].name,g.indexOf("data-")||(g=p.camelCase(g.substring(5)),J(i,g,k[g]));p._data(i,"parsedAttrs",!0)}}return k}return typeof a=="object"?this.each(function(){p.data(this,a)}):(d=a.split(".",2),d[1]=d[1]?"."+d[1]:"",e=d[1]+"!",p.access(this,function(c){if(c===b)return k=this.triggerHandler("getData"+e,[d[0]]),k===b&&i&&(k=p.data(i,a),k=J(i,a,k)),k===b&&d[1]?this.data(d[0]):k;d[1]=c,this.each(function(){var b=p(this);b.triggerHandler("setData"+e,d),p.data(this,a,c),b.triggerHandler("changeData"+e,d)})},null,c,arguments.length>1,null,!1))},removeData:function(a){return this.each(function(){p.removeData(this,a)})}}),p.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=p._data(a,b),c&&(!d||p.isArray(c)?d=p._data(a,b,p.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=p.queue(a,b),d=c.length,e=c.shift(),f=p._queueHooks(a,b),g=function(){p.dequeue(a,b)};e==="inprogress"&&(e=c.shift(),d--),e&&(b==="fx"&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return p._data(a,c)||p._data(a,c,{empty:p.Callbacks("once memory").add(function(){p.removeData(a,b+"queue",!0),p.removeData(a,c,!0)})})}}),p.fn.extend({queue:function(a,c){var d=2;return typeof a!="string"&&(c=a,a="fx",d--),arguments.length<d?p.queue(this[0],a):c===b?this:this.each(function(){var b=p.queue(this,a,c);p._queueHooks(this,a),a==="fx"&&b[0]!=="inprogress"&&p.dequeue(this,a)})},dequeue:function(a){return this.each(function(){p.dequeue(this,a)})},delay:function(a,b){return a=p.fx?p.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){var d,e=1,f=p.Deferred(),g=this,h=this.length,i=function(){--e||f.resolveWith(g,[g])};typeof a!="string"&&(c=a,a=b),a=a||"fx";while(h--)d=p._data(g[h],a+"queueHooks"),d&&d.empty&&(e++,d.empty.add(i));return i(),f.promise(c)}});var L,M,N,O=/[\t\r\n]/g,P=/\r/g,Q=/^(?:button|input)$/i,R=/^(?:button|input|object|select|textarea)$/i,S=/^a(?:rea|)$/i,T=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,U=p.support.getSetAttribute;p.fn.extend({attr:function(a,b){return p.access(this,p.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){p.removeAttr(this,a)})},prop:function(a,b){return p.access(this,p.prop,a,b,arguments.length>1)},removeProp:function(a){return a=p.propFix[a]||a,this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,f,g,h;if(p.isFunction(a))return this.each(function(b){p(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(s);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{f=" "+e.className+" ";for(g=0,h=b.length;g<h;g++)f.indexOf(" "+b[g]+" ")<0&&(f+=b[g]+" ");e.className=p.trim(f)}}}return this},removeClass:function(a){var c,d,e,f,g,h,i;if(p.isFunction(a))return this.each(function(b){p(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(s);for(h=0,i=this.length;h<i;h++){e=this[h];if(e.nodeType===1&&e.className){d=(" "+e.className+" ").replace(O," ");for(f=0,g=c.length;f<g;f++)while(d.indexOf(" "+c[f]+" ")>=0)d=d.replace(" "+c[f]+" "," ");e.className=a?p.trim(d):""}}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";return p.isFunction(a)?this.each(function(c){p(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if(c==="string"){var e,f=0,g=p(this),h=b,i=a.split(s);while(e=i[f++])h=d?h:!g.hasClass(e),g[h?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&p._data(this,"__className__",this.className),this.className=this.className||a===!1?"":p._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(O," ").indexOf(b)>=0)return!0;return!1},val:function(a){var c,d,e,f=this[0];if(!arguments.length){if(f)return c=p.valHooks[f.type]||p.valHooks[f.nodeName.toLowerCase()],c&&"get"in c&&(d=c.get(f,"value"))!==b?d:(d=f.value,typeof d=="string"?d.replace(P,""):d==null?"":d);return}return e=p.isFunction(a),this.each(function(d){var f,g=p(this);if(this.nodeType!==1)return;e?f=a.call(this,d,g.val()):f=a,f==null?f="":typeof f=="number"?f+="":p.isArray(f)&&(f=p.map(f,function(a){return a==null?"":a+""})),c=p.valHooks[this.type]||p.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,f,"value")===b)this.value=f})}}),p.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,f=a.selectedIndex,g=[],h=a.options,i=a.type==="select-one";if(f<0)return null;c=i?f:0,d=i?f+1:h.length;for(;c<d;c++){e=h[c];if(e.selected&&(p.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!p.nodeName(e.parentNode,"optgroup"))){b=p(e).val();if(i)return b;g.push(b)}}return i&&!g.length&&h.length?p(h[f]).val():g},set:function(a,b){var c=p.makeArray(b);return p(a).find("option").each(function(){this.selected=p.inArray(p(this).val(),c)>=0}),c.length||(a.selectedIndex=-1),c}}},attrFn:{},attr:function(a,c,d,e){var f,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return;if(e&&p.isFunction(p.fn[c]))return p(a)[c](d);if(typeof a.getAttribute=="undefined")return p.prop(a,c,d);h=i!==1||!p.isXMLDoc(a),h&&(c=c.toLowerCase(),g=p.attrHooks[c]||(T.test(c)?M:L));if(d!==b){if(d===null){p.removeAttr(a,c);return}return g&&"set"in g&&h&&(f=g.set(a,d,c))!==b?f:(a.setAttribute(c,d+""),d)}return g&&"get"in g&&h&&(f=g.get(a,c))!==null?f:(f=a.getAttribute(c),f===null?b:f)},removeAttr:function(a,b){var c,d,e,f,g=0;if(b&&a.nodeType===1){d=b.split(s);for(;g<d.length;g++)e=d[g],e&&(c=p.propFix[e]||e,f=T.test(e),f||p.attr(a,e,""),a.removeAttribute(U?e:c),f&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(Q.test(a.nodeName)&&a.parentNode)p.error("type property can't be changed");else if(!p.support.radioValue&&b==="radio"&&p.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}},value:{get:function(a,b){return L&&p.nodeName(a,"button")?L.get(a,b):b in a?a.value:null},set:function(a,b,c){if(L&&p.nodeName(a,"button"))return L.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,f,g,h=a.nodeType;if(!a||h===3||h===8||h===2)return;return g=h!==1||!p.isXMLDoc(a),g&&(c=p.propFix[c]||c,f=p.propHooks[c]),d!==b?f&&"set"in f&&(e=f.set(a,d,c))!==b?e:a[c]=d:f&&"get"in f&&(e=f.get(a,c))!==null?e:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):R.test(a.nodeName)||S.test(a.nodeName)&&a.href?0:b}}}}),M={get:function(a,c){var d,e=p.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;return b===!1?p.removeAttr(a,c):(d=p.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase())),c}},U||(N={name:!0,id:!0,coords:!0},L=p.valHooks.button={get:function(a,c){var d;return d=a.getAttributeNode(c),d&&(N[c]?d.value!=="":d.specified)?d.value:b},set:function(a,b,c){var d=a.getAttributeNode(c);return d||(d=e.createAttribute(c),a.setAttributeNode(d)),d.value=b+""}},p.each(["width","height"],function(a,b){p.attrHooks[b]=p.extend(p.attrHooks[b],{set:function(a,c){if(c==="")return a.setAttribute(b,"auto"),c}})}),p.attrHooks.contenteditable={get:L.get,set:function(a,b,c){b===""&&(b="false"),L.set(a,b,c)}}),p.support.hrefNormalized||p.each(["href","src","width","height"],function(a,c){p.attrHooks[c]=p.extend(p.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),p.support.style||(p.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=b+""}}),p.support.optSelected||(p.propHooks.selected=p.extend(p.propHooks.selected,{get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}})),p.support.enctype||(p.propFix.enctype="encoding"),p.support.checkOn||p.each(["radio","checkbox"],function(){p.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),p.each(["radio","checkbox"],function(){p.valHooks[this]=p.extend(p.valHooks[this],{set:function(a,b){if(p.isArray(b))return a.checked=p.inArray(p(a).val(),b)>=0}})});var V=/^(?:textarea|input|select)$/i,W=/^([^\.]*|)(?:\.(.+)|)$/,X=/(?:^|\s)hover(\.\S+|)\b/,Y=/^key/,Z=/^(?:mouse|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=function(a){return p.event.special.hover?a:a.replace(X,"mouseenter$1 mouseleave$1")};p.event={add:function(a,c,d,e,f){var g,h,i,j,k,l,m,n,o,q,r;if(a.nodeType===3||a.nodeType===8||!c||!d||!(g=p._data(a)))return;d.handler&&(o=d,d=o.handler,f=o.selector),d.guid||(d.guid=p.guid++),i=g.events,i||(g.events=i={}),h=g.handle,h||(g.handle=h=function(a){return typeof p!="undefined"&&(!a||p.event.triggered!==a.type)?p.event.dispatch.apply(h.elem,arguments):b},h.elem=a),c=p.trim(_(c)).split(" ");for(j=0;j<c.length;j++){k=W.exec(c[j])||[],l=k[1],m=(k[2]||"").split(".").sort(),r=p.event.special[l]||{},l=(f?r.delegateType:r.bindType)||l,r=p.event.special[l]||{},n=p.extend({type:l,origType:k[1],data:e,handler:d,guid:d.guid,selector:f,needsContext:f&&p.expr.match.needsContext.test(f),namespace:m.join(".")},o),q=i[l];if(!q){q=i[l]=[],q.delegateCount=0;if(!r.setup||r.setup.call(a,e,m,h)===!1)a.addEventListener?a.addEventListener(l,h,!1):a.attachEvent&&a.attachEvent("on"+l,h)}r.add&&(r.add.call(a,n),n.handler.guid||(n.handler.guid=d.guid)),f?q.splice(q.delegateCount++,0,n):q.push(n),p.event.global[l]=!0}a=null},global:{},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,q,r=p.hasData(a)&&p._data(a);if(!r||!(m=r.events))return;b=p.trim(_(b||"")).split(" ");for(f=0;f<b.length;f++){g=W.exec(b[f])||[],h=i=g[1],j=g[2];if(!h){for(h in m)p.event.remove(a,h+b[f],c,d,!0);continue}n=p.event.special[h]||{},h=(d?n.delegateType:n.bindType)||h,o=m[h]||[],k=o.length,j=j?new RegExp("(^|\\.)"+j.split(".").sort().join("\\.(?:.*\\.|)")+"(\\.|$)"):null;for(l=0;l<o.length;l++)q=o[l],(e||i===q.origType)&&(!c||c.guid===q.guid)&&(!j||j.test(q.namespace))&&(!d||d===q.selector||d==="**"&&q.selector)&&(o.splice(l--,1),q.selector&&o.delegateCount--,n.remove&&n.remove.call(a,q));o.length===0&&k!==o.length&&((!n.teardown||n.teardown.call(a,j,r.handle)===!1)&&p.removeEvent(a,h,r.handle),delete m[h])}p.isEmptyObject(m)&&(delete r.handle,p.removeData(a,"events",!0))},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,f,g){if(!f||f.nodeType!==3&&f.nodeType!==8){var h,i,j,k,l,m,n,o,q,r,s=c.type||c,t=[];if($.test(s+p.event.triggered))return;s.indexOf("!")>=0&&(s=s.slice(0,-1),i=!0),s.indexOf(".")>=0&&(t=s.split("."),s=t.shift(),t.sort());if((!f||p.event.customEvent[s])&&!p.event.global[s])return;c=typeof c=="object"?c[p.expando]?c:new p.Event(s,c):new p.Event(s),c.type=s,c.isTrigger=!0,c.exclusive=i,c.namespace=t.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+t.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,m=s.indexOf(":")<0?"on"+s:"";if(!f){h=p.cache;for(j in h)h[j].events&&h[j].events[s]&&p.event.trigger(c,d,h[j].handle.elem,!0);return}c.result=b,c.target||(c.target=f),d=d!=null?p.makeArray(d):[],d.unshift(c),n=p.event.special[s]||{};if(n.trigger&&n.trigger.apply(f,d)===!1)return;q=[[f,n.bindType||s]];if(!g&&!n.noBubble&&!p.isWindow(f)){r=n.delegateType||s,k=$.test(r+s)?f:f.parentNode;for(l=f;k;k=k.parentNode)q.push([k,r]),l=k;l===(f.ownerDocument||e)&&q.push([l.defaultView||l.parentWindow||a,r])}for(j=0;j<q.length&&!c.isPropagationStopped();j++)k=q[j][0],c.type=q[j][1],o=(p._data(k,"events")||{})[c.type]&&p._data(k,"handle"),o&&o.apply(k,d),o=m&&k[m],o&&p.acceptData(k)&&o.apply&&o.apply(k,d)===!1&&c.preventDefault();return c.type=s,!g&&!c.isDefaultPrevented()&&(!n._default||n._default.apply(f.ownerDocument,d)===!1)&&(s!=="click"||!p.nodeName(f,"a"))&&p.acceptData(f)&&m&&f[s]&&(s!=="focus"&&s!=="blur"||c.target.offsetWidth!==0)&&!p.isWindow(f)&&(l=f[m],l&&(f[m]=null),p.event.triggered=s,f[s](),p.event.triggered=b,l&&(f[m]=l)),c.result}return},dispatch:function(c){c=p.event.fix(c||a.event);var d,e,f,g,h,i,j,l,m,n,o=(p._data(this,"events")||{})[c.type]||[],q=o.delegateCount,r=k.call(arguments),s=!c.exclusive&&!c.namespace,t=p.event.special[c.type]||{},u=[];r[0]=c,c.delegateTarget=this;if(t.preDispatch&&t.preDispatch.call(this,c)===!1)return;if(q&&(!c.button||c.type!=="click"))for(f=c.target;f!=this;f=f.parentNode||this)if(f.disabled!==!0||c.type!=="click"){h={},j=[];for(d=0;d<q;d++)l=o[d],m=l.selector,h[m]===b&&(h[m]=l.needsContext?p(m,this).index(f)>=0:p.find(m,this,null,[f]).length),h[m]&&j.push(l);j.length&&u.push({elem:f,matches:j})}o.length>q&&u.push({elem:this,matches:o.slice(q)});for(d=0;d<u.length&&!c.isPropagationStopped();d++){i=u[d],c.currentTarget=i.elem;for(e=0;e<i.matches.length&&!c.isImmediatePropagationStopped();e++){l=i.matches[e];if(s||!c.namespace&&!l.namespace||c.namespace_re&&c.namespace_re.test(l.namespace))c.data=l.data,c.handleObj=l,g=((p.event.special[l.origType]||{}).handle||l.handler).apply(i.elem,r),g!==b&&(c.result=g,g===!1&&(c.preventDefault(),c.stopPropagation()))}}return t.postDispatch&&t.postDispatch.call(this,c),c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,c){var d,f,g,h=c.button,i=c.fromElement;return a.pageX==null&&c.clientX!=null&&(d=a.target.ownerDocument||e,f=d.documentElement,g=d.body,a.pageX=c.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=c.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?c.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0),a}},fix:function(a){if(a[p.expando])return a;var b,c,d=a,f=p.event.fixHooks[a.type]||{},g=f.props?this.props.concat(f.props):this.props;a=p.Event(d);for(b=g.length;b;)c=g[--b],a[c]=d[c];return a.target||(a.target=d.srcElement||e),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,f.filter?f.filter(a,d):a},special:{load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){p.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=p.extend(new p.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?p.event.trigger(e,null,b):p.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},p.event.handle=p.event.dispatch,p.removeEvent=e.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]=="undefined"&&(a[d]=null),a.detachEvent(d,c))},p.Event=function(a,b){if(this instanceof p.Event)a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?bb:ba):this.type=a,b&&p.extend(this,b),this.timeStamp=a&&a.timeStamp||p.now(),this[p.expando]=!0;else return new p.Event(a,b)},p.Event.prototype={preventDefault:function(){this.isDefaultPrevented=bb;var a=this.originalEvent;if(!a)return;a.preventDefault?a.preventDefault():a.returnValue=!1},stopPropagation:function(){this.isPropagationStopped=bb;var a=this.originalEvent;if(!a)return;a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=bb,this.stopPropagation()},isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba},p.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){p.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj,g=f.selector;if(!e||e!==d&&!p.contains(d,e))a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b;return c}}}),p.support.submitBubbles||(p.event.special.submit={setup:function(){if(p.nodeName(this,"form"))return!1;p.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=p.nodeName(c,"input")||p.nodeName(c,"button")?c.form:b;d&&!p._data(d,"_submit_attached")&&(p.event.add(d,"submit._submit",function(a){a._submit_bubble=!0}),p._data(d,"_submit_attached",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&p.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){if(p.nodeName(this,"form"))return!1;p.event.remove(this,"._submit")}}),p.support.changeBubbles||(p.event.special.change={setup:function(){if(V.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")p.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),p.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),p.event.simulate("change",this,a,!0)});return!1}p.event.add(this,"beforeactivate._change",function(a){var b=a.target;V.test(b.nodeName)&&!p._data(b,"_change_attached")&&(p.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&p.event.simulate("change",this.parentNode,a,!0)}),p._data(b,"_change_attached",!0))})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){return p.event.remove(this,"._change"),!V.test(this.nodeName)}}),p.support.focusinBubbles||p.each({focus:"focusin",blur:"focusout"},function(a,b){var c=0,d=function(a){p.event.simulate(b,a.target,p.event.fix(a),!0)};p.event.special[b]={setup:function(){c++===0&&e.addEventListener(a,d,!0)},teardown:function(){--c===0&&e.removeEventListener(a,d,!0)}}}),p.fn.extend({on:function(a,c,d,e,f){var g,h;if(typeof a=="object"){typeof c!="string"&&(d=d||c,c=b);for(h in a)this.on(h,c,d,a[h],f);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=ba;else if(!e)return this;return f===1&&(g=e,e=function(a){return p().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=p.guid++)),this.each(function(){p.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){var e,f;if(a&&a.preventDefault&&a.handleObj)return e=a.handleObj,p(a.delegateTarget).off(e.namespace?e.origType+"."+e.namespace:e.origType,e.selector,e.handler),this;if(typeof a=="object"){for(f in a)this.off(f,c,a[f]);return this}if(c===!1||typeof c=="function")d=c,c=b;return d===!1&&(d=ba),this.each(function(){p.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){return p(this.context).on(a,this.selector,b,c),this},die:function(a,b){return p(this.context).off(a,this.selector||"**",b),this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length===1?this.off(a,"**"):this.off(b,a||"**",c)},trigger:function(a,b){return this.each(function(){p.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return p.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||p.guid++,d=0,e=function(c){var e=(p._data(this,"lastToggle"+a.guid)||0)%d;return p._data(this,"lastToggle"+a.guid,e+1),c.preventDefault(),b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),p.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){p.fn[b]=function(a,c){return c==null&&(c=a,a=null),arguments.length>0?this.on(b,null,a,c):this.trigger(b)},Y.test(b)&&(p.event.fixHooks[b]=p.event.keyHooks),Z.test(b)&&(p.event.fixHooks[b]=p.event.mouseHooks)}),function(a,b){function bc(a,b,c,d){c=c||[],b=b||r;var e,f,i,j,k=b.nodeType;if(!a||typeof a!="string")return c;if(k!==1&&k!==9)return[];i=g(b);if(!i&&!d)if(e=P.exec(a))if(j=e[1]){if(k===9){f=b.getElementById(j);if(!f||!f.parentNode)return c;if(f.id===j)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(j))&&h(b,f)&&f.id===j)return c.push(f),c}else{if(e[2])return w.apply(c,x.call(b.getElementsByTagName(a),0)),c;if((j=e[3])&&_&&b.getElementsByClassName)return w.apply(c,x.call(b.getElementsByClassName(j),0)),c}return bp(a.replace(L,"$1"),b,c,d,i)}function bd(a){return function(b){var c=b.nodeName.toLowerCase();return c==="input"&&b.type===a}}function be(a){return function(b){var c=b.nodeName.toLowerCase();return(c==="input"||c==="button")&&b.type===a}}function bf(a){return z(function(b){return b=+b,z(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function bg(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}function bh(a,b){var c,d,f,g,h,i,j,k=C[o][a];if(k)return b?0:k.slice(0);h=a,i=[],j=e.preFilter;while(h){if(!c||(d=M.exec(h)))d&&(h=h.slice(d[0].length)),i.push(f=[]);c=!1;if(d=N.exec(h))f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=d[0].replace(L," ");for(g in e.filter)(d=W[g].exec(h))&&(!j[g]||(d=j[g](d,r,!0)))&&(f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=g,c.matches=d);if(!c)break}return b?h.length:h?bc.error(a):C(a,i).slice(0)}function bi(a,b,d){var e=b.dir,f=d&&b.dir==="parentNode",g=u++;return b.first?function(b,c,d){while(b=b[e])if(f||b.nodeType===1)return a(b,c,d)}:function(b,d,h){if(!h){var i,j=t+" "+g+" ",k=j+c;while(b=b[e])if(f||b.nodeType===1){if((i=b[o])===k)return b.sizset;if(typeof i=="string"&&i.indexOf(j)===0){if(b.sizset)return b}else{b[o]=k;if(a(b,d,h))return b.sizset=!0,b;b.sizset=!1}}}else while(b=b[e])if(f||b.nodeType===1)if(a(b,d,h))return b}}function bj(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function bk(a,b,c,d,e){var f,g=[],h=0,i=a.length,j=b!=null;for(;h<i;h++)if(f=a[h])if(!c||c(f,d,e))g.push(f),j&&b.push(h);return g}function bl(a,b,c,d,e,f){return d&&!d[o]&&(d=bl(d)),e&&!e[o]&&(e=bl(e,f)),z(function(f,g,h,i){if(f&&e)return;var j,k,l,m=[],n=[],o=g.length,p=f||bo(b||"*",h.nodeType?[h]:h,[],f),q=a&&(f||!b)?bk(p,m,a,h,i):p,r=c?e||(f?a:o||d)?[]:g:q;c&&c(q,r,h,i);if(d){l=bk(r,n),d(l,[],h,i),j=l.length;while(j--)if(k=l[j])r[n[j]]=!(q[n[j]]=k)}if(f){j=a&&r.length;while(j--)if(k=r[j])f[m[j]]=!(g[m[j]]=k)}else r=bk(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):w.apply(g,r)})}function bm(a){var b,c,d,f=a.length,g=e.relative[a[0].type],h=g||e.relative[" "],i=g?1:0,j=bi(function(a){return a===b},h,!0),k=bi(function(a){return y.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==l)||((b=c).nodeType?j(a,c,d):k(a,c,d))}];for(;i<f;i++)if(c=e.relative[a[i].type])m=[bi(bj(m),c)];else{c=e.filter[a[i].type].apply(null,a[i].matches);if(c[o]){d=++i;for(;d<f;d++)if(e.relative[a[d].type])break;return bl(i>1&&bj(m),i>1&&a.slice(0,i-1).join("").replace(L,"$1"),c,i<d&&bm(a.slice(i,d)),d<f&&bm(a=a.slice(d)),d<f&&a.join(""))}m.push(c)}return bj(m)}function bn(a,b){var d=b.length>0,f=a.length>0,g=function(h,i,j,k,m){var n,o,p,q=[],s=0,u="0",x=h&&[],y=m!=null,z=l,A=h||f&&e.find.TAG("*",m&&i.parentNode||i),B=t+=z==null?1:Math.E;y&&(l=i!==r&&i,c=g.el);for(;(n=A[u])!=null;u++){if(f&&n){for(o=0;p=a[o];o++)if(p(n,i,j)){k.push(n);break}y&&(t=B,c=++g.el)}d&&((n=!p&&n)&&s--,h&&x.push(n))}s+=u;if(d&&u!==s){for(o=0;p=b[o];o++)p(x,q,i,j);if(h){if(s>0)while(u--)!x[u]&&!q[u]&&(q[u]=v.call(k));q=bk(q)}w.apply(k,q),y&&!h&&q.length>0&&s+b.length>1&&bc.uniqueSort(k)}return y&&(t=B,l=z),x};return g.el=0,d?z(g):g}function bo(a,b,c,d){var e=0,f=b.length;for(;e<f;e++)bc(a,b[e],c,d);return c}function bp(a,b,c,d,f){var g,h,j,k,l,m=bh(a),n=m.length;if(!d&&m.length===1){h=m[0]=m[0].slice(0);if(h.length>2&&(j=h[0]).type==="ID"&&b.nodeType===9&&!f&&e.relative[h[1].type]){b=e.find.ID(j.matches[0].replace(V,""),b,f)[0];if(!b)return c;a=a.slice(h.shift().length)}for(g=W.POS.test(a)?-1:h.length-1;g>=0;g--){j=h[g];if(e.relative[k=j.type])break;if(l=e.find[k])if(d=l(j.matches[0].replace(V,""),R.test(h[0].type)&&b.parentNode||b,f)){h.splice(g,1),a=d.length&&h.join("");if(!a)return w.apply(c,x.call(d,0)),c;break}}}return i(a,m)(d,b,f,c,R.test(a)),c}function bq(){}var c,d,e,f,g,h,i,j,k,l,m=!0,n="undefined",o=("sizcache"+Math.random()).replace(".",""),q=String,r=a.document,s=r.documentElement,t=0,u=0,v=[].pop,w=[].push,x=[].slice,y=[].indexOf||function(a){var b=0,c=this.length;for(;b<c;b++)if(this[b]===a)return b;return-1},z=function(a,b){return a[o]=b==null||b,a},A=function(){var a={},b=[];return z(function(c,d){return b.push(c)>e.cacheLength&&delete a[b.shift()],a[c]=d},a)},B=A(),C=A(),D=A(),E="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",G=F.replace("w","w#"),H="([*^$|!~]?=)",I="\\["+E+"*("+F+")"+E+"*(?:"+H+E+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+G+")|)|)"+E+"*\\]",J=":("+F+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+I+")|[^:]|\\\\.)*|.*))\\)|)",K=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+E+"*((?:-\\d)?\\d*)"+E+"*\\)|)(?=[^-]|$)",L=new RegExp("^"+E+"+|((?:^|[^\\\\])(?:\\\\.)*)"+E+"+$","g"),M=new RegExp("^"+E+"*,"+E+"*"),N=new RegExp("^"+E+"*([\\x20\\t\\r\\n\\f>+~])"+E+"*"),O=new RegExp(J),P=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,Q=/^:not/,R=/[\x20\t\r\n\f]*[+~]/,S=/:not\($/,T=/h\d/i,U=/input|select|textarea|button/i,V=/\\(?!\\)/g,W={ID:new RegExp("^#("+F+")"),CLASS:new RegExp("^\\.("+F+")"),NAME:new RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:new RegExp("^("+F.replace("w","w*")+")"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+J),POS:new RegExp(K,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+E+"*(even|odd|(([+-]|)(\\d*)n|)"+E+"*(?:([+-]|)"+E+"*(\\d+)|))"+E+"*\\)|)","i"),needsContext:new RegExp("^"+E+"*[>+~]|"+K,"i")},X=function(a){var b=r.createElement("div");try{return a(b)}catch(c){return!1}finally{b=null}},Y=X(function(a){return a.appendChild(r.createComment("")),!a.getElementsByTagName("*").length}),Z=X(function(a){return a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!==n&&a.firstChild.getAttribute("href")==="#"}),$=X(function(a){a.innerHTML="<select></select>";var b=typeof a.lastChild.getAttribute("multiple");return b!=="boolean"&&b!=="string"}),_=X(function(a){return a.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",!a.getElementsByClassName||!a.getElementsByClassName("e").length?!1:(a.lastChild.className="e",a.getElementsByClassName("e").length===2)}),ba=X(function(a){a.id=o+0,a.innerHTML="<a name='"+o+"'></a><div name='"+o+"'></div>",s.insertBefore(a,s.firstChild);var b=r.getElementsByName&&r.getElementsByName(o).length===2+r.getElementsByName(o+0).length;return d=!r.getElementById(o),s.removeChild(a),b});try{x.call(s.childNodes,0)[0].nodeType}catch(bb){x=function(a){var b,c=[];for(;b=this[a];a++)c.push(b);return c}}bc.matches=function(a,b){return bc(a,null,null,b)},bc.matchesSelector=function(a,b){return bc(b,null,null,[a]).length>0},f=bc.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(e===1||e===9||e===11){if(typeof a.textContent=="string")return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=f(a)}else if(e===3||e===4)return a.nodeValue}else for(;b=a[d];d++)c+=f(b);return c},g=bc.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?b.nodeName!=="HTML":!1},h=bc.contains=s.contains?function(a,b){var c=a.nodeType===9?a.documentElement:a,d=b&&b.parentNode;return a===d||!!(d&&d.nodeType===1&&c.contains&&c.contains(d))}:s.compareDocumentPosition?function(a,b){return b&&!!(a.compareDocumentPosition(b)&16)}:function(a,b){while(b=b.parentNode)if(b===a)return!0;return!1},bc.attr=function(a,b){var c,d=g(a);return d||(b=b.toLowerCase()),(c=e.attrHandle[b])?c(a):d||$?a.getAttribute(b):(c=a.getAttributeNode(b),c?typeof a[b]=="boolean"?a[b]?b:null:c.specified?c.value:null:null)},e=bc.selectors={cacheLength:50,createPseudo:z,match:W,attrHandle:Z?{}:{href:function(a){return a.getAttribute("href",2)},type:function(a){return a.getAttribute("type")}},find:{ID:d?function(a,b,c){if(typeof b.getElementById!==n&&!c){var d=b.getElementById(a);return d&&d.parentNode?[d]:[]}}:function(a,c,d){if(typeof c.getElementById!==n&&!d){var e=c.getElementById(a);return e?e.id===a||typeof e.getAttributeNode!==n&&e.getAttributeNode("id").value===a?[e]:b:[]}},TAG:Y?function(a,b){if(typeof b.getElementsByTagName!==n)return b.getElementsByTagName(a)}:function(a,b){var c=b.getElementsByTagName(a);if(a==="*"){var d,e=[],f=0;for(;d=c[f];f++)d.nodeType===1&&e.push(d);return e}return c},NAME:ba&&function(a,b){if(typeof b.getElementsByName!==n)return b.getElementsByName(name)},CLASS:_&&function(a,b,c){if(typeof b.getElementsByClassName!==n&&!c)return b.getElementsByClassName(a)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(V,""),a[3]=(a[4]||a[5]||"").replace(V,""),a[2]==="~="&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),a[1]==="nth"?(a[2]||bc.error(a[0]),a[3]=+(a[3]?a[4]+(a[5]||1):2*(a[2]==="even"||a[2]==="odd")),a[4]=+(a[6]+a[7]||a[2]==="odd")):a[2]&&bc.error(a[0]),a},PSEUDO:function(a){var b,c;if(W.CHILD.test(a[0]))return null;if(a[3])a[2]=a[3];else if(b=a[4])O.test(b)&&(c=bh(b,!0))&&(c=b.indexOf(")",b.length-c)-b.length)&&(b=b.slice(0,c),a[0]=a[0].slice(0,c)),a[2]=b;return a.slice(0,3)}},filter:{ID:d?function(a){return a=a.replace(V,""),function(b){return b.getAttribute("id")===a}}:function(a){return a=a.replace(V,""),function(b){var c=typeof b.getAttributeNode!==n&&b.getAttributeNode("id");return c&&c.value===a}},TAG:function(a){return a==="*"?function(){return!0}:(a=a.replace(V,"").toLowerCase(),function(b){return b.nodeName&&b.nodeName.toLowerCase()===a})},CLASS:function(a){var b=B[o][a];return b||(b=B(a,new RegExp("(^|"+E+")"+a+"("+E+"|$)"))),function(a){return b.test(a.className||typeof a.getAttribute!==n&&a.getAttribute("class")||"")}},ATTR:function(a,b,c){return function(d,e){var f=bc.attr(d,a);return f==null?b==="!=":b?(f+="",b==="="?f===c:b==="!="?f!==c:b==="^="?c&&f.indexOf(c)===0:b==="*="?c&&f.indexOf(c)>-1:b==="$="?c&&f.substr(f.length-c.length)===c:b==="~="?(" "+f+" ").indexOf(c)>-1:b==="|="?f===c||f.substr(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d){return a==="nth"?function(a){var b,e,f=a.parentNode;if(c===1&&d===0)return!0;if(f){e=0;for(b=f.firstChild;b;b=b.nextSibling)if(b.nodeType===1){e++;if(a===b)break}}return e-=d,e===c||e%c===0&&e/c>=0}:function(b){var c=b;switch(a){case"only":case"first":while(c=c.previousSibling)if(c.nodeType===1)return!1;if(a==="first")return!0;c=b;case"last":while(c=c.nextSibling)if(c.nodeType===1)return!1;return!0}}},PSEUDO:function(a,b){var c,d=e.pseudos[a]||e.setFilters[a.toLowerCase()]||bc.error("unsupported pseudo: "+a);return d[o]?d(b):d.length>1?(c=[a,a,"",b],e.setFilters.hasOwnProperty(a.toLowerCase())?z(function(a,c){var e,f=d(a,b),g=f.length;while(g--)e=y.call(a,f[g]),a[e]=!(c[e]=f[g])}):function(a){return d(a,0,c)}):d}},pseudos:{not:z(function(a){var b=[],c=[],d=i(a.replace(L,"$1"));return d[o]?z(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)if(f=g[h])a[h]=!(b[h]=f)}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:z(function(a){return function(b){return bc(a,b).length>0}}),contains:z(function(a){return function(b){return(b.textContent||b.innerText||f(b)).indexOf(a)>-1}}),enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&!!a.checked||b==="option"&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},parent:function(a){return!e.pseudos.empty(a)},empty:function(a){var b;a=a.firstChild;while(a){if(a.nodeName>"@"||(b=a.nodeType)===3||b===4)return!1;a=a.nextSibling}return!0},header:function(a){return T.test(a.nodeName)},text:function(a){var b,c;return a.nodeName.toLowerCase()==="input"&&(b=a.type)==="text"&&((c=a.getAttribute("type"))==null||c.toLowerCase()===b)},radio:bd("radio"),checkbox:bd("checkbox"),file:bd("file"),password:bd("password"),image:bd("image"),submit:be("submit"),reset:be("reset"),button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&a.type==="button"||b==="button"},input:function(a){return U.test(a.nodeName)},focus:function(a){var b=a.ownerDocument;return a===b.activeElement&&(!b.hasFocus||b.hasFocus())&&(!!a.type||!!a.href)},active:function(a){return a===a.ownerDocument.activeElement},first:bf(function(a,b,c){return[0]}),last:bf(function(a,b,c){return[b-1]}),eq:bf(function(a,b,c){return[c<0?c+b:c]}),even:bf(function(a,b,c){for(var d=0;d<b;d+=2)a.push(d);return a}),odd:bf(function(a,b,c){for(var d=1;d<b;d+=2)a.push(d);return a}),lt:bf(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:bf(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},j=s.compareDocumentPosition?function(a,b){return a===b?(k=!0,0):(!a.compareDocumentPosition||!b.compareDocumentPosition?a.compareDocumentPosition:a.compareDocumentPosition(b)&4)?-1:1}:function(a,b){if(a===b)return k=!0,0;if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,h=b.parentNode,i=g;if(g===h)return bg(a,b);if(!g)return-1;if(!h)return 1;while(i)e.unshift(i),i=i.parentNode;i=h;while(i)f.unshift(i),i=i.parentNode;c=e.length,d=f.length;for(var j=0;j<c&&j<d;j++)if(e[j]!==f[j])return bg(e[j],f[j]);return j===c?bg(a,f[j],-1):bg(e[j],b,1)},[0,0].sort(j),m=!k,bc.uniqueSort=function(a){var b,c=1;k=m,a.sort(j);if(k)for(;b=a[c];c++)b===a[c-1]&&a.splice(c--,1);return a},bc.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},i=bc.compile=function(a,b){var c,d=[],e=[],f=D[o][a];if(!f){b||(b=bh(a)),c=b.length;while(c--)f=bm(b[c]),f[o]?d.push(f):e.push(f);f=D(a,bn(e,d))}return f},r.querySelectorAll&&function(){var a,b=bp,c=/'|\\/g,d=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,e=[":focus"],f=[":active",":focus"],h=s.matchesSelector||s.mozMatchesSelector||s.webkitMatchesSelector||s.oMatchesSelector||s.msMatchesSelector;X(function(a){a.innerHTML="<select><option selected=''></option></select>",a.querySelectorAll("[selected]").length||e.push("\\["+E+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),a.querySelectorAll(":checked").length||e.push(":checked")}),X(function(a){a.innerHTML="<p test=''></p>",a.querySelectorAll("[test^='']").length&&e.push("[*^$]="+E+"*(?:\"\"|'')"),a.innerHTML="<input type='hidden'/>",a.querySelectorAll(":enabled").length||e.push(":enabled",":disabled")}),e=new RegExp(e.join("|")),bp=function(a,d,f,g,h){if(!g&&!h&&(!e||!e.test(a))){var i,j,k=!0,l=o,m=d,n=d.nodeType===9&&a;if(d.nodeType===1&&d.nodeName.toLowerCase()!=="object"){i=bh(a),(k=d.getAttribute("id"))?l=k.replace(c,"\\$&"):d.setAttribute("id",l),l="[id='"+l+"'] ",j=i.length;while(j--)i[j]=l+i[j].join("");m=R.test(a)&&d.parentNode||d,n=i.join(",")}if(n)try{return w.apply(f,x.call(m.querySelectorAll(n),0)),f}catch(p){}finally{k||d.removeAttribute("id")}}return b(a,d,f,g,h)},h&&(X(function(b){a=h.call(b,"div");try{h.call(b,"[test!='']:sizzle"),f.push("!=",J)}catch(c){}}),f=new RegExp(f.join("|")),bc.matchesSelector=function(b,c){c=c.replace(d,"='$1']");if(!g(b)&&!f.test(c)&&(!e||!e.test(c)))try{var i=h.call(b,c);if(i||a||b.document&&b.document.nodeType!==11)return i}catch(j){}return bc(c,null,null,[b]).length>0})}(),e.pseudos.nth=e.pseudos.eq,e.filters=bq.prototype=e.pseudos,e.setFilters=new bq,bc.attr=p.attr,p.find=bc,p.expr=bc.selectors,p.expr[":"]=p.expr.pseudos,p.unique=bc.uniqueSort,p.text=bc.getText,p.isXMLDoc=bc.isXML,p.contains=bc.contains}(a);var bc=/Until$/,bd=/^(?:parents|prev(?:Until|All))/,be=/^.[^:#\[\.,]*$/,bf=p.expr.match.needsContext,bg={children:!0,contents:!0,next:!0,prev:!0};p.fn.extend({find:function(a){var b,c,d,e,f,g,h=this;if(typeof a!="string")return p(a).filter(function(){for(b=0,c=h.length;b<c;b++)if(p.contains(h[b],this))return!0});g=this.pushStack("","find",a);for(b=0,c=this.length;b<c;b++){d=g.length,p.find(a,this[b],g);if(b>0)for(e=d;e<g.length;e++)for(f=0;f<d;f++)if(g[f]===g[e]){g.splice(e--,1);break}}return g},has:function(a){var b,c=p(a,this),d=c.length;return this.filter(function(){for(b=0;b<d;b++)if(p.contains(this,c[b]))return!0})},not:function(a){return this.pushStack(bj(this,a,!1),"not",a)},filter:function(a){return this.pushStack(bj(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?bf.test(a)?p(a,this.context).index(this[0])>=0:p.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c,d=0,e=this.length,f=[],g=bf.test(a)||typeof a!="string"?p(a,b||this.context):0;for(;d<e;d++){c=this[d];while(c&&c.ownerDocument&&c!==b&&c.nodeType!==11){if(g?g.index(c)>-1:p.find.matchesSelector(c,a)){f.push(c);break}c=c.parentNode}}return f=f.length>1?p.unique(f):f,this.pushStack(f,"closest",a)},index:function(a){return a?typeof a=="string"?p.inArray(this[0],p(a)):p.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(a,b){var c=typeof a=="string"?p(a,b):p.makeArray(a&&a.nodeType?[a]:a),d=p.merge(this.get(),c);return this.pushStack(bh(c[0])||bh(d[0])?d:p.unique(d))},addBack:function(a){return this.add(a==null?this.prevObject:this.prevObject.filter(a))}}),p.fn.andSelf=p.fn.addBack,p.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return p.dir(a,"parentNode")},parentsUntil:function(a,b,c){return p.dir(a,"parentNode",c)},next:function(a){return bi(a,"nextSibling")},prev:function(a){return bi(a,"previousSibling")},nextAll:function(a){return p.dir(a,"nextSibling")},prevAll:function(a){return p.dir(a,"previousSibling")},nextUntil:function(a,b,c){return p.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return p.dir(a,"previousSibling",c)},siblings:function(a){return p.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return p.sibling(a.firstChild)},contents:function(a){return p.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:p.merge([],a.childNodes)}},function(a,b){p.fn[a]=function(c,d){var e=p.map(this,b,c);return bc.test(a)||(d=c),d&&typeof d=="string"&&(e=p.filter(d,e)),e=this.length>1&&!bg[a]?p.unique(e):e,this.length>1&&bd.test(a)&&(e=e.reverse()),this.pushStack(e,a,k.call(arguments).join(","))}}),p.extend({filter:function(a,b,c){return c&&(a=":not("+a+")"),b.length===1?p.find.matchesSelector(b[0],a)?[b[0]]:[]:p.find.matches(a,b)},dir:function(a,c,d){var e=[],f=a[c];while(f&&f.nodeType!==9&&(d===b||f.nodeType!==1||!p(f).is(d)))f.nodeType===1&&e.push(f),f=f[c];return e},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var bl="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",bm=/ jQuery\d+="(?:null|\d+)"/g,bn=/^\s+/,bo=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bp=/<([\w:]+)/,bq=/<tbody/i,br=/<|&#?\w+;/,bs=/<(?:script|style|link)/i,bt=/<(?:script|object|embed|option|style)/i,bu=new RegExp("<(?:"+bl+")[\\s/>]","i"),bv=/^(?:checkbox|radio)$/,bw=/checked\s*(?:[^=]|=\s*.checked.)/i,bx=/\/(java|ecma)script/i,by=/^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,bz={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bA=bk(e),bB=bA.appendChild(e.createElement("div"));bz.optgroup=bz.option,bz.tbody=bz.tfoot=bz.colgroup=bz.caption=bz.thead,bz.th=bz.td,p.support.htmlSerialize||(bz._default=[1,"X<div>","</div>"]),p.fn.extend({text:function(a){return p.access(this,function(a){return a===b?p.text(this):this.empty().append((this[0]&&this[0].ownerDocument||e).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(p.isFunction(a))return this.each(function(b){p(this).wrapAll(a.call(this,b))});if(this[0]){var b=p(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return p.isFunction(a)?this.each(function(b){p(this).wrapInner(a.call(this,b))}):this.each(function(){var b=p(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=p.isFunction(a);return this.each(function(c){p(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){p.nodeName(this,"body")||p(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(a,this.firstChild)})},before:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(a,this),"before",this.selector)}},after:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(this,a),"after",this.selector)}},remove:function(a,b){var c,d=0;for(;(c=this[d])!=null;d++)if(!a||p.filter(a,[c]).length)!b&&c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),p.cleanData([c])),c.parentNode&&c.parentNode.removeChild(c);return this},empty:function(){var a,b=0;for(;(a=this[b])!=null;b++){a.nodeType===1&&p.cleanData(a.getElementsByTagName("*"));while(a.firstChild)a.removeChild(a.firstChild)}return this},clone:function(a,b){return a=a==null?!1:a,b=b==null?a:b,this.map(function(){return p.clone(this,a,b)})},html:function(a){return p.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(bm,""):b;if(typeof a=="string"&&!bs.test(a)&&(p.support.htmlSerialize||!bu.test(a))&&(p.support.leadingWhitespace||!bn.test(a))&&!bz[(bp.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(bo,"<$1></$2>");try{for(;d<e;d++)c=this[d]||{},c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),c.innerHTML=a);c=0}catch(f){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(a){return bh(this[0])?this.length?this.pushStack(p(p.isFunction(a)?a():a),"replaceWith",a):this:p.isFunction(a)?this.each(function(b){var c=p(this),d=c.html();c.replaceWith(a.call(this,b,d))}):(typeof a!="string"&&(a=p(a).detach()),this.each(function(){var b=this.nextSibling,c=this.parentNode;p(this).remove(),b?p(b).before(a):p(c).append(a)}))},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){a=[].concat.apply([],a);var e,f,g,h,i=0,j=a[0],k=[],l=this.length;if(!p.support.checkClone&&l>1&&typeof j=="string"&&bw.test(j))return this.each(function(){p(this).domManip(a,c,d)});if(p.isFunction(j))return this.each(function(e){var f=p(this);a[0]=j.call(this,e,c?f.html():b),f.domManip(a,c,d)});if(this[0]){e=p.buildFragment(a,this,k),g=e.fragment,f=g.firstChild,g.childNodes.length===1&&(g=f);if(f){c=c&&p.nodeName(f,"tr");for(h=e.cacheable||l-1;i<l;i++)d.call(c&&p.nodeName(this[i],"table")?bC(this[i],"tbody"):this[i],i===h?g:p.clone(g,!0,!0))}g=f=null,k.length&&p.each(k,function(a,b){b.src?p.ajax?p.ajax({url:b.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):p.error("no ajax"):p.globalEval((b.text||b.textContent||b.innerHTML||"").replace(by,"")),b.parentNode&&b.parentNode.removeChild(b)})}return this}}),p.buildFragment=function(a,c,d){var f,g,h,i=a[0];return c=c||e,c=!c.nodeType&&c[0]||c,c=c.ownerDocument||c,a.length===1&&typeof i=="string"&&i.length<512&&c===e&&i.charAt(0)==="<"&&!bt.test(i)&&(p.support.checkClone||!bw.test(i))&&(p.support.html5Clone||!bu.test(i))&&(g=!0,f=p.fragments[i],h=f!==b),f||(f=c.createDocumentFragment(),p.clean(a,c,f,d),g&&(p.fragments[i]=h&&f)),{fragment:f,cacheable:g}},p.fragments={},p.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){p.fn[a]=function(c){var d,e=0,f=[],g=p(c),h=g.length,i=this.length===1&&this[0].parentNode;if((i==null||i&&i.nodeType===11&&i.childNodes.length===1)&&h===1)return g[b](this[0]),this;for(;e<h;e++)d=(e>0?this.clone(!0):this).get(),p(g[e])[b](d),f=f.concat(d);return this.pushStack(f,a,g.selector)}}),p.extend({clone:function(a,b,c){var d,e,f,g;p.support.html5Clone||p.isXMLDoc(a)||!bu.test("<"+a.nodeName+">")?g=a.cloneNode(!0):(bB.innerHTML=a.outerHTML,bB.removeChild(g=bB.firstChild));if((!p.support.noCloneEvent||!p.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!p.isXMLDoc(a)){bE(a,g),d=bF(a),e=bF(g);for(f=0;d[f];++f)e[f]&&bE(d[f],e[f])}if(b){bD(a,g);if(c){d=bF(a),e=bF(g);for(f=0;d[f];++f)bD(d[f],e[f])}}return d=e=null,g},clean:function(a,b,c,d){var f,g,h,i,j,k,l,m,n,o,q,r,s=b===e&&bA,t=[];if(!b||typeof b.createDocumentFragment=="undefined")b=e;for(f=0;(h=a[f])!=null;f++){typeof h=="number"&&(h+="");if(!h)continue;if(typeof h=="string")if(!br.test(h))h=b.createTextNode(h);else{s=s||bk(b),l=b.createElement("div"),s.appendChild(l),h=h.replace(bo,"<$1></$2>"),i=(bp.exec(h)||["",""])[1].toLowerCase(),j=bz[i]||bz._default,k=j[0],l.innerHTML=j[1]+h+j[2];while(k--)l=l.lastChild;if(!p.support.tbody){m=bq.test(h),n=i==="table"&&!m?l.firstChild&&l.firstChild.childNodes:j[1]==="<table>"&&!m?l.childNodes:[];for(g=n.length-1;g>=0;--g)p.nodeName(n[g],"tbody")&&!n[g].childNodes.length&&n[g].parentNode.removeChild(n[g])}!p.support.leadingWhitespace&&bn.test(h)&&l.insertBefore(b.createTextNode(bn.exec(h)[0]),l.firstChild),h=l.childNodes,l.parentNode.removeChild(l)}h.nodeType?t.push(h):p.merge(t,h)}l&&(h=l=s=null);if(!p.support.appendChecked)for(f=0;(h=t[f])!=null;f++)p.nodeName(h,"input")?bG(h):typeof h.getElementsByTagName!="undefined"&&p.grep(h.getElementsByTagName("input"),bG);if(c){q=function(a){if(!a.type||bx.test(a.type))return d?d.push(a.parentNode?a.parentNode.removeChild(a):a):c.appendChild(a)};for(f=0;(h=t[f])!=null;f++)if(!p.nodeName(h,"script")||!q(h))c.appendChild(h),typeof h.getElementsByTagName!="undefined"&&(r=p.grep(p.merge([],h.getElementsByTagName("script")),q),t.splice.apply(t,[f+1,0].concat(r)),f+=r.length)}return t},cleanData:function(a,b){var c,d,e,f,g=0,h=p.expando,i=p.cache,j=p.support.deleteExpando,k=p.event.special;for(;(e=a[g])!=null;g++)if(b||p.acceptData(e)){d=e[h],c=d&&i[d];if(c){if(c.events)for(f in c.events)k[f]?p.event.remove(e,f):p.removeEvent(e,f,c.handle);i[d]&&(delete i[d],j?delete e[h]:e.removeAttribute?e.removeAttribute(h):e[h]=null,p.deletedIds.push(d))}}}}),function(){var a,b;p.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a=p.uaMatch(g.userAgent),b={},a.browser&&(b[a.browser]=!0,b.version=a.version),b.chrome?b.webkit=!0:b.webkit&&(b.safari=!0),p.browser=b,p.sub=function(){function a(b,c){return new a.fn.init(b,c)}p.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function c(c,d){return d&&d instanceof p&&!(d instanceof a)&&(d=a(d)),p.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(e);return a}}();var bH,bI,bJ,bK=/alpha\([^)]*\)/i,bL=/opacity=([^)]*)/,bM=/^(top|right|bottom|left)$/,bN=/^(none|table(?!-c[ea]).+)/,bO=/^margin/,bP=new RegExp("^("+q+")(.*)$","i"),bQ=new RegExp("^("+q+")(?!px)[a-z%]+$","i"),bR=new RegExp("^([-+])=("+q+")","i"),bS={},bT={position:"absolute",visibility:"hidden",display:"block"},bU={letterSpacing:0,fontWeight:400},bV=["Top","Right","Bottom","Left"],bW=["Webkit","O","Moz","ms"],bX=p.fn.toggle;p.fn.extend({css:function(a,c){return p.access(this,function(a,c,d){return d!==b?p.style(a,c,d):p.css(a,c)},a,c,arguments.length>1)},show:function(){return b$(this,!0)},hide:function(){return b$(this)},toggle:function(a,b){var c=typeof a=="boolean";return p.isFunction(a)&&p.isFunction(b)?bX.apply(this,arguments):this.each(function(){(c?a:bZ(this))?p(this).show():p(this).hide()})}}),p.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bH(a,"opacity");return c===""?"1":c}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":p.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!a||a.nodeType===3||a.nodeType===8||!a.style)return;var f,g,h,i=p.camelCase(c),j=a.style;c=p.cssProps[i]||(p.cssProps[i]=bY(j,i)),h=p.cssHooks[c]||p.cssHooks[i];if(d===b)return h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c];g=typeof d,g==="string"&&(f=bR.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(p.css(a,c)),g="number");if(d==null||g==="number"&&isNaN(d))return;g==="number"&&!p.cssNumber[i]&&(d+="px");if(!h||!("set"in h)||(d=h.set(a,d,e))!==b)try{j[c]=d}catch(k){}},css:function(a,c,d,e){var f,g,h,i=p.camelCase(c);return c=p.cssProps[i]||(p.cssProps[i]=bY(a.style,i)),h=p.cssHooks[c]||p.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,e)),f===b&&(f=bH(a,c)),f==="normal"&&c in bU&&(f=bU[c]),d||e!==b?(g=parseFloat(f),d||p.isNumeric(g)?g||0:f):f},swap:function(a,b,c){var d,e,f={};for(e in b)f[e]=a.style[e],a.style[e]=b[e];d=c.call(a);for(e in b)a.style[e]=f[e];return d}}),a.getComputedStyle?bH=function(b,c){var d,e,f,g,h=a.getComputedStyle(b,null),i=b.style;return h&&(d=h[c],d===""&&!p.contains(b.ownerDocument,b)&&(d=p.style(b,c)),bQ.test(d)&&bO.test(c)&&(e=i.width,f=i.minWidth,g=i.maxWidth,i.minWidth=i.maxWidth=i.width=d,d=h.width,i.width=e,i.minWidth=f,i.maxWidth=g)),d}:e.documentElement.currentStyle&&(bH=function(a,b){var c,d,e=a.currentStyle&&a.currentStyle[b],f=a.style;return e==null&&f&&f[b]&&(e=f[b]),bQ.test(e)&&!bM.test(b)&&(c=f.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":e,e=f.pixelLeft+"px",f.left=c,d&&(a.runtimeStyle.left=d)),e===""?"auto":e}),p.each(["height","width"],function(a,b){p.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth===0&&bN.test(bH(a,"display"))?p.swap(a,bT,function(){return cb(a,b,d)}):cb(a,b,d)},set:function(a,c,d){return b_(a,c,d?ca(a,b,d,p.support.boxSizing&&p.css(a,"boxSizing")==="border-box"):0)}}}),p.support.opacity||(p.cssHooks.opacity={get:function(a,b){return bL.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=p.isNumeric(b)?"alpha(opacity="+b*100+")":"",f=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&p.trim(f.replace(bK,""))===""&&c.removeAttribute){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bK.test(f)?f.replace(bK,e):f+" "+e}}),p(function(){p.support.reliableMarginRight||(p.cssHooks.marginRight={get:function(a,b){return p.swap(a,{display:"inline-block"},function(){if(b)return bH(a,"marginRight")})}}),!p.support.pixelPosition&&p.fn.position&&p.each(["top","left"],function(a,b){p.cssHooks[b]={get:function(a,c){if(c){var d=bH(a,b);return bQ.test(d)?p(a).position()[b]+"px":d}}}})}),p.expr&&p.expr.filters&&(p.expr.filters.hidden=function(a){return a.offsetWidth===0&&a.offsetHeight===0||!p.support.reliableHiddenOffsets&&(a.style&&a.style.display||bH(a,"display"))==="none"},p.expr.filters.visible=function(a){return!p.expr.filters.hidden(a)}),p.each({margin:"",padding:"",border:"Width"},function(a,b){p.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bV[d]+b]=e[d]||e[d-2]||e[0];return f}},bO.test(a)||(p.cssHooks[a+b].set=b_)});var cd=/%20/g,ce=/\[\]$/,cf=/\r?\n/g,cg=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,ch=/^(?:select|textarea)/i;p.fn.extend({serialize:function(){return p.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?p.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ch.test(this.nodeName)||cg.test(this.type))}).map(function(a,b){var c=p(this).val();return c==null?null:p.isArray(c)?p.map(c,function(a,c){return{name:b.name,value:a.replace(cf,"\r\n")}}):{name:b.name,value:c.replace(cf,"\r\n")}}).get()}}),p.param=function(a,c){var d,e=[],f=function(a,b){b=p.isFunction(b)?b():b==null?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=p.ajaxSettings&&p.ajaxSettings.traditional);if(p.isArray(a)||a.jquery&&!p.isPlainObject(a))p.each(a,function(){f(this.name,this.value)});else for(d in a)ci(d,a[d],c,f);return e.join("&").replace(cd,"+")};var cj,ck,cl=/#.*$/,cm=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,cn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,co=/^(?:GET|HEAD)$/,cp=/^\/\//,cq=/\?/,cr=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,cs=/([?&])_=[^&]*/,ct=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,cu=p.fn.load,cv={},cw={},cx=["*/"]+["*"];try{ck=f.href}catch(cy){ck=e.createElement("a"),ck.href="",ck=ck.href}cj=ct.exec(ck.toLowerCase())||[],p.fn.load=function(a,c,d){if(typeof a!="string"&&cu)return cu.apply(this,arguments);if(!this.length)return this;var e,f,g,h=this,i=a.indexOf(" ");return i>=0&&(e=a.slice(i,a.length),a=a.slice(0,i)),p.isFunction(c)?(d=c,c=b):c&&typeof c=="object"&&(f="POST"),p.ajax({url:a,type:f,dataType:"html",data:c,complete:function(a,b){d&&h.each(d,g||[a.responseText,b,a])}}).done(function(a){g=arguments,h.html(e?p("<div>").append(a.replace(cr,"")).find(e):a)}),this},p.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){p.fn[b]=function(a){return this.on(b,a)}}),p.each(["get","post"],function(a,c){p[c]=function(a,d,e,f){return p.isFunction(d)&&(f=f||e,e=d,d=b),p.ajax({type:c,url:a,data:d,success:e,dataType:f})}}),p.extend({getScript:function(a,c){return p.get(a,b,c,"script")},getJSON:function(a,b,c){return p.get(a,b,c,"json")},ajaxSetup:function(a,b){return b?cB(a,p.ajaxSettings):(b=a,a=p.ajaxSettings),cB(a,b),a},ajaxSettings:{url:ck,isLocal:cn.test(cj[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":cx},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":p.parseJSON,"text xml":p.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:cz(cv),ajaxTransport:cz(cw),ajax:function(a,c){function y(a,c,f,i){var k,s,t,u,w,y=c;if(v===2)return;v=2,h&&clearTimeout(h),g=b,e=i||"",x.readyState=a>0?4:0,f&&(u=cC(l,x,f));if(a>=200&&a<300||a===304)l.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(p.lastModified[d]=w),w=x.getResponseHeader("Etag"),w&&(p.etag[d]=w)),a===304?(y="notmodified",k=!0):(k=cD(l,u),y=k.state,s=k.data,t=k.error,k=!t);else{t=y;if(!y||a)y="error",a<0&&(a=0)}x.status=a,x.statusText=(c||y)+"",k?o.resolveWith(m,[s,y,x]):o.rejectWith(m,[x,y,t]),x.statusCode(r),r=b,j&&n.trigger("ajax"+(k?"Success":"Error"),[x,l,k?s:t]),q.fireWith(m,[x,y]),j&&(n.trigger("ajaxComplete",[x,l]),--p.active||p.event.trigger("ajaxStop"))}typeof a=="object"&&(c=a,a=b),c=c||{};var d,e,f,g,h,i,j,k,l=p.ajaxSetup({},c),m=l.context||l,n=m!==l&&(m.nodeType||m instanceof p)?p(m):p.event,o=p.Deferred(),q=p.Callbacks("once memory"),r=l.statusCode||{},t={},u={},v=0,w="canceled",x={readyState:0,setRequestHeader:function(a,b){if(!v){var c=a.toLowerCase();a=u[c]=u[c]||a,t[a]=b}return this},getAllResponseHeaders:function(){return v===2?e:null},getResponseHeader:function(a){var c;if(v===2){if(!f){f={};while(c=cm.exec(e))f[c[1].toLowerCase()]=c[2]}c=f[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){return v||(l.mimeType=a),this},abort:function(a){return a=a||w,g&&g.abort(a),y(0,a),this}};o.promise(x),x.success=x.done,x.error=x.fail,x.complete=q.add,x.statusCode=function(a){if(a){var b;if(v<2)for(b in a)r[b]=[r[b],a[b]];else b=a[x.status],x.always(b)}return this},l.url=((a||l.url)+"").replace(cl,"").replace(cp,cj[1]+"//"),l.dataTypes=p.trim(l.dataType||"*").toLowerCase().split(s),l.crossDomain==null&&(i=ct.exec(l.url.toLowerCase())||!1,l.crossDomain=i&&i.join(":")+(i[3]?"":i[1]==="http:"?80:443)!==cj.join(":")+(cj[3]?"":cj[1]==="http:"?80:443)),l.data&&l.processData&&typeof l.data!="string"&&(l.data=p.param(l.data,l.traditional)),cA(cv,l,c,x);if(v===2)return x;j=l.global,l.type=l.type.toUpperCase(),l.hasContent=!co.test(l.type),j&&p.active++===0&&p.event.trigger("ajaxStart");if(!l.hasContent){l.data&&(l.url+=(cq.test(l.url)?"&":"?")+l.data,delete l.data),d=l.url;if(l.cache===!1){var z=p.now(),A=l.url.replace(cs,"$1_="+z);l.url=A+(A===l.url?(cq.test(l.url)?"&":"?")+"_="+z:"")}}(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&x.setRequestHeader("Content-Type",l.contentType),l.ifModified&&(d=d||l.url,p.lastModified[d]&&x.setRequestHeader("If-Modified-Since",p.lastModified[d]),p.etag[d]&&x.setRequestHeader("If-None-Match",p.etag[d])),x.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+(l.dataTypes[0]!=="*"?", "+cx+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)x.setRequestHeader(k,l.headers[k]);if(!l.beforeSend||l.beforeSend.call(m,x,l)!==!1&&v!==2){w="abort";for(k in{success:1,error:1,complete:1})x[k](l[k]);g=cA(cw,l,c,x);if(!g)y(-1,"No Transport");else{x.readyState=1,j&&n.trigger("ajaxSend",[x,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){x.abort("timeout")},l.timeout));try{v=1,g.send(t,y)}catch(B){if(v<2)y(-1,B);else throw B}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var cE=[],cF=/\?/,cG=/(=)\?(?=&|$)|\?\?/,cH=p.now();p.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=cE.pop()||p.expando+"_"+cH++;return this[a]=!0,a}}),p.ajaxPrefilter("json jsonp",function(c,d,e){var f,g,h,i=c.data,j=c.url,k=c.jsonp!==!1,l=k&&cG.test(j),m=k&&!l&&typeof i=="string"&&!(c.contentType||"").indexOf("application/x-www-form-urlencoded")&&cG.test(i);if(c.dataTypes[0]==="jsonp"||l||m)return f=c.jsonpCallback=p.isFunction(c.jsonpCallback)?c.jsonpCallback():c.jsonpCallback,g=a[f],l?c.url=j.replace(cG,"$1"+f):m?c.data=i.replace(cG,"$1"+f):k&&(c.url+=(cF.test(j)?"&":"?")+c.jsonp+"="+f),c.converters["script json"]=function(){return h||p.error(f+" was not called"),h[0]},c.dataTypes[0]="json",a[f]=function(){h=arguments},e.always(function(){a[f]=g,c[f]&&(c.jsonpCallback=d.jsonpCallback,cE.push(f)),h&&p.isFunction(g)&&g(h[0]),h=g=b}),"script"}),p.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){return p.globalEval(a),a}}}),p.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),p.ajaxTransport("script",function(a){if(a.crossDomain){var c,d=e.head||e.getElementsByTagName("head")[0]||e.documentElement;return{send:function(f,g){c=e.createElement("script"),c.async="async",a.scriptCharset&&(c.charset=a.scriptCharset),c.src=a.url,c.onload=c.onreadystatechange=function(a,e){if(e||!c.readyState||/loaded|complete/.test(c.readyState))c.onload=c.onreadystatechange=null,d&&c.parentNode&&d.removeChild(c),c=b,e||g(200,"success")},d.insertBefore(c,d.firstChild)},abort:function(){c&&c.onload(0,1)}}}});var cI,cJ=a.ActiveXObject?function(){for(var a in cI)cI[a](0,1)}:!1,cK=0;p.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cL()||cM()}:cL,function(a){p.extend(p.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(p.ajaxSettings.xhr()),p.support.ajax&&p.ajaxTransport(function(c){if(!c.crossDomain||p.support.cors){var d;return{send:function(e,f){var g,h,i=c.xhr();c.username?i.open(c.type,c.url,c.async,c.username,c.password):i.open(c.type,c.url,c.async);if(c.xhrFields)for(h in c.xhrFields)i[h]=c.xhrFields[h];c.mimeType&&i.overrideMimeType&&i.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(h in e)i.setRequestHeader(h,e[h])}catch(j){}i.send(c.hasContent&&c.data||null),d=function(a,e){var h,j,k,l,m;try{if(d&&(e||i.readyState===4)){d=b,g&&(i.onreadystatechange=p.noop,cJ&&delete cI[g]);if(e)i.readyState!==4&&i.abort();else{h=i.status,k=i.getAllResponseHeaders(),l={},m=i.responseXML,m&&m.documentElement&&(l.xml=m);try{l.text=i.responseText}catch(a){}try{j=i.statusText}catch(n){j=""}!h&&c.isLocal&&!c.crossDomain?h=l.text?200:404:h===1223&&(h=204)}}}catch(o){e||f(-1,o)}l&&f(h,j,l,k)},c.async?i.readyState===4?setTimeout(d,0):(g=++cK,cJ&&(cI||(cI={},p(a).unload(cJ)),cI[g]=d),i.onreadystatechange=d):d()},abort:function(){d&&d(0,1)}}}});var cN,cO,cP=/^(?:toggle|show|hide)$/,cQ=new RegExp("^(?:([-+])=|)("+q+")([a-z%]*)$","i"),cR=/queueHooks$/,cS=[cY],cT={"*":[function(a,b){var c,d,e=this.createTween(a,b),f=cQ.exec(b),g=e.cur(),h=+g||0,i=1,j=20;if(f){c=+f[2],d=f[3]||(p.cssNumber[a]?"":"px");if(d!=="px"&&h){h=p.css(e.elem,a,!0)||c||1;do i=i||".5",h=h/i,p.style(e.elem,a,h+d);while(i!==(i=e.cur()/g)&&i!==1&&--j)}e.unit=d,e.start=h,e.end=f[1]?h+(f[1]+1)*c:c}return e}]};p.Animation=p.extend(cW,{tweener:function(a,b){p.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");var c,d=0,e=a.length;for(;d<e;d++)c=a[d],cT[c]=cT[c]||[],cT[c].unshift(b)},prefilter:function(a,b){b?cS.unshift(a):cS.push(a)}}),p.Tween=cZ,cZ.prototype={constructor:cZ,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(p.cssNumber[c]?"":"px")},cur:function(){var a=cZ.propHooks[this.prop];return a&&a.get?a.get(this):cZ.propHooks._default.get(this)},run:function(a){var b,c=cZ.propHooks[this.prop];return this.options.duration?this.pos=b=p.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):cZ.propHooks._default.set(this),this}},cZ.prototype.init.prototype=cZ.prototype,cZ.propHooks={_default:{get:function(a){var b;return a.elem[a.prop]==null||!!a.elem.style&&a.elem.style[a.prop]!=null?(b=p.css(a.elem,a.prop,!1,""),!b||b==="auto"?0:b):a.elem[a.prop]},set:function(a){p.fx.step[a.prop]?p.fx.step[a.prop](a):a.elem.style&&(a.elem.style[p.cssProps[a.prop]]!=null||p.cssHooks[a.prop])?p.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},cZ.propHooks.scrollTop=cZ.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},p.each(["toggle","show","hide"],function(a,b){var c=p.fn[b];p.fn[b]=function(d,e,f){return d==null||typeof d=="boolean"||!a&&p.isFunction(d)&&p.isFunction(e)?c.apply(this,arguments):this.animate(c$(b,!0),d,e,f)}}),p.fn.extend({fadeTo:function(a,b,c,d){return this.filter(bZ).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=p.isEmptyObject(a),f=p.speed(b,c,d),g=function(){var b=cW(this,p.extend({},a),f);e&&b.stop(!0)};return e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,c,d){var e=function(a){var b=a.stop;delete a.stop,b(d)};return typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,c=a!=null&&a+"queueHooks",f=p.timers,g=p._data(this);if(c)g[c]&&g[c].stop&&e(g[c]);else for(c in g)g[c]&&g[c].stop&&cR.test(c)&&e(g[c]);for(c=f.length;c--;)f[c].elem===this&&(a==null||f[c].queue===a)&&(f[c].anim.stop(d),b=!1,f.splice(c,1));(b||!d)&&p.dequeue(this,a)})}}),p.each({slideDown:c$("show"),slideUp:c$("hide"),slideToggle:c$("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){p.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),p.speed=function(a,b,c){var d=a&&typeof a=="object"?p.extend({},a):{complete:c||!c&&b||p.isFunction(a)&&a,duration:a,easing:c&&b||b&&!p.isFunction(b)&&b};d.duration=p.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in p.fx.speeds?p.fx.speeds[d.duration]:p.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";return d.old=d.complete,d.complete=function(){p.isFunction(d.old)&&d.old.call(this),d.queue&&p.dequeue(this,d.queue)},d},p.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},p.timers=[],p.fx=cZ.prototype.init,p.fx.tick=function(){var a,b=p.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||p.fx.stop()},p.fx.timer=function(a){a()&&p.timers.push(a)&&!cO&&(cO=setInterval(p.fx.tick,p.fx.interval))},p.fx.interval=13,p.fx.stop=function(){clearInterval(cO),cO=null},p.fx.speeds={slow:600,fast:200,_default:400},p.fx.step={},p.expr&&p.expr.filters&&(p.expr.filters.animated=function(a){return p.grep(p.timers,function(b){return a===b.elem}).length});var c_=/^(?:body|html)$/i;p.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){p.offset.setOffset(this,a,b)});var c,d,e,f,g,h,i,j={top:0,left:0},k=this[0],l=k&&k.ownerDocument;if(!l)return;return(d=l.body)===k?p.offset.bodyOffset(k):(c=l.documentElement,p.contains(c,k)?(typeof k.getBoundingClientRect!="undefined"&&(j=k.getBoundingClientRect()),e=da(l),f=c.clientTop||d.clientTop||0,g=c.clientLeft||d.clientLeft||0,h=e.pageYOffset||c.scrollTop,i=e.pageXOffset||c.scrollLeft,{top:j.top+h-f,left:j.left+i-g}):j)},p.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;return p.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(p.css(a,"marginTop"))||0,c+=parseFloat(p.css(a,"marginLeft"))||0),{top:b,left:c}},setOffset:function(a,b,c){var d=p.css(a,"position");d==="static"&&(a.style.position="relative");var e=p(a),f=e.offset(),g=p.css(a,"top"),h=p.css(a,"left"),i=(d==="absolute"||d==="fixed")&&p.inArray("auto",[g,h])>-1,j={},k={},l,m;i?(k=e.position(),l=k.top,m=k.left):(l=parseFloat(g)||0,m=parseFloat(h)||0),p.isFunction(b)&&(b=b.call(a,c,f)),b.top!=null&&(j.top=b.top-f.top+l),b.left!=null&&(j.left=b.left-f.left+m),"using"in b?b.using.call(a,j):e.css(j)}},p.fn.extend({position:function(){if(!this[0])return;var a=this[0],b=this.offsetParent(),c=this.offset(),d=c_.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(p.css(a,"marginTop"))||0,c.left-=parseFloat(p.css(a,"marginLeft"))||0,d.top+=parseFloat(p.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(p.css(b[0],"borderLeftWidth"))||0,{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||e.body;while(a&&!c_.test(a.nodeName)&&p.css(a,"position")==="static")a=a.offsetParent;return a||e.body})}}),p.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);p.fn[a]=function(e){return p.access(this,function(a,e,f){var g=da(a);if(f===b)return g?c in g?g[c]:g.document.documentElement[e]:a[e];g?g.scrollTo(d?p(g).scrollLeft():f,d?f:p(g).scrollTop()):a[e]=f},a,e,arguments.length,null)}}),p.each({Height:"height",Width:"width"},function(a,c){p.each({padding:"inner"+a,content:c,"":"outer"+a},function(d,e){p.fn[e]=function(e,f){var g=arguments.length&&(d||typeof e!="boolean"),h=d||(e===!0||f===!0?"margin":"border");return p.access(this,function(c,d,e){var f;return p.isWindow(c)?c.document.documentElement["client"+a]:c.nodeType===9?(f=c.documentElement,Math.max(c.body["scroll"+a],f["scroll"+a],c.body["offset"+a],f["offset"+a],f["client"+a])):e===b?p.css(c,d,e,h):p.style(c,d,e,h)},c,g?e:b,g,null)}})}),a.jQuery=a.$=p,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return p})})(window);
706 </script>
707
708 <script type="text/javascript">
709 (function(b){b.color={};b.color.make=function(d,e,g,f){var c={};c.r=d||0;c.g=e||0;c.b=g||0;c.a=f!=null?f:1;c.add=function(h,j){for(var k=0;k<h.length;++k){c[h.charAt(k)]+=j}return c.normalize()};c.scale=function(h,j){for(var k=0;k<h.length;++k){c[h.charAt(k)]*=j}return c.normalize()};c.toString=function(){if(c.a>=1){return"rgb("+[c.r,c.g,c.b].join(",")+")"}else{return"rgba("+[c.r,c.g,c.b,c.a].join(",")+")"}};c.normalize=function(){function h(k,j,l){return j<k?k:(j>l?l:j)}c.r=h(0,parseInt(c.r),255);c.g=h(0,parseInt(c.g),255);c.b=h(0,parseInt(c.b),255);c.a=h(0,c.a,1);return c};c.clone=function(){return b.color.make(c.r,c.b,c.g,c.a)};return c.normalize()};b.color.extract=function(d,e){var c;do{c=d.css(e).toLowerCase();if(c!=""&&c!="transparent"){break}d=d.parent()}while(!b.nodeName(d.get(0),"body"));if(c=="rgba(0, 0, 0, 0)"){c="transparent"}return b.color.parse(c)};b.color.parse=function(c){var d,f=b.color.make;if(d=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c)){return f(parseInt(d[1],10),parseInt(d[2],10),parseInt(d[3],10))}if(d=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(c)){return f(parseInt(d[1],10),parseInt(d[2],10),parseInt(d[3],10),parseFloat(d[4]))}if(d=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c)){return f(parseFloat(d[1])*2.55,parseFloat(d[2])*2.55,parseFloat(d[3])*2.55)}if(d=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(c)){return f(parseFloat(d[1])*2.55,parseFloat(d[2])*2.55,parseFloat(d[3])*2.55,parseFloat(d[4]))}if(d=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c)){return f(parseInt(d[1],16),parseInt(d[2],16),parseInt(d[3],16))}if(d=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c)){return f(parseInt(d[1]+d[1],16),parseInt(d[2]+d[2],16),parseInt(d[3]+d[3],16))}var e=b.trim(c).toLowerCase();if(e=="transparent"){return f(255,255,255,0)}else{d=a[e]||[0,0,0];return f(d[0],d[1],d[2])}};var a={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(jQuery);(function(c){function b(av,ai,J,af){var Q=[],O={colors:["#edc240","#afd8f8","#cb4b4b","#4da74d","#9440ed"],legend:{show:true,noColumns:1,labelFormatter:null,labelBoxBorderColor:"#ccc",container:null,position:"ne",margin:5,backgroundColor:null,backgroundOpacity:0.85},xaxis:{show:null,position:"bottom",mode:null,color:null,tickColor:null,transform:null,inverseTransform:null,min:null,max:null,autoscaleMargin:null,ticks:null,tickFormatter:null,labelWidth:null,labelHeight:null,reserveSpace:null,tickLength:null,alignTicksWithAxis:null,tickDecimals:null,tickSize:null,minTickSize:null,monthNames:null,timeformat:null,twelveHourClock:false},yaxis:{autoscaleMargin:0.02,position:"left"},xaxes:[],yaxes:[],series:{points:{show:false,radius:3,lineWidth:2,fill:true,fillColor:"#ffffff",symbol:"circle"},lines:{lineWidth:2,fill:false,fillColor:null,steps:false},bars:{show:false,lineWidth:2,barWidth:1,fill:true,fillColor:null,align:"left",horizontal:false},shadowSize:3},grid:{show:true,aboveData:false,color:"#545454",backgroundColor:null,borderColor:null,tickColor:null,labelMargin:5,axisMargin:8,borderWidth:2,minBorderMargin:null,markings:null,markingsColor:"#f4f4f4",markingsLineWidth:2,clickable:false,hoverable:false,autoHighlight:true,mouseActiveRadius:10},hooks:{}},az=null,ad=null,y=null,H=null,A=null,p=[],aw=[],q={left:0,right:0,top:0,bottom:0},G=0,I=0,h=0,w=0,ak={processOptions:[],processRawData:[],processDatapoints:[],drawSeries:[],draw:[],bindEvents:[],drawOverlay:[],shutdown:[]},aq=this;aq.setData=aj;aq.setupGrid=t;aq.draw=W;aq.getPlaceholder=function(){return av};aq.getCanvas=function(){return az};aq.getPlotOffset=function(){return q};aq.width=function(){return h};aq.height=function(){return w};aq.offset=function(){var aB=y.offset();aB.left+=q.left;aB.top+=q.top;return aB};aq.getData=function(){return Q};aq.getAxes=function(){var aC={},aB;c.each(p.concat(aw),function(aD,aE){if(aE){aC[aE.direction+(aE.n!=1?aE.n:"")+"axis"]=aE}});return aC};aq.getXAxes=function(){return p};aq.getYAxes=function(){return aw};aq.c2p=C;aq.p2c=ar;aq.getOptions=function(){return O};aq.highlight=x;aq.unhighlight=T;aq.triggerRedrawOverlay=f;aq.pointOffset=function(aB){return{left:parseInt(p[aA(aB,"x")-1].p2c(+aB.x)+q.left),top:parseInt(aw[aA(aB,"y")-1].p2c(+aB.y)+q.top)}};aq.shutdown=ag;aq.resize=function(){B();g(az);g(ad)};aq.hooks=ak;F(aq);Z(J);X();aj(ai);t();W();ah();function an(aD,aB){aB=[aq].concat(aB);for(var aC=0;aC<aD.length;++aC){aD[aC].apply(this,aB)}}function F(){for(var aB=0;aB<af.length;++aB){var aC=af[aB];aC.init(aq);if(aC.options){c.extend(true,O,aC.options)}}}function Z(aC){var aB;c.extend(true,O,aC);if(O.xaxis.color==null){O.xaxis.color=O.grid.color}if(O.yaxis.color==null){O.yaxis.color=O.grid.color}if(O.xaxis.tickColor==null){O.xaxis.tickColor=O.grid.tickColor}if(O.yaxis.tickColor==null){O.yaxis.tickColor=O.grid.tickColor}if(O.grid.borderColor==null){O.grid.borderColor=O.grid.color}if(O.grid.tickColor==null){O.grid.tickColor=c.color.parse(O.grid.color).scale("a",0.22).toString()}for(aB=0;aB<Math.max(1,O.xaxes.length);++aB){O.xaxes[aB]=c.extend(true,{},O.xaxis,O.xaxes[aB])}for(aB=0;aB<Math.max(1,O.yaxes.length);++aB){O.yaxes[aB]=c.extend(true,{},O.yaxis,O.yaxes[aB])}if(O.xaxis.noTicks&&O.xaxis.ticks==null){O.xaxis.ticks=O.xaxis.noTicks}if(O.yaxis.noTicks&&O.yaxis.ticks==null){O.yaxis.ticks=O.yaxis.noTicks}if(O.x2axis){O.xaxes[1]=c.extend(true,{},O.xaxis,O.x2axis);O.xaxes[1].position="top"}if(O.y2axis){O.yaxes[1]=c.extend(true,{},O.yaxis,O.y2axis);O.yaxes[1].position="right"}if(O.grid.coloredAreas){O.grid.markings=O.grid.coloredAreas}if(O.grid.coloredAreasColor){O.grid.markingsColor=O.grid.coloredAreasColor}if(O.lines){c.extend(true,O.series.lines,O.lines)}if(O.points){c.extend(true,O.series.points,O.points)}if(O.bars){c.extend(true,O.series.bars,O.bars)}if(O.shadowSize!=null){O.series.shadowSize=O.shadowSize}for(aB=0;aB<O.xaxes.length;++aB){V(p,aB+1).options=O.xaxes[aB]}for(aB=0;aB<O.yaxes.length;++aB){V(aw,aB+1).options=O.yaxes[aB]}for(var aD in ak){if(O.hooks[aD]&&O.hooks[aD].length){ak[aD]=ak[aD].concat(O.hooks[aD])}}an(ak.processOptions,[O])}function aj(aB){Q=Y(aB);ax();z()}function Y(aE){var aC=[];for(var aB=0;aB<aE.length;++aB){var aD=c.extend(true,{},O.series);if(aE[aB].data!=null){aD.data=aE[aB].data;delete aE[aB].data;c.extend(true,aD,aE[aB]);aE[aB].data=aD.data}else{aD.data=aE[aB]}aC.push(aD)}return aC}function aA(aC,aD){var aB=aC[aD+"axis"];if(typeof aB=="object"){aB=aB.n}if(typeof aB!="number"){aB=1}return aB}function m(){return c.grep(p.concat(aw),function(aB){return aB})}function C(aE){var aC={},aB,aD;for(aB=0;aB<p.length;++aB){aD=p[aB];if(aD&&aD.used){aC["x"+aD.n]=aD.c2p(aE.left)}}for(aB=0;aB<aw.length;++aB){aD=aw[aB];if(aD&&aD.used){aC["y"+aD.n]=aD.c2p(aE.top)}}if(aC.x1!==undefined){aC.x=aC.x1}if(aC.y1!==undefined){aC.y=aC.y1}return aC}function ar(aF){var aD={},aC,aE,aB;for(aC=0;aC<p.length;++aC){aE=p[aC];if(aE&&aE.used){aB="x"+aE.n;if(aF[aB]==null&&aE.n==1){aB="x"}if(aF[aB]!=null){aD.left=aE.p2c(aF[aB]);break}}}for(aC=0;aC<aw.length;++aC){aE=aw[aC];if(aE&&aE.used){aB="y"+aE.n;if(aF[aB]==null&&aE.n==1){aB="y"}if(aF[aB]!=null){aD.top=aE.p2c(aF[aB]);break}}}return aD}function V(aC,aB){if(!aC[aB-1]){aC[aB-1]={n:aB,direction:aC==p?"x":"y",options:c.extend(true,{},aC==p?O.xaxis:O.yaxis)}}return aC[aB-1]}function ax(){var aG;var aM=Q.length,aB=[],aE=[];for(aG=0;aG<Q.length;++aG){var aJ=Q[aG].color;if(aJ!=null){--aM;if(typeof aJ=="number"){aE.push(aJ)}else{aB.push(c.color.parse(Q[aG].color))}}}for(aG=0;aG<aE.length;++aG){aM=Math.max(aM,aE[aG]+1)}var aC=[],aF=0;aG=0;while(aC.length<aM){var aI;if(O.colors.length==aG){aI=c.color.make(100,100,100)}else{aI=c.color.parse(O.colors[aG])}var aD=aF%2==1?-1:1;aI.scale("rgb",1+aD*Math.ceil(aF/2)*0.2);aC.push(aI);++aG;if(aG>=O.colors.length){aG=0;++aF}}var aH=0,aN;for(aG=0;aG<Q.length;++aG){aN=Q[aG];if(aN.color==null){aN.color=aC[aH].toString();++aH}else{if(typeof aN.color=="number"){aN.color=aC[aN.color].toString()}}if(aN.lines.show==null){var aL,aK=true;for(aL in aN){if(aN[aL]&&aN[aL].show){aK=false;break}}if(aK){aN.lines.show=true}}aN.xaxis=V(p,aA(aN,"x"));aN.yaxis=V(aw,aA(aN,"y"))}}function z(){var aO=Number.POSITIVE_INFINITY,aI=Number.NEGATIVE_INFINITY,aB=Number.MAX_VALUE,aU,aS,aR,aN,aD,aJ,aT,aP,aH,aG,aC,a0,aX,aL;function aF(a3,a2,a1){if(a2<a3.datamin&&a2!=-aB){a3.datamin=a2}if(a1>a3.datamax&&a1!=aB){a3.datamax=a1}}c.each(m(),function(a1,a2){a2.datamin=aO;a2.datamax=aI;a2.used=false});for(aU=0;aU<Q.length;++aU){aJ=Q[aU];aJ.datapoints={points:[]};an(ak.processRawData,[aJ,aJ.data,aJ.datapoints])}for(aU=0;aU<Q.length;++aU){aJ=Q[aU];var aZ=aJ.data,aW=aJ.datapoints.format;if(!aW){aW=[];aW.push({x:true,number:true,required:true});aW.push({y:true,number:true,required:true});if(aJ.bars.show||(aJ.lines.show&&aJ.lines.fill)){aW.push({y:true,number:true,required:false,defaultValue:0});if(aJ.bars.horizontal){delete aW[aW.length-1].y;aW[aW.length-1].x=true}}aJ.datapoints.format=aW}if(aJ.datapoints.pointsize!=null){continue}aJ.datapoints.pointsize=aW.length;aP=aJ.datapoints.pointsize;aT=aJ.datapoints.points;insertSteps=aJ.lines.show&&aJ.lines.steps;aJ.xaxis.used=aJ.yaxis.used=true;for(aS=aR=0;aS<aZ.length;++aS,aR+=aP){aL=aZ[aS];var aE=aL==null;if(!aE){for(aN=0;aN<aP;++aN){a0=aL[aN];aX=aW[aN];if(aX){if(aX.number&&a0!=null){a0=+a0;if(isNaN(a0)){a0=null}else{if(a0==Infinity){a0=aB}else{if(a0==-Infinity){a0=-aB}}}}if(a0==null){if(aX.required){aE=true}if(aX.defaultValue!=null){a0=aX.defaultValue}}}aT[aR+aN]=a0}}if(aE){for(aN=0;aN<aP;++aN){a0=aT[aR+aN];if(a0!=null){aX=aW[aN];if(aX.x){aF(aJ.xaxis,a0,a0)}if(aX.y){aF(aJ.yaxis,a0,a0)}}aT[aR+aN]=null}}else{if(insertSteps&&aR>0&&aT[aR-aP]!=null&&aT[aR-aP]!=aT[aR]&&aT[aR-aP+1]!=aT[aR+1]){for(aN=0;aN<aP;++aN){aT[aR+aP+aN]=aT[aR+aN]}aT[aR+1]=aT[aR-aP+1];aR+=aP}}}}for(aU=0;aU<Q.length;++aU){aJ=Q[aU];an(ak.processDatapoints,[aJ,aJ.datapoints])}for(aU=0;aU<Q.length;++aU){aJ=Q[aU];aT=aJ.datapoints.points,aP=aJ.datapoints.pointsize;var aK=aO,aQ=aO,aM=aI,aV=aI;for(aS=0;aS<aT.length;aS+=aP){if(aT[aS]==null){continue}for(aN=0;aN<aP;++aN){a0=aT[aS+aN];aX=aW[aN];if(!aX||a0==aB||a0==-aB){continue}if(aX.x){if(a0<aK){aK=a0}if(a0>aM){aM=a0}}if(aX.y){if(a0<aQ){aQ=a0}if(a0>aV){aV=a0}}}}if(aJ.bars.show){var aY=aJ.bars.align=="left"?0:-aJ.bars.barWidth/2;if(aJ.bars.horizontal){aQ+=aY;aV+=aY+aJ.bars.barWidth}else{aK+=aY;aM+=aY+aJ.bars.barWidth}}aF(aJ.xaxis,aK,aM);aF(aJ.yaxis,aQ,aV)}c.each(m(),function(a1,a2){if(a2.datamin==aO){a2.datamin=null}if(a2.datamax==aI){a2.datamax=null}})}function j(aB,aC){var aD=document.createElement("canvas");aD.className=aC;aD.width=G;aD.height=I;if(!aB){c(aD).css({position:"absolute",left:0,top:0})}c(aD).appendTo(av);if(!aD.getContext){aD=window.G_vmlCanvasManager.initElement(aD)}aD.getContext("2d").save();return aD}function B(){G=av.width();I=av.height();if(G<=0||I<=0){throw"Invalid dimensions for plot, width = "+G+", height = "+I}}function g(aC){if(aC.width!=G){aC.width=G}if(aC.height!=I){aC.height=I}var aB=aC.getContext("2d");aB.restore();aB.save()}function X(){var aC,aB=av.children("canvas.base"),aD=av.children("canvas.overlay");if(aB.length==0||aD==0){av.html("");av.css({padding:0});if(av.css("position")=="static"){av.css("position","relative")}B();az=j(true,"base");ad=j(false,"overlay");aC=false}else{az=aB.get(0);ad=aD.get(0);aC=true}H=az.getContext("2d");A=ad.getContext("2d");y=c([ad,az]);if(aC){av.data("plot").shutdown();aq.resize();A.clearRect(0,0,G,I);y.unbind();av.children().not([az,ad]).remove()}av.data("plot",aq)}function ah(){if(O.grid.hoverable){y.mousemove(aa);y.mouseleave(l)}if(O.grid.clickable){y.click(R)}an(ak.bindEvents,[y])}function ag(){if(M){clearTimeout(M)}y.unbind("mousemove",aa);y.unbind("mouseleave",l);y.unbind("click",R);an(ak.shutdown,[y])}function r(aG){function aC(aH){return aH}var aF,aB,aD=aG.options.transform||aC,aE=aG.options.inverseTransform;if(aG.direction=="x"){aF=aG.scale=h/Math.abs(aD(aG.max)-aD(aG.min));aB=Math.min(aD(aG.max),aD(aG.min))}else{aF=aG.scale=w/Math.abs(aD(aG.max)-aD(aG.min));aF=-aF;aB=Math.max(aD(aG.max),aD(aG.min))}if(aD==aC){aG.p2c=function(aH){return(aH-aB)*aF}}else{aG.p2c=function(aH){return(aD(aH)-aB)*aF}}if(!aE){aG.c2p=function(aH){return aB+aH/aF}}else{aG.c2p=function(aH){return aE(aB+aH/aF)}}}function L(aD){var aB=aD.options,aF,aJ=aD.ticks||[],aI=[],aE,aK=aB.labelWidth,aG=aB.labelHeight,aC;function aH(aM,aL){return c('<div style="position:absolute;top:-10000px;'+aL+'font-size:smaller"><div class="'+aD.direction+"Axis "+aD.direction+aD.n+'Axis">'+aM.join("")+"</div></div>").appendTo(av)}if(aD.direction=="x"){if(aK==null){aK=Math.floor(G/(aJ.length>0?aJ.length:1))}if(aG==null){aI=[];for(aF=0;aF<aJ.length;++aF){aE=aJ[aF].label;if(aE){aI.push('<div class="tickLabel" style="float:left;width:'+aK+'px">'+aE+"</div>")}}if(aI.length>0){aI.push('<div style="clear:left"></div>');aC=aH(aI,"width:10000px;");aG=aC.height();aC.remove()}}}else{if(aK==null||aG==null){for(aF=0;aF<aJ.length;++aF){aE=aJ[aF].label;if(aE){aI.push('<div class="tickLabel">'+aE+"</div>")}}if(aI.length>0){aC=aH(aI,"");if(aK==null){aK=aC.children().width()}if(aG==null){aG=aC.find("div.tickLabel").height()}aC.remove()}}}if(aK==null){aK=0}if(aG==null){aG=0}aD.labelWidth=aK;aD.labelHeight=aG}function au(aD){var aC=aD.labelWidth,aL=aD.labelHeight,aH=aD.options.position,aF=aD.options.tickLength,aG=O.grid.axisMargin,aJ=O.grid.labelMargin,aK=aD.direction=="x"?p:aw,aE;var aB=c.grep(aK,function(aN){return aN&&aN.options.position==aH&&aN.reserveSpace});if(c.inArray(aD,aB)==aB.length-1){aG=0}if(aF==null){aF="full"}var aI=c.grep(aK,function(aN){return aN&&aN.reserveSpace});var aM=c.inArray(aD,aI)==0;if(!aM&&aF=="full"){aF=5}if(!isNaN(+aF)){aJ+=+aF}if(aD.direction=="x"){aL+=aJ;if(aH=="bottom"){q.bottom+=aL+aG;aD.box={top:I-q.bottom,height:aL}}else{aD.box={top:q.top+aG,height:aL};q.top+=aL+aG}}else{aC+=aJ;if(aH=="left"){aD.box={left:q.left+aG,width:aC};q.left+=aC+aG}else{q.right+=aC+aG;aD.box={left:G-q.right,width:aC}}}aD.position=aH;aD.tickLength=aF;aD.box.padding=aJ;aD.innermost=aM}function U(aB){if(aB.direction=="x"){aB.box.left=q.left;aB.box.width=h}else{aB.box.top=q.top;aB.box.height=w}}function t(){var aC,aE=m();c.each(aE,function(aF,aG){aG.show=aG.options.show;if(aG.show==null){aG.show=aG.used}aG.reserveSpace=aG.show||aG.options.reserveSpace;n(aG)});allocatedAxes=c.grep(aE,function(aF){return aF.reserveSpace});q.left=q.right=q.top=q.bottom=0;if(O.grid.show){c.each(allocatedAxes,function(aF,aG){S(aG);P(aG);ap(aG,aG.ticks);L(aG)});for(aC=allocatedAxes.length-1;aC>=0;--aC){au(allocatedAxes[aC])}var aD=O.grid.minBorderMargin;if(aD==null){aD=0;for(aC=0;aC<Q.length;++aC){aD=Math.max(aD,Q[aC].points.radius+Q[aC].points.lineWidth/2)}}for(var aB in q){q[aB]+=O.grid.borderWidth;q[aB]=Math.max(aD,q[aB])}}h=G-q.left-q.right;w=I-q.bottom-q.top;c.each(aE,function(aF,aG){r(aG)});if(O.grid.show){c.each(allocatedAxes,function(aF,aG){U(aG)});k()}o()}function n(aE){var aF=aE.options,aD=+(aF.min!=null?aF.min:aE.datamin),aB=+(aF.max!=null?aF.max:aE.datamax),aH=aB-aD;if(aH==0){var aC=aB==0?1:0.01;if(aF.min==null){aD-=aC}if(aF.max==null||aF.min!=null){aB+=aC}}else{var aG=aF.autoscaleMargin;if(aG!=null){if(aF.min==null){aD-=aH*aG;if(aD<0&&aE.datamin!=null&&aE.datamin>=0){aD=0}}if(aF.max==null){aB+=aH*aG;if(aB>0&&aE.datamax!=null&&aE.datamax<=0){aB=0}}}}aE.min=aD;aE.max=aB}function S(aG){var aM=aG.options;var aH;if(typeof aM.ticks=="number"&&aM.ticks>0){aH=aM.ticks}else{aH=0.3*Math.sqrt(aG.direction=="x"?G:I)}var aT=(aG.max-aG.min)/aH,aO,aB,aN,aR,aS,aQ,aI;if(aM.mode=="time"){var aJ={second:1000,minute:60*1000,hour:60*60*1000,day:24*60*60*1000,month:30*24*60*60*1000,year:365.2425*24*60*60*1000};var aK=[[1,"second"],[2,"second"],[5,"second"],[10,"second"],[30,"second"],[1,"minute"],[2,"minute"],[5,"minute"],[10,"minute"],[30,"minute"],[1,"hour"],[2,"hour"],[4,"hour"],[8,"hour"],[12,"hour"],[1,"day"],[2,"day"],[3,"day"],[0.25,"month"],[0.5,"month"],[1,"month"],[2,"month"],[3,"month"],[6,"month"],[1,"year"]];var aC=0;if(aM.minTickSize!=null){if(typeof aM.tickSize=="number"){aC=aM.tickSize}else{aC=aM.minTickSize[0]*aJ[aM.minTickSize[1]]}}for(var aS=0;aS<aK.length-1;++aS){if(aT<(aK[aS][0]*aJ[aK[aS][1]]+aK[aS+1][0]*aJ[aK[aS+1][1]])/2&&aK[aS][0]*aJ[aK[aS][1]]>=aC){break}}aO=aK[aS][0];aN=aK[aS][1];if(aN=="year"){aQ=Math.pow(10,Math.floor(Math.log(aT/aJ.year)/Math.LN10));aI=(aT/aJ.year)/aQ;if(aI<1.5){aO=1}else{if(aI<3){aO=2}else{if(aI<7.5){aO=5}else{aO=10}}}aO*=aQ}aG.tickSize=aM.tickSize||[aO,aN];aB=function(aX){var a2=[],a0=aX.tickSize[0],a3=aX.tickSize[1],a1=new Date(aX.min);var aW=a0*aJ[a3];if(a3=="second"){a1.setUTCSeconds(a(a1.getUTCSeconds(),a0))}if(a3=="minute"){a1.setUTCMinutes(a(a1.getUTCMinutes(),a0))}if(a3=="hour"){a1.setUTCHours(a(a1.getUTCHours(),a0))}if(a3=="month"){a1.setUTCMonth(a(a1.getUTCMonth(),a0))}if(a3=="year"){a1.setUTCFullYear(a(a1.getUTCFullYear(),a0))}a1.setUTCMilliseconds(0);if(aW>=aJ.minute){a1.setUTCSeconds(0)}if(aW>=aJ.hour){a1.setUTCMinutes(0)}if(aW>=aJ.day){a1.setUTCHours(0)}if(aW>=aJ.day*4){a1.setUTCDate(1)}if(aW>=aJ.year){a1.setUTCMonth(0)}var a5=0,a4=Number.NaN,aY;do{aY=a4;a4=a1.getTime();a2.push(a4);if(a3=="month"){if(a0<1){a1.setUTCDate(1);var aV=a1.getTime();a1.setUTCMonth(a1.getUTCMonth()+1);var aZ=a1.getTime();a1.setTime(a4+a5*aJ.hour+(aZ-aV)*a0);a5=a1.getUTCHours();a1.setUTCHours(0)}else{a1.setUTCMonth(a1.getUTCMonth()+a0)}}else{if(a3=="year"){a1.setUTCFullYear(a1.getUTCFullYear()+a0)}else{a1.setTime(a4+aW)}}}while(a4<aX.max&&a4!=aY);return a2};aR=function(aV,aY){var a0=new Date(aV);if(aM.timeformat!=null){return c.plot.formatDate(a0,aM.timeformat,aM.monthNames)}var aW=aY.tickSize[0]*aJ[aY.tickSize[1]];var aX=aY.max-aY.min;var aZ=(aM.twelveHourClock)?" %p":"";if(aW<aJ.minute){fmt="%h:%M:%S"+aZ}else{if(aW<aJ.day){if(aX<2*aJ.day){fmt="%h:%M"+aZ}else{fmt="%b %d %h:%M"+aZ}}else{if(aW<aJ.month){fmt="%b %d"}else{if(aW<aJ.year){if(aX<aJ.year){fmt="%b"}else{fmt="%b %y"}}else{fmt="%y"}}}}return c.plot.formatDate(a0,fmt,aM.monthNames)}}else{var aU=aM.tickDecimals;var aP=-Math.floor(Math.log(aT)/Math.LN10);if(aU!=null&&aP>aU){aP=aU}aQ=Math.pow(10,-aP);aI=aT/aQ;if(aI<1.5){aO=1}else{if(aI<3){aO=2;if(aI>2.25&&(aU==null||aP+1<=aU)){aO=2.5;++aP}}else{if(aI<7.5){aO=5}else{aO=10}}}aO*=aQ;if(aM.minTickSize!=null&&aO<aM.minTickSize){aO=aM.minTickSize}aG.tickDecimals=Math.max(0,aU!=null?aU:aP);aG.tickSize=aM.tickSize||aO;aB=function(aX){var aZ=[];var a0=a(aX.min,aX.tickSize),aW=0,aV=Number.NaN,aY;do{aY=aV;aV=a0+aW*aX.tickSize;aZ.push(aV);++aW}while(aV<aX.max&&aV!=aY);return aZ};aR=function(aV,aW){return aV.toFixed(aW.tickDecimals)}}if(aM.alignTicksWithAxis!=null){var aF=(aG.direction=="x"?p:aw)[aM.alignTicksWithAxis-1];if(aF&&aF.used&&aF!=aG){var aL=aB(aG);if(aL.length>0){if(aM.min==null){aG.min=Math.min(aG.min,aL[0])}if(aM.max==null&&aL.length>1){aG.max=Math.max(aG.max,aL[aL.length-1])}}aB=function(aX){var aY=[],aV,aW;for(aW=0;aW<aF.ticks.length;++aW){aV=(aF.ticks[aW].v-aF.min)/(aF.max-aF.min);aV=aX.min+aV*(aX.max-aX.min);aY.push(aV)}return aY};if(aG.mode!="time"&&aM.tickDecimals==null){var aE=Math.max(0,-Math.floor(Math.log(aT)/Math.LN10)+1),aD=aB(aG);if(!(aD.length>1&&/\..*0$/.test((aD[1]-aD[0]).toFixed(aE)))){aG.tickDecimals=aE}}}}aG.tickGenerator=aB;if(c.isFunction(aM.tickFormatter)){aG.tickFormatter=function(aV,aW){return""+aM.tickFormatter(aV,aW)}}else{aG.tickFormatter=aR}}function P(aF){var aH=aF.options.ticks,aG=[];if(aH==null||(typeof aH=="number"&&aH>0)){aG=aF.tickGenerator(aF)}else{if(aH){if(c.isFunction(aH)){aG=aH({min:aF.min,max:aF.max})}else{aG=aH}}}var aE,aB;aF.ticks=[];for(aE=0;aE<aG.length;++aE){var aC=null;var aD=aG[aE];if(typeof aD=="object"){aB=+aD[0];if(aD.length>1){aC=aD[1]}}else{aB=+aD}if(aC==null){aC=aF.tickFormatter(aB,aF)}if(!isNaN(aB)){aF.ticks.push({v:aB,label:aC})}}}function ap(aB,aC){if(aB.options.autoscaleMargin&&aC.length>0){if(aB.options.min==null){aB.min=Math.min(aB.min,aC[0].v)}if(aB.options.max==null&&aC.length>1){aB.max=Math.max(aB.max,aC[aC.length-1].v)}}}function W(){H.clearRect(0,0,G,I);var aC=O.grid;if(aC.show&&aC.backgroundColor){N()}if(aC.show&&!aC.aboveData){ac()}for(var aB=0;aB<Q.length;++aB){an(ak.drawSeries,[H,Q[aB]]);d(Q[aB])}an(ak.draw,[H]);if(aC.show&&aC.aboveData){ac()}}function D(aB,aI){var aE,aH,aG,aD,aF=m();for(i=0;i<aF.length;++i){aE=aF[i];if(aE.direction==aI){aD=aI+aE.n+"axis";if(!aB[aD]&&aE.n==1){aD=aI+"axis"}if(aB[aD]){aH=aB[aD].from;aG=aB[aD].to;break}}}if(!aB[aD]){aE=aI=="x"?p[0]:aw[0];aH=aB[aI+"1"];aG=aB[aI+"2"]}if(aH!=null&&aG!=null&&aH>aG){var aC=aH;aH=aG;aG=aC}return{from:aH,to:aG,axis:aE}}function N(){H.save();H.translate(q.left,q.top);H.fillStyle=am(O.grid.backgroundColor,w,0,"rgba(255, 255, 255, 0)");H.fillRect(0,0,h,w);H.restore()}function ac(){var aF;H.save();H.translate(q.left,q.top);var aH=O.grid.markings;if(aH){if(c.isFunction(aH)){var aK=aq.getAxes();aK.xmin=aK.xaxis.min;aK.xmax=aK.xaxis.max;aK.ymin=aK.yaxis.min;aK.ymax=aK.yaxis.max;aH=aH(aK)}for(aF=0;aF<aH.length;++aF){var aD=aH[aF],aC=D(aD,"x"),aI=D(aD,"y");if(aC.from==null){aC.from=aC.axis.min}if(aC.to==null){aC.to=aC.axis.max}if(aI.from==null){aI.from=aI.axis.min}if(aI.to==null){aI.to=aI.axis.max}if(aC.to<aC.axis.min||aC.from>aC.axis.max||aI.to<aI.axis.min||aI.from>aI.axis.max){continue}aC.from=Math.max(aC.from,aC.axis.min);aC.to=Math.min(aC.to,aC.axis.max);aI.from=Math.max(aI.from,aI.axis.min);aI.to=Math.min(aI.to,aI.axis.max);if(aC.from==aC.to&&aI.from==aI.to){continue}aC.from=aC.axis.p2c(aC.from);aC.to=aC.axis.p2c(aC.to);aI.from=aI.axis.p2c(aI.from);aI.to=aI.axis.p2c(aI.to);if(aC.from==aC.to||aI.from==aI.to){H.beginPath();H.strokeStyle=aD.color||O.grid.markingsColor;H.lineWidth=aD.lineWidth||O.grid.markingsLineWidth;H.moveTo(aC.from,aI.from);H.lineTo(aC.to,aI.to);H.stroke()}else{H.fillStyle=aD.color||O.grid.markingsColor;H.fillRect(aC.from,aI.to,aC.to-aC.from,aI.from-aI.to)}}}var aK=m(),aM=O.grid.borderWidth;for(var aE=0;aE<aK.length;++aE){var aB=aK[aE],aG=aB.box,aQ=aB.tickLength,aN,aL,aP,aJ;if(!aB.show||aB.ticks.length==0){continue}H.strokeStyle=aB.options.tickColor||c.color.parse(aB.options.color).scale("a",0.22).toString();H.lineWidth=aB.options.lineWidth;if(aB.direction=="x"){aN=0;if(aQ=="full"){aL=(aB.position=="top"?0:w)}else{aL=aG.top-q.top+(aB.position=="top"?aG.height:0)}}else{aL=0;if(aQ=="full"){aN=(aB.position=="left"?0:h)}else{aN=aG.left-q.left+(aB.position=="left"?aG.width:0)}}if(!aB.innermost){H.beginPath();aP=aJ=0;if(aB.direction=="x"){aP=h}else{aJ=w}if(H.lineWidth==1){aN=Math.floor(aN)+0.5;aL=Math.floor(aL)+0.5}H.moveTo(aN,aL);H.lineTo(aN+aP,aL+aJ);H.stroke()}H.beginPath();for(aF=0;aF<aB.ticks.length;++aF){var aO=aB.ticks[aF].v;aP=aJ=0;if(aO<aB.min||aO>aB.max||(aQ=="full"&&aM>0&&(aO==aB.min||aO==aB.max))){continue}if(aB.direction=="x"){aN=aB.p2c(aO);aJ=aQ=="full"?-w:aQ;if(aB.position=="top"){aJ=-aJ}}else{aL=aB.p2c(aO);aP=aQ=="full"?-h:aQ;if(aB.position=="left"){aP=-aP}}if(H.lineWidth==1){if(aB.direction=="x"){aN=Math.floor(aN)+0.5}else{aL=Math.floor(aL)+0.5}}H.moveTo(aN,aL);H.lineTo(aN+aP,aL+aJ)}H.stroke()}if(aM){H.lineWidth=aM;H.strokeStyle=O.grid.borderColor;H.strokeRect(-aM/2,-aM/2,h+aM,w+aM)}H.restore()}function k(){av.find(".tickLabels").remove();var aG=['<div class="tickLabels" style="font-size:smaller">'];var aJ=m();for(var aD=0;aD<aJ.length;++aD){var aC=aJ[aD],aF=aC.box;if(!aC.show){continue}aG.push('<div class="'+aC.direction+"Axis "+aC.direction+aC.n+'Axis" style="color:'+aC.options.color+'">');for(var aE=0;aE<aC.ticks.length;++aE){var aH=aC.ticks[aE];if(!aH.label||aH.v<aC.min||aH.v>aC.max){continue}var aK={},aI;if(aC.direction=="x"){aI="center";aK.left=Math.round(q.left+aC.p2c(aH.v)-aC.labelWidth/2);if(aC.position=="bottom"){aK.top=aF.top+aF.padding}else{aK.bottom=I-(aF.top+aF.height-aF.padding)}}else{aK.top=Math.round(q.top+aC.p2c(aH.v)-aC.labelHeight/2);if(aC.position=="left"){aK.right=G-(aF.left+aF.width-aF.padding);aI="right"}else{aK.left=aF.left+aF.padding;aI="left"}}aK.width=aC.labelWidth;var aB=["position:absolute","text-align:"+aI];for(var aL in aK){aB.push(aL+":"+aK[aL]+"px")}aG.push('<div class="tickLabel" style="'+aB.join(";")+'">'+aH.label+"</div>")}aG.push("</div>")}aG.push("</div>");av.append(aG.join(""))}function d(aB){if(aB.lines.show){at(aB)}if(aB.bars.show){e(aB)}if(aB.points.show){ao(aB)}}function at(aE){function aD(aP,aQ,aI,aU,aT){var aV=aP.points,aJ=aP.pointsize,aN=null,aM=null;H.beginPath();for(var aO=aJ;aO<aV.length;aO+=aJ){var aL=aV[aO-aJ],aS=aV[aO-aJ+1],aK=aV[aO],aR=aV[aO+1];if(aL==null||aK==null){continue}if(aS<=aR&&aS<aT.min){if(aR<aT.min){continue}aL=(aT.min-aS)/(aR-aS)*(aK-aL)+aL;aS=aT.min}else{if(aR<=aS&&aR<aT.min){if(aS<aT.min){continue}aK=(aT.min-aS)/(aR-aS)*(aK-aL)+aL;aR=aT.min}}if(aS>=aR&&aS>aT.max){if(aR>aT.max){continue}aL=(aT.max-aS)/(aR-aS)*(aK-aL)+aL;aS=aT.max}else{if(aR>=aS&&aR>aT.max){if(aS>aT.max){continue}aK=(aT.max-aS)/(aR-aS)*(aK-aL)+aL;aR=aT.max}}if(aL<=aK&&aL<aU.min){if(aK<aU.min){continue}aS=(aU.min-aL)/(aK-aL)*(aR-aS)+aS;aL=aU.min}else{if(aK<=aL&&aK<aU.min){if(aL<aU.min){continue}aR=(aU.min-aL)/(aK-aL)*(aR-aS)+aS;aK=aU.min}}if(aL>=aK&&aL>aU.max){if(aK>aU.max){continue}aS=(aU.max-aL)/(aK-aL)*(aR-aS)+aS;aL=aU.max}else{if(aK>=aL&&aK>aU.max){if(aL>aU.max){continue}aR=(aU.max-aL)/(aK-aL)*(aR-aS)+aS;aK=aU.max}}if(aL!=aN||aS!=aM){H.moveTo(aU.p2c(aL)+aQ,aT.p2c(aS)+aI)}aN=aK;aM=aR;H.lineTo(aU.p2c(aK)+aQ,aT.p2c(aR)+aI)}H.stroke()}function aF(aI,aQ,aP){var aW=aI.points,aV=aI.pointsize,aN=Math.min(Math.max(0,aP.min),aP.max),aX=0,aU,aT=false,aM=1,aL=0,aR=0;while(true){if(aV>0&&aX>aW.length+aV){break}aX+=aV;var aZ=aW[aX-aV],aK=aW[aX-aV+aM],aY=aW[aX],aJ=aW[aX+aM];if(aT){if(aV>0&&aZ!=null&&aY==null){aR=aX;aV=-aV;aM=2;continue}if(aV<0&&aX==aL+aV){H.fill();aT=false;aV=-aV;aM=1;aX=aL=aR+aV;continue}}if(aZ==null||aY==null){continue}if(aZ<=aY&&aZ<aQ.min){if(aY<aQ.min){continue}aK=(aQ.min-aZ)/(aY-aZ)*(aJ-aK)+aK;aZ=aQ.min}else{if(aY<=aZ&&aY<aQ.min){if(aZ<aQ.min){continue}aJ=(aQ.min-aZ)/(aY-aZ)*(aJ-aK)+aK;aY=aQ.min}}if(aZ>=aY&&aZ>aQ.max){if(aY>aQ.max){continue}aK=(aQ.max-aZ)/(aY-aZ)*(aJ-aK)+aK;aZ=aQ.max}else{if(aY>=aZ&&aY>aQ.max){if(aZ>aQ.max){continue}aJ=(aQ.max-aZ)/(aY-aZ)*(aJ-aK)+aK;aY=aQ.max}}if(!aT){H.beginPath();H.moveTo(aQ.p2c(aZ),aP.p2c(aN));aT=true}if(aK>=aP.max&&aJ>=aP.max){H.lineTo(aQ.p2c(aZ),aP.p2c(aP.max));H.lineTo(aQ.p2c(aY),aP.p2c(aP.max));continue}else{if(aK<=aP.min&&aJ<=aP.min){H.lineTo(aQ.p2c(aZ),aP.p2c(aP.min));H.lineTo(aQ.p2c(aY),aP.p2c(aP.min));continue}}var aO=aZ,aS=aY;if(aK<=aJ&&aK<aP.min&&aJ>=aP.min){aZ=(aP.min-aK)/(aJ-aK)*(aY-aZ)+aZ;aK=aP.min}else{if(aJ<=aK&&aJ<aP.min&&aK>=aP.min){aY=(aP.min-aK)/(aJ-aK)*(aY-aZ)+aZ;aJ=aP.min}}if(aK>=aJ&&aK>aP.max&&aJ<=aP.max){aZ=(aP.max-aK)/(aJ-aK)*(aY-aZ)+aZ;aK=aP.max}else{if(aJ>=aK&&aJ>aP.max&&aK<=aP.max){aY=(aP.max-aK)/(aJ-aK)*(aY-aZ)+aZ;aJ=aP.max}}if(aZ!=aO){H.lineTo(aQ.p2c(aO),aP.p2c(aK))}H.lineTo(aQ.p2c(aZ),aP.p2c(aK));H.lineTo(aQ.p2c(aY),aP.p2c(aJ));if(aY!=aS){H.lineTo(aQ.p2c(aY),aP.p2c(aJ));H.lineTo(aQ.p2c(aS),aP.p2c(aJ))}}}H.save();H.translate(q.left,q.top);H.lineJoin="round";var aG=aE.lines.lineWidth,aB=aE.shadowSize;if(aG>0&&aB>0){H.lineWidth=aB;H.strokeStyle="rgba(0,0,0,0.1)";var aH=Math.PI/18;aD(aE.datapoints,Math.sin(aH)*(aG/2+aB/2),Math.cos(aH)*(aG/2+aB/2),aE.xaxis,aE.yaxis);H.lineWidth=aB/2;aD(aE.datapoints,Math.sin(aH)*(aG/2+aB/4),Math.cos(aH)*(aG/2+aB/4),aE.xaxis,aE.yaxis)}H.lineWidth=aG;H.strokeStyle=aE.color;var aC=ae(aE.lines,aE.color,0,w);if(aC){H.fillStyle=aC;aF(aE.datapoints,aE.xaxis,aE.yaxis)}if(aG>0){aD(aE.datapoints,0,0,aE.xaxis,aE.yaxis)}H.restore()}function ao(aE){function aH(aN,aM,aU,aK,aS,aT,aQ,aJ){var aR=aN.points,aI=aN.pointsize;for(var aL=0;aL<aR.length;aL+=aI){var aP=aR[aL],aO=aR[aL+1];if(aP==null||aP<aT.min||aP>aT.max||aO<aQ.min||aO>aQ.max){continue}H.beginPath();aP=aT.p2c(aP);aO=aQ.p2c(aO)+aK;if(aJ=="circle"){H.arc(aP,aO,aM,0,aS?Math.PI:Math.PI*2,false)}else{aJ(H,aP,aO,aM,aS)}H.closePath();if(aU){H.fillStyle=aU;H.fill()}/*H.stroke()*/}}H.save();H.translate(q.left,q.top);var aG=aE.points.lineWidth,aC=aE.shadowSize,aB=aE.points.radius,aF=aE.points.symbol;if(aG>0&&aC>0){var aD=aC/2;H.lineWidth=aD;H.strokeStyle="rgba(0,0,0,0.1)";aH(aE.datapoints,aB,null,aD+aD/2,true,aE.xaxis,aE.yaxis,aF);H.strokeStyle="rgba(0,0,0,0.2)";aH(aE.datapoints,aB,null,aD/2,true,aE.xaxis,aE.yaxis,aF)}H.lineWidth=aG;H.strokeStyle=aE.color;aH(aE.datapoints,aB,ae(aE.points,aE.color),0,false,aE.xaxis,aE.yaxis,aF);H.restore()}function E(aN,aM,aV,aI,aQ,aF,aD,aL,aK,aU,aR,aC){var aE,aT,aJ,aP,aG,aB,aO,aH,aS;if(aR){aH=aB=aO=true;aG=false;aE=aV;aT=aN;aP=aM+aI;aJ=aM+aQ;if(aT<aE){aS=aT;aT=aE;aE=aS;aG=true;aB=false}}else{aG=aB=aO=true;aH=false;aE=aN+aI;aT=aN+aQ;aJ=aV;aP=aM;if(aP<aJ){aS=aP;aP=aJ;aJ=aS;aH=true;aO=false}}if(aT<aL.min||aE>aL.max||aP<aK.min||aJ>aK.max){return}if(aE<aL.min){aE=aL.min;aG=false}if(aT>aL.max){aT=aL.max;aB=false}if(aJ<aK.min){aJ=aK.min;aH=false}if(aP>aK.max){aP=aK.max;aO=false}aE=aL.p2c(aE);aJ=aK.p2c(aJ);aT=aL.p2c(aT);aP=aK.p2c(aP);if(aD){aU.beginPath();aU.moveTo(aE,aJ);aU.lineTo(aE,aP);aU.lineTo(aT,aP);aU.lineTo(aT,aJ);aU.fillStyle=aD(aJ,aP);aU.fill()}if(aC>0&&(aG||aB||aO||aH)){aU.beginPath();aU.moveTo(aE,aJ+aF);if(aG){aU.lineTo(aE,aP+aF)}else{aU.moveTo(aE,aP+aF)}if(aO){aU.lineTo(aT,aP+aF)}else{aU.moveTo(aT,aP+aF)}if(aB){aU.lineTo(aT,aJ+aF)}else{aU.moveTo(aT,aJ+aF)}if(aH){aU.lineTo(aE,aJ+aF)}else{aU.moveTo(aE,aJ+aF)}aU.stroke()}}function e(aD){function aC(aJ,aI,aL,aG,aK,aN,aM){var aO=aJ.points,aF=aJ.pointsize;for(var aH=0;aH<aO.length;aH+=aF){if(aO[aH]==null){continue}E(aO[aH],aO[aH+1],aO[aH+2],aI,aL,aG,aK,aN,aM,H,aD.bars.horizontal,aD.bars.lineWidth)}}H.save();H.translate(q.left,q.top);H.lineWidth=aD.bars.lineWidth;H.strokeStyle=aD.color;var aB=aD.bars.align=="left"?0:-aD.bars.barWidth/2;var aE=aD.bars.fill?function(aF,aG){return ae(aD.bars,aD.color,aF,aG)}:null;aC(aD.datapoints,aB,aB+aD.bars.barWidth,0,aE,aD.xaxis,aD.yaxis);H.restore()}function ae(aD,aB,aC,aF){var aE=aD.fill;if(!aE){return null}if(aD.fillColor){return am(aD.fillColor,aC,aF,aB)}var aG=c.color.parse(aB);aG.a=typeof aE=="number"?aE:0.4;aG.normalize();return aG.toString()}function o(){av.find(".legend").remove();if(!O.legend.show){return}var aH=[],aF=false,aN=O.legend.labelFormatter,aM,aJ;for(var aE=0;aE<Q.length;++aE){aM=Q[aE];aJ=aM.label;if(!aJ){continue}if(aE%O.legend.noColumns==0){if(aF){aH.push("</tr>")}aH.push("<tr>");aF=true}if(aN){aJ=aN(aJ,aM)}aH.push('<td class="legendColorBox"><div style="border:1px solid '+O.legend.labelBoxBorderColor+';padding:1px"><div style="width:4px;height:0;border:5px solid '+aM.color+';overflow:hidden"></div></div></td><td class="legendLabel">'+aJ+"</td>")}if(aF){aH.push("</tr>")}if(aH.length==0){return}var aL='<table style="font-size:smaller;color:'+O.grid.color+'">'+aH.join("")+"</table>";if(O.legend.container!=null){c(O.legend.container).html(aL)}else{var aI="",aC=O.legend.position,aD=O.legend.margin;if(aD[0]==null){aD=[aD,aD]}if(aC.charAt(0)=="n"){aI+="top:"+(aD[1]+q.top)+"px;"}else{if(aC.charAt(0)=="s"){aI+="bottom:"+(aD[1]+q.bottom)+"px;"}}if(aC.charAt(1)=="e"){aI+="right:"+(aD[0]+q.right)+"px;"}else{if(aC.charAt(1)=="w"){aI+="left:"+(aD[0]+q.left)+"px;"}}var aK=c('<div class="legend">'+aL.replace('style="','style="position:absolute;'+aI+";")+"</div>").appendTo(av);if(O.legend.backgroundOpacity!=0){var aG=O.legend.backgroundColor;if(aG==null){aG=O.grid.backgroundColor;if(aG&&typeof aG=="string"){aG=c.color.parse(aG)}else{aG=c.color.extract(aK,"background-color")}aG.a=1;aG=aG.toString()}var aB=aK.children();c('<div style="position:absolute;width:'+aB.width()+"px;height:"+aB.height()+"px;"+aI+"background-color:"+aG+';"> </div>').prependTo(aK).css("opacity",O.legend.backgroundOpacity)}}}var ab=[],M=null;function K(aI,aG,aD){var aO=O.grid.mouseActiveRadius,a0=aO*aO+1,aY=null,aR=false,aW,aU;for(aW=Q.length-1;aW>=0;--aW){if(!aD(Q[aW])){continue}var aP=Q[aW],aH=aP.xaxis,aF=aP.yaxis,aV=aP.datapoints.points,aT=aP.datapoints.pointsize,aQ=aH.c2p(aI),aN=aF.c2p(aG),aC=aO/aH.scale,aB=aO/aF.scale;if(aH.options.inverseTransform){aC=Number.MAX_VALUE}if(aF.options.inverseTransform){aB=Number.MAX_VALUE}if(aP.lines.show||aP.points.show||aP.dashes.show){for(aU=0;aU<aV.length;aU+=aT){var aK=aV[aU],aJ=aV[aU+1];if(aK==null){continue}if(aK-aQ>aC||aK-aQ<-aC||aJ-aN>aB||aJ-aN<-aB){continue}var aM=Math.abs(aH.p2c(aK)-aI),aL=Math.abs(aF.p2c(aJ)-aG),aS=aM*aM+aL*aL;if(aS<a0){a0=aS;aY=[aW,aU/aT]}}}if(aP.bars.show&&!aY){var aE=aP.bars.align=="left"?0:-aP.bars.barWidth/2,aX=aE+aP.bars.barWidth;for(aU=0;aU<aV.length;aU+=aT){var aK=aV[aU],aJ=aV[aU+1],aZ=aV[aU+2];if(aK==null){continue}if(Q[aW].bars.horizontal?(aQ<=Math.max(aZ,aK)&&aQ>=Math.min(aZ,aK)&&aN>=aJ+aE&&aN<=aJ+aX):(aQ>=aK+aE&&aQ<=aK+aX&&aN>=Math.min(aZ,aJ)&&aN<=Math.max(aZ,aJ))){aY=[aW,aU/aT]}}}}if(aY){aW=aY[0];aU=aY[1];aT=Q[aW].datapoints.pointsize;return{datapoint:Q[aW].datapoints.points.slice(aU*aT,(aU+1)*aT),dataIndex:aU,series:Q[aW],seriesIndex:aW}}return null}function aa(aB){if(O.grid.hoverable){u("plothover",aB,function(aC){return aC.hoverable!=false})}}function l(aB){if(O.grid.hoverable){u("plothover",aB,function(aC){return false})}}function R(aB){u("plotclick",aB,function(aC){return aC.clickable!=false})}function u(aC,aB,aD){var aE=y.offset(),aH=aB.pageX-aE.left-q.left,aF=aB.pageY-aE.top-q.top,aJ=C({left:aH,top:aF});aJ.pageX=aB.pageX;aJ.pageY=aB.pageY;var aK=K(aH,aF,aD);if(aK){aK.pageX=parseInt(aK.series.xaxis.p2c(aK.datapoint[0])+aE.left+q.left);aK.pageY=parseInt(aK.series.yaxis.p2c(aK.datapoint[1])+aE.top+q.top)}if(O.grid.autoHighlight){for(var aG=0;aG<ab.length;++aG){var aI=ab[aG];if(aI.auto==aC&&!(aK&&aI.series==aK.series&&aI.point[0]==aK.datapoint[0]&&aI.point[1]==aK.datapoint[1])){T(aI.series,aI.point)}}if(aK){x(aK.series,aK.datapoint,aC)}}av.trigger(aC,[aJ,aK])}function f(){if(!M){M=setTimeout(s,30)}}function s(){M=null;A.save();A.clearRect(0,0,G,I);A.translate(q.left,q.top);var aC,aB;for(aC=0;aC<ab.length;++aC){aB=ab[aC];if(aB.series.bars.show){v(aB.series,aB.point)}else{ay(aB.series,aB.point)}}A.restore();an(ak.drawOverlay,[A])}function x(aD,aB,aF){if(typeof aD=="number"){aD=Q[aD]}if(typeof aB=="number"){var aE=aD.datapoints.pointsize;aB=aD.datapoints.points.slice(aE*aB,aE*(aB+1))}var aC=al(aD,aB);if(aC==-1){ab.push({series:aD,point:aB,auto:aF});f()}else{if(!aF){ab[aC].auto=false}}}function T(aD,aB){if(aD==null&&aB==null){ab=[];f()}if(typeof aD=="number"){aD=Q[aD]}if(typeof aB=="number"){aB=aD.data[aB]}var aC=al(aD,aB);if(aC!=-1){ab.splice(aC,1);f()}}function al(aD,aE){for(var aB=0;aB<ab.length;++aB){var aC=ab[aB];if(aC.series==aD&&aC.point[0]==aE[0]&&aC.point[1]==aE[1]){return aB}}return -1}function ay(aE,aD){var aC=aD[0],aI=aD[1],aH=aE.xaxis,aG=aE.yaxis;if(aC<aH.min||aC>aH.max||aI<aG.min||aI>aG.max){return}var aF=aE.points.radius+aE.points.lineWidth/2;A.lineWidth=aF;A.strokeStyle=c.color.parse(aE.color).scale("a",0.5).toString();var aB=1.5*aF,aC=aH.p2c(aC),aI=aG.p2c(aI);A.beginPath();if(aE.points.symbol=="circle"){A.arc(aC,aI,aB,0,2*Math.PI,false)}else{aE.points.symbol(A,aC,aI,aB,false)}A.closePath();A.stroke()}function v(aE,aB){A.lineWidth=aE.bars.lineWidth;A.strokeStyle=c.color.parse(aE.color).scale("a",0.5).toString();var aD=c.color.parse(aE.color).scale("a",0.5).toString();var aC=aE.bars.align=="left"?0:-aE.bars.barWidth/2;E(aB[0],aB[1],aB[2]||0,aC,aC+aE.bars.barWidth,0,function(){return aD},aE.xaxis,aE.yaxis,A,aE.bars.horizontal,aE.bars.lineWidth)}function am(aJ,aB,aH,aC){if(typeof aJ=="string"){return aJ}else{var aI=H.createLinearGradient(0,aH,0,aB);for(var aE=0,aD=aJ.colors.length;aE<aD;++aE){var aF=aJ.colors[aE];if(typeof aF!="string"){var aG=c.color.parse(aC);if(aF.brightness!=null){aG=aG.scale("rgb",aF.brightness)}if(aF.opacity!=null){aG.a*=aF.opacity}aF=aG.toString()}aI.addColorStop(aE/(aD-1),aF)}return aI}}}c.plot=function(g,e,d){var f=new b(c(g),e,d,c.plot.plugins);return f};c.plot.version="0.7";c.plot.plugins=[];c.plot.formatDate=function(l,f,h){var o=function(d){d=""+d;return d.length==1?"0"+d:d};var e=[];var p=false,j=false;var n=l.getUTCHours();var k=n<12;if(h==null){h=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]}if(f.search(/%p|%P/)!=-1){if(n>12){n=n-12}else{if(n==0){n=12}}}for(var g=0;g<f.length;++g){var m=f.charAt(g);if(p){switch(m){case"h":m=""+n;break;case"H":m=o(n);break;case"M":m=o(l.getUTCMinutes());break;case"S":m=o(l.getUTCSeconds());break;case"d":m=""+l.getUTCDate();break;case"m":m=""+(l.getUTCMonth()+1);break;case"y":m=""+l.getUTCFullYear();break;case"b":m=""+h[l.getUTCMonth()];break;case"p":m=(k)?("am"):("pm");break;case"P":m=(k)?("AM"):("PM");break;case"0":m="";j=true;break}if(m&&j){m=o(m);j=false}e.push(m);if(!j){p=false}}else{if(m=="%"){p=true}else{e.push(m)}}}return e.join("")};function a(e,d){return d*Math.floor(e/d)}})(jQuery);
710 </script>
711
712 <script type="text/javascript">
713 if(!document.createElement("canvas").getContext){(function(){var z=Math;var K=z.round;var J=z.sin;var U=z.cos;var b=z.abs;var k=z.sqrt;var D=10;var F=D/2;function T(){return this.context_||(this.context_=new W(this))}var O=Array.prototype.slice;function G(i,j,m){var Z=O.call(arguments,2);return function(){return i.apply(j,Z.concat(O.call(arguments)))}}function AD(Z){return String(Z).replace(/&/g,"&amp;").replace(/"/g,"&quot;")}function r(i){if(!i.namespaces.g_vml_){i.namespaces.add("g_vml_","urn:schemas-microsoft-com:vml","#default#VML")}if(!i.namespaces.g_o_){i.namespaces.add("g_o_","urn:schemas-microsoft-com:office:office","#default#VML")}if(!i.styleSheets.ex_canvas_){var Z=i.createStyleSheet();Z.owningElement.id="ex_canvas_";Z.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}"}}r(document);var E={init:function(Z){if(/MSIE/.test(navigator.userAgent)&&!window.opera){var i=Z||document;i.createElement("canvas");i.attachEvent("onreadystatechange",G(this.init_,this,i))}},init_:function(m){var j=m.getElementsByTagName("canvas");for(var Z=0;Z<j.length;Z++){this.initElement(j[Z])}},initElement:function(i){if(!i.getContext){i.getContext=T;r(i.ownerDocument);i.innerHTML="";i.attachEvent("onpropertychange",S);i.attachEvent("onresize",w);var Z=i.attributes;if(Z.width&&Z.width.specified){i.style.width=Z.width.nodeValue+"px"}else{i.width=i.clientWidth}if(Z.height&&Z.height.specified){i.style.height=Z.height.nodeValue+"px"}else{i.height=i.clientHeight}}return i}};function S(i){var Z=i.srcElement;switch(i.propertyName){case"width":Z.getContext().clearRect();Z.style.width=Z.attributes.width.nodeValue+"px";Z.firstChild.style.width=Z.clientWidth+"px";break;case"height":Z.getContext().clearRect();Z.style.height=Z.attributes.height.nodeValue+"px";Z.firstChild.style.height=Z.clientHeight+"px";break}}function w(i){var Z=i.srcElement;if(Z.firstChild){Z.firstChild.style.width=Z.clientWidth+"px";Z.firstChild.style.height=Z.clientHeight+"px"}}E.init();var I=[];for(var AC=0;AC<16;AC++){for(var AB=0;AB<16;AB++){I[AC*16+AB]=AC.toString(16)+AB.toString(16)}}function V(){return[[1,0,0],[0,1,0],[0,0,1]]}function d(m,j){var i=V();for(var Z=0;Z<3;Z++){for(var AF=0;AF<3;AF++){var p=0;for(var AE=0;AE<3;AE++){p+=m[Z][AE]*j[AE][AF]}i[Z][AF]=p}}return i}function Q(i,Z){Z.fillStyle=i.fillStyle;Z.lineCap=i.lineCap;Z.lineJoin=i.lineJoin;Z.lineWidth=i.lineWidth;Z.miterLimit=i.miterLimit;Z.shadowBlur=i.shadowBlur;Z.shadowColor=i.shadowColor;Z.shadowOffsetX=i.shadowOffsetX;Z.shadowOffsetY=i.shadowOffsetY;Z.strokeStyle=i.strokeStyle;Z.globalAlpha=i.globalAlpha;Z.font=i.font;Z.textAlign=i.textAlign;Z.textBaseline=i.textBaseline;Z.arcScaleX_=i.arcScaleX_;Z.arcScaleY_=i.arcScaleY_;Z.lineScale_=i.lineScale_}var B={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgreen:"#006400",darkgrey:"#A9A9A9",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",grey:"#808080",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgreen:"#90EE90",lightgrey:"#D3D3D3",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",oldlace:"#FDF5E6",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",whitesmoke:"#F5F5F5",yellowgreen:"#9ACD32"};function g(i){var m=i.indexOf("(",3);var Z=i.indexOf(")",m+1);var j=i.substring(m+1,Z).split(",");if(j.length==4&&i.substr(3,1)=="a"){alpha=Number(j[3])}else{j[3]=1}return j}function C(Z){return parseFloat(Z)/100}function N(i,j,Z){return Math.min(Z,Math.max(j,i))}function c(AF){var j,i,Z;h=parseFloat(AF[0])/360%360;if(h<0){h++}s=N(C(AF[1]),0,1);l=N(C(AF[2]),0,1);if(s==0){j=i=Z=l}else{var m=l<0.5?l*(1+s):l+s-l*s;var AE=2*l-m;j=A(AE,m,h+1/3);i=A(AE,m,h);Z=A(AE,m,h-1/3)}return"#"+I[Math.floor(j*255)]+I[Math.floor(i*255)]+I[Math.floor(Z*255)]}function A(i,Z,j){if(j<0){j++}if(j>1){j--}if(6*j<1){return i+(Z-i)*6*j}else{if(2*j<1){return Z}else{if(3*j<2){return i+(Z-i)*(2/3-j)*6}else{return i}}}}function Y(Z){var AE,p=1;Z=String(Z);if(Z.charAt(0)=="#"){AE=Z}else{if(/^rgb/.test(Z)){var m=g(Z);var AE="#",AF;for(var j=0;j<3;j++){if(m[j].indexOf("%")!=-1){AF=Math.floor(C(m[j])*255)}else{AF=Number(m[j])}AE+=I[N(AF,0,255)]}p=m[3]}else{if(/^hsl/.test(Z)){var m=g(Z);AE=c(m);p=m[3]}else{AE=B[Z]||Z}}}return{color:AE,alpha:p}}var L={style:"normal",variant:"normal",weight:"normal",size:10,family:"sans-serif"};var f={};function X(Z){if(f[Z]){return f[Z]}var m=document.createElement("div");var j=m.style;try{j.font=Z}catch(i){}return f[Z]={style:j.fontStyle||L.style,variant:j.fontVariant||L.variant,weight:j.fontWeight||L.weight,size:j.fontSize||L.size,family:j.fontFamily||L.family}}function P(j,i){var Z={};for(var AF in j){Z[AF]=j[AF]}var AE=parseFloat(i.currentStyle.fontSize),m=parseFloat(j.size);if(typeof j.size=="number"){Z.size=j.size}else{if(j.size.indexOf("px")!=-1){Z.size=m}else{if(j.size.indexOf("em")!=-1){Z.size=AE*m}else{if(j.size.indexOf("%")!=-1){Z.size=(AE/100)*m}else{if(j.size.indexOf("pt")!=-1){Z.size=m/0.75}else{Z.size=AE}}}}}Z.size*=0.981;return Z}function AA(Z){return Z.style+" "+Z.variant+" "+Z.weight+" "+Z.size+"px "+Z.family}function t(Z){switch(Z){case"butt":return"flat";case"round":return"round";case"square":default:return"square"}}function W(i){this.m_=V();this.mStack_=[];this.aStack_=[];this.currentPath_=[];this.strokeStyle="#000";this.fillStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=D*1;this.globalAlpha=1;this.font="10px sans-serif";this.textAlign="left";this.textBaseline="alphabetic";this.canvas=i;var Z=i.ownerDocument.createElement("div");Z.style.width=i.clientWidth+"px";Z.style.height=i.clientHeight+"px";Z.style.overflow="hidden";Z.style.position="absolute";i.appendChild(Z);this.element_=Z;this.arcScaleX_=1;this.arcScaleY_=1;this.lineScale_=1}var M=W.prototype;M.clearRect=function(){if(this.textMeasureEl_){this.textMeasureEl_.removeNode(true);this.textMeasureEl_=null}this.element_.innerHTML=""};M.beginPath=function(){this.currentPath_=[]};M.moveTo=function(i,Z){var j=this.getCoords_(i,Z);this.currentPath_.push({type:"moveTo",x:j.x,y:j.y});this.currentX_=j.x;this.currentY_=j.y};M.lineTo=function(i,Z){var j=this.getCoords_(i,Z);this.currentPath_.push({type:"lineTo",x:j.x,y:j.y});this.currentX_=j.x;this.currentY_=j.y};M.bezierCurveTo=function(j,i,AI,AH,AG,AE){var Z=this.getCoords_(AG,AE);var AF=this.getCoords_(j,i);var m=this.getCoords_(AI,AH);e(this,AF,m,Z)};function e(Z,m,j,i){Z.currentPath_.push({type:"bezierCurveTo",cp1x:m.x,cp1y:m.y,cp2x:j.x,cp2y:j.y,x:i.x,y:i.y});Z.currentX_=i.x;Z.currentY_=i.y}M.quadraticCurveTo=function(AG,j,i,Z){var AF=this.getCoords_(AG,j);var AE=this.getCoords_(i,Z);var AH={x:this.currentX_+2/3*(AF.x-this.currentX_),y:this.currentY_+2/3*(AF.y-this.currentY_)};var m={x:AH.x+(AE.x-this.currentX_)/3,y:AH.y+(AE.y-this.currentY_)/3};e(this,AH,m,AE)};M.arc=function(AJ,AH,AI,AE,i,j){AI*=D;var AN=j?"at":"wa";var AK=AJ+U(AE)*AI-F;var AM=AH+J(AE)*AI-F;var Z=AJ+U(i)*AI-F;var AL=AH+J(i)*AI-F;if(AK==Z&&!j){AK+=0.125}var m=this.getCoords_(AJ,AH);var AG=this.getCoords_(AK,AM);var AF=this.getCoords_(Z,AL);this.currentPath_.push({type:AN,x:m.x,y:m.y,radius:AI,xStart:AG.x,yStart:AG.y,xEnd:AF.x,yEnd:AF.y})};M.rect=function(j,i,Z,m){this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath()};M.strokeRect=function(j,i,Z,m){var p=this.currentPath_;this.beginPath();this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath();this.stroke();this.currentPath_=p};M.fillRect=function(j,i,Z,m){var p=this.currentPath_;this.beginPath();this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath();this.fill();this.currentPath_=p};M.createLinearGradient=function(i,m,Z,j){var p=new v("gradient");p.x0_=i;p.y0_=m;p.x1_=Z;p.y1_=j;return p};M.createRadialGradient=function(m,AE,j,i,p,Z){var AF=new v("gradientradial");AF.x0_=m;AF.y0_=AE;AF.r0_=j;AF.x1_=i;AF.y1_=p;AF.r1_=Z;return AF};M.drawImage=function(AO,j){var AH,AF,AJ,AV,AM,AK,AQ,AX;var AI=AO.runtimeStyle.width;var AN=AO.runtimeStyle.height;AO.runtimeStyle.width="auto";AO.runtimeStyle.height="auto";var AG=AO.width;var AT=AO.height;AO.runtimeStyle.width=AI;AO.runtimeStyle.height=AN;if(arguments.length==3){AH=arguments[1];AF=arguments[2];AM=AK=0;AQ=AJ=AG;AX=AV=AT}else{if(arguments.length==5){AH=arguments[1];AF=arguments[2];AJ=arguments[3];AV=arguments[4];AM=AK=0;AQ=AG;AX=AT}else{if(arguments.length==9){AM=arguments[1];AK=arguments[2];AQ=arguments[3];AX=arguments[4];AH=arguments[5];AF=arguments[6];AJ=arguments[7];AV=arguments[8]}else{throw Error("Invalid number of arguments")}}}var AW=this.getCoords_(AH,AF);var m=AQ/2;var i=AX/2;var AU=[];var Z=10;var AE=10;AU.push(" <g_vml_:group",' coordsize="',D*Z,",",D*AE,'"',' coordorigin="0,0"',' style="width:',Z,"px;height:",AE,"px;position:absolute;");if(this.m_[0][0]!=1||this.m_[0][1]||this.m_[1][1]!=1||this.m_[1][0]){var p=[];p.push("M11=",this.m_[0][0],",","M12=",this.m_[1][0],",","M21=",this.m_[0][1],",","M22=",this.m_[1][1],",","Dx=",K(AW.x/D),",","Dy=",K(AW.y/D),"");var AS=AW;var AR=this.getCoords_(AH+AJ,AF);var AP=this.getCoords_(AH,AF+AV);var AL=this.getCoords_(AH+AJ,AF+AV);AS.x=z.max(AS.x,AR.x,AP.x,AL.x);AS.y=z.max(AS.y,AR.y,AP.y,AL.y);AU.push("padding:0 ",K(AS.x/D),"px ",K(AS.y/D),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",p.join(""),", sizingmethod='clip');")}else{AU.push("top:",K(AW.y/D),"px;left:",K(AW.x/D),"px;")}AU.push(' ">','<g_vml_:image src="',AO.src,'"',' style="width:',D*AJ,"px;"," height:",D*AV,'px"',' cropleft="',AM/AG,'"',' croptop="',AK/AT,'"',' cropright="',(AG-AM-AQ)/AG,'"',' cropbottom="',(AT-AK-AX)/AT,'"'," />","</g_vml_:group>");this.element_.insertAdjacentHTML("BeforeEnd",AU.join(""))};M.stroke=function(AM){var m=10;var AN=10;var AE=5000;var AG={x:null,y:null};var AL={x:null,y:null};for(var AH=0;AH<this.currentPath_.length;AH+=AE){var AK=[];var AF=false;AK.push("<g_vml_:shape",' filled="',!!AM,'"',' style="position:absolute;width:',m,"px;height:",AN,'px;"',' coordorigin="0,0"',' coordsize="',D*m,",",D*AN,'"',' stroked="',!AM,'"',' path="');var AO=false;for(var AI=AH;AI<Math.min(AH+AE,this.currentPath_.length);AI++){if(AI%AE==0&&AI>0){AK.push(" m ",K(this.currentPath_[AI-1].x),",",K(this.currentPath_[AI-1].y))}var Z=this.currentPath_[AI];var AJ;switch(Z.type){case"moveTo":AJ=Z;AK.push(" m ",K(Z.x),",",K(Z.y));break;case"lineTo":AK.push(" l ",K(Z.x),",",K(Z.y));break;case"close":AK.push(" x ");Z=null;break;case"bezierCurveTo":AK.push(" c ",K(Z.cp1x),",",K(Z.cp1y),",",K(Z.cp2x),",",K(Z.cp2y),",",K(Z.x),",",K(Z.y));break;case"at":case"wa":AK.push(" ",Z.type," ",K(Z.x-this.arcScaleX_*Z.radius),",",K(Z.y-this.arcScaleY_*Z.radius)," ",K(Z.x+this.arcScaleX_*Z.radius),",",K(Z.y+this.arcScaleY_*Z.radius)," ",K(Z.xStart),",",K(Z.yStart)," ",K(Z.xEnd),",",K(Z.yEnd));break}if(Z){if(AG.x==null||Z.x<AG.x){AG.x=Z.x}if(AL.x==null||Z.x>AL.x){AL.x=Z.x}if(AG.y==null||Z.y<AG.y){AG.y=Z.y}if(AL.y==null||Z.y>AL.y){AL.y=Z.y}}}AK.push(' ">');if(!AM){R(this,AK)}else{a(this,AK,AG,AL)}AK.push("</g_vml_:shape>");this.element_.insertAdjacentHTML("beforeEnd",AK.join(""))}};function R(j,AE){var i=Y(j.strokeStyle);var m=i.color;var p=i.alpha*j.globalAlpha;var Z=j.lineScale_*j.lineWidth;if(Z<1){p*=Z}AE.push("<g_vml_:stroke",' opacity="',p,'"',' joinstyle="',j.lineJoin,'"',' miterlimit="',j.miterLimit,'"',' endcap="',t(j.lineCap),'"',' weight="',Z,'px"',' color="',m,'" />')}function a(AO,AG,Ah,AP){var AH=AO.fillStyle;var AY=AO.arcScaleX_;var AX=AO.arcScaleY_;var Z=AP.x-Ah.x;var m=AP.y-Ah.y;if(AH instanceof v){var AL=0;var Ac={x:0,y:0};var AU=0;var AK=1;if(AH.type_=="gradient"){var AJ=AH.x0_/AY;var j=AH.y0_/AX;var AI=AH.x1_/AY;var Aj=AH.y1_/AX;var Ag=AO.getCoords_(AJ,j);var Af=AO.getCoords_(AI,Aj);var AE=Af.x-Ag.x;var p=Af.y-Ag.y;AL=Math.atan2(AE,p)*180/Math.PI;if(AL<0){AL+=360}if(AL<0.000001){AL=0}}else{var Ag=AO.getCoords_(AH.x0_,AH.y0_);Ac={x:(Ag.x-Ah.x)/Z,y:(Ag.y-Ah.y)/m};Z/=AY*D;m/=AX*D;var Aa=z.max(Z,m);AU=2*AH.r0_/Aa;AK=2*AH.r1_/Aa-AU}var AS=AH.colors_;AS.sort(function(Ak,i){return Ak.offset-i.offset});var AN=AS.length;var AR=AS[0].color;var AQ=AS[AN-1].color;var AW=AS[0].alpha*AO.globalAlpha;var AV=AS[AN-1].alpha*AO.globalAlpha;var Ab=[];for(var Ae=0;Ae<AN;Ae++){var AM=AS[Ae];Ab.push(AM.offset*AK+AU+" "+AM.color)}AG.push('<g_vml_:fill type="',AH.type_,'"',' method="none" focus="100%"',' color="',AR,'"',' color2="',AQ,'"',' colors="',Ab.join(","),'"',' opacity="',AV,'"',' g_o_:opacity2="',AW,'"',' angle="',AL,'"',' focusposition="',Ac.x,",",Ac.y,'" />')}else{if(AH instanceof u){if(Z&&m){var AF=-Ah.x;var AZ=-Ah.y;AG.push("<g_vml_:fill",' position="',AF/Z*AY*AY,",",AZ/m*AX*AX,'"',' type="tile"',' src="',AH.src_,'" />')}}else{var Ai=Y(AO.fillStyle);var AT=Ai.color;var Ad=Ai.alpha*AO.globalAlpha;AG.push('<g_vml_:fill color="',AT,'" opacity="',Ad,'" />')}}}M.fill=function(){this.stroke(true)};M.closePath=function(){this.currentPath_.push({type:"close"})};M.getCoords_=function(j,i){var Z=this.m_;return{x:D*(j*Z[0][0]+i*Z[1][0]+Z[2][0])-F,y:D*(j*Z[0][1]+i*Z[1][1]+Z[2][1])-F}};M.save=function(){var Z={};Q(this,Z);this.aStack_.push(Z);this.mStack_.push(this.m_);this.m_=d(V(),this.m_)};M.restore=function(){if(this.aStack_.length){Q(this.aStack_.pop(),this);this.m_=this.mStack_.pop()}};function H(Z){return isFinite(Z[0][0])&&isFinite(Z[0][1])&&isFinite(Z[1][0])&&isFinite(Z[1][1])&&isFinite(Z[2][0])&&isFinite(Z[2][1])}function y(i,Z,j){if(!H(Z)){return }i.m_=Z;if(j){var p=Z[0][0]*Z[1][1]-Z[0][1]*Z[1][0];i.lineScale_=k(b(p))}}M.translate=function(j,i){var Z=[[1,0,0],[0,1,0],[j,i,1]];y(this,d(Z,this.m_),false)};M.rotate=function(i){var m=U(i);var j=J(i);var Z=[[m,j,0],[-j,m,0],[0,0,1]];y(this,d(Z,this.m_),false)};M.scale=function(j,i){this.arcScaleX_*=j;this.arcScaleY_*=i;var Z=[[j,0,0],[0,i,0],[0,0,1]];y(this,d(Z,this.m_),true)};M.transform=function(p,m,AF,AE,i,Z){var j=[[p,m,0],[AF,AE,0],[i,Z,1]];y(this,d(j,this.m_),true)};M.setTransform=function(AE,p,AG,AF,j,i){var Z=[[AE,p,0],[AG,AF,0],[j,i,1]];y(this,Z,true)};M.drawText_=function(AK,AI,AH,AN,AG){var AM=this.m_,AQ=1000,i=0,AP=AQ,AF={x:0,y:0},AE=[];var Z=P(X(this.font),this.element_);var j=AA(Z);var AR=this.element_.currentStyle;var p=this.textAlign.toLowerCase();switch(p){case"left":case"center":case"right":break;case"end":p=AR.direction=="ltr"?"right":"left";break;case"start":p=AR.direction=="rtl"?"right":"left";break;default:p="left"}switch(this.textBaseline){case"hanging":case"top":AF.y=Z.size/1.75;break;case"middle":break;default:case null:case"alphabetic":case"ideographic":case"bottom":AF.y=-Z.size/2.25;break}switch(p){case"right":i=AQ;AP=0.05;break;case"center":i=AP=AQ/2;break}var AO=this.getCoords_(AI+AF.x,AH+AF.y);AE.push('<g_vml_:line from="',-i,' 0" to="',AP,' 0.05" ',' coordsize="100 100" coordorigin="0 0"',' filled="',!AG,'" stroked="',!!AG,'" style="position:absolute;width:1px;height:1px;">');if(AG){R(this,AE)}else{a(this,AE,{x:-i,y:0},{x:AP,y:Z.size})}var AL=AM[0][0].toFixed(3)+","+AM[1][0].toFixed(3)+","+AM[0][1].toFixed(3)+","+AM[1][1].toFixed(3)+",0,0";var AJ=K(AO.x/D)+","+K(AO.y/D);AE.push('<g_vml_:skew on="t" matrix="',AL,'" ',' offset="',AJ,'" origin="',i,' 0" />','<g_vml_:path textpathok="true" />','<g_vml_:textpath on="true" string="',AD(AK),'" style="v-text-align:',p,";font:",AD(j),'" /></g_vml_:line>');this.element_.insertAdjacentHTML("beforeEnd",AE.join(""))};M.fillText=function(j,Z,m,i){this.drawText_(j,Z,m,i,false)};M.strokeText=function(j,Z,m,i){this.drawText_(j,Z,m,i,true)};M.measureText=function(j){if(!this.textMeasureEl_){var Z='<span style="position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;"></span>';this.element_.insertAdjacentHTML("beforeEnd",Z);this.textMeasureEl_=this.element_.lastChild}var i=this.element_.ownerDocument;this.textMeasureEl_.innerHTML="";this.textMeasureEl_.style.font=this.font;this.textMeasureEl_.appendChild(i.createTextNode(j));return{width:this.textMeasureEl_.offsetWidth}};M.clip=function(){};M.arcTo=function(){};M.createPattern=function(i,Z){return new u(i,Z)};function v(Z){this.type_=Z;this.x0_=0;this.y0_=0;this.r0_=0;this.x1_=0;this.y1_=0;this.r1_=0;this.colors_=[]}v.prototype.addColorStop=function(i,Z){Z=Y(Z);this.colors_.push({offset:i,color:Z.color,alpha:Z.alpha})};function u(i,Z){q(i);switch(Z){case"repeat":case null:case"":this.repetition_="repeat";break;case"repeat-x":case"repeat-y":case"no-repeat":this.repetition_=Z;break;default:n("SYNTAX_ERR")}this.src_=i.src;this.width_=i.width;this.height_=i.height}function n(Z){throw new o(Z)}function q(Z){if(!Z||Z.nodeType!=1||Z.tagName!="IMG"){n("TYPE_MISMATCH_ERR")}if(Z.readyState!="complete"){n("INVALID_STATE_ERR")}}function o(Z){this.code=this[Z];this.message=Z+": DOM Exception "+this.code}var x=o.prototype=new Error;x.INDEX_SIZE_ERR=1;x.DOMSTRING_SIZE_ERR=2;x.HIERARCHY_REQUEST_ERR=3;x.WRONG_DOCUMENT_ERR=4;x.INVALID_CHARACTER_ERR=5;x.NO_DATA_ALLOWED_ERR=6;x.NO_MODIFICATION_ALLOWED_ERR=7;x.NOT_FOUND_ERR=8;x.NOT_SUPPORTED_ERR=9;x.INUSE_ATTRIBUTE_ERR=10;x.INVALID_STATE_ERR=11;x.SYNTAX_ERR=12;x.INVALID_MODIFICATION_ERR=13;x.NAMESPACE_ERR=14;x.INVALID_ACCESS_ERR=15;x.VALIDATION_ERR=16;x.TYPE_MISMATCH_ERR=17;G_vmlCanvasManager=E;CanvasRenderingContext2D=W;CanvasGradient=v;CanvasPattern=u;DOMException=o})()};
714 </script>
715
716 <script type="text/javascript">
717 /*
718 * jQuery.flot.dashes
719 *
720 * options = {
721 * series: {
722 * dashes: {
723 *
724 * // show
725 * // default: false
726 * // Whether to show dashes for the series.
727 * show: <boolean>,
728 *
729 * // lineWidth
730 * // default: 2
731 * // The width of the dashed line in pixels.
732 * lineWidth: <number>,
733 *
734 * // dashLength
735 * // default: 10
736 * // Controls the length of the individual dashes and the amount of
737 * // space between them.
738 * // If this is a number, the dashes and spaces will have that length.
739 * // If this is an array, it is read as [ dashLength, spaceLength ]
740 * dashLength: <number> or <array[2]>
741 * }
742 * }
743 * }
744 */
745 (function($){
746
747 function init(plot) {
748
749 plot.hooks.processDatapoints.push(function(plot, series, datapoints) {
750
751 if (!series.dashes.show) return;
752
753 plot.hooks.draw.push(function(plot, ctx) {
754
755 var plotOffset = plot.getPlotOffset(),
756 axisx = series.xaxis,
757 axisy = series.yaxis;
758
759 function plotDashes(xoffset, yoffset) {
760
761 var points = datapoints.points,
762 ps = datapoints.pointsize,
763 prevx = null,
764 prevy = null,
765 dashRemainder = 0,
766 dashOn = true,
767 dashOnLength,
768 dashOffLength;
769
770 if (series.dashes.dashLength[0]) {
771 dashOnLength = series.dashes.dashLength[0];
772 if (series.dashes.dashLength[1]) {
773 dashOffLength = series.dashes.dashLength[1];
774 } else {
775 dashOffLength = dashOnLength;
776 }
777 } else {
778 dashOffLength = dashOnLength = series.dashes.dashLength;
779 }
780
781 ctx.beginPath();
782
783 for (var i = ps; i < points.length; i += ps) {
784
785 var x1 = points[i - ps],
786 y1 = points[i - ps + 1],
787 x2 = points[i],
788 y2 = points[i + 1];
789
790 if (x1 == null || x2 == null) continue;
791
792 // clip with ymin
793 if (y1 <= y2 && y1 < axisy.min) {
794 if (y2 < axisy.min) continue; // line segment is outside
795 // compute new intersection point
796 x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;
797 y1 = axisy.min;
798 } else if (y2 <= y1 && y2 < axisy.min) {
799 if (y1 < axisy.min) continue;
800 x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;
801 y2 = axisy.min;
802 }
803
804 // clip with ymax
805 if (y1 >= y2 && y1 > axisy.max) {
806 if (y2 > axisy.max) continue;
807 x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;
808 y1 = axisy.max;
809 } else if (y2 >= y1 && y2 > axisy.max) {
810 if (y1 > axisy.max) continue;
811 x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;
812 y2 = axisy.max;
813 }
814
815 // clip with xmin
816 if (x1 <= x2 && x1 < axisx.min) {
817 if (x2 < axisx.min) continue;
818 y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;
819 x1 = axisx.min;
820 } else if (x2 <= x1 && x2 < axisx.min) {
821 if (x1 < axisx.min) continue;
822 y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;
823 x2 = axisx.min;
824 }
825
826 // clip with xmax
827 if (x1 >= x2 && x1 > axisx.max) {
828 if (x2 > axisx.max) continue;
829 y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;
830 x1 = axisx.max;
831 } else if (x2 >= x1 && x2 > axisx.max) {
832 if (x1 > axisx.max) continue;
833 y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;
834 x2 = axisx.max;
835 }
836
837 if (x1 != prevx || y1 != prevy) {
838 ctx.moveTo(axisx.p2c(x1) + xoffset, axisy.p2c(y1) + yoffset);
839 }
840
841 var ax1 = axisx.p2c(x1) + xoffset,
842 ay1 = axisy.p2c(y1) + yoffset,
843 ax2 = axisx.p2c(x2) + xoffset,
844 ay2 = axisy.p2c(y2) + yoffset,
845 dashOffset;
846
847 function lineSegmentOffset(segmentLength) {
848
849 var c = Math.sqrt(Math.pow(ax2 - ax1, 2) + Math.pow(ay2 - ay1, 2));
850
851 if (c <= segmentLength) {
852 return {
853 deltaX: ax2 - ax1,
854 deltaY: ay2 - ay1,
855 distance: c,
856 remainder: segmentLength - c
857 }
858 } else {
859 var xsign = ax2 > ax1 ? 1 : -1,
860 ysign = ay2 > ay1 ? 1 : -1;
861 return {
862 deltaX: xsign * Math.sqrt(Math.pow(segmentLength, 2) / (1 + Math.pow((ay2 - ay1)/(ax2 - ax1), 2))),
863 deltaY: ysign * Math.sqrt(Math.pow(segmentLength, 2) - Math.pow(segmentLength, 2) / (1 + Math.pow((ay2 - ay1)/(ax2 - ax1), 2))),
864 distance: segmentLength,
865 remainder: 0
866 };
867 }
868 }
869 //-end lineSegmentOffset
870
871 do {
872
873 dashOffset = lineSegmentOffset(
874 dashRemainder > 0 ? dashRemainder :
875 dashOn ? dashOnLength : dashOffLength);
876
877 if (dashOffset.deltaX != 0 || dashOffset.deltaY != 0) {
878 if (dashOn) {
879 ctx.lineTo(ax1 + dashOffset.deltaX, ay1 + dashOffset.deltaY);
880 } else {
881 ctx.moveTo(ax1 + dashOffset.deltaX, ay1 + dashOffset.deltaY);
882 }
883 }
884
885 dashOn = !dashOn;
886 dashRemainder = dashOffset.remainder;
887 ax1 += dashOffset.deltaX;
888 ay1 += dashOffset.deltaY;
889
890 } while (dashOffset.distance > 0);
891
892 prevx = x2;
893 prevy = y2;
894 }
895
896 ctx.stroke();
897 }
898 //-end plotDashes
899
900 ctx.save();
901 ctx.translate(plotOffset.left, plotOffset.top);
902 ctx.lineJoin = 'round';
903
904 var lw = series.dashes.lineWidth,
905 sw = series.shadowSize;
906
907 // FIXME: consider another form of shadow when filling is turned on
908 if (lw > 0 && sw > 0) {
909 // draw shadow as a thick and thin line with transparency
910 ctx.lineWidth = sw;
911 ctx.strokeStyle = "rgba(0,0,0,0.1)";
912 // position shadow at angle from the mid of line
913 var angle = Math.PI/18;
914 plotDashes(Math.sin(angle) * (lw/2 + sw/2), Math.cos(angle) * (lw/2 + sw/2));
915 ctx.lineWidth = sw/2;
916 plotDashes(Math.sin(angle) * (lw/2 + sw/4), Math.cos(angle) * (lw/2 + sw/4));
917 }
918
919 ctx.lineWidth = lw;
920 ctx.strokeStyle = series.color;
921
922 if (lw > 0) {
923 plotDashes(0, 0);
924 }
925
926 ctx.restore();
927
928 });
929 //-end draw hook
930
931 });
932 //-end processDatapoints hook
933
934 }
935 //-end init
936
937 $.plot.plugins.push({
938 init: init,
939 options: {
940 series: {
941 dashes: {
942 show: false,
943 lineWidth: 2,
944 dashLength: 10
945 }
946 }
947 },
948 name: 'dashes',
949 version: '0.1'
950 });
951
952 })(jQuery)
953
954
955 </script>
956
957 <script type="text/javascript">
958
959 var cumulative = {
960 isInitialized: false,
961
962 maxX: 0,
963 maxY: 0,
964 maxYTick: 0,
965 series: null,
966 showWithData: null,
967 colors: [],
968
969 draw: function(name, title, colors, filenames, listsOfLengths, refLengths, tickX,
970 placeholder, legendPlaceholder, glossary, order, scalePlaceholder) {
971
972 $(scalePlaceholder).empty();
973
974 if (!this.isInitialized) {
975 // div.html(
976 // "<span class='plot-header'>" + addTooltipIfDefinitionExists(glossary, title) + "</span>" +
977 // "<div class='plot-placeholder' id='cumulative-plot-placeholder'></div>"
978 // );
979 cumulative.series = [];
980 var plotsN = filenames.length;
981 var refLength = 0;
982 if (refLengths) {
983 for (var i = 0, size = refLengths.length; i < size; i++)
984 refLength += refLengths[i];
985 }
986 if (refLength) {
987 cumulative.maxY = refLength;
988 }
989
990 cumulative.colors = colors;
991
992 function addCumulativeLenData(label, index, color, lengths, isRef) {
993 if (!(lengths instanceof Array))
994 lengths = [lengths];
995 var size = lengths.length;
996 var points = {
997 data: new Array(size + 1),
998 label: label,
999 number: index,
1000 color: color
1001 };
1002
1003 points.data[0] = [0, 0];
1004
1005 var y = 0;
1006 for (var j = 0; j < size; j++) {
1007 y += lengths[j];
1008 points.data[j+1] = [j+1, y];
1009 if (y > cumulative.maxY) {
1010 cumulative.maxY = y;
1011 }
1012 }
1013
1014 if (size > cumulative.maxX) {
1015 cumulative.maxX = size;
1016 }
1017 if (isRef){
1018 points.isReference = true;
1019 points.dashes = {show: true, lineWidth: 1};
1020 if (size < cumulative.maxX) {
1021 points.data[size + 1] = [cumulative.maxX, y];
1022 }
1023 }
1024 return points;
1025 }
1026
1027 for (var i = 0; i < plotsN; i++) {
1028 var lengths = listsOfLengths[order[i]];
1029 var asm_name = filenames[order[i]];
1030 var color = colors[order[i]];
1031 cumulative.series[i] = addCumulativeLenData(asm_name, i, color, lengths);
1032 }
1033
1034 // var lineColors = [];
1035 //
1036 // for (i = 0; i < colors.length; i++) {
1037 // lineColors.push(changeColor(colors[i], 0.9, false));
1038 // }
1039
1040 for (i = 0; i < plotsN; i++) {
1041 if (typeof broken_scaffolds_labels !== undefined && $.inArray(filenames[order[i]], broken_scaffolds_labels) != -1) {
1042 cumulative.series[i].dashes = {
1043 show: true,
1044 lineWidth: 1
1045 };
1046 }
1047 else {
1048 cumulative.series[i].lines = {
1049 show: true,
1050 lineWidth: 1
1051 };
1052 }
1053 }
1054
1055 for (i = 0; i < plotsN; i++) {
1056 cumulative.colors.push(cumulative.series[i].color);
1057 }
1058
1059 //cumulative.maxYTick = getMaxDecimalTick(cumulative.maxY);
1060
1061 if (refLengths) {
1062 size = refLengths.length;
1063 var ref_label = 'reference,&nbsp;' + toPrettyString(refLength, 'bp');
1064 cumulative.series.push(addCumulativeLenData(ref_label, i, '#000000', refLengths, true));
1065 cumulative.colors.push('#000000');
1066 }
1067
1068
1069 // if (referenceLength) {
1070 // yaxes.push({
1071 // ticks: [referenceLength],
1072 // min: 0,
1073 // max: maxYTick,
1074 // position: 'right',
1075 //// labelWidth: 50,
1076 // reserveSpace: true,
1077 // tickFormatter: function (val, axis) {
1078 // return '<div style="">' + toPrettyStringWithDimension(referenceLength, 'bp') +
1079 // ' <span style="margin-left: -0.2em;">(reference)</span></div>';
1080 // },
1081 // minTickSize: 1,
1082 // });
1083 // }
1084 var yaxis = {
1085 min: 0,
1086 //max: cumulative.maxYTick,
1087 labelWidth: 120,
1088 reserveSpace: true,
1089 lineWidth: 0.5,
1090 color: '#000000',
1091 tickFormatter: getBpTickFormatter(cumulative.maxY),
1092 minTickSize: 1
1093 };
1094 var yaxes = [yaxis];
1095
1096 cumulative.showWithData = function(series, colors) {
1097 var plot = $.plot(placeholder, series, {
1098 shadowSize: 0,
1099 colors: cumulative.colors,
1100 legend: {
1101 container: $('useless-invisible-element-that-does-not-even-exist'),
1102 },
1103 // legend: {
1104 // container: legendPlaceholder,
1105 // position: 'se',
1106 // labelBoxBorderColor: '#FFF',
1107 // labelFormatter: labelFormatter,
1108 // },
1109 grid: {
1110 borderWidth: 1,
1111 hoverable: true,
1112 autoHighlight: false,
1113 mouseActiveRadius: 1000
1114 },
1115 yaxes: yaxes,
1116 xaxis: {
1117 min: 0,
1118 max: cumulative.maxX,
1119 lineWidth: 0.5,
1120 color: '#000',
1121 tickFormatter: getContigNumberTickFormatter(cumulative.maxX, tickX),
1122 minTickSize: tickX
1123 }
1124 });
1125
1126 bindTip(placeholder, series, plot, ordinalNumberToPrettyString, tickX, 'contig', 'bottom right');
1127 };
1128
1129 cumulative.isInitialized = true;
1130 }
1131
1132 addLegendClickEvents(cumulative, filenames.length, showPlotWithInfo, refLengths);
1133
1134 showPlotWithInfo(cumulative);
1135
1136 $('#contigs_are_ordered').show();
1137 },
1138 };
1139
1140 </script>
1141
1142 <script type="text/javascript">
1143
1144 var nx = {
1145 nx: {
1146 isInitialized: false,
1147 maxY: 0,
1148 maxYTick: 0,
1149 series: null,
1150 showWithData: null
1151 },
1152
1153 nax: {
1154 isInitialized: false,
1155 maxY: 0,
1156 maxYTick: 0,
1157 series: null,
1158 showWithData: null
1159 },
1160
1161 ngx: {
1162 isInitialized: false,
1163 maxY: 0,
1164 maxYTick: 0,
1165 series: null,
1166 showWithData: null
1167 },
1168
1169 ngax: {
1170 isInitialized: false,
1171 maxY: 0,
1172 maxYTick: 0,
1173 series: null,
1174 showWithData: null
1175 },
1176
1177 draw: function (name, title, colors, filenames, data, refPlotValue, tickX,
1178 placeholder, legendPlaceholder, glossary, order, scalePlaceholder) {
1179
1180 $(scalePlaceholder).empty();
1181
1182 var coordX = data.coord_x;
1183 var coordY = data.coord_y;
1184
1185 var cur_filenames = data.filenames;
1186 var info = nx[name];
1187
1188 if (!info.isInitialized) {
1189 var plotsN = cur_filenames.length;
1190 info.series = new Array(plotsN);
1191
1192 for (var i = 0; i < plotsN; i++) {
1193 var index = $.inArray(cur_filenames[order[i]], filenames);
1194 var plot_coordX = coordX[order[i]];
1195 var plot_coordY = coordY[order[i]];
1196 var size = plot_coordX.length;
1197
1198 info.series[i] = {
1199 data: [],
1200 label: filenames[index],
1201 number: index,
1202 color: colors[index]
1203 };
1204 info.series[i].data.push([0.0, plot_coordY[0]]);
1205 var currentLen = 0;
1206 var x = 0.0;
1207
1208 for (var k = 0; k < size; k++) {
1209 info.series[i].data.push([plot_coordX[k], plot_coordY[k]]);
1210 }
1211
1212 if (info.series[i].data[0][1] > info.maxY) {
1213 info.maxY = info.series[i].data[0][1];
1214 }
1215
1216 var lastPt = info.series[i].data[info.series[i].data.length-1];
1217 info.series[i].data.push([lastPt[0], 0]);
1218 }
1219
1220 for (i = 0; i < plotsN; i++) {
1221 if (typeof broken_scaffolds_labels !== undefined && $.inArray(filenames[order[i]], broken_scaffolds_labels) != -1) {
1222 info.series[i].dashes = {
1223 show: true,
1224 lineWidth: 1
1225 };
1226 }
1227 else {
1228 info.series[i].lines = {
1229 show: true,
1230 lineWidth: 1
1231 };
1232 }
1233 }
1234
1235 // for (i = 0; i < plotsN; i++) {
1236 // plotsData[i].points = {
1237 // show: true,
1238 // radius: 1,
1239 // fill: 1,
1240 // fillColor: false,
1241 // }
1242 // }
1243
1244 info.showWithData = function(series, colors) {
1245 var plot = $.plot(placeholder, series, {
1246 shadowSize: 0,
1247 colors: colors,
1248 legend: {
1249 container: $('useless-invisible-element-that-does-not-even-exist'),
1250 },
1251 grid: {
1252 borderWidth: 1,
1253 hoverable: true,
1254 autoHighlight: false,
1255 mouseActiveRadius: 1000
1256 },
1257 yaxis: {
1258 min: 0,
1259 // max: info.maxY,
1260 labelWidth: 120,
1261 reserveSpace: true,
1262 lineWidth: 0.5,
1263 color: '#000',
1264 tickFormatter: getBpTickFormatter(info.maxY),
1265 minTickSize: 1
1266 },
1267 xaxis: {
1268 min: 0,
1269 max: 100,
1270 lineWidth: 0.5,
1271 color: '#000',
1272 tickFormatter: function (val, axis) {
1273 if (val == 100) {
1274 return '&nbsp;x<span class="rhs">&nbsp;</span>=<span class="rhs">&nbsp;</span>100%'
1275 } else {
1276 return val;
1277 }
1278 }
1279 },
1280 minTickSize: tickX
1281 }
1282 );
1283
1284 var firstLabel = $('.yAxis .tickLabel').last();
1285 firstLabel.prepend(title + '<span class="rhs">&nbsp;</span>=<span class="rhs">&nbsp;</span>');
1286
1287 bindTip(placeholder, series, plot, toPrettyString, 1, '%', 'top right');
1288
1289 };
1290
1291 info.isInitialized = true;
1292 }
1293
1294 addLegendClickEvents(info, filenames.length, showPlotWithInfo);
1295 showPlotWithInfo(info);
1296 }
1297 };
1298
1299
1300
1301 </script>
1302
1303 <script type="text/javascript">
1304
1305 var normal_scale_span =
1306 "<span class='selected-switch'>" +
1307 'Normal' +
1308 "</span>";
1309 var normal_scale_a =
1310 "<a class='dotted-link' onClick='setNormalScale()'>" +
1311 'Normal' +
1312 "</a>";
1313 var log_scale_span =
1314 "<span class='selected-switch'>" +
1315 'logarithmic' +
1316 "</span>";
1317 var log_scale_a =
1318 "<a class='dotted-link' onClick='setLogScale()'>" +
1319 'logarithmic' +
1320 "</a>";
1321
1322 var show_all_span =
1323 "<span class='selected-switch gc'>" +
1324 'Back to overview' +
1325 "</span>";
1326 var show_all_a =
1327 "&nbsp;&nbsp;&nbsp;<a class='dotted-link' onClick='showAll()'>" +
1328 'Back to overview' +
1329 "</a>";
1330
1331 var gc = {
1332 isInitialized: false,
1333
1334 maxY: 0,
1335 plot: null,
1336 series: null,
1337 showWithData: null,
1338 minPow: 0,
1339 ticks: null,
1340 placeholder: null,
1341 legendPlaceholder: null,
1342 colors: null,
1343 yAxisLabeled: false,
1344
1345 show_all_el: show_all_span,
1346 reference: false,
1347
1348 normal_scale_el: null,
1349 log_scale_el: null,
1350
1351 draw: function(name, title, colors, filenames, gcInfos, reflen, tickX,
1352 placeholder, legendPlaceholder, glossary, order, scalePlaceholder) {
1353 gc.normal_scale_el = normal_scale_span;
1354 gc.log_scale_el = log_scale_a;
1355 $(scalePlaceholder).html(
1356 "<div id='change-scale' style='margin-right: 3px; visibility: hidden;'>" +
1357 "<span id='normal_scale_label'>" +
1358 gc.normal_scale_el +
1359 "</span>&nbsp;/&nbsp;" +
1360 "<span id='log_scale_label'>" +
1361 gc.log_scale_el +
1362 "</span> scale" +
1363 "</div>"
1364 );
1365
1366 var refIndex = gcInfos.reference_index;
1367 if (!gc.isInitialized) {
1368 gc.legendPlaceholder = legendPlaceholder;
1369 gc.placeholder = placeholder;
1370 gc.colors = colors;
1371 gc.filenames = filenames;
1372
1373 var bin_size = 1.0;
1374 var plotsN = filenames.length;
1375 gc.series = new Array(plotsN + 1);
1376 gc.series[0] = new Array(plotsN);
1377
1378 gc.maxY = 0;
1379 var minY = Number.MAX_VALUE;
1380
1381 function updateMinY(y) {
1382 if (y < minY && y != 0) {
1383 minY = y;
1384 }
1385 }
1386 function updateMaxY(y) {
1387 if (y > gc.maxY) {
1388 gc.maxY = y;
1389 }
1390 }
1391
1392 for (var i = 0; i < plotsN; i++) {
1393 gc.series[0][i] = {
1394 data: [],
1395 label: filenames[order[i]],
1396 number: order[i],
1397 color: colors[order[i]]
1398 };
1399 }
1400
1401 function makeSeriesFromDistributions(distributionsXandY, series_i, plot_i) {
1402 var distributionsX = distributionsXandY[0];
1403 var distributionsY = distributionsXandY[1];
1404
1405 for (var j = 0; j < distributionsX.length; j++) {
1406 var x = distributionsX[j];
1407 var y = distributionsY[j];
1408 gc.series[series_i][plot_i].data.push([x, y]);
1409 updateMinY(y);
1410 updateMaxY(y);
1411 }
1412 }
1413
1414 function makeSeries(listsOfGCInfo, listOfGcDistributions, seriesIdx) {
1415 for (var i = 0; i < plotsN; i++) {
1416 if (listsOfGCInfo) {
1417 makeSeriesFromInfo(listsOfGCInfo[order[i]], seriesIdx, i);
1418 } else {
1419 makeSeriesFromDistributions(listOfGcDistributions[order[i]], seriesIdx, i);
1420 }
1421 }
1422 }
1423
1424 var listsOfGCInfo = gcInfos.lists_of_gc_info;
1425 var listOfGcDistributions = gcInfos.list_of_GC_distributions;
1426 makeSeries(listsOfGCInfo, listOfGcDistributions, 0);
1427
1428 function makeSeriesFromInfo(GC_info, series_i, i) {
1429 var cur_bin = 0.0;
1430
1431 var x = cur_bin;
1432 var y = filterAndSumGcInfo(GC_info, function(GC_percent) {
1433 return GC_percent == cur_bin;
1434 });
1435 gc.series[series_i][i].data.push([x, y]);
1436
1437 updateMinY(y);
1438 updateMaxY(y);
1439
1440 while (cur_bin < 100.0 - bin_size) {
1441 cur_bin += bin_size;
1442
1443 x = cur_bin;
1444 y = filterAndSumGcInfo(GC_info, function(GC_percent) {
1445 return GC_percent > (cur_bin - bin_size) && GC_percent <= cur_bin;
1446 });
1447 gc.series[series_i][i].data.push([x, y]);
1448
1449 updateMinY(y);
1450 updateMaxY(y);
1451 }
1452
1453 x = 100.0;
1454 y = filterAndSumGcInfo(GC_info, function(GC_percent) {
1455 return GC_percent > cur_bin && GC_percent <= 100.0;
1456 });
1457
1458 gc.series[series_i][i].data.push([x, y]);
1459
1460 updateMinY(y);
1461 updateMaxY(y);
1462 }
1463
1464 for (i = 0; i < plotsN; i++) {
1465 if (typeof broken_scaffolds_labels !== undefined && $.inArray(filenames[order[i]], broken_scaffolds_labels) != -1) {
1466 gc.series[0][i].dashes = {
1467 show: true,
1468 lineWidth: 1
1469 };
1470 }
1471 else {
1472 gc.series[0][i].lines = {
1473 show: true,
1474 lineWidth: 1
1475 };
1476 }
1477 }
1478
1479 if (refIndex) {
1480 gc.reference = true;
1481 gc.series[0].push({
1482 data: [],
1483 label: 'reference',
1484 isReference: true,
1485 number: filenames.length,
1486 lines: {},
1487 dashes: {
1488 show: true,
1489 lineWidth: 1
1490 },
1491 color: '#000000'
1492 });
1493 if (listsOfGCInfo) {
1494 makeSeriesFromInfo(listsOfGCInfo[refIndex], 0, refIndex);
1495 } else {
1496 makeSeriesFromDistributions(listOfGcDistributions[refIndex], 0, refIndex);
1497 }
1498 gc.colors.push('#000000')
1499 }
1500
1501 if (gcInfos.list_of_GC_contigs_distributions) {
1502 listOfGcDistributions = gcInfos.list_of_GC_contigs_distributions;
1503 var maxY = 0;
1504 for (var file_n = 0; file_n < filenames.length; file_n++) {
1505 gc.series[file_n + 1] = new Array(1);
1506 gc.series[file_n + 1][0] = {
1507 data: [],
1508 label: filenames[order[file_n]],
1509 number: order[file_n],
1510 color: colors[order[file_n]],
1511 bars: {
1512 show: true,
1513 lineWidth: 0.6,
1514 fill: 0.6,
1515 barWidth: 5
1516 }
1517 };
1518
1519 var distributionsX = listOfGcDistributions[file_n][0];
1520 var distributionsY = listOfGcDistributions[file_n][1];
1521
1522 for (var j = 0; j < distributionsX.length; j++) {
1523 var x = distributionsX[j];
1524 var y = distributionsY[j];
1525 gc.series[file_n + 1][0].data.push([x, y]);
1526 maxY = Math.max(maxY, y);
1527 }
1528 }
1529 for (var file_n = 0; file_n < filenames.length; file_n++) {
1530 gc.series[file_n + 1][0].maxY = maxY;
1531 }
1532 }
1533 // Calculate the minimum possible non-zero Y to clip useless bottoms
1534 // of logarithmic plots.
1535 var maxYTick = getMaxDecimalTick(gc.maxY);
1536 gc.minPow = Math.round(Math.log(minY) / Math.log(10));
1537 gc.ticks = [];
1538 for (var pow = gc.minPow; Math.pow(10, pow) < maxYTick; pow++) {
1539 gc.ticks.push(Math.pow(10, pow));
1540 }
1541 gc.ticks.push(Math.pow(10, pow));
1542
1543 gc.isInitialized = true;
1544 }
1545
1546 gc.showWithData = showInNormalScaleWithData;
1547 if (gcInfos.list_of_GC_contigs_distributions) {
1548 createLegend(gc.filenames, gc.colors, 0, gc.reference);
1549 }
1550 addLegendClickEvents(gc, filenames.length, showPlotWithInfo, false, 0);
1551
1552 showPlotWithInfo(gc, 0);
1553
1554 $('#change-scale').css('visibility', 'visible');
1555 $('#gc_info').show();
1556 }
1557 };
1558
1559 function showAll() {
1560 $('#change-scale').show();
1561 $('#gc_info').show();
1562 $('#gc_contigs_info').hide();
1563 createLegend(gc.filenames, gc.colors, 0, gc.reference);
1564
1565 gc.show_all_el = show_all_span;
1566 gc.showWithData = gc.log_scale_el == log_scale_a ? showInNormalScaleWithData : showInLogarithmicScaleWithData;
1567
1568 $('#show_all_label').html(gc.show_all_el);
1569 showPlotWithInfo(gc, 0);
1570 }
1571
1572 function showPlot(index) {
1573 $('#change-scale').hide();
1574 $('#gc_info').hide();
1575 $('#gc_contigs_info').show();
1576 createLegend([gc.filenames[index - 1]], [gc.colors[index - 1]], index);
1577
1578 gc.show_all_el = show_all_a;
1579 gc.showWithData = showOneAssembly;
1580
1581 $('#show_all_label').html(gc.show_all_el);
1582 showPlotWithInfo(gc, index);
1583 }
1584
1585 function showOneAssembly(series, colors) {
1586 if (series == null) {
1587 return;
1588 }
1589
1590 gc.plot = $.plot(gc.placeholder, series, {
1591 shadowSize: 0,
1592 colors: colors,
1593 legend: {
1594 container: $('useless-invisible-element-that-does-not-even-exist')
1595 },
1596 grid: {
1597 hoverable: true,
1598 borderWidth: 1,
1599 autoHighlight: false,
1600 mouseActiveRadius: 1000
1601 },
1602 yaxis: {
1603 min: 0,
1604 max: series[0].maxY * 1.1,
1605 labelWidth: 120,
1606 reserveSpace: true,
1607 lineWidth: 0.5,
1608 color: '#000',
1609 tickFormatter: getJustNumberTickFormatter(gc.maxY),
1610 minTickSize: 1
1611 },
1612 xaxis: {
1613 min: 0,
1614 max: 100,
1615 lineWidth: 0.5,
1616 color: '#000',
1617 tickFormatter: function (val, axis) {
1618 if (val == 100) {
1619 return '&nbsp;100% GC'
1620 } else {
1621 return val;
1622 }
1623 }
1624 },
1625 minTickSize: 1
1626 }
1627 );
1628
1629 var firstLabel = $('.yAxis .tickLabel').last();
1630 firstLabel.append(' contigs');
1631 unBindTips(gc.placeholder);
1632 bindTip(gc.placeholder, series, gc.plot, getIntervalToPrettyString(5), 1, '%<span class="rhs">&nbsp;</span>GC', 'top right');
1633 }
1634
1635 function showInNormalScaleWithData(series, colors) {
1636 if (series == null || gc.maxY == null)
1637 return;
1638
1639 gc.yAxisLabeled = false;
1640
1641 gc.plot = $.plot(gc.placeholder, series, {
1642 shadowSize: 0,
1643 colors: colors,
1644 legend: {
1645 container: $('useless-invisible-element-that-does-not-even-exist'),
1646 },
1647 grid: {
1648 borderWidth: 1,
1649 hoverable: true,
1650 autoHighlight: false,
1651 mouseActiveRadius: 1000,
1652 },
1653 yaxis: {
1654 min: 0,
1655 // max: gc.maxY + 0.1 * gc.maxY,
1656 labelWidth: 120,
1657 reserveSpace: true,
1658 lineWidth: 0.5,
1659 color: '#000',
1660 tickFormatter: windowsTickFormatter,
1661 minTickSize: 1
1662 },
1663 xaxis: {
1664 min: 0,
1665 max: 100,
1666 lineWidth: 0.5,
1667 color: '#000',
1668 tickFormatter: function (val, axis) {
1669 if (val == 100) {
1670 return '&nbsp;100% GC'
1671 } else {
1672 return val;
1673 }
1674 }
1675 },
1676 minTickSize: 1
1677 }
1678 );
1679
1680 var firstLabel = $('.yAxis .tickLabel').last();
1681 firstLabel.append(' windows');
1682 bindTip(gc.placeholder, series, gc.plot, toPrettyString, 1, '%<span class="rhs">&nbsp;</span>GC', 'top right');
1683 }
1684
1685
1686 function showInLogarithmicScaleWithData(series, colors) {
1687 if (series == null || gc.maxY == null || gc.minPow == null) {
1688 return;
1689 }
1690
1691 gc.yAxisLabeled = false;
1692
1693 gc.plot = $.plot(gc.placeholder, series, {
1694 shadowSize: 0,
1695 colors: colors,
1696 legend: {
1697 container: $('useless-invisible-element-that-does-not-even-exist'),
1698 },
1699 grid: {
1700 hoverable: true,
1701 borderWidth: 1,
1702 autoHighlight: false,
1703 mouseActiveRadius: 1000
1704 },
1705 yaxis: {
1706 min: Math.pow(10, gc.minPow),
1707 // max: gc.maxY,
1708 labelWidth: 120,
1709 reserveSpace: true,
1710 lineWidth: 0.5,
1711 color: '#000',
1712 tickFormatter: windowsTickFormatter,
1713 minTickSize: 1,
1714 ticks: gc.ticks,
1715
1716 transform: function(v) {
1717 return Math.log(v + 0.0001)/*move away from zero*/ / Math.log(10);
1718 },
1719 inverseTransform: function(v) {
1720 return Math.pow(v, 10);
1721 },
1722 tickDecimals: 3
1723 },
1724 xaxis: {
1725 min: 0,
1726 max: 100,
1727 lineWidth: 0.5,
1728 color: '#000',
1729 tickFormatter: function (val, axis) {
1730 if (val == 100) {
1731 return '&nbsp;100%<span class="rhs">&nbsp;</span>GC'
1732 } else {
1733 return val;
1734 }
1735 }
1736 },
1737 minTickSize: 1
1738 }
1739 );
1740
1741 var firstLabel = $('.yAxis .tickLabel').last();
1742 firstLabel.append(' windows');
1743 bindTip(gc.placeholder, series, gc.plot, toPrettyString, 1, '% GC', 'top right');
1744 }
1745
1746
1747 function setLogScale() {
1748 gc.normal_scale_el = normal_scale_a;
1749 gc.log_scale_el = log_scale_span;
1750 gc.showWithData = showInLogarithmicScaleWithData;
1751
1752 $('#normal_scale_label').html(gc.normal_scale_el);
1753 $('#log_scale_label').html(gc.log_scale_el);
1754 showPlotWithInfo(gc, 0);
1755 }
1756
1757
1758 function setNormalScale() {
1759 gc.normal_scale_el = normal_scale_span;
1760 gc.log_scale_el = log_scale_a;
1761 gc.showWithData = showInNormalScaleWithData;
1762
1763 $('#normal_scale_label').html(gc.normal_scale_el);
1764 $('#log_scale_label').html(gc.log_scale_el);
1765 showPlotWithInfo(gc, 0);
1766 }
1767
1768
1769
1770 function filterAndSumGcInfo(GC_info, condition) {
1771 var contigs_lengths_cur_bin = [];
1772 for (var j = 0; j < GC_info.length; j++) {
1773 var GC = GC_info[j];
1774 var contig_length = GC[0];
1775 var GC_percent = GC[1];
1776
1777 if (condition(GC_percent) == true) {
1778 contigs_lengths_cur_bin.push(contig_length);
1779 }
1780 }
1781 var val_bp = 0;
1782 for (var j = 0; j < contigs_lengths_cur_bin.length; j++) {
1783 val_bp += contigs_lengths_cur_bin[j];
1784 }
1785 return val_bp;
1786 }
1787
1788 function createLegend(labels, colors, index, reference) {
1789 var selectedAssemblies = getSelectedAssemblies(labels);
1790 $('#legend-placeholder').empty();
1791 var selectors = "";
1792
1793 labels.forEach(function(label, i) {
1794 var link = index ? '' : '<span id="' + labels[i] + '-switch"' + "class='plot-gc-type-switch dotted-link'>by contigs<br></span><br>";
1795 var assemblyIdx = gc.filenames.indexOf(label);
1796 addLabelToLegend(assemblyIdx, label, selectedAssemblies, colors, link);
1797 });
1798 if (reference) {
1799 isChecked = (selectedAssemblies.length > 0 && selectedAssemblies.indexOf(gc.filenames.length.toString())) != -1 ? 'checked="checked"' : "";
1800 $('#legend-placeholder').append(
1801 '<div id="reference-label">' +
1802 '<label for="reference" style="color: #000000;">' +
1803 '<input type="checkbox" name="' + gc.filenames.length +
1804 '" checked="' + isChecked + '" id="reference">&nbsp;' + 'reference' +
1805 '</label>' +
1806 '</div>'
1807 );
1808 }
1809 if (index > 0) {
1810 for (var filenames_n = 0; filenames_n < gc.filenames.length; filenames_n++){
1811 selectors += '<br><span id="' + gc.filenames[filenames_n] + '-switch" ' +
1812 "class='plot-switch dotted-link'>" +
1813 gc.filenames[filenames_n] + "</span>";
1814 }
1815 $('#legend-placeholder').append(
1816 "<br><br><div id='change-assembly' style='margin-right: 3px;'>" +
1817 "<span id='show_all_label'>" +
1818 gc.show_all_el +
1819 "</span><br>" + selectors +
1820 "</div>"
1821 );
1822 }
1823 addLinksToSwitches(index - 1);
1824 addLegendClickEvents(gc, gc.series.length, showPlotWithInfo, false, index);
1825 }
1826
1827 function addLinksToSwitches(index) {
1828 var filenames = gc.filenames;
1829 for (filenames_n = 0; filenames_n < filenames.length; filenames_n++){
1830 var switchSpan = document.getElementById(filenames[filenames_n] + "-switch");
1831 $(switchSpan).click(getToggleSwitchFunction(filenames_n + 1));
1832 if (filenames_n == index) {
1833 switchSpan.className = 'plot-switch selected-switch gc';
1834 }
1835 }
1836 }
1837
1838 function getToggleSwitchFunction(index) {
1839 return function() {
1840 if (index > 0) {
1841 showPlot(index);
1842 }
1843 else {
1844 showAll();
1845 }
1846 };
1847 }
1848 </script>
1849
1850 <script type="text/javascript">
1851
1852 var frc = {
1853 genes: {
1854 isInitialized: false,
1855
1856 maxY: 0,
1857 maxYTick: 0,
1858 series: null,
1859 showWithData: null,
1860
1861 yAxisLabeled: false
1862 },
1863
1864 operons: {
1865 isInitialized: false,
1866
1867 maxY: 0,
1868 maxYTick: 0,
1869 series: null,
1870 showWithData: null,
1871
1872 yAxisLabeled: false
1873 },
1874
1875 misassemblies: {
1876 isInitialized: false,
1877
1878 maxY: 0,
1879 maxYTick: 0,
1880 series: null,
1881 showWithData: null,
1882
1883 yAxisLabeled: false
1884 },
1885
1886 draw: function (name, title, colors, filenames, data, refGenesNumber, tickX,
1887 placeholder, legendPlaceholder, glossary, order, scalePlaceholder) {
1888 // div.html(
1889 // "<span class='plot-header'>" + kind[0].toUpperCase() + kind.slice(1) + "s covered</span>" +
1890 // "<div class='plot-placeholder' id='" + kind + "s-plot-placeholder'></div>"
1891 // );
1892 $(scalePlaceholder).empty();
1893
1894 var info = frc[name];
1895 var coordX = data.coord_x;
1896 var coordY = data.coord_y;
1897
1898 info.yAxisLabeled = false;
1899 var cur_filenames = data.filenames;
1900 if (!info.isInitialized) {
1901 var plotsN = cur_filenames.length;
1902 info.series = new Array(plotsN);
1903
1904 info.maxY = 0;
1905 info.maxX = 0;
1906
1907 for (var i = 0; i < plotsN; i++) {
1908 var index = $.inArray(cur_filenames[order[i]], filenames);
1909 var plot_coordX = coordX[order[i]];
1910 var plot_coordY = coordY[order[i]];
1911 var featureSpace = plot_coordX[plot_coordX.length - 1];
1912 var maxY = plot_coordY[plot_coordY.length - 1];
1913
1914 info.series[i] = {
1915 data: [],
1916 label: filenames[index],
1917 number: index,
1918 color: colors[index]
1919 };
1920
1921 info.series[i].data.push([0.0, plot_coordY[0]]);
1922
1923 if (featureSpace > info.maxX) {
1924 info.maxX = featureSpace;
1925 }
1926 for (var k = 0; k < plot_coordX.length; k++) {
1927 info.series[i].data.push([plot_coordX[k], plot_coordY[k]]);
1928 }
1929
1930 if (maxY > info.maxY) {
1931 info.maxY = maxY;
1932 }
1933 }
1934
1935 for (i = 0; i < plotsN; i++) {
1936 if (typeof broken_scaffolds_labels !== undefined && $.inArray(filenames[order[i]], broken_scaffolds_labels) != -1) {
1937 info.series[i].dashes = {
1938 show: true,
1939 lineWidth: 1
1940 };
1941 }
1942 else {
1943 info.series[i].lines = {
1944 show: true,
1945 lineWidth: 1
1946 };
1947 }
1948 }
1949
1950 info.showWithData = function(series, colors) {
1951 var plot = $.plot(placeholder, series, {
1952 shadowSize: 0,
1953 colors: colors,
1954 legend: {
1955 container: $('useless-invisible-element-that-does-not-even-exist')
1956 },
1957 grid: {
1958 borderWidth: 1,
1959 hoverable: true,
1960 autoHighlight: false,
1961 mouseActiveRadius: 1000,
1962 },
1963 yaxis: {
1964 min: 0,
1965 max: Math.max(100, info.maxY),
1966 labelWidth: 145,
1967 reserveSpace: true,
1968 lineWidth: 0.5,
1969 color: '#000',
1970 tickFormatter: getPercentTickFormatter(Math.max(100, info.maxY)),
1971 minTickSize: 1
1972 },
1973 xaxis: {
1974 min: 0,
1975 max: info.maxX,
1976 lineWidth: 0.5,
1977 color: '#000',
1978 tickFormatter: getJustNumberTickFormatter(info.maxX, ' ' + name),
1979 minTickSize: tickX
1980 }
1981 });
1982
1983 var firstLabel = $('.yAxis .tickLabel').last();
1984 firstLabel.prepend('Genome coverage<span class="rhs">&nbsp;</span>=<span class="rhs">&nbsp;</span>');
1985
1986 bindTip(placeholder, series, plot, frcNumberToPrettyString, tickX, name, 'bottom right', false, '%');
1987 };
1988
1989 info.isInitialized = true;
1990 }
1991
1992 addLegendClickEvents(info, filenames.length, showPlotWithInfo, refGenesNumber);
1993 showPlotWithInfo(info);
1994 $('#frc_info').show();
1995 $('.frc_plot_name').html(name);
1996 }
1997 };
1998
1999
2000
2001 </script>
2002
2003 <script type="text/javascript">
2004
2005 /**********/
2006 /* COLORS */
2007
2008 // var colors = ["#FF5900", "#008FFF", "#168A16", "#7C00FF", "#00B7FF", "#FF0080", "#7AE01B", "#782400", "#E01B6A"];
2009 var standard_colors = [
2010 '#FF0000', //red
2011 '#0000FF', //blue
2012 '#008000', //green
2013 '#FFA500', //orange
2014 '#FF00FF', //fushua
2015 '#CCCC00', //yellow
2016 '#800000', //maroon
2017 '#00CCCC', //aqua
2018 '#808080', //gray
2019 '#800080', //purple
2020 '#808000', //olive
2021 '#000080', //navy
2022 '#008080', //team
2023 '#00FF00', //lime
2024 ];
2025
2026 function distinctColors(count) {
2027 var colors = [];
2028 for(var hue = 0; hue < 360; hue += 360 / count) {
2029 var color = hsvToRgb(hue, 100, 100);
2030 var colorStr = '#' + color[0].toString(16) + color[1].toString(16) + color[2].toString(16);
2031 colors.push();
2032 }
2033 return colors;
2034 }
2035
2036 /**************/
2037 /* FORMATTING */
2038 function isIntegral(num) {
2039 return num % 1 === 0;
2040 }
2041
2042 function isFractional(num) {
2043 return !isIntegral(num);
2044 }
2045
2046 function getIntervalToPrettyString(interval) {
2047 return function(num, unit) {
2048 return intervalToPrettyString(interval, num, unit);
2049 }
2050 }
2051
2052 function intervalToPrettyString(interval, num, unit) {
2053 if (typeof num === 'number') {
2054 var str = toPrettyString(num);
2055 str += '-' + toPrettyString(num + interval);
2056 str += (unit ? '<span class="rhs">&nbsp;</span>' + unit : '');
2057 return str;
2058 } else {
2059 return num;
2060 }
2061 }
2062
2063 function toPrettyString(num, unit) {
2064 if (typeof num === 'number') {
2065 var str;
2066 if (num <= 9999) {
2067 if (isFractional(num)) {
2068 if (isIntegral(num * 10)) {
2069 str = num.toFixed(1);
2070 } else if (isIntegral(num * 100) || num >= 100) {
2071 str = num.toFixed(2);
2072 } else {
2073 str = num.toFixed(3);
2074 if (str.slice(-1) == '0')
2075 str = str.slice(0, -1);
2076 }
2077 } else {
2078 str = num.toFixed(0);
2079 }
2080 } else {
2081 str = num.toFixed(0).replace(/(\d)(?=(\d\d\d)+(?!\d))/g,'$1<span class="hs"></span>');
2082 }
2083 str += (unit ? '<span class="rhs">&nbsp;</span>' + unit : '');
2084 return str;
2085 } else {
2086 return num;
2087 }
2088 }
2089
2090 //elif isinstance(value, float):
2091 // if value == 0.0:
2092 // return '0'
2093 // if human_readable:
2094 // if unit == '%':
2095 // value *= 100
2096 // precision = 2
2097 // for i in range(10, 1, -1):
2098 // if abs(value) < 1./(10**i):
2099 // precision = i + 1
2100 // break
2101 // return '{value:.{precision}f}{unit_str}'.format(**locals())
2102 // else:
2103 // return str(value)
2104
2105
2106 function refToPrettyString(num, refs) {
2107 return refs[Math.round(num)-1];
2108 }
2109
2110 function ordinalNumberToPrettyString(num, unit, tickX) {
2111 num = num * tickX;
2112 var numStr = num.toString();
2113 var lastDigit = numStr[numStr.length-1];
2114 var beforeLastDigit = numStr[numStr.length-2];
2115
2116 var res = toPrettyString(num);
2117
2118 if (lastDigit == '1' && beforeLastDigit != '1') {
2119 res += "st";
2120 } else if (lastDigit == '2' && beforeLastDigit != '1') {
2121 res += "nd";
2122 } else if (lastDigit == '3' && beforeLastDigit != '1') {
2123 res += "rd";
2124 } else {
2125 res += 'th';
2126 }
2127
2128 res += (unit ? '<span class="rhs">&nbsp;</span>' + unit : '');
2129
2130 return res;
2131 }
2132
2133 function frcNumberToPrettyString(num, unit, tickX, index) {
2134 if (index % 2 == 0 && num > 0) num--;
2135 return toPrettyString(num) + ' ' + unit;
2136 }
2137
2138 function getMaxDecimalTick(maxY) {
2139 var maxYTick = maxY;
2140 if (maxY <= 100000000000) {
2141 maxYTick = Math.ceil((maxY+1)/10000000000)*10000000000;
2142 } if (maxY <= 10000000000) {
2143 maxYTick = Math.ceil((maxY+1)/1000000000)*1000000000;
2144 } if (maxY <= 1000000000) {
2145 maxYTick = Math.ceil((maxY+1)/100000000)*100000000;
2146 } if (maxY <= 100000000) {
2147 maxYTick = Math.ceil((maxY+1)/10000000)*10000000;
2148 } if (maxY <= 10000000) {
2149 maxYTick = Math.ceil((maxY+1)/1000000)*1000000;
2150 } if (maxY <= 1000000) {
2151 maxYTick = Math.ceil((maxY+1)/100000)*100000;
2152 } if (maxY <= 100000) {
2153 maxYTick = Math.ceil((maxY+1)/10000)*10000;
2154 } if (maxY <= 10000) {
2155 maxYTick = Math.ceil((maxY+1)/1000)*1000;
2156 } if (maxY <= 1000) {
2157 maxYTick = Math.ceil((maxY+1)/100)*100.
2158 } if (maxY <= 100) {
2159 maxYTick = Math.ceil((maxY+1)/10)*10.
2160 }
2161 return maxYTick;
2162 }
2163
2164 function getBpTickFormatter(maxY, additionalText) {
2165 additionalText = additionalText || '';
2166
2167 return function(val, axis) {
2168 var res;
2169 if (val == 0) {
2170 res = 0;
2171
2172 } else if (axis.max >= 1000000) {
2173 res = val / 1000000;
2174
2175 if (val > axis.max - 1 || val + axis.tickSize >= 1000000000) {
2176 res = additionalText + toPrettyString(res, 'Mbp');
2177 } else {
2178 res = toPrettyString(res);
2179 }
2180 } else if (axis.max >= 1000) {
2181 res = val / 1000;
2182
2183 if (val > axis.max - 1 || val + axis.tickSize >= 1000000) {
2184 res = additionalText + toPrettyString(res, 'kbp');
2185 } else {
2186 res = toPrettyString(res);
2187 }
2188 } else if (axis.max >= 1) {
2189 res = val;
2190
2191 if (val > axis.max - 1 || val + axis.tickSize >= 1000) {
2192 res = additionalText + toPrettyString(res, 'bp');
2193 } else {
2194 res = toPrettyString(res);
2195 }
2196 }
2197 return res;
2198 }
2199 }
2200
2201 function windowsTickFormatter(v, axis) {
2202 return toPrettyString(v);
2203 // var val = v.toFixed(0);
2204 // if (!gc.yAxisLabeled && val > gc.maxY) {
2205 // gc.yAxisLabeled = true;
2206 // var res = val + ' window';
2207 // if (val > 1) {
2208 // res += 's'
2209 // }
2210 // return res;
2211 // } else {
2212 // return val;
2213 // }
2214 }
2215
2216 function getBpLogTickFormatter(maxY) {
2217 return getBpTickFormatter(maxY);
2218 }
2219
2220 function getContigNumberTickFormatter(maxX, tickX) {
2221 return function (val, axis) {
2222 if (typeof axis.tickSize == 'number' && val > maxX - axis.tickSize) {
2223 return "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" + ordinalNumberToPrettyString(val, 'contig', tickX);
2224 } else {
2225 return val * tickX;
2226 }
2227 }
2228 }
2229
2230 function getJustNumberTickFormatter(maxY, additionalText) {
2231 return function (val, axis) {
2232 additionalText = additionalText || '';
2233 if (val > axis.max - axis.tickSize) {
2234 res = toPrettyString(val) + additionalText;
2235 } else {
2236 res = toPrettyString(val);
2237 }
2238 return res;
2239 }
2240 }
2241
2242 function getPercentTickFormatter(maxY, additionalText) {
2243 return function (val, axis) {
2244 additionalText = additionalText || '';
2245 if (val > maxY + 1 || val == 100) {
2246 res = additionalText + toPrettyString(val, '%');
2247 } else {
2248 res = toPrettyString(val);
2249 }
2250 return res;
2251 }
2252 }
2253
2254 function trim(str) {
2255 return str.replace(/^\s+/g, '');
2256 }
2257
2258 function initial_spaces_to_nbsp(str, metricName) {
2259 if (metricName.length > 0 && metricName[0] == ' ') {
2260 str = '&nbsp;&nbsp;&nbsp;' + str;
2261 }
2262 return str;
2263 }
2264
2265 function containsObject(obj, list) {
2266 var i;
2267 for (i = 0; i < list.length; i++) {
2268 if (list[i] === obj) {
2269 return true;
2270 }
2271 }
2272
2273 return false;
2274 }
2275
2276 function addLegendClickEvents(info, numLegendItems, showPlotWithInfo, showReference, index) {
2277 if (showReference) numLegendItems++;
2278 for (var i = 0; i < numLegendItems; i++) {
2279 $('#legend-placeholder input[name=' + i + ']').click(function() {
2280 showPlotWithInfo(info, index);
2281 });
2282 }
2283 }
2284
2285 /*********************/
2286 /* GLOSSARY TOOLTIPS */
2287 function addTooltipIfDefinitionExists(glossary, metricName) {
2288 metricName = trim(metricName);
2289
2290 if (containsObject(metricName, Object.keys(glossary))) {
2291 return '<a class="tooltip-link" rel="tooltip" title="' +
2292 metricName + ' ' + glossary[metricName] + '">' + metricName + '</a>';
2293 } else {
2294 return metricName;
2295 }
2296 }
2297
2298 /*************/
2299 /* PLOT TIPS */
2300 function bindTip(placeholder, series, plot, xToPrettyStringFunction, tickX, xUnit, position, summaryPlots, unitY) {
2301 var prevPoint = null;
2302 var prevIndex = null;
2303
2304 $(placeholder).bind("plothover", function(event, pos, item) {
2305 if (dragTable && dragTable.isDragging)
2306 return;
2307
2308 if (item) {
2309 if (prevPoint != item.dataIndex || (summaryPlots && item.seriesIndex != prevIndex)) {
2310 prevPoint = item.dataIndex;
2311 prevIndex = item.seriesIndex;
2312 var x = item.datapoint[0];
2313
2314 showTip(item.pageX, item.pageY, plot.offset(),
2315 plot.width(), plot.height(),
2316 series, item.seriesIndex, x, item.dataIndex,
2317 xToPrettyStringFunction(x, xUnit, tickX, item.dataIndex) + ':',
2318 position, summaryPlots, unitY);
2319 }
2320 } else {
2321 $('#plot_tip').hide();
2322 $('#plot_tip_vertical_rule').hide();
2323 $('#plot_tip_horizontal_rule').hide();
2324 prevPoint = null;
2325 }
2326 });
2327 }
2328
2329 function unBindTips(placeholder) {
2330 $(placeholder).unbind("plothover");
2331 }
2332
2333 var tipElementExists = false;
2334 function showTip(pageX, pageY, offset, plotWidth, plotHeight,
2335 series, centralSeriesIndex, xPos, xIndex, xStr, position, summaryPlots, unitY) {
2336 const LINE_HEIGHT = 16; // pixels
2337
2338 position = ((position != null) ? position : 'bottom right');
2339 // pageY -= LINE_HEIGHT * (centralSeriesIndex + 1.5);
2340
2341 var directions = position.split(' ');
2342
2343 if (!tipElementExists) {
2344 $('<div id="plot_tip" class="white_stroked"></div>').appendTo('body');
2345
2346 $('<div id="plot_tip_vertical_rule"></div>').css({
2347 height: plotHeight,
2348 }).appendTo('body');
2349
2350 $('<div id="plot_tip_horizontal_rule"></div>').css({
2351 width: plotWidth,
2352 }).appendTo('body');
2353
2354 tipElementExists = true;
2355 }
2356
2357 $('#plot_tip').html('').css({
2358 top: pageY + 5 - ((directions[0] == 'top') ? LINE_HEIGHT * (series.length + 2) : 0),
2359 left: pageX + 10,
2360 }).show();
2361
2362 $('#plot_tip_vertical_rule').html('').css({
2363 top: offset.top,
2364 left: pageX,
2365 }).show();
2366
2367 $('#plot_tip_horizontal_rule').html('').css({
2368 top: pageY,
2369 left: offset.left,
2370 }).show();
2371
2372 $('<div>' + xStr + '</div>').css({
2373 height: LINE_HEIGHT,
2374 }).appendTo('#plot_tip');
2375
2376 var sortedYsAndColors = [];
2377 for (var i = 0; i < series.length; i++) {
2378 if (!summaryPlots || (summaryPlots && series[i].data[xIndex] != undefined && series[i].data[xIndex][1] != null)) {
2379 sortedYsAndColors.push({
2380 y: summaryPlots ? series[i].data[xIndex][1] : (i == centralSeriesIndex ? (series[i].data[xIndex] || series[i].data[series[i].data.length - 1])[1] :
2381 findNearestPoint(series[i].data, xPos)),
2382 color: series[i].color,
2383 label: (series[i].isReference ? 'Reference' : series[i].label),
2384 isCurrent: i == centralSeriesIndex,
2385 });
2386 }
2387 }
2388 sortedYsAndColors.sort(function(a, b) { return a.y < b.y;});
2389
2390 for (i = 0; i < sortedYsAndColors.length; i++) {
2391 var item = sortedYsAndColors[i];
2392
2393 $('<div id="tip_line' + i + '">' + toPrettyString(item.y) + (unitY ? unitY : '') +
2394 ', <span style="color: ' + item.color + ';">' + item.label + '</span></div>').css({
2395 height: LINE_HEIGHT,
2396 "font-weight": item.isCurrent ? "bold" : "normal",
2397 }).appendTo('#plot_tip');
2398 }
2399 }
2400
2401 function findNearestPoint(points, x) {
2402 for (var i = 0; i < points.length; i++) {
2403 if (points[i][0] >= x) return points[i][1];
2404 }
2405 return points[points.length-1][1]
2406 }
2407
2408 function addLabelToLegend(idx, label, selectedLabels, colors, link) {
2409 var isChecked = (selectedLabels.length > 0 && selectedLabels.indexOf(idx.toString())) != -1 ? 'checked="checked"' : "";
2410 $('#legend-placeholder').append('<div>' +
2411 '<label for="' + label + '" style="color: ' + colors[idx] + '">' +
2412 '<input type="checkbox" name="' + idx + '"' + isChecked + ' id="' + label + '">&nbsp;' + label + '</label>' +
2413 (link ? '<br>' + link : '') + '</div>');
2414 }
2415
2416 function getSelectedAssemblies(labels) {
2417 var selectedAssemblies = [];
2418 var labelsMatch = false;
2419 var legendLabels = [];
2420 $('#legend-placeholder input[type="checkbox"]').each(function() {
2421 legendLabels.push($(this).attr('id'));
2422 });
2423 if (labels.every(function(label, i) { return ($.inArray(label, legendLabels) != -1 || label == 'reference')}) ) {
2424 labelsMatch = true;
2425 }
2426 if (labelsMatch) {
2427 $('#legend-placeholder input:checked[type="checkbox"]').each(function() {
2428 selectedAssemblies.push($(this).attr('name'));
2429 });
2430 }
2431 else {
2432 selectedAssemblies = Array.apply(null, {length: labels}).map(Number.call, Number);
2433 }
2434 return selectedAssemblies;
2435 }
2436
2437 // Cookie functions based on http://www.quirksmode.org/js/cookies.html
2438 // Cookies won't work for local files.
2439
2440 var createCookie = function(name, value, days) {
2441 var expires = '';
2442 if (days) {
2443 var date = new Date();
2444 date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
2445 expires = '; expires=' + date.toGMTString();
2446 }
2447 var path = document.location.pathname;
2448 document.cookie = name + '=' + value + expires + '; path=' + path;
2449 };
2450
2451 var readCookie = function(name) {
2452 var nameEQ = name + '=';
2453 var ca = document.cookie.split(';');
2454 for(var i = 0; i < ca.length; i++) {
2455 var c = ca[i];
2456 while (c.charAt(0) == ' ') {
2457 c = c.substring(1, c.length);
2458 }
2459 if (c.indexOf(nameEQ) == 0) {
2460 return c.substring(nameEQ.length, c.length);
2461 }
2462 }
2463 return null;
2464 };
2465
2466 var eraseCookie = function(name) {
2467 createCookie(name, '', -1);
2468 };
2469
2470
2471 // Dean's forEach: http://dean.edwards.name/base/forEach.js
2472 /*forEach, version 1.0
2473 Copyright 2006, Dean Edwards
2474 License: http://www.opensource.org/licenses/mit-license.php */
2475
2476 // array-like enumeration
2477 if (!Array.forEach) { // mozilla already supports this
2478 Array.forEach = function(array, block, context) {
2479 for (var i = 0; i < array.length; i++) {
2480 block.call(context, array[i], i, array);
2481 }
2482 };
2483 }
2484
2485 // generic enumeration
2486 Function.prototype.forEach = function(object, block, context) {
2487 for (var key in object) {
2488 if (typeof this.prototype[key] == "undefined") {
2489 block.call(context, object[key], key, object);
2490 }
2491 }
2492 };
2493
2494 // character enumeration
2495 String.forEach = function(string, block, context) {
2496 Array.forEach(string.split(""), function(chr, index) {
2497 block.call(context, chr, index, string);
2498 });
2499 };
2500
2501 // globally resolve forEach enumeration
2502 var forEach = function(object, block, context) {
2503 if (object) {
2504 if (object instanceof Function) { // functions have a "length" property
2505 Function.forEach(object, block, context);
2506
2507 } else if (object.each instanceof Function) { // jQuery
2508 object.each(function(i, elt) {
2509 block(elt);
2510 }, context);
2511
2512 } else if (object.forEach instanceof Function) { // the object implements a custom forEach method
2513 object.forEach(block, context);
2514
2515 } else if (typeof object == "string") { // a string
2516 String.forEach(object, block, context);
2517
2518 } else if (typeof object.length == "number") { // array-like object
2519 Array.forEach(object, block, context);
2520
2521 } else {
2522 Object.forEach(object, block, context);
2523 }
2524 }
2525 };
2526
2527
2528 jQuery.fn.exists = function(){
2529 return jQuery(this).length > 0;
2530 };
2531
2532
2533 function Range(from, to) {
2534 var r = [];
2535 for (var i = from; i < to; i++) {
2536 r.push(i);
2537 }
2538 return r;
2539 }
2540
2541
2542
2543 </script>
2544
2545 <script type="text/javascript">
2546 /**
2547 * HSV to RGB color conversion
2548 *
2549 * H runs from 0 to 360 degrees
2550 * S and V run from 0 to 100
2551 *
2552 * Ported from the excellent java algorithm by Eugene Vishnevsky at:
2553 * http://www.cs.rit.edu/~ncs/color/t_convert.html
2554 */
2555 function hsvToRgb(h, s, v) {
2556 var r, g, b;
2557 var i;
2558 var f, p, q, t;
2559
2560 // Make sure our arguments stay in-range
2561 h = Math.max(0, Math.min(360, h));
2562 s = Math.max(0, Math.min(100, s));
2563 v = Math.max(0, Math.min(100, v));
2564
2565 // We accept saturation and value arguments from 0 to 100 because that's
2566 // how Photoshop represents those values. Internally, however, the
2567 // saturation and value are calculated from a range of 0 to 1. We make
2568 // That conversion here.
2569 s /= 100;
2570 v /= 100;
2571
2572 if(s == 0) {
2573 // Achromatic (grey)
2574 r = g = b = v;
2575 return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];
2576 }
2577
2578 h /= 60; // sector 0 to 5
2579 i = Math.floor(h);
2580 f = h - i; // factorial part of h
2581 p = v * (1 - s);
2582 q = v * (1 - s * f);
2583 t = v * (1 - s * (1 - f));
2584
2585 switch(i) {
2586 case 0:
2587 r = v;
2588 g = t;
2589 b = p;
2590 break;
2591
2592 case 1:
2593 r = q;
2594 g = v;
2595 b = p;
2596 break;
2597
2598 case 2:
2599 r = p;
2600 g = v;
2601 b = t;
2602 break;
2603
2604 case 3:
2605 r = p;
2606 g = q;
2607 b = v;
2608 break;
2609
2610 case 4:
2611 r = t;
2612 g = p;
2613 b = v;
2614 break;
2615
2616 default: // case 5:
2617 r = v;
2618 g = p;
2619 b = q;
2620 }
2621
2622 return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];
2623 }
2624
2625 function hslToRgb(h, s, l){
2626 var r, g, b;
2627
2628 if(s == 0) {
2629 r = g = b = l; // achromatic
2630 } else {
2631 function hue2rgb(p, q, t){
2632 if(t < 0) t += 1;
2633 if(t > 1) t -= 1;
2634 if(t < 1/6) return p + (q - p) * 6 * t;
2635 if(t < 1/2) return q;
2636 if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;
2637 return p;
2638 }
2639
2640 var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
2641 var p = 2 * l - q;
2642 r = hue2rgb(p, q, h + 1/3);
2643 g = hue2rgb(p, q, h);
2644 b = hue2rgb(p, q, h - 1/3);
2645 }
2646
2647 return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];
2648 }
2649 </script>
2650
2651 <script type="text/javascript">
2652
2653 var gns = {
2654 features: {
2655 isInitialized: false,
2656
2657 maxY: 0,
2658 maxYTick: 0,
2659 series: null,
2660 showWithData: null,
2661
2662 yAxisLabeled: false
2663 },
2664
2665 operons: {
2666 isInitialized: false,
2667
2668 maxY: 0,
2669 maxYTick: 0,
2670 series: null,
2671 showWithData: null,
2672
2673 yAxisLabeled: false
2674 },
2675
2676 draw: function (name, title, colors, filenames, data, refFeaturesNumber, tickX,
2677 placeholder, legendPlaceholder, glossary, order, scalePlaceholder) {
2678 // div.html(
2679 // "<span class='plot-header'>" + kind[0].toUpperCase() + kind.slice(1) + "s covered</span>" +
2680 // "<div class='plot-placeholder' id='" + kind + "s-plot-placeholder'></div>"
2681 // );
2682 $(scalePlaceholder).empty();
2683
2684 var info = gns[name];
2685
2686 info.yAxisLabeled = false;
2687 var cur_filenames = data.filenames;
2688 if (!info.isInitialized) {
2689 var filesFeatureInContigs = data.filesFeatureInContigs;
2690 var kind = data.kind;
2691
2692 var plotsN = cur_filenames.length;
2693 info.series = new Array(plotsN);
2694
2695 info.maxY = 0;
2696 info.maxX = 0;
2697
2698 if (refFeaturesNumber) {
2699 info.maxY = refFeaturesNumber;
2700 }
2701
2702 for (var fi = 0; fi < plotsN; fi++) {
2703 var index = $.inArray(cur_filenames[order[fi]], filenames);
2704 var filename = filenames[index];
2705 var featureInContigs = filesFeatureInContigs[filename];
2706
2707 info.series[fi] = {
2708 data: [[0, 0]],
2709 label: filenames[index],
2710 number: index,
2711 color: colors[index]
2712 };
2713
2714 var contigNo = 0;
2715 var totalFull = 0;
2716
2717 for (var k = 0; k < featureInContigs.length; k++) {
2718 contigNo += 1;
2719 totalFull += featureInContigs[k];
2720
2721 info.series[fi].data.push([contigNo, totalFull]);
2722
2723 if (info.series[fi].data[k][1] > info.maxY) {
2724 info.maxY = info.series[fi].data[k][1];
2725 }
2726 }
2727
2728 if (featureInContigs.length > info.maxX) {
2729 info.maxX = featureInContigs.length;
2730 }
2731 }
2732
2733 for (i = 0; i < plotsN; i++) {
2734 if (typeof broken_scaffolds_labels !== undefined && $.inArray(filenames[order[i]], broken_scaffolds_labels) != -1) {
2735 info.series[i].dashes = {
2736 show: true,
2737 lineWidth: 1
2738 };
2739 }
2740 else {
2741 info.series[i].lines = {
2742 show: true,
2743 lineWidth: 1
2744 };
2745 }
2746 }
2747
2748 // for (i = 0; i < plotsN; i++) {
2749 // plotsData[i].points = {
2750 // show: true,
2751 // radius: 1,
2752 // fill: 1,
2753 // fillColor: false,
2754 // }
2755 // }
2756
2757 if (refFeaturesNumber) {
2758 info.series.push({
2759 data: [[0, refFeaturesNumber], [info.maxX, refFeaturesNumber]],
2760 label: 'reference,&nbsp;' + toPrettyString(refFeaturesNumber, 'features'),
2761 isReference: true,
2762 dashes: {
2763 show: true,
2764 lineWidth: 1
2765 },
2766 yaxis: 1,
2767 number: filenames.length,
2768 color: '#000000'
2769 });
2770
2771 colors.push('#000000');
2772 }
2773
2774 info.showWithData = function(series, colors) {
2775 var plot = $.plot(placeholder, series, {
2776 shadowSize: 0,
2777 colors: colors,
2778 legend: {
2779 container: $('useless-invisible-element-that-does-not-even-exist'),
2780 },
2781 grid: {
2782 borderWidth: 1,
2783 hoverable: true,
2784 autoHighlight: false,
2785 mouseActiveRadius: 1000,
2786 },
2787 yaxis: {
2788 min: 0,
2789 // max: info.maxY,
2790 labelWidth: 120,
2791 reserveSpace: true,
2792 lineWidth: 0.5,
2793 color: '#000',
2794 tickFormatter: function (val, axis) {
2795 // if (!info.yAxisLabeled && val > info.maxY) {
2796 // info.yAxisLabeled = true;
2797 // var res = val + ' ' + kind;
2798 // if (val > 1) {
2799 // res += 's'
2800 // }
2801 // return res;
2802 // } else {
2803 return val;
2804 // }
2805 },
2806 minTickSize: 1
2807 },
2808 xaxis: {
2809 min: 0,
2810 max: info.maxX,
2811 lineWidth: 0.5,
2812 color: '#000',
2813 tickFormatter: getContigNumberTickFormatter(info.maxX, tickX),
2814 minTickSize: tickX
2815 },
2816 });
2817
2818 var firstLabel = $('.yAxis .tickLabel').last();
2819 firstLabel.append(' ' + name);
2820
2821 bindTip(placeholder, series, plot, ordinalNumberToPrettyString, tickX, 'contig', 'bottom right');
2822 };
2823
2824 info.isInitialized = true;
2825 }
2826
2827 addLegendClickEvents(info, filenames.length, showPlotWithInfo, refFeaturesNumber);
2828
2829 showPlotWithInfo(info);
2830
2831 $('#contigs_are_ordered').show();
2832 }
2833 };
2834
2835
2836
2837 </script>
2838
2839 <script type="text/javascript">
2840 /*
2841 DT v1.0
2842 June 26, 2008
2843 Dan Vanderkam, http://danvk.org/DT/
2844 http://code.google.com/p/DT/
2845
2846 This is code was based on:
2847 - Stuart Langridge's SortTable (kryogenix.org/code/browser/sorttable)
2848 - Mike Hall's draggable class (http://www.brainjar.com/dhtml/drag/)
2849 - A discussion of permuting table columns on comp.lang.javascript
2850
2851 Licensed under the MIT license.
2852 */
2853
2854 // Here's the notice from Mike Hall's draggable script:
2855 //*****************************************************************************
2856 // Do not remove this notice.
2857 //
2858 // Copyright 2001 by Mike Hall.
2859 // See http://www.brainjar.com for terms of use.
2860 //*****************************************************************************
2861
2862 var classes = {
2863 cell_of_emptySpace: 'cell_of_empty_space',
2864 cell_of_movingTable: 'cell_of_moving_table',
2865 newTable: 'moving_table',
2866 handle: 'drag_handle',
2867 hoveredCell: 'hovered_column_td',
2868 assemblyName: 'assembly_name',
2869
2870 bottomCell_of_emptySpace: 'bottom_cell_of_empty_space',
2871 topCell_of_emptySpace: 'top_cell_of_empty_space',
2872 leftToCell_of_emptySpace: 'left_to_cell_of_empty_space',
2873 rightToCell_of_emptySpace: 'right_to_cell_of_empty_space',
2874
2875 mainReportTable_id: 'main_report_table',
2876 totalReportJson_id: 'total-report-json',
2877 };
2878
2879 var dragTable = {
2880 isDragging: false,
2881
2882 // How far should the mouse move before it's considered a drag, not a click?
2883 dragRadius2: 0, // 100,
2884 setMinDragDistance: function(x) {
2885 DT.dragRadius2 = x * x;
2886 },
2887
2888 // How long should cookies persist? (in days)
2889 cookieDays: 365,
2890 setCookieDays: function(x) {
2891 DT.cookieDays = x;
2892 },
2893
2894 // Determine browser and version.
2895 // TODO: eliminate browser sniffing except where it's really necessary.
2896 Browser: function() {
2897 var ua, s, i;
2898
2899 this.isIE = false;
2900 this.isNS = false;
2901 this.version = null;
2902 ua = navigator.userAgent;
2903
2904 s = "MSIE";
2905 if ((i = ua.indexOf(s)) >= 0) {
2906 this.isIE = true;
2907 this.version = parseFloat(ua.substr(i + s.length));
2908 return;
2909 }
2910
2911 s = "Netscape6/";
2912 if ((i = ua.indexOf(s)) >= 0) {
2913 this.isNS = true;
2914 this.version = parseFloat(ua.substr(i + s.length));
2915 return;
2916 }
2917
2918 // Treat any other "Gecko" browser as NS 6.1.
2919 s = "Gecko";
2920 if ((i = ua.indexOf(s)) >= 0) {
2921 this.isNS = true;
2922 this.version = 6.1;
2923 return;
2924 }
2925 },
2926 browser: null,
2927
2928 // Detect all draggable tables and attach handlers to their headers.
2929 init: function() {
2930 // Don't initialize twice
2931 if (arguments.callee.done)
2932 return;
2933 else
2934 arguments.callee.done = true;
2935
2936 // if (_dgtimer)
2937 // clearInterval(_dgtimer);
2938
2939 if (!document.createElement || !document.getElementsByTagName)
2940 return;
2941
2942 DT.dragObj.zIndex = 0;
2943 DT.browser = new DT.Browser();
2944 forEach(document.getElementsByTagName('table'), function(table) {
2945 if ($(table).hasClass('draggable')) {
2946 DT.makeDraggable(table);
2947 }
2948 });
2949 },
2950
2951 // The thead business is taken straight from sorttable.
2952 makeDraggable: function(table) {
2953 DT.dragObj.table = table;
2954
2955 if (table.getElementsByTagName('thead').length == 0) {
2956 thead = document.createElement('thead');
2957 thead.appendChild(table.rows[0]);
2958 table.insertBefore(thead, table.firstChild);
2959 }
2960
2961 // Safari doesn't support table.tHead, sigh
2962 if (table.tHead == null) {
2963 table.tHead = table.getElementsByTagName('thead')[0];
2964 }
2965
2966 var handles = $('.' + classes.handle) || table.tHead.rows[0].cells;
2967
2968 forEach(handles, function(handle) {
2969 handle.onmousedown = DT.dragStart;
2970 });
2971 },
2972
2973 // Global object to hold drag information.
2974 dragObj: {},
2975
2976 getEventPosition: function(event) {
2977 var x, y;
2978 if (DT.browser.isIE) {
2979 x = window.event.clientX + document.documentElement.scrollLeft
2980 + document.body.scrollLeft;
2981 y = window.event.clientY + document.documentElement.scrollTop
2982 + document.body.scrollTop;
2983 return {x: x, y: y};
2984 }
2985 return {x: event.pageX, y: event.pageY};
2986 },
2987
2988 // Determine the position of this element on the page. Many thanks to Magnus
2989 // Kristiansen for help making this work with "position: fixed" elements.
2990 getPositionOnThePage: function(elt, stopAtRelative) {
2991 var ex = 0, ey = 0;
2992 do {
2993 var curStyle = DT.browser.isIE ? elt.currentStyle
2994 : window.getComputedStyle(elt, '');
2995 var supportFixed = !(DT.browser.isIE &&
2996 DT.browser.version < 7);
2997 if (stopAtRelative && curStyle.position == 'relative') {
2998 break;
2999 } else if (supportFixed && curStyle.position == 'fixed') {
3000 // Get the fixed el's offset
3001 ex += parseInt(curStyle.left, 10);
3002 ey += parseInt(curStyle.top, 10);
3003 // Compensate for scrolling
3004 ex += document.body.scrollLeft;
3005 ey += document.body.scrollTop;
3006 // End the loop
3007 break;
3008 } else {
3009 ex += elt.offsetLeft;
3010 ey += elt.offsetTop;
3011 }
3012 } while (elt = elt.offsetParent);
3013 return {x: ex, y: ey};
3014 },
3015
3016 // MouseDown handler -- sets up the appropriate mousemove/mouseup handlers
3017 // and fills in the global DT.dragObj object.
3018 dragStart: function(event, id) {
3019 DT.isDragging = true;
3020
3021 var drag_obj = DT.dragObj;
3022
3023 var browser = DT.browser;
3024 var clicked_node = browser.isIE ? window.event.srcElement : event.target;
3025 var pos = DT.getEventPosition(event);
3026
3027 var table = $(clicked_node).closest('table')[0];
3028 var top_cell = $(clicked_node).closest('td, th')[0];
3029 drag_obj.topCell = top_cell;
3030 drag_obj.table = table;
3031
3032 var col_index = top_cell.cellIndex;
3033 drag_obj.movingColIndex = drag_obj.startIndex = col_index;
3034 drag_obj.movingColWidth = $(top_cell).width();
3035
3036 // Since a column header can't be dragged directly, duplicate its contents
3037 // in a div and drag that instead.
3038 var new_table = DT.fullCopy(table, false);
3039
3040 // Copy the entire column
3041 var forEachSection = function(table, func) {
3042 if (table.tHead) {
3043 func(table.tHead);
3044 }
3045 forEach(table.tBodies, function(tbody) {
3046 func(tbody);
3047 });
3048 if (table.tFoot) {
3049 func(table.tFoot);
3050 }
3051 };
3052
3053 forEachSection(table, function(sec) {
3054 var new_sec = DT.fullCopy(sec, false);
3055
3056 forEach(sec.rows, function(row) {
3057 var cell = row.cells[col_index];
3058 var new_tr = DT.fullCopy(row, false);
3059 if (row.offsetHeight) new_tr.style.height = row.offsetHeight + "px";
3060 var new_td = DT.fullCopy(cell, true);
3061 if (cell.offsetWidth) new_td.style.width = cell.offsetWidth + "px !important";
3062 new_tr.appendChild(new_td);
3063 new_sec.appendChild(new_tr);
3064 });
3065
3066 new_table.appendChild(new_sec);
3067 });
3068
3069 var obj_pos = DT.getPositionOnThePage(top_cell, true);
3070 new_table.style.position = "absolute";
3071 new_table.style.left = obj_pos.x + "px";
3072 new_table.style.top = obj_pos.y + "px";
3073 // new_table.style.width = dragObj.origNode.offsetWidth + "px";
3074 // new_table.style.height = dragObj.origNode.offsetHeight + "px";
3075
3076 // Hold off adding the element until this is clearly a drag.
3077 drag_obj.addedNode = false;
3078
3079 drag_obj.tableContainer = drag_obj.table.parentNode || document.body;
3080 drag_obj.newTable = new_table;
3081
3082 // Save starting positions of cursor and element.
3083 drag_obj.startPos = pos;
3084 drag_obj.prevPos = pos;
3085 drag_obj.elStartLeft = parseInt(drag_obj.newTable.style.left, 10);
3086 drag_obj.elStartTop = parseInt(drag_obj.newTable.style.top, 10);
3087
3088 if (isNaN(drag_obj.elStartLeft)) drag_obj.elStartLeft = 0;
3089 if (isNaN(drag_obj.elStartTop)) drag_obj.elStartTop = 0;
3090
3091 // Update element's z-index.
3092 drag_obj.newTable.style.zIndex = ++drag_obj.zIndex;
3093
3094 // Capture mousemove and mouseup events on the page.
3095 if (browser.isIE) {
3096 document.attachEvent("onmousemove", DT.dragMove);
3097 document.attachEvent("onmouseup", DT.dragEnd);
3098 window.event.cancelBubble = true;
3099 window.event.returnValue = false;
3100 } else {
3101 document.addEventListener("mousemove", DT.dragMove, true);
3102 document.addEventListener("mouseup", DT.dragEnd, true);
3103 event.preventDefault();
3104 }
3105 },
3106
3107 // Move the floating column header with the mouse
3108 // TODO: Reorder columns as the mouse moves for a more interactive feel.
3109 dragMove: function(event) {
3110 var x, y;
3111 var drag_obj = DT.dragObj;
3112 var col_index = drag_obj.movingColIndex;
3113
3114 // Get cursor position with respect to the page.
3115 var pos = DT.getEventPosition(event);
3116
3117 var full_dx = drag_obj.startPos.x - pos.x;
3118 var full_dy = drag_obj.startPos.y - pos.y;
3119
3120 if (!drag_obj.addedNode && full_dx * full_dx + full_dy * full_dy > DT.dragRadius2) {
3121 // Real dragging has began, the following block performs once
3122
3123 // Attach a moving table
3124 drag_obj.tableContainer.insertBefore(drag_obj.newTable, drag_obj.table);
3125 drag_obj.addedNode = true;
3126
3127 // Add classes for the dragged column (original and the clone)
3128 $(drag_obj.newTable).addClass(classes.newTable);
3129 $(DT.getColumn(drag_obj.newTable)).addClass(classes.cell_of_movingTable);
3130
3131 $(DT.getColumn(drag_obj.table, col_index)).addClass(classes.cell_of_emptySpace);
3132 $(DT.getColumn(drag_obj.table, col_index)[0]).addClass(classes.topCell_of_emptySpace);
3133 var visibleCells = $(DT.getColumn(drag_obj.table, col_index)).filter(':visible');
3134 $(visibleCells[visibleCells.length - 1]).addClass(classes.bottomCell_of_emptySpace);
3135
3136 DT.addStylesForAdjacentColumns(col_index);
3137 }
3138
3139 // Move drag element by the same amount the cursor has moved.
3140 var style = drag_obj.newTable.style;
3141 style.left = (drag_obj.elStartLeft + pos.x - drag_obj.startPos.x) + "px";
3142 style.top = (drag_obj.elStartTop + pos.y - drag_obj.startPos.y) + "px";
3143
3144 if (DT.browser.isIE) {
3145 window.event.cancelBubble = true;
3146 window.event.returnValue = false;
3147 } else {
3148 event.preventDefault();
3149 }
3150
3151 // If moving over an adjacent column, do swapping, swapping with the adjacent column
3152 var column_pos_x = DT.getPositionOnThePage(DT.getColumn(drag_obj.newTable)[0]).x;
3153 var column_center_x = column_pos_x + drag_obj.movingColWidth / 2;
3154 var hovered_col_index = DT.getColumnAtPosition(drag_obj.table, column_center_x);
3155
3156 var dx = drag_obj.prevPos.x - pos.x;
3157
3158 if (DT.isSuitableColumnToSwap(hovered_col_index, col_index)) {
3159 if (dx < 0 && hovered_col_index > col_index || // moving right
3160 dx > 0 && hovered_col_index < col_index) { // moving left
3161 DT.removeStylesForAdjacentColumns(col_index);
3162 DT.moveColumn(drag_obj.table, col_index, hovered_col_index);
3163 DT.addStylesForAdjacentColumns(hovered_col_index);
3164 drag_obj.movingColIndex = hovered_col_index;
3165 }
3166 }
3167 drag_obj.prevPos = pos;
3168 },
3169
3170 removeStylesForAdjacentColumns: function(oldIndex) {
3171 var table = DT.dragObj.table;
3172 var rows = table.rows;
3173 var oldColumn = DT.getColumn(table, oldIndex);
3174 $(DT.getColumn(table, oldIndex - 1)).removeClass(classes.leftToCell_of_emptySpace);
3175 $(DT.getColumn(table, oldIndex + 1)).removeClass(classes.rightToCell_of_emptySpace);
3176 },
3177
3178 addStylesForAdjacentColumns: function(index) {
3179 var table = DT.dragObj.table;
3180 var rows = table.rows;
3181 var column = DT.getColumn(table, index);
3182 $(DT.getColumn(table, index - 1)).addClass(classes.leftToCell_of_emptySpace);
3183 $(DT.getColumn(table, index + 1)).addClass(classes.rightToCell_of_emptySpace);
3184 },
3185
3186 // Stop capturing mousemove and mouseup events.
3187 // Determine which (if any) column we're over and shuffle the table.
3188 dragEnd: function(event) {
3189 if (DT.browser.isIE) {
3190 document.detachEvent("onmousemove", DT.dragMove);
3191 document.detachEvent("onmouseup", DT.dragEnd);
3192 } else {
3193 document.removeEventListener("mousemove", DT.dragMove, true);
3194 document.removeEventListener("mouseup", DT.dragEnd, true);
3195 }
3196
3197 var drag_obj = DT.dragObj;
3198 var col_index = drag_obj.movingColIndex;
3199
3200 // If the floating header wasn't added, the mouse didn't move far enough.
3201 if (drag_obj.addedNode) {
3202 // TODO: Move with animation
3203 var final_pos = DT.getPositionOnThePage(DT.getColumn(drag_obj.table, col_index)[0]);
3204
3205 $(drag_obj.newTable).animate({
3206 left: final_pos.x,
3207 top: final_pos.y,
3208 }, 'fast', function() {
3209 $(drag_obj.newTable).remove();
3210 $(DT.getColumn(drag_obj.table, col_index)).removeClass(classes.cell_of_emptySpace);
3211 $(DT.getColumn(drag_obj.table, col_index)[0]).removeClass(classes.topCell_of_emptySpace);
3212 var visibleCells = $(DT.getColumn(drag_obj.table, col_index)).filter(':visible');
3213 $(visibleCells[visibleCells.length - 1]).removeClass(classes.bottomCell_of_emptySpace);
3214
3215 DT.removeStylesForAdjacentColumns(col_index);
3216 });
3217
3218 DT.storeDrag(drag_obj.table);
3219 }
3220 DT.isDragging = false;
3221 },
3222
3223 moveColumn: function(table, index, nextIndex) {
3224 forEach(table.rows, function(row) {
3225 var startCell = $(row.cells[index]);
3226 var finishCell = $(row.cells[nextIndex]);
3227
3228 // startCell.animate({
3229 // left: finishCell.offset().left,
3230 // }, 'slow', function() {
3231 if (nextIndex > index) {
3232 startCell.before(finishCell);
3233 } else {
3234 startCell.after(finishCell);
3235 }
3236 // });
3237 });
3238 },
3239
3240 // clone an element, copying its style and class.
3241 fullCopy: function(elt, deep) {
3242 if (!elt) {
3243 return null;
3244 }
3245 var new_elt = elt.cloneNode(deep);
3246 new_elt.className = elt.className;
3247 $(new_elt).addClass('clone');
3248 forEach(elt.style, function(value, key, object) {
3249 if (value == null) return;
3250 if (typeof(value) == "string" && value.length == 0) return;
3251
3252 new_elt.style[key] = elt.style[key];
3253 });
3254 return new_elt;
3255 },
3256
3257 getColumn: function(table, index) {
3258 index = typeof index !== 'undefined' ? index : 0;
3259
3260 if (index < 0 || index >= table.rows[0].cells.length) {
3261 return [];
3262
3263 } else {
3264 var column = [];
3265 forEach(table.rows, function(row) {
3266 column.push(row.cells[index]);
3267 });
3268 return column;
3269 }
3270 },
3271
3272 isSuitableColumnToSwap: function(targetIndex, movingColIndex) {
3273 if (targetIndex != -1) {
3274 if (typeof movingColIndex === 'undefined' || targetIndex != movingColIndex) { // check if equals the moving one
3275 var top_cell = $(DT.getColumn(DT.dragObj.table, targetIndex)[0]);
3276 if (top_cell.find('.' + classes.handle).addBack('.' + classes.handle).exists()) {
3277 return true;
3278 }
3279 }
3280 }
3281 return false;
3282 },
3283
3284 // Which column does the x value fall inside of? x should include scrollLeft.
3285 getColumnAtPosition: function(table, x) {
3286 var header = table.tHead.rows[0].cells;
3287 for (var i = 0; i < header.length; i++) {
3288 //var left = header[i].offsetLeft;
3289 var pos = DT.getPositionOnThePage(header[i]);
3290 //if (left <= x && x <= left + header[i].offsetWidth) {
3291 var px = pos.x;
3292 var ow = header[i].offsetWidth;
3293 var xpow = pos.x + header[i].offsetWidth;
3294 if (pos.x <= x && x <= pos.x + header[i].offsetWidth) {
3295 return i;
3296 }
3297 }
3298 return -1;
3299 },
3300
3301 // Store a column swap in a cookie for posterity.
3302 storeDrag: function(table) {
3303 var order = [];
3304 forEach(table.rows[0].cells, function(cell) {
3305 var pos = cell.getAttribute('position');
3306 if (pos)
3307 order.push(pos);
3308 });
3309
3310 var order_string = order[0];
3311 for (var i = 1; i < order.length; i++)
3312 order_string += ' ' + order[i];
3313
3314 DT.storeInCookies(order_string);
3315 DT.sendOrderToServer(order_string);
3316 },
3317
3318 storeInCookies: function(string) {
3319 if (navigator.cookieEnabled) {
3320 var cookieName = 'order';
3321 createCookie(cookieName, string, DT.cookieDays);
3322 }
3323 },
3324
3325 sendOrderToServer: function(string) {
3326 if (document.reportId) {
3327 $.ajax({
3328 type: 'GET',
3329 url: '/reorder-report-columns',
3330 dataType: 'json',
3331 data: {
3332 reportId: document.reportId,
3333 order: string,
3334 },
3335 });
3336 }
3337 },
3338 };
3339
3340 var DT = dragTable;
3341
3342 /* ******************************************************************
3343 Supporting functions: bundled here to avoid depending on a library
3344 ****************************************************************** */
3345
3346
3347 //// Dean Edwards/Matthias Miller/John Resig
3348 //// has a hook for DT.init already been added? (see below)
3349 //var dgListenOnLoad = false;
3350 //
3351 ///* for Mozilla/Opera9 */
3352 //if (document.addEventListener) {
3353 // dgListenOnLoad = true;
3354 // document.addEventListener("DOMContentLoaded", DT.init, false);
3355 //}
3356 //
3357 ///* for Internet Explorer */
3358 ///*@cc_on @*/
3359 ///*@if (@_win32)
3360 // dgListenOnLoad = true;
3361 // document.write("<script id=__dt_onload defer src=//0)><\/script>");
3362 // var script = document.getElementById("__dt_onload");
3363 // script.onreadystatechange = function() {
3364 // if (this.readyState == "complete") {
3365 // DT.init(); // call the onload handler
3366 // }
3367 // };
3368 ///*@end @*/
3369 //
3370 ///* for Safari */
3371 //if (/WebKit/i.test(navigator.userAgent)) { // sniff
3372 // dgListenOnLoad = true;
3373 // var _dgtimer = setInterval(function() {
3374 // if (/loaded|complete/.test(document.readyState)) {
3375 // DT.init(); // call the onload handler
3376 // }
3377 // }, 10);
3378 //}
3379 //
3380 ///* for other browsers */
3381 ///* Avoid this unless it's absolutely necessary (it breaks sorttable) */
3382 //if (!dgListenOnLoad) {
3383 // window.onload = DT.init;
3384 //}
3385
3386 </script>
3387
3388 <script type="text/javascript">
3389 /*! HTML5 Shiv vpre3.6 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
3390 Uncompressed source: https://github.com/aFarkas/html5shiv */
3391 (function(a,b){function h(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function i(){var a=l.elements;return typeof a=="string"?a.split(" "):a}function j(a){var b={},c=a.createElement,f=a.createDocumentFragment,g=f();a.createElement=function(a){if(!l.shivMethods)return c(a);var f;return b[a]?f=b[a].cloneNode():e.test(a)?f=(b[a]=c(a)).cloneNode():f=c(a),f.canHaveChildren&&!d.test(a)?g.appendChild(f):f},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+i().join().replace(/\w+/g,function(a){return c(a),g.createElement(a),'c("'+a+'")'})+");return n}")(l,g)}function k(a){var b;return a.documentShived?a:(l.shivCSS&&!f&&(b=!!h(a,"article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio{display:none}canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden]{display:none}audio[controls]{display:inline-block;*display:inline;*zoom:1}mark{background:#FF0;color:#000}")),g||(b=!j(a)),b&&(a.documentShived=b),a)}var c=a.html5||{},d=/^<|^(?:button|form|map|select|textarea|object|iframe|option|optgroup)$/i,e=/^<|^(?:a|b|button|code|div|fieldset|form|h1|h2|h3|h4|h5|h6|i|iframe|img|input|label|li|link|ol|option|p|param|q|script|select|span|strong|style|table|tbody|td|textarea|tfoot|th|thead|tr|ul)$/i,f,g;(function(){var c=b.createElement("a");c.innerHTML="<xyz></xyz>",f="hidden"in c,f&&typeof injectElementWithStyles=="function"&&injectElementWithStyles("#modernizr{}",function(b){b.hidden=!0,f=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle).display=="none"}),g=c.childNodes.length==1||function(){try{b.createElement("a")}catch(a){return!0}var c=b.createDocumentFragment();return typeof c.cloneNode=="undefined"||typeof c.createDocumentFragment=="undefined"||typeof c.createElement=="undefined"}()})();var l={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:c.shivCSS!==!1,shivMethods:c.shivMethods!==!1,type:"default",shivDocument:k};a.html5=l,k(b)})(this,document)
3392 </script>
3393
3394 <script type="text/javascript">
3395 /**
3396 * Bootstrap.js by @fat & @mdo
3397 * plugins: bootstrap-tooltip.js
3398 * Copyright 2012 Twitter, Inc.
3399 * http://www.apache.org/licenses/LICENSE-2.0.txt
3400 */
3401 !function(a){var b=function(a,b){this.init("tooltip",a,b)};b.prototype={constructor:b,init:function(b,c,d){var e,f;this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.enabled=!0,this.options.trigger!="manual"&&(e=this.options.trigger=="hover"?"mouseenter":"focus",f=this.options.trigger=="hover"?"mouseleave":"blur",this.$element.on(e,this.options.selector,a.proxy(this.enter,this)),this.$element.on(f,this.options.selector,a.proxy(this.leave,this))),this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},getOptions:function(b){return b=a.extend({},a.fn[this.type].defaults,b,this.$element.data()),b.delay&&typeof b.delay=="number"&&(b.delay={show:b.delay,hide:b.delay}),b},enter:function(b){var c=a(b.currentTarget)[this.type](this._options).data(this.type);if(!c.options.delay||!c.options.delay.show)return c.show();clearTimeout(this.timeout),c.hoverState="in",this.timeout=setTimeout(function(){c.hoverState=="in"&&c.show()},c.options.delay.show)},leave:function(b){var c=a(b.currentTarget)[this.type](this._options).data(this.type);this.timeout&&clearTimeout(this.timeout);if(!c.options.delay||!c.options.delay.hide)return c.hide();c.hoverState="out",this.timeout=setTimeout(function(){c.hoverState=="out"&&c.hide()},c.options.delay.hide)},show:function(){var a,b,c,d,e,f,g;if(this.hasContent()&&this.enabled){a=this.tip(),this.setContent(),this.options.animation&&a.addClass("fade"),f=typeof this.options.placement=="function"?this.options.placement.call(this,a[0],this.$element[0]):this.options.placement,b=/in/.test(f),a.remove().css({top:0,left:0,display:"block"}).appendTo(b?this.$element:document.body),c=this.getPosition(b),d=a[0].offsetWidth,e=a[0].offsetHeight;switch(b?f.split(" ")[1]:f){case"bottom":g={top:c.top+c.height,left:c.left+c.width/2-d/2};break;case"top":g={top:c.top-e+4,left:c.left+c.width/2-d/2};break;case"left":g={top:c.top+c.height/2-e/2,left:c.left-d};break;case"right":g={top:c.top+c.height/2-e/2,left:c.left+c.width}}a.css(g).addClass(f).addClass("in")}},isHTML:function(a){return typeof a!="string"||a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3||/^(?:[^<]*<[\w\W]+>[^>]*$)/.exec(a)},setContent:function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.isHTML(b)?"html":"text"](b),a.removeClass("fade in top bottom left right")},hide:function(){function d(){var b=setTimeout(function(){c.off(a.support.transition.end).remove()},500);c.one(a.support.transition.end,function(){clearTimeout(b),c.remove()})}var b=this,c=this.tip();c.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d():c.remove()},fixTitle:function(){var a=this.$element;(a.attr("title")||typeof a.attr("data-original-title")!="string")&&a.attr("data-original-title",a.attr("title")||"").removeAttr("title")},hasContent:function(){return this.getTitle()},getPosition:function(b){return a.extend({},b?{top:0,left:0}:this.$element.offset(),{width:this.$element[0].offsetWidth,height:this.$element[0].offsetHeight})},getTitle:function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||(typeof c.title=="function"?c.title.call(b[0]):c.title),a},tip:function(){return this.$tip=this.$tip||a(this.options.template)},validate:function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},toggleEnabled:function(){this.enabled=!this.enabled},toggle:function(){this[this.tip().hasClass("in")?"hide":"show"]()}},a.fn.tooltip=function(c){return this.each(function(){var d=a(this),e=d.data("tooltip"),f=typeof c=="object"&&c;e||d.data("tooltip",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.tooltip.Constructor=b,a.fn.tooltip.defaults={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover",title:"",delay:0}}(window.jQuery)
3402 </script>
3403
3404 <script type="text/javascript">
3405 /*!
3406 * Bootstrap.js by @fat & @mdo
3407 * Copyright 2012 Twitter, Inc.
3408 * http://www.apache.org/licenses/LICENSE-2.0.txt
3409 */
3410 !function(a){a(function(){"use strict",a.support.transition=function(){var a=function(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd",msTransition:"MSTransitionEnd",transition:"transitionend"},c;for(c in b)if(a.style[c]!==undefined)return b[c]}();return a&&{end:a}}()})}(window.jQuery),!function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function f(){e.trigger("closed").remove()}var c=a(this),d=c.attr("data-target"),e;d||(d=c.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),e=a(d),b&&b.preventDefault(),e.length||(e=c.hasClass("alert")?c:c.parent()),e.trigger(b=a.Event("close"));if(b.isDefaultPrevented())return;e.removeClass("in"),a.support.transition&&e.hasClass("fade")?e.on(a.support.transition.end,f):f()},a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("alert");e||d.data("alert",e=new c(this)),typeof b=="string"&&e[b].call(d)})},a.fn.alert.Constructor=c,a(function(){a("body").on("click.alert.data-api",b,c.prototype.close)})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.button.defaults,c)};b.prototype.setState=function(a){var b="disabled",c=this.$element,d=c.data(),e=c.is("input")?"val":"html";a+="Text",d.resetText||c.data("resetText",c[e]()),c[e](d[a]||this.options[a]),setTimeout(function(){a=="loadingText"?c.addClass(b).attr(b,b):c.removeClass(b).removeAttr(b)},0)},b.prototype.toggle=function(){var a=this.$element.parent('[data-toggle="buttons-radio"]');a&&a.find(".active").removeClass("active"),this.$element.toggleClass("active")},a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("button"),f=typeof c=="object"&&c;e||d.data("button",e=new b(this,f)),c=="toggle"?e.toggle():c&&e.setState(c)})},a.fn.button.defaults={loadingText:"loading..."},a.fn.button.Constructor=b,a(function(){a("body").on("click.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle")})})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=c,this.options.slide&&this.slide(this.options.slide),this.options.pause=="hover"&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.prototype={cycle:function(b){return b||(this.paused=!1),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},to:function(b){var c=this.$element.find(".active"),d=c.parent().children(),e=d.index(c),f=this;if(b>d.length-1||b<0)return;return this.sliding?this.$element.one("slid",function(){f.to(b)}):e==b?this.pause().cycle():this.slide(b>e?"next":"prev",a(d[b]))},pause:function(a){return a||(this.paused=!0),clearInterval(this.interval),this.interval=null,this},next:function(){if(this.sliding)return;return this.slide("next")},prev:function(){if(this.sliding)return;return this.slide("prev")},slide:function(b,c){var d=this.$element.find(".active"),e=c||d[b](),f=this.interval,g=b=="next"?"left":"right",h=b=="next"?"first":"last",i=this,j=a.Event("slide");this.sliding=!0,f&&this.pause(),e=e.length?e:this.$element.find(".item")[h]();if(e.hasClass("active"))return;if(a.support.transition&&this.$element.hasClass("slide")){this.$element.trigger(j);if(j.isDefaultPrevented())return;e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),this.$element.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid")},0)})}else{this.$element.trigger(j);if(j.isDefaultPrevented())return;d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return f&&this.cycle(),this}},a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("carousel"),f=a.extend({},a.fn.carousel.defaults,typeof c=="object"&&c);e||d.data("carousel",e=new b(this,f)),typeof c=="number"?e.to(c):typeof c=="string"||(c=f.slide)?e[c]():f.interval&&e.cycle()})},a.fn.carousel.defaults={interval:5e3,pause:"hover"},a.fn.carousel.Constructor=b,a(function(){a("body").on("click.carousel.data-api","[data-slide]",function(b){var c=a(this),d,e=a(c.attr("data-target")||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,"")),f=!e.data("modal")&&a.extend({},e.data(),c.data());e.carousel(f),b.preventDefault()})})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.collapse.defaults,c),this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.prototype={constructor:b,dimension:function(){var a=this.$element.hasClass("width");return a?"width":"height"},show:function(){var b,c,d,e;if(this.transitioning)return;b=this.dimension(),c=a.camelCase(["scroll",b].join("-")),d=this.$parent&&this.$parent.find("> .accordion-group > .in");if(d&&d.length){e=d.data("collapse");if(e&&e.transitioning)return;d.collapse("hide"),e||d.data("collapse",null)}this.$element[b](0),this.transition("addClass",a.Event("show"),"shown"),this.$element[b](this.$element[0][c])},hide:function(){var b;if(this.transitioning)return;b=this.dimension(),this.reset(this.$element[b]()),this.transition("removeClass",a.Event("hide"),"hidden"),this.$element[b](0)},reset:function(a){var b=this.dimension();return this.$element.removeClass("collapse")[b](a||"auto")[0].offsetWidth,this.$element[a!==null?"addClass":"removeClass"]("collapse"),this},transition:function(b,c,d){var e=this,f=function(){c.type=="show"&&e.reset(),e.transitioning=0,e.$element.trigger(d)};this.$element.trigger(c);if(c.isDefaultPrevented())return;this.transitioning=1,this.$element[b]("in"),a.support.transition&&this.$element.hasClass("collapse")?this.$element.one(a.support.transition.end,f):f()},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"]()}},a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("collapse"),f=typeof c=="object"&&c;e||d.data("collapse",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.collapse.defaults={toggle:!0},a.fn.collapse.Constructor=b,a(function(){a("body").on("click.collapse.data-api","[data-toggle=collapse]",function(b){var c=a(this),d,e=c.attr("data-target")||b.preventDefault()||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),f=a(e).data("collapse")?"toggle":c.data();a(e).collapse(f)})})}(window.jQuery),!function(a){function d(){a(b).parent().removeClass("open")}"use strict";var b='[data-toggle="dropdown"]',c=function(b){var c=a(b).on("click.dropdown.data-api",this.toggle);a("html").on("click.dropdown.data-api",function(){c.parent().removeClass("open")})};c.prototype={constructor:c,toggle:function(b){var c=a(this),e,f,g;if(c.is(".disabled, :disabled"))return;return f=c.attr("data-target"),f||(f=c.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,"")),e=a(f),e.length||(e=c.parent()),g=e.hasClass("open"),d(),g||e.toggleClass("open"),!1}},a.fn.dropdown=function(b){return this.each(function(){var d=a(this),e=d.data("dropdown");e||d.data("dropdown",e=new c(this)),typeof b=="string"&&e[b].call(d)})},a.fn.dropdown.Constructor=c,a(function(){a("html").on("click.dropdown.data-api",d),a("body").on("click.dropdown",".dropdown form",function(a){a.stopPropagation()}).on("click.dropdown.data-api",b,c.prototype.toggle)})}(window.jQuery),!function(a){function c(){var b=this,c=setTimeout(function(){b.$element.off(a.support.transition.end),d.call(b)},500);this.$element.one(a.support.transition.end,function(){clearTimeout(c),d.call(b)})}function d(a){this.$element.hide().trigger("hidden"),e.call(this)}function e(b){var c=this,d=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var e=a.support.transition&&d;this.$backdrop=a('<div class="modal-backdrop '+d+'" />').appendTo(document.body),this.options.backdrop!="static"&&this.$backdrop.click(a.proxy(this.hide,this)),e&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),e?this.$backdrop.one(a.support.transition.end,b):b()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(a.support.transition.end,a.proxy(f,this)):f.call(this)):b&&b()}function f(){this.$backdrop.remove(),this.$backdrop=null}function g(){var b=this;this.isShown&&this.options.keyboard?a(document).on("keyup.dismiss.modal",function(a){a.which==27&&b.hide()}):this.isShown||a(document).off("keyup.dismiss.modal")}"use strict";var b=function(b,c){this.options=c,this.$element=a(b).delegate('[data-dismiss="modal"]',"click.dismiss.modal",a.proxy(this.hide,this))};b.prototype={constructor:b,toggle:function(){return this[this.isShown?"hide":"show"]()},show:function(){var b=this,c=a.Event("show");this.$element.trigger(c);if(this.isShown||c.isDefaultPrevented())return;a("body").addClass("modal-open"),this.isShown=!0,g.call(this),e.call(this,function(){var c=a.support.transition&&b.$element.hasClass("fade");b.$element.parent().length||b.$element.appendTo(document.body),b.$element.show(),c&&b.$element[0].offsetWidth,b.$element.addClass("in"),c?b.$element.one(a.support.transition.end,function(){b.$element.trigger("shown")}):b.$element.trigger("shown")})},hide:function(b){b&&b.preventDefault();var e=this;b=a.Event("hide"),this.$element.trigger(b);if(!this.isShown||b.isDefaultPrevented())return;this.isShown=!1,a("body").removeClass("modal-open"),g.call(this),this.$element.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?c.call(this):d.call(this)}},a.fn.modal=function(c){return this.each(function(){var d=a(this),e=d.data("modal"),f=a.extend({},a.fn.modal.defaults,d.data(),typeof c=="object"&&c);e||d.data("modal",e=new b(this,f)),typeof c=="string"?e[c]():f.show&&e.show()})},a.fn.modal.defaults={backdrop:!0,keyboard:!0,show:!0},a.fn.modal.Constructor=b,a(function(){a("body").on("click.modal.data-api",'[data-toggle="modal"]',function(b){var c=a(this),d,e=a(c.attr("data-target")||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,"")),f=e.data("modal")?"toggle":a.extend({},e.data(),c.data());b.preventDefault(),e.modal(f)})})}(window.jQuery),!function(a){"use strict";var b=function(a,b){this.init("tooltip",a,b)};b.prototype={constructor:b,init:function(b,c,d){var e,f;this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.enabled=!0,this.options.trigger!="manual"&&(e=this.options.trigger=="hover"?"mouseenter":"focus",f=this.options.trigger=="hover"?"mouseleave":"blur",this.$element.on(e,this.options.selector,a.proxy(this.enter,this)),this.$element.on(f,this.options.selector,a.proxy(this.leave,this))),this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},getOptions:function(b){return b=a.extend({},a.fn[this.type].defaults,b,this.$element.data()),b.delay&&typeof b.delay=="number"&&(b.delay={show:b.delay,hide:b.delay}),b},enter:function(b){var c=a(b.currentTarget)[this.type](this._options).data(this.type);if(!c.options.delay||!c.options.delay.show)return c.show();clearTimeout(this.timeout),c.hoverState="in",this.timeout=setTimeout(function(){c.hoverState=="in"&&c.show()},c.options.delay.show)},leave:function(b){var c=a(b.currentTarget)[this.type](this._options).data(this.type);this.timeout&&clearTimeout(this.timeout);if(!c.options.delay||!c.options.delay.hide)return c.hide();c.hoverState="out",this.timeout=setTimeout(function(){c.hoverState=="out"&&c.hide()},c.options.delay.hide)},show:function(){var a,b,c,d,e,f,g;if(this.hasContent()&&this.enabled){a=this.tip(),this.setContent(),this.options.animation&&a.addClass("fade"),f=typeof this.options.placement=="function"?this.options.placement.call(this,a[0],this.$element[0]):this.options.placement,b=/in/.test(f),a.remove().css({top:0,left:0,display:"block"}).appendTo(b?this.$element:document.body),c=this.getPosition(b),d=a[0].offsetWidth,e=a[0].offsetHeight;switch(b?f.split(" ")[1]:f){case"bottom":g={top:c.top+c.height,left:c.left+c.width/2-d/2};break;case"top":g={top:c.top-e,left:c.left+c.width/2-d/2};break;case"left":g={top:c.top+c.height/2-e/2,left:c.left-d};break;case"right":g={top:c.top+c.height/2-e/2,left:c.left+c.width}}a.css(g).addClass(f).addClass("in")}},isHTML:function(a){return typeof a!="string"||a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3||/^(?:[^<]*<[\w\W]+>[^>]*$)/.exec(a)},setContent:function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.isHTML(b)?"html":"text"](b),a.removeClass("fade in top bottom left right")},hide:function(){function d(){var b=setTimeout(function(){c.off(a.support.transition.end).remove()},500);c.one(a.support.transition.end,function(){clearTimeout(b),c.remove()})}var b=this,c=this.tip();c.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d():c.remove()},fixTitle:function(){var a=this.$element;(a.attr("title")||typeof a.attr("data-original-title")!="string")&&a.attr("data-original-title",a.attr("title")||"").removeAttr("title")},hasContent:function(){return this.getTitle()},getPosition:function(b){return a.extend({},b?{top:0,left:0}:this.$element.offset(),{width:this.$element[0].offsetWidth,height:this.$element[0].offsetHeight})},getTitle:function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||(typeof c.title=="function"?c.title.call(b[0]):c.title),a},tip:function(){return this.$tip=this.$tip||a(this.options.template)},validate:function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},toggleEnabled:function(){this.enabled=!this.enabled},toggle:function(){this[this.tip().hasClass("in")?"hide":"show"]()}},a.fn.tooltip=function(c){return this.each(function(){var d=a(this),e=d.data("tooltip"),f=typeof c=="object"&&c;e||d.data("tooltip",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.tooltip.Constructor=b,a.fn.tooltip.defaults={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover",title:"",delay:0}}(window.jQuery),!function(a){"use strict";var b=function(a,b){this.init("popover",a,b)};b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype,{constructor:b,setContent:function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.isHTML(b)?"html":"text"](b),a.find(".popover-content > *")[this.isHTML(c)?"html":"text"](c),a.removeClass("fade top bottom left right in")},hasContent:function(){return this.getTitle()||this.getContent()},getContent:function(){var a,b=this.$element,c=this.options;return a=b.attr("data-content")||(typeof c.content=="function"?c.content.call(b[0]):c.content),a},tip:function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip}}),a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("popover"),f=typeof c=="object"&&c;e||d.data("popover",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.popover.Constructor=b,a.fn.popover.defaults=a.extend({},a.fn.tooltip.defaults,{placement:"right",content:"",template:'<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>'})}(window.jQuery),!function(a){function b(b,c){var d=a.proxy(this.process,this),e=a(b).is("body")?a(window):a(b),f;this.options=a.extend({},a.fn.scrollspy.defaults,c),this.$scrollElement=e.on("scroll.scroll.data-api",d),this.selector=(this.options.target||(f=a(b).attr("href"))&&f.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.$body=a("body"),this.refresh(),this.process()}"use strict",b.prototype={constructor:b,refresh:function(){var b=this,c;this.offsets=a([]),this.targets=a([]),c=this.$body.find(this.selector).map(function(){var b=a(this),c=b.data("target")||b.attr("href"),d=/^#\w/.test(c)&&a(c);return d&&c.length&&[[d.position().top,c]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},process:function(){var a=this.$scrollElement.scrollTop()+this.options.offset,b=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,c=b-this.$scrollElement.height(),d=this.offsets,e=this.targets,f=this.activeTarget,g;if(a>=c)return f!=(g=e.last()[0])&&this.activate(g);for(g=d.length;g--;)f!=e[g]&&a>=d[g]&&(!d[g+1]||a<=d[g+1])&&this.activate(e[g])},activate:function(b){var c,d;this.activeTarget=b,a(this.selector).parent(".active").removeClass("active"),d=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',c=a(d).parent("li").addClass("active"),c.parent(".dropdown-menu")&&(c=c.closest("li.dropdown").addClass("active")),c.trigger("activate")}},a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("scrollspy"),f=typeof c=="object"&&c;e||d.data("scrollspy",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.defaults={offset:10},a(function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(window.jQuery),!function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype={constructor:b,show:function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.attr("data-target"),e,f,g;d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,""));if(b.parent("li").hasClass("active"))return;e=c.find(".active a").last()[0],g=a.Event("show",{relatedTarget:e}),b.trigger(g);if(g.isDefaultPrevented())return;f=a(d),this.activate(b.parent("li"),c),this.activate(f,f.parent(),function(){b.trigger({type:"shown",relatedTarget:e})})},activate:function(b,c,d){function g(){e.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),f?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var e=c.find("> .active"),f=d&&a.support.transition&&e.hasClass("fade");f?e.one(a.support.transition.end,g):g(),e.removeClass("in")}},a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("tab");e||d.data("tab",e=new b(this)),typeof c=="string"&&e[c]()})},a.fn.tab.Constructor=b,a(function(){a("body").on("click.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.typeahead.defaults,c),this.matcher=this.options.matcher||this.matcher,this.sorter=this.options.sorter||this.sorter,this.highlighter=this.options.highlighter||this.highlighter,this.updater=this.options.updater||this.updater,this.$menu=a(this.options.menu).appendTo("body"),this.source=this.options.source,this.shown=!1,this.listen()};b.prototype={constructor:b,select:function(){var a=this.$menu.find(".active").attr("data-value");return this.$element.val(this.updater(a)).change(),this.hide()},updater:function(a){return a},show:function(){var b=a.extend({},this.$element.offset(),{height:this.$element[0].offsetHeight});return this.$menu.css({top:b.top+b.height,left:b.left}),this.$menu.show(),this.shown=!0,this},hide:function(){return this.$menu.hide(),this.shown=!1,this},lookup:function(b){var c=this,d,e;return this.query=this.$element.val(),this.query?(d=a.grep(this.source,function(a){return c.matcher(a)}),d=this.sorter(d),d.length?this.render(d.slice(0,this.options.items)).show():this.shown?this.hide():this):this.shown?this.hide():this},matcher:function(a){return~a.toLowerCase().indexOf(this.query.toLowerCase())},sorter:function(a){var b=[],c=[],d=[],e;while(e=a.shift())e.toLowerCase().indexOf(this.query.toLowerCase())?~e.indexOf(this.query)?c.push(e):d.push(e):b.push(e);return b.concat(c,d)},highlighter:function(a){var b=this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&");return a.replace(new RegExp("("+b+")","ig"),function(a,b){return"<strong>"+b+"</strong>"})},render:function(b){var c=this;return b=a(b).map(function(b,d){return b=a(c.options.item).attr("data-value",d),b.find("a").html(c.highlighter(d)),b[0]}),b.first().addClass("active"),this.$menu.html(b),this},next:function(b){var c=this.$menu.find(".active").removeClass("active"),d=c.next();d.length||(d=a(this.$menu.find("li")[0])),d.addClass("active")},prev:function(a){var b=this.$menu.find(".active").removeClass("active"),c=b.prev();c.length||(c=this.$menu.find("li").last()),c.addClass("active")},listen:function(){this.$element.on("blur",a.proxy(this.blur,this)).on("keypress",a.proxy(this.keypress,this)).on("keyup",a.proxy(this.keyup,this)),(a.browser.webkit||a.browser.msie)&&this.$element.on("keydown",a.proxy(this.keypress,this)),this.$menu.on("click",a.proxy(this.click,this)).on("mouseenter","li",a.proxy(this.mouseenter,this))},keyup:function(a){switch(a.keyCode){case 40:case 38:break;case 9:case 13:if(!this.shown)return;this.select();break;case 27:if(!this.shown)return;this.hide();break;default:this.lookup()}a.stopPropagation(),a.preventDefault()},keypress:function(a){if(!this.shown)return;switch(a.keyCode){case 9:case 13:case 27:a.preventDefault();break;case 38:if(a.type!="keydown")break;a.preventDefault(),this.prev();break;case 40:if(a.type!="keydown")break;a.preventDefault(),this.next()}a.stopPropagation()},blur:function(a){var b=this;setTimeout(function(){b.hide()},150)},click:function(a){a.stopPropagation(),a.preventDefault(),this.select()},mouseenter:function(b){this.$menu.find(".active").removeClass("active"),a(b.currentTarget).addClass("active")}},a.fn.typeahead=function(c){return this.each(function(){var d=a(this),e=d.data("typeahead"),f=typeof c=="object"&&c;e||d.data("typeahead",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.typeahead.defaults={source:[],items:8,menu:'<ul class="typeahead dropdown-menu"></ul>',item:'<li><a href="#"></a></li>'},a.fn.typeahead.Constructor=b,a(function(){a("body").on("focus.typeahead.data-api",'[data-provide="typeahead"]',function(b){var c=a(this);if(c.data("typeahead"))return;b.preventDefault(),c.typeahead(c.data())})})}(window.jQuery);
3411 </script>
3412
3413 <script type="text/javascript">
3414 /* ===========================================================
3415 * bootstrap-tooltip.js v2.0.4
3416 * http://twitter.github.com/bootstrap/javascript.html#tooltips
3417 * Inspired by the original jQuery.tipsy by Jason Frame
3418 * ===========================================================
3419 * Copyright 2012 Twitter, Inc.
3420 *
3421 * Licensed under the Apache License, Version 2.0 (the "License");
3422 * you may not use this file except in compliance with the License.
3423 * You may obtain a copy of the License at
3424 *
3425 * http://www.apache.org/licenses/LICENSE-2.0
3426 *
3427 * Unless required by applicable law or agreed to in writing, software
3428 * distributed under the License is distributed on an "AS IS" BASIS,
3429 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3430 * See the License for the specific language governing permissions and
3431 * limitations under the License.
3432 * ========================================================== */
3433
3434
3435 !function ($) {
3436
3437 "use strict"; // jshint ;_;
3438
3439
3440 /* TOOLTIP PUBLIC CLASS DEFINITION
3441 * =============================== */
3442
3443 var Tooltip = function (element, options) {
3444 this.init('tooltip', element, options)
3445 };
3446
3447 Tooltip.prototype = {
3448
3449 constructor: Tooltip
3450
3451 , init: function (type, element, options) {
3452 var eventIn
3453 , eventOut;
3454
3455 this.type = type;
3456 this.$element = $(element);
3457 this.options = this.getOptions(options);
3458 this.enabled = true;
3459
3460 if (this.options.trigger != 'manual') {
3461 eventIn = this.options.trigger == 'hover' ? 'mouseenter' : 'focus';
3462 eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur';
3463 this.$element.on(eventIn, this.options.selector, $.proxy(this.enter, this));
3464 this.$element.on(eventOut, this.options.selector, $.proxy(this.leave, this));
3465 }
3466
3467 this.options.selector ?
3468 (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
3469 this.fixTitle();
3470 }
3471
3472 , getOptions: function (options) {
3473 options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data())
3474
3475 if (options.delay && typeof options.delay == 'number') {
3476 options.delay = {
3477 show: options.delay
3478 , hide: options.delay
3479 };
3480 }
3481
3482 return options;
3483 }
3484
3485 , enter: function (e) {
3486 if (dragTable && dragTable.isDragging)
3487 return;
3488
3489 var self = $(e.currentTarget)[this.type](this._options).data(this.type);
3490
3491 if (!self.options.delay || !self.options.delay.show) self.show();
3492
3493 clearTimeout(this.timeout);
3494 self.hoverState = 'in';
3495 this.timeout = setTimeout(
3496 function() { if (self.hoverState == 'in') self.show(); },
3497 self.options.delay.show
3498 );
3499 }
3500
3501 , leave: function (e) {
3502 var self = $(e.currentTarget)[this.type](this._options).data(this.type);
3503
3504 if (this.timeout) clearTimeout(this.timeout);
3505 if (!self.options.delay || !self.options.delay.hide) self.hide();
3506
3507 self.hoverState = 'out';
3508 this.timeout = setTimeout(
3509 function() { if (self.hoverState == 'out') self.hide() },
3510 self.options.delay.hide
3511 );
3512 }
3513
3514 , show: function () {
3515 var $tip
3516 , inside
3517 , pos
3518 , actualWidth
3519 , actualHeight
3520 , placement
3521 , tp;
3522
3523 if (this.hasContent() && this.enabled) {
3524 $tip = this.tip();
3525 this.setContent();
3526
3527 if (this.options.animation) {
3528 $tip.addClass('fade');
3529 }
3530
3531 placement = typeof this.options.placement == 'function' ?
3532 this.options.placement.call(this, $tip[0], this.$element[0]) :
3533 this.options.placement;
3534
3535 inside = /in/.test(placement);
3536
3537 $tip
3538 .remove()
3539 .css({ top: 0, left: 0, display: 'block' })
3540 .appendTo(inside ? this.$element : document.body);
3541
3542 pos = this.getPosition(inside);
3543
3544 actualWidth = $tip[0].offsetWidth;
3545 actualHeight = $tip[0].offsetHeight;
3546
3547 switch (inside ? placement.split(' ')[1] : placement) {
3548 case 'bottom':
3549 tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2};
3550 break;
3551 case 'top': // modificated by Vlad Saveliev: +4px to top position
3552 tp = {top: pos.top - actualHeight + 4, left: pos.left + pos.width / 2 - actualWidth / 2};
3553 break;
3554 case 'left':
3555 tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth};
3556 break;
3557 case 'right':
3558 tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width};
3559 break;
3560 }
3561
3562 $tip
3563 .css(tp)
3564 .addClass(placement)
3565 .addClass('in');
3566 }
3567 }
3568
3569 , isHTML: function(text) {
3570 // html string detection logic adapted from jQuery
3571 return typeof text != 'string'
3572 || ( text.charAt(0) === "<"
3573 && text.charAt( text.length - 1 ) === ">"
3574 && text.length >= 3
3575 ) || /^(?:[^<]*<[\w\W]+>[^>]*$)/.exec(text);
3576 }
3577
3578 , setContent: function () {
3579 var $tip = this.tip()
3580 , title = this.getTitle();
3581
3582 $tip.find('.tooltip-inner')[this.isHTML(title) ? 'html' : 'text'](title);
3583 $tip.removeClass('fade in top bottom left right');
3584 }
3585
3586 , hide: function () {
3587 var that = this
3588 , $tip = this.tip();
3589
3590 $tip.removeClass('in');
3591
3592 function removeWithAnimation() {
3593 var timeout = setTimeout(function () {
3594 $tip.off($.support.transition.end).remove()
3595 }, 500);
3596
3597 $tip.one($.support.transition.end, function () {
3598 clearTimeout(timeout);
3599 $tip.remove();
3600 })
3601 }
3602
3603 $.support.transition && this.$tip.hasClass('fade') ?
3604 removeWithAnimation() :
3605 $tip.remove()
3606 }
3607
3608 , fixTitle: function () {
3609 var $e = this.$element;
3610 if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
3611 $e.attr('data-original-title', $e.attr('title') || '').removeAttr('title');
3612 }
3613 }
3614
3615 , hasContent: function () {
3616 return this.getTitle();
3617 }
3618
3619 , getPosition: function (inside) {
3620 return $.extend({}, (inside ? {top: 0, left: 0} : this.$element.offset()), {
3621 width: this.$element[0].offsetWidth
3622 , height: this.$element[0].offsetHeight
3623 })
3624 }
3625
3626 , getTitle: function () {
3627 var title
3628 , $e = this.$element
3629 , o = this.options;
3630
3631 title = $e.attr('data-original-title')
3632 || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title);
3633
3634 return title;
3635 }
3636
3637 , tip: function () {
3638 return this.$tip = this.$tip || $(this.options.template);
3639 }
3640
3641 , validate: function () {
3642 if (!this.$element[0].parentNode) {
3643 this.hide();
3644 this.$element = null;
3645 this.options = null;
3646 }
3647 }
3648
3649 , enable: function () {
3650 this.enabled = true;
3651 }
3652
3653 , disable: function () {
3654 this.enabled = false;
3655 }
3656
3657 , toggleEnabled: function () {
3658 this.enabled = !this.enabled;
3659 }
3660
3661 , toggle: function () {
3662 this[this.tip().hasClass('in') ? 'hide' : 'show']();
3663 }
3664
3665 };
3666
3667
3668 /* TOOLTIP PLUGIN DEFINITION
3669 * ========================= */
3670
3671 $.fn.tooltip = function ( option ) {
3672 return this.each(function () {
3673 var $this = $(this)
3674 , data = $this.data('tooltip')
3675 , options = typeof option == 'object' && option;
3676 if (!data) $this.data('tooltip', (data = new Tooltip(this, options)));
3677 if (typeof option == 'string') data[option]();
3678 })
3679 };
3680
3681 $.fn.tooltip.Constructor = Tooltip;
3682
3683 $.fn.tooltip.defaults = {
3684 animation: true
3685 , placement: 'top'
3686 , selector: false
3687 , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
3688 , trigger: 'hover'
3689 , title: ''
3690 , delay: 0
3691 };
3692
3693 }(window.jQuery);
3694
3695 </script>
3696
3697 <script type="text/javascript">
3698 function showPlotWithInfo(info, index) {
3699 var newSeries = [];
3700 var newColors = [];
3701 var oldSeries = info.series;
3702 var usingSeries;
3703 var sortOrder;
3704 if ($("input[name=sortRefs]")[0])
3705 sortOrder = getSortOrder();
3706 if (index != undefined) {
3707 oldSeries = info.series[index];
3708 }
3709 if (sortOrder == 'alphabet') {
3710 usingSeries = [];
3711 sortedRefs = info.references.slice(0).sort();
3712 for(var i = 0; i < oldSeries.length; i++) {
3713 usingSeries.push($.extend(true, {}, oldSeries[i]));
3714 for(var j = 0; j < info.references.length; j++) {
3715 usingSeries[i].data[j][1] = oldSeries[i].data[info.references.indexOf(sortedRefs[j])][1];
3716 }
3717 }
3718 }
3719 else usingSeries = oldSeries;
3720 $('#legend-placeholder').find('input[type="checkbox"]:checked').each(function() {
3721 var number = $(this).attr('name');
3722 if (number && usingSeries && usingSeries.length > 0) {
3723 var i = 0;
3724 do {
3725 var series = usingSeries[i];
3726 i++;
3727 } while (i <= usingSeries.length && (series == null || series.number != number));
3728 //
3729 if (i <= usingSeries.length) {
3730 newSeries.push(series);
3731 newColors.push(series.color);
3732 } else {
3733 console.log('no series with number ' + number);
3734 }
3735 }
3736 });
3737 if (sortOrder) sortReferences(sortOrder, info);
3738
3739 if (newSeries.length === 0) {
3740 newSeries.push({
3741 data: []
3742 });
3743 newColors.push('#FFF');
3744 }
3745
3746 info.showWithData(newSeries, newColors);
3747 }
3748
3749 function recoverOrderFromCookies() {
3750 if (!navigator.cookieEnabled)
3751 return null;
3752
3753 var order_string = readCookie("order");
3754 if (!order_string)
3755 return null;
3756
3757 var order = [];
3758 var fail = false;
3759 forEach(order_string.split(' '), function(val) {
3760 val = parseInt(val);
3761 if (isNaN(val))
3762 fail = true;
3763 else
3764 order.push(val);
3765 });
3766
3767 if (fail)
3768 return null;
3769
3770 return order;
3771 }
3772
3773
3774 function readJson(what) {
3775 var result;
3776 try {
3777 result = JSON.parse($('#' + what + '-json').html());
3778 } catch (e) {
3779 result = null;
3780 }
3781 return result;
3782 }
3783
3784
3785 function getToggleFunction(assembliesNames, order, name, title, drawPlot, data, refPlotValue, tickX) {
3786 return function() {
3787 this.parentNode.getElementsByClassName('selected-switch')[0].className = 'plot-switch dotted-link';
3788 this.className = 'plot-switch selected-switch';
3789 togglePlots(assembliesNames, order, name, title, drawPlot, data, refPlotValue, tickX)
3790 };
3791 }
3792
3793 function togglePlots(assembliesNames, order, name, title, drawPlot, data, refPlotValue, tickX) {
3794 var plotPlaceholder = document.getElementById('plot-placeholder');
3795 var legendPlaceholder = document.getElementById('legend-placeholder');
3796 var scalePlaceholder = document.getElementById('scale-placeholder');
3797
3798 var glossary = JSON.parse($('#glossary-json').html());
3799
3800 if (name === 'cumulative') {
3801 $(plotPlaceholder).addClass('cumulative-plot-placeholder');
3802 } else {
3803 $(plotPlaceholder).removeClass('cumulative-plot-placeholder');
3804 }
3805
3806 $('#contigs_are_ordered').hide();
3807 $('#gc_info').hide();
3808 $('#gc_contigs_info').hide();
3809 $('#frc_info').hide();
3810
3811 var selectedAssemblies = getSelectedAssemblies(assembliesNames);
3812 var sortBtnClass;
3813 if ($("input[name=sortRefs]")[0]) {
3814 sortBtnClass = getSortRefsRule();
3815 }
3816 $('#legend-placeholder').empty();
3817 assembliesNames.forEach(function(filename, i) {
3818 addLabelToLegend(i, filename, selectedAssemblies, colors);
3819 });
3820 if (refPlotValue) {
3821 $('#legend-placeholder').append(
3822 '<div id="reference-label">' +
3823 '<label for="reference" style="color: #000000;">' +
3824 '<input type="checkbox" name="' + assembliesNames.length +
3825 '" checked="checked" id="reference">&nbsp;' + 'reference' +
3826 '</label>' +
3827 '</div>'
3828 );
3829 }
3830 if (sortBtnClass) {
3831 addSortRefsBtn(sortBtnClass);
3832 }
3833
3834 drawPlot(name, title, colors, assembliesNames, data, refPlotValue, tickX,
3835 plotPlaceholder, legendPlaceholder, glossary, order, scalePlaceholder);
3836 }
3837
3838 function makePlot(firstPlot, assembliesNames, order, name, title, drawPlot, data, refPlotValue, tickX) {
3839 var switchSpan = document.createElement('span');
3840 switchSpan.id = name + '-switch';
3841 switchSpan.innerHTML = title;
3842 var plotsSwitchesDiv = document.getElementById('plots-switches');
3843 plotsSwitchesDiv.appendChild(switchSpan);
3844
3845 if (firstPlot) {
3846 switchSpan.className = 'plot-switch selected-switch';
3847 togglePlots(assembliesNames, order, name, title, drawPlot, data, refPlotValue, tickX);
3848 } else {
3849 switchSpan.className = 'plot-switch dotted-link';
3850 }
3851
3852 $(switchSpan).click(getToggleFunction(assembliesNames, order, name, title, drawPlot, data, refPlotValue, tickX));
3853 }
3854 </script>
3855
3856 <script type="text/javascript">
3857 String.prototype.trunc =
3858 function(n){
3859 return this.substr(0, n-1) + (this.length > n ? '&hellip;' : '');
3860 };
3861
3862
3863 function getColor (hue, lightness) {
3864 lightness = lightness ? lightness : 92;
3865 var rgb = hslToRgb(hue / 360, 0.8, lightness / 100);
3866 return '#' + rgb[0].toString(16) + rgb[1].toString(16) + rgb[2].toString(16);
3867 }
3868
3869 function getMedian (x) {
3870 if (x.length == 0) return null;
3871 if (x.length % 2 == 1) return x[(x.length - 1) / 2];
3872 else return (x[(x.length / 2) - 1] + x[(x.length / 2)]) / 2;
3873 }
3874
3875 function toggleSecondary(event, caller) {
3876 event = event || window.event;
3877 if(event.target.nodeName == "IMG") return;
3878 if (!caller.hasClass('primary') || caller.hasClass('not_extend')) {
3879 return;
3880 }
3881 var nextRow = caller.next('.content-row');
3882 $(caller).find('.metric-name').toggleClass('collapsed').toggleClass('expanded');
3883
3884 while (!nextRow.hasClass('primary') && (nextRow.length > 0)) {
3885 nextRow.toggleClass('secondary_hidden');
3886 nextRow.find('.left_column_td').css('background-color', '#E8E8E8');
3887 nextRow = nextRow.next('.content-row');
3888 }
3889 }
3890
3891 function setUpHeatMap(table) {
3892
3893 (function () {
3894 $(function () {
3895 $('tr.group_empty').removeClass('row_hidden');
3896 });
3897 })();
3898
3899 $('#main_report').append(table);
3900 var rows = $('#main_report_table').find('.content-row');
3901 var showHeatmap = false;
3902 for (var rows_n = 0; rows_n < rows.length; rows_n++) {
3903 if ($(rows[rows_n]).find('td[number]').length > 1) {
3904 showHeatmap = true;
3905 break
3906 }
3907 }
3908
3909 if (showHeatmap) {
3910 var canvas = document.getElementById('gradientHeatmap');
3911 var context = canvas.getContext('2d');
3912 context.rect(0, 0, canvas.width, canvas.height);
3913
3914 var gradient = context.createLinearGradient(0, 0, canvas.width, canvas.height);
3915 gradient.addColorStop(0, getColor(0, 65));
3916 gradient.addColorStop(0.5, 'white');
3917 gradient.addColorStop(1, getColor(240, 65));
3918 canvas.style.border = "0px solid rgba(0, 0, 0, .1)";
3919 context.fillStyle = gradient;
3920 context.fill();
3921 $('#heatmaps_chbox').change(function(){
3922 if($(this).is(':checked')) toggleHeatMap('on');
3923 else toggleHeatMap('off');
3924 });
3925 toggleHeatMap('on');
3926 $('#heatmap_header').show();
3927 }
3928 }
3929
3930 function toggleHeatMap(state){
3931 var rows = $('#main_report_table').find('.content-row');
3932 for (var rows_n = 0; rows_n < rows.length; rows_n++) {
3933 var cells = $(rows[rows_n]).find('td[number]');
3934 if (state == 'on') {
3935 var quality = $(rows[rows_n]).attr('quality');
3936 heatMapOneRow(cells, quality);
3937 }
3938 else cells.each(function (i) {
3939 $(this).css('background', 'white');
3940 $(this).css('color', 'black');
3941 });
3942 }
3943 }
3944
3945 function heatMapOneRow (cells, quality) {
3946 if (quality == 'Equal')
3947 return;
3948 var BLUE_HUE = 240;
3949 var BLUE_OUTER_BRT = 55;
3950 var BLUE_INNER_BRT = 65;
3951
3952 var RED_HUE = 0;
3953 var RED_OUTER_BRT = 50;
3954 var RED_INNER_BRT = 60;
3955
3956 var MIN_NORMAL_BRT = 80;
3957 var MEDIAN_BRT = 100;
3958
3959 var numbers = $.map(cells, function (cell) {
3960 return parseFloat($(cell).attr('number'));
3961 });
3962
3963 var min = Math.min.apply(null, numbers);
3964 var max = Math.max.apply(null, numbers);
3965
3966 var topHue = BLUE_HUE;
3967 var lowHue = RED_HUE;
3968
3969 var innerTopBrt = BLUE_INNER_BRT;
3970 var outerTopBrt = BLUE_OUTER_BRT;
3971 var innerLowBrt = RED_INNER_BRT;
3972 var outerLowBrt = RED_OUTER_BRT;
3973
3974 if (quality == 'Less is better') {
3975 topHue = RED_HUE;
3976 lowHue = BLUE_HUE;
3977
3978 innerTopBrt = RED_INNER_BRT;
3979 outerTopBrt = RED_OUTER_BRT;
3980 innerLowBrt = BLUE_INNER_BRT;
3981 outerLowBrt = BLUE_OUTER_BRT;
3982 }
3983
3984 var twoCols = cells.length == 2;
3985
3986 if (max == min) {
3987 $(cells).css('color', MEDIAN_BRT);
3988 } else {
3989 var sortedValues = numbers.slice().sort(function(a, b) {
3990 return a - b;
3991 });
3992 var median = getMedian(sortedValues);
3993 var l = numbers.length;
3994 var q1 = sortedValues[Math.floor((l - 1) / 4)];
3995 var q3 = sortedValues[Math.floor((l - 1) * 3 / 4)];
3996
3997 var d = q3 - q1;
3998 var low_outer_fence = q1 - 3 * d;
3999 var low_inner_fence = q1 - 1.5 * d;
4000 var top_inner_fence = q3 + 1.5 * d;
4001 var top_outer_fence = q3 + 3 * d;
4002 cells.each(function (i) {
4003 var number = numbers[i];
4004 if (number < low_outer_fence) {
4005 $(this).css('background', getColor(lowHue, twoCols ? null : outerLowBrt));
4006 if (twoCols != true) $(this).css('color', 'white');
4007 }
4008 else if (number < low_inner_fence) {
4009 $(this).css('background', getColor(lowHue, twoCols ? null : innerLowBrt));
4010 }
4011 else if (number < median) {
4012 var k = (MEDIAN_BRT - MIN_NORMAL_BRT) / (median - low_inner_fence);
4013 var brt = Math.round(MEDIAN_BRT - (median - number) * k);
4014 $(this).css('background', getColor(lowHue, twoCols ? null : brt));
4015 }
4016 else if (number > top_inner_fence) {
4017 $(this).css('background', getColor(topHue, twoCols ? null : innerTopBrt));
4018 }
4019 else if (number > top_outer_fence) {
4020 $(this).css('background', getColor(topHue, twoCols ? null : outerTopBrt));
4021 if (twoCols != true) $(this).css('color', 'white');
4022 }
4023 else if (number > median) {
4024 var k = (MEDIAN_BRT - MIN_NORMAL_BRT) / (top_inner_fence - median);
4025 var brt = Math.round(MEDIAN_BRT - (number - median) * k);
4026 $(this).css('background', getColor(topHue, twoCols ? null : brt));
4027 }
4028 });
4029 }
4030 }
4031 function extendedClick() {
4032 $('.row_to_hide').toggleClass('row_hidden');
4033
4034 var link = $('#extended_report_link');
4035 if (link.html() == 'Extended report') {
4036 link.html('Short report');
4037 } else {
4038 link.html('Extended report');
4039 }
4040 }
4041
4042 function buildExtendedLinkClick() {
4043 return '<p id="extended_link"><a class="dotted-link" id="extended_report_link" onclick="extendedClick($(this))">Extended report</a></p>';
4044 }
4045
4046 function appendIcarusLinks() {
4047 if (icarusLinks = readJson('icarus')) {
4048 if (icarusLinks.links != undefined) {
4049 var links = '';
4050 for (var link_n = 0; link_n < icarusLinks.links.length; link_n++) {
4051 //links += '<a href="' + icarusLinks.links[link_n] + '">' + icarusLinks.links_names[link_n] + '</a><br>'
4052 links += '<a class="btn btn-default btn-xs" role="button" href="' + icarusLinks.links[link_n] + '">' + icarusLinks.links_names[link_n] + '</a><br>'
4053 }
4054 $('#icarus').html(links);
4055 }
4056 }
4057 }
4058
4059 </script>
4060
4061
4062 <script type="text/javascript">
4063 var colors = ["#FF0000","#0000FF"];
4064 var broken_scaffolds_labels = [];
4065 </script>
4066 <script type="text/javascript">
4067 function addRow(metric, mainMetrics, rowName, group_n, order, glossary, isExpandable, isPrimary) {
4068 (function(group_n) {
4069 var id_group = '#group_' + group_n;
4070 $(function() {
4071 $(id_group).removeClass('group_empty');
4072 });
4073 })(group_n);
4074
4075 var table = '';
4076 metricName = metric.metricName;
4077 var quality = metric.quality;
4078 var values = metric.values;
4079
4080 var trClass = 'content-row';
4081 if (metric.isMain || $.inArray(metricName, mainMetrics) > -1) {
4082 (function(group_n) {
4083 var id_group = '#group_' + group_n;
4084 $(function() {
4085 $(id_group).removeClass('row_hidden');
4086 $(id_group).removeClass('row_to_hide');
4087 });
4088 })(group_n);
4089 } else {
4090 trClass = 'content-row row_hidden row_to_hide';
4091 }
4092 var tdClass = '';
4093 if (!isPrimary) {
4094 trClass += ' secondary_hidden';
4095 tdClass = 'secondary_td';
4096 }
4097 else {
4098 trClass += ' primary';
4099 }
4100 if (isExpandable) {
4101 table +=
4102 '<tr class="' + trClass + '" quality="' + quality + '" onclick="toggleSecondary(event, $(this))">' +
4103 '<td class="left_column_td ' + tdClass + '">' +
4104 '<span class="metric-name expandable collapsed">' +
4105 initial_spaces_to_nbsp(addTooltipIfDefinitionExists(glossary, rowName.trunc(55)), metricName) +
4106 '</span></td>';
4107 }
4108 else {
4109 table +=
4110 '<tr class="' + trClass + '" quality="' + quality + '">' +
4111 '<td class="left_column_td"><span class="metric-name">' +
4112 initial_spaces_to_nbsp(addTooltipIfDefinitionExists(glossary, rowName.trunc(55)), metricName) +
4113 '</span>' +
4114 '</td>';
4115 }
4116 for (var val_n = 0; val_n < values.length; val_n++) {
4117 value = values[order[val_n]];
4118
4119 if (value === null || value === '') {
4120 table += '<td><span>-</span></td>';
4121 } else {
4122 if (typeof value === 'number') {
4123 table +=
4124 '<td number="' + value + '"><span>'
4125 + toPrettyString(value) + '</span></td>';
4126 } else {
4127 var result = /([0-9\.]+)(.*)/.exec(value);
4128 var num = parseFloat(result[1]);
4129 var rest = result[2];
4130 // alert('value = ' + value + ' result = ' + result);
4131
4132 // var num = parseFloat(value);
4133
4134 if (num !== null) {
4135 table += '<td number="' + num + '"><span>' + toPrettyString(num) + rest + '</span></td>';
4136 } else {
4137 table += '<td><span>' + value + '</span></td>';
4138 }
4139 }
4140 }
4141 }
4142 return table;
4143 }
4144
4145 function getSubRows(subReports, groupName, metricName) {
4146 rows = [];
4147 if (subReports) {
4148 for (var report_n = 0; report_n < subReports.length; report_n++) {
4149 subReport = subReports[report_n];
4150 for (var group_n = 0; group_n < subReport.length; group_n++) {
4151 if (subReport[group_n][0] != groupName)
4152 continue;
4153 metrics = subReport[group_n][1];
4154 for (var metric_n = 0; metric_n < metrics.length; metric_n++) {
4155 if (metrics[metric_n].metricName == metricName)
4156 rows.push(metrics[metric_n])
4157 }
4158 }
4159 }
4160 }
4161 return rows;
4162 }
4163
4164 function buildTotalReport(assembliesNames, totalReport, order, glossary, qualities, mainMetrics) {
4165 var report = totalReport.report,
4166 date = totalReport.date,
4167 minContig = totalReport.minContig,
4168 referenceName = totalReport.referenceName,
4169 subReports = totalReport.subreports,
4170 subReferences = totalReport.subreferences;
4171 $('#report_date').html('<p>' + date + '</p>');
4172 var extraInfo = '<p>All statistics are based on contigs of size >= ' + minContig +
4173 '<span class="rhs">&nbsp;</span>bp, unless otherwise noted (e.g., "# contigs (>= 0 bp)" and "Total length (>= 0 bp)" include all contigs).</p>';
4174 $('#extrainfo').html(extraInfo);
4175 $('#plot-caption').show();
4176
4177 var table = '';
4178 table += '<table cellspacing="0" class="report_table draggable" id="main_report_table">';
4179
4180 if (referenceName) {
4181 $('#reference_name').show().find('.val').html(referenceName);
4182 }
4183
4184 if (report[0][0] == 'Genome statistics') { // if first section is empty (no reference), swap it and w/o reference statistics
4185 var genomeMetrics = report[0][1];
4186 var isSectionEmpty = true;
4187 for (var index = 0; index < genomeMetrics.length; index++) {
4188 if (genomeMetrics[index].isMain || $.inArray(genomeMetrics[index].metric_name, mainMetrics) > -1)
4189 isSectionEmpty = false;
4190 }
4191 if (isSectionEmpty) {
4192 for (var group_n = 0; group_n < report.length; group_n++) {
4193 if (report[group_n][0] == 'Statistics without reference') {
4194 report[0] = report.splice(group_n, 1, report[0])[0];
4195 }
4196 }
4197 }
4198 }
4199
4200 for (var group_n = 0; group_n < report.length; group_n++) {
4201 var group = report[group_n];
4202 var groupName = group[0];
4203 var metrics = group[1];
4204 var width = assembliesNames.length + 1;
4205
4206 if (groupName == 'Reference statistics') {
4207 var referenceValues = {};
4208 for (var metric_n = 0; metric_n < metrics.length; metric_n++) {
4209 var metric = metrics[metric_n];
4210 var metricName = metric.metricName;
4211 var value = metric.values[0];
4212 referenceValues[metricName] = value;
4213 }
4214 var refLen = referenceValues['Reference length'];
4215 var refFragments = referenceValues['Reference fragments'];
4216 var refGC = referenceValues['Reference GC (%)'];
4217 var refFeatures = referenceValues['Reference genomic features'];
4218 var refOperons = referenceValues['Reference operons'];
4219 var refChr = referenceValues['Reference chromosomes'];
4220 var totalReads = referenceValues['# total reads'];
4221 var refMappedReads = referenceValues['Reference mapped (%)'];
4222 var refPairedReads = referenceValues['Reference properly paired (%)'];
4223 var estRefLen = referenceValues['Estimated reference length'];
4224
4225 if (refLen)
4226 $('#reference_length').show().find('.val').html(toPrettyString(refLen));
4227 else if (estRefLen)
4228 $('#est_reference_length').show().find('.val').html(toPrettyString(estRefLen));
4229 if (refFragments) {
4230 $('#reference_fragments').show().find('.val').html(refFragments);
4231 if (refFragments > 1)
4232 $('#reference_fragments').find('.plural_ending').show();
4233 }
4234 if (refGC)
4235 $('#reference_gc').show().find('.val').html(toPrettyString(refGC));
4236 if (refFeatures)
4237 $('#reference_features').show().find('.val').html(toPrettyString(refFeatures));
4238 if (refOperons)
4239 $('#reference_operons').show().find('.val').html(toPrettyString(refOperons));
4240 if (refChr) {
4241 $('#reference_chr').show().find('.val').html(refChr);
4242 if (refChr > 1)
4243 $('#reference_chr').find('.plural_ending').show();
4244 }
4245 if (totalReads)
4246 $('#total_reads').show().find('.val').html(toPrettyString(totalReads));
4247 if (refMappedReads !== undefined)
4248 $('#reference_mapped_reads').show().find('.val').html(toPrettyString(refMappedReads));
4249 if (refPairedReads !== undefined)
4250 $('#reference_paired_reads').show().find('.val').html(toPrettyString(refPairedReads));
4251 continue;
4252 }
4253
4254 if (group_n == 0) {
4255 table += '<tr class="top_row_tr"><td id="top_left_td" class="left_column_td"><span>' + groupName + '</span></td>';
4256
4257 for (var assembly_n = 0; assembly_n < assembliesNames.length; assembly_n++) {
4258 var assemblyName = assembliesNames[order[assembly_n]];
4259 if (assemblyName.length > 30) {
4260 assemblyName =
4261 '<span class="tooltip-link" rel="tooltip" title="' + assemblyName + '">' +
4262 assemblyName.trunc(30) +
4263 '</span>'
4264 }
4265
4266 table += '<td class="second_through_last_col_headers_td" position="' + order[assembly_n] + '">' +
4267 '<span class="drag_handle"><span class="drag_image"></span></span>' +
4268 '<span class="assembly_name">' + assemblyName + '</span>' +
4269 '</td>';
4270 }
4271
4272 } else {
4273 table +=
4274 '<tr class="group_header row_to_hide row_hidden group_empty" id="group_' + group_n + '">' +
4275 '<td class="left_column_td"><span>' + groupName + '</span></td>'; //colspan="' + width + '"
4276 for (var i = 1; i < width; i++) {
4277 table += '<td></td>';
4278 }
4279 table += '</tr>';
4280 }
4281
4282 for (metric_n = 0; metric_n < metrics.length; metric_n++) {
4283 isExpandable = false;
4284 isPrimary = true;
4285 metricName = metrics[metric_n].metricName;
4286 subRows = getSubRows(subReports, groupName, metricName);
4287 if (subRows && subRows.length > 0) {
4288 isExpandable = true;
4289 table += addRow(metrics[metric_n], mainMetrics, metricName, group_n, order, glossary, isExpandable, isPrimary);
4290 for (var rows_n = 0; rows_n < subRows.length; rows_n++) {
4291 isExpandable = false;
4292 isPrimary = false;
4293 table += addRow(subRows[rows_n], mainMetrics, subReferences[rows_n], group_n, order, glossary, isExpandable, isPrimary);
4294 }
4295 }
4296 else table += addRow(metrics[metric_n], mainMetrics, metricName, group_n, order, glossary, isExpandable, isPrimary);
4297 }
4298 table += '</tr>';
4299 }
4300 table += '</table>';
4301
4302 table += buildExtendedLinkClick();
4303
4304 setUpHeatMap(table);
4305 }
4306
4307 </script>
4308
4309
4310 <script type="text/javascript">
4311
4312 function buildReport() {
4313 var assembliesNames;
4314 var order;
4315
4316 var totalReport = null;
4317 var qualities = null;
4318 var mainMetrics = null;
4319 var contigsLens = null;
4320 var coordNx = null;
4321 var contigsLensNx = null;
4322 var alignedContigsLens = null;
4323 var refLengths = null;
4324 var contigs = null;
4325 var featuresInContigs = null;
4326 var operonsInContigs = null;
4327 var gcInfos = null;
4328
4329 var glossary = JSON.parse($('#glossary-json').html());
4330
4331 var plotsSwitchesDiv = document.getElementById('plots-switches');
4332 var toRemoveRefLabel = true;
4333 var firstPlot = true;
4334
4335 /****************/
4336 /* Total report */
4337
4338 if (!(totalReport = readJson('total-report'))) {
4339 console.log("Error: cannot read #total-report-json");
4340 return 1;
4341 }
4342
4343 assembliesNames = totalReport.assembliesNames;
4344
4345 order = recoverOrderFromCookies() || totalReport.order || Range(0, assembliesNames.length);
4346
4347 buildTotalReport(assembliesNames, totalReport, order, glossary, qualities, mainMetrics);
4348
4349 if (refLengths = readJson('reference-length'))
4350 refLengths = refLengths.reflen;
4351
4352 /****************/
4353 /* Plots */
4354
4355 while (assembliesNames.length > colors.length) { // colors is defined in utils.js
4356 colors = colors.concat(colors);
4357 }
4358
4359 $(plotsSwitchesDiv).html('<b>Plots:</b>');
4360
4361 var selectedAssemblies = Array.apply(null, {length: assembliesNames}).map(Number.call, Number);
4362 assembliesNames.forEach(function(filename, i) {
4363 addLabelToLegend(i, filename, selectedAssemblies, colors)
4364 });
4365
4366 var tickX = 1;
4367 if (tickX = readJson('tick-x'))
4368 tickX = tickX.tickX;
4369
4370 if (contigsLens = readJson('contigs-lengths')) {
4371 makePlot(firstPlot, assembliesNames, order, 'cumulative', 'Cumulative length', cumulative.draw, contigsLens.lists_of_lengths, refLengths, tickX);
4372 firstPlot = false;
4373 }
4374
4375 if (coordNx = readJson('coord-nx')) {
4376 makePlot(firstPlot, assembliesNames, order, 'nx', 'Nx', nx.draw, {
4377 coord_x: coordNx.coord_x,
4378 coord_y: coordNx.coord_y,
4379 filenames: coordNx.filenames
4380 },
4381 null, null
4382 );
4383 firstPlot = false;
4384 }
4385
4386 if (coordNx = readJson('coord-nax')) {
4387 makePlot(firstPlot, assembliesNames, order, 'nax', 'NAx', nx.draw, {
4388 coord_x: coordNx.coord_x,
4389 coord_y: coordNx.coord_y,
4390 filenames: coordNx.filenames
4391 },
4392 null, null
4393 );
4394 firstPlot = false;
4395 }
4396
4397 if (coordNx = readJson('coord-ngx')) {
4398 makePlot(firstPlot, assembliesNames, order, 'ngx', 'NGx', nx.draw, {
4399 coord_x: coordNx.coord_x,
4400 coord_y: coordNx.coord_y,
4401 filenames: coordNx.filenames
4402 },
4403 null, null
4404 );
4405 firstPlot = false;
4406 }
4407
4408 if (coordNx = readJson('coord-ngax')) {
4409 makePlot(firstPlot, assembliesNames, order, 'ngax', 'NGAx', nx.draw, {
4410 coord_x: coordNx.coord_x,
4411 coord_y: coordNx.coord_y,
4412 filenames: coordNx.filenames
4413 },
4414 null, null
4415 );
4416 firstPlot = false;
4417 }
4418
4419 if (coordMisassemblies = readJson('coord-misassemblies')) {
4420 makePlot(firstPlot, assembliesNames, order, 'misassemblies', 'Misassemblies', frc.draw, {
4421 coord_x: coordMisassemblies.coord_x,
4422 coord_y: coordMisassemblies.coord_y,
4423 filenames: coordMisassemblies.filenames
4424 },
4425 null, 1
4426 );
4427 firstPlot = false;
4428 }
4429
4430 featuresInContigs = readJson('features-in-contigs');
4431 operonsInContigs = readJson('operons-in-contigs');
4432 // if (genesInContigs || operonsInContigs)
4433 // contigs = readJson('contigs');
4434
4435 if (featuresInContigs) {
4436 makePlot(firstPlot, assembliesNames, order, 'features', 'Genomic features', gns.draw, {
4437 filesFeatureInContigs: featuresInContigs.features_in_contigs,
4438 kind: 'gene',
4439 filenames: featuresInContigs.filenames
4440 },
4441 featuresInContigs.ref_features_number, tickX
4442 );
4443 firstPlot = false;
4444 }
4445 if (operonsInContigs) {
4446 makePlot(firstPlot, assembliesNames, order, 'operons', 'Operons', gns.draw, {
4447 filesFeatureInContigs: operonsInContigs.operons_in_contigs,
4448 kind: 'operon',
4449 filenames: operonsInContigs.filenames
4450 },
4451 operonsInContigs.ref_operons_number, tickX
4452 );
4453 firstPlot = false;
4454 }
4455 gcInfos = readJson('gc');
4456 if (gcInfos && (gcInfos.lists_of_gc_info || gcInfos.list_of_GC_distributions)) {
4457 makePlot(firstPlot, assembliesNames, order, 'gc', 'GC content', gc.draw, gcInfos, gcInfos.reference_index);
4458 }
4459
4460 var noReference = true;
4461 var report = totalReport.report;
4462 for (var group_n = 0; group_n < report.length; group_n++) {
4463 var group = report[group_n];
4464 var groupName = group[0];
4465 if (groupName == 'Reference statistics' && group[1].length > 0) {
4466 noReference = false;
4467 }
4468 }
4469 if (noReference) extendAll();
4470 appendIcarusLinks();
4471 return 0;
4472 }
4473
4474 function extendAll() {
4475 $('.row_to_hide').toggleClass('row_hidden');
4476
4477 var link = $('#extended_report_link');
4478 link.hide();
4479 }
4480 </script>
4481
4482
4483 <script type="text/javascript">
4484 $(function() {
4485
4486 buildReport();
4487
4488 dragTable.init();
4489
4490 $("[rel=tooltip]").tooltip({ animation: false, });
4491 });
4492 </script>
4493 </head>
4494
4495 <body>
4496 <div class="top-panel">
4497 <table class="layout-table">
4498 <tr>
4499 <td class='layout-table-td'>
4500 <div class="page_title">
4501 <h1>
4502 QUAST
4503 </h1>
4504 <p class="page_subtitle">
4505 <b>Quality Assessment Tool for Genome Assemblies</b>
4506 by <a href="http://cab.spbu.ru" class='dark_bg_link'>CAB</a>
4507 </p>
4508 </div>
4509 </td>
4510 </tr>
4511 </table>
4512 </div>
4513 <div class="content">
4514 <div id='header'>
4515 <p id='report_date'></p>
4516
4517 <p id='icarus'></p>
4518 <p id='extrainfo'>Loading...</p>
4519 <p id='per_ref_msg'></p>
4520 <p id='krona'></p>
4521
4522 <p id="data_set_p">
4523 <span style="display: none;" id="reference_name">Aligned to
4524 "<span class='val'></span>"
4525 </span>
4526
4527 <span style="display: none;" id="combined_reference_name">
4528 Combined reference
4529 </span>
4530
4531 <span style="display: none;" id="est_reference_length">Estimated reference size:
4532 <span class='val'></span><span class='rhs'>&nbsp;</span>bp
4533 </span>
4534
4535 <span style="display: none;" id="reference_length">|
4536 <span class='val'></span><span class='rhs'>&nbsp;</span>bp
4537 </span>
4538
4539 <span style="display: none;" id="combined_reference_files">|
4540 <span class='val'></span><span class='rhs'>&nbsp;</span>reference<span style="display: none;" class='plural_ending'>s</span>
4541 </span>
4542
4543 <span style="display: none;" id="reference_fragments">|
4544 <span class='val'></span><span class='rhs'>&nbsp;</span>fragment<span style="display: none;" class='plural_ending'>s</span>
4545 </span>
4546
4547 <span style="display: none;" id="reference_gc">|
4548 <span class='val'></span><span class='rhs'>&nbsp;</span>% G+C
4549 </span>
4550
4551 <span style="display: none;" id="reference_chr">|
4552 <span class='val'></span> chromosome<span style="display: none;" class='plural_ending'>s</span>
4553 </span>
4554
4555 <span style="display: none;" id="total_reads"><br>
4556 <span class='val'></span> reads
4557 </span>
4558
4559 <span style="display: none;" id="reference_mapped_reads">|
4560 <span class='val'></span>% mapped
4561 </span>
4562
4563 <span style="display: none;" id="reference_paired_reads">|
4564 <span class='val'></span>% properly paired
4565 </span>
4566
4567 <span style="display: none;" id="reference_features"><br>
4568 <span class='val'></span> genomic features
4569 </span>
4570
4571 <span style="display: none;" id="reference_operons">|
4572 <span class='val'></span> operons
4573 </span>
4574 </p>
4575 </div>
4576
4577 <noscript>
4578 <div style="margin-left: 0;">
4579 Unfortunately, <span style="font-weight: bold">JavaScript</span> in your
4580 browser <span style="font-weight: bold">is disabled</span> or is not supported.</br>
4581 We need JavaScript to build report and plots.
4582 </div>
4583 </noscript>
4584
4585 <div class='report-and-plots'>
4586 <div class='report' id='main_report'>
4587 <div id="heatmap_header" style='display: none; float: left;'>
4588 <div style="padding-right: 10px; display: inline-block; vertical-align:top;">
4589 <canvas id="gradientHeatmap" width="150" height="6"></canvas>
4590 <div style="margin-left: 0; text-align: justify;">
4591 <span class="heatmap_legend">Worst</span>
4592 <span style="margin-left: -5px;" class="heatmap_legend">Median</span>
4593 <span class="heatmap_legend">Best</span>
4594 <span class="heatmap_legend" style='width: 100%; height: 0;'></span>
4595 </div>
4596 </div>
4597 <label for="heatmaps_chbox"><input type="checkbox" checked="checked" id="heatmaps_chbox">Show heatmap</label>
4598 </div>
4599 <div style="clear: both;"></div>
4600 </div>
4601 <div class='plots'>
4602 <table style='margin: -3px;'>
4603 <tr id='all-switches'>
4604 <td>
4605 <div id='plots-switches'></div>
4606 </td>
4607 <td style='text-align: right; padding-right: 22px;'>
4608 <span id='scale-placeholder'></span>
4609 </td>
4610 </tr>
4611 <tr>
4612 <td colspan="2">
4613 <div id='plot-placeholder' style=''></div>
4614 </td>
4615 <td>
4616 <div id='legend-placeholder'></div>
4617 </td>
4618 </tr>
4619 <tr>
4620 <td colspan="3" id="plot-caption" style="display: none;">
4621 <p id="contigs_are_ordered">Contigs are ordered from largest (contig #1) to smallest.</p>
4622 <p id="frc_info">FRCurve:
4623 Y is the total number of aligned bases divided by the reference length,
4624 in the contigs having the total number of <span class="frc_plot_name"></span> at most X.</p>
4625 <p id="gc_info">Contigs are broken into nonoverlapping 100 bp windows.
4626 Plot shows number of windows for each GC percentage.</p>
4627 <p id="gc_contigs_info">Plot shows number of contigs with GC percentage in a certain range.</p>
4628 </td>
4629 </tr>
4630 </table>
4631 </div>
4632
4633 <p>
4634 <span id="main_ref_genome"></span>
4635 </p>
4636
4637 <div style="clear: left"></div>
4638 <div style="clear: right"></div>
4639
4640 <div class='json-code'>
4641 <div id='total-report-json'>
4642 {"date":"07 July 2022, Thursday, 16:52:16","assembliesNames":["contig1","contig2"],"referenceName":"dataset_be05aefa-bbf2-47ec-ac87-32bf4b214023","order":[0,1],"report":[["Genome statistics",[{"metricName":"Genome fraction (%)","quality":"More is better","values":["71.579","100.000"],"isMain":true},{"metricName":"Duplication ratio","quality":"Less is better","values":["1.000","1.000"],"isMain":true},{"metricName":"# genomic features","quality":"More is better","values":["7 + 7 part","13 + 1 part"],"isMain":true},{"metricName":"Largest alignment","quality":"More is better","values":[2030,6650],"isMain":true},{"metricName":"Total aligned length","quality":"More is better","values":[4760,6650],"isMain":true},{"metricName":"NG50","quality":"More is better","values":[3980,6650],"isMain":false},{"metricName":"NG90","quality":"More is better","values":[1120,6650],"isMain":false},{"metricName":"auNG","quality":"More is better","values":["2960.4","6650.0"],"isMain":false},{"metricName":"NA50","quality":"More is better","values":[1610,6650],"isMain":false},{"metricName":"NA90","quality":"More is better","values":[null,6650],"isMain":false},{"metricName":"auNA","quality":"More is better","values":["1187.4","6650.0"],"isMain":false},{"metricName":"NGA50","quality":"More is better","values":[1610,6650],"isMain":true},{"metricName":"NGA90","quality":"More is better","values":[null,6650],"isMain":false},{"metricName":"auNGA","quality":"More is better","values":["1198.1","6650.0"],"isMain":false},{"metricName":"LG50","quality":"Less is better","values":[1,1],"isMain":false},{"metricName":"LG90","quality":"Less is better","values":[3,1],"isMain":false},{"metricName":"LA50","quality":"Less is better","values":[2,1],"isMain":false},{"metricName":"LA90","quality":"Less is better","values":[null,1],"isMain":false},{"metricName":"LGA50","quality":"Less is better","values":[2,1],"isMain":true},{"metricName":"LGA90","quality":"Less is better","values":[null,1],"isMain":false},{"metricName":"Complete BUSCO (%)","quality":"More is better","values":["0.00","0.00"],"isMain":true},{"metricName":"Partial BUSCO (%)","quality":"Less is better","values":["0.68","0.00"],"isMain":true}]],["Reads mapping",[]],["Misassemblies",[{"metricName":"# misassemblies","quality":"Less is better","values":[0,0],"isMain":true},{"metricName":" # relocations","quality":"Less is better","values":[0,0],"isMain":false},{"metricName":" # translocations","quality":"Less is better","values":[0,0],"isMain":false},{"metricName":" # inversions","quality":"Less is better","values":[0,0],"isMain":false},{"metricName":"# misassembled contigs","quality":"Less is better","values":[0,0],"isMain":false},{"metricName":"Misassembled contigs length","quality":"Less is better","values":[0,0],"isMain":true},{"metricName":"# local misassemblies","quality":"Less is better","values":[0,0],"isMain":false},{"metricName":"# scaffold gap ext. mis.","quality":"Less is better","values":[0,0],"isMain":false},{"metricName":"# scaffold gap loc. mis.","quality":"Less is better","values":[0,0],"isMain":false},{"metricName":"# unaligned mis. contigs","quality":"Less is better","values":[0,0],"isMain":false}]],["Unaligned",[{"metricName":"# fully unaligned contigs","quality":"Less is better","values":[0,0],"isMain":false},{"metricName":"Fully unaligned length","quality":"Less is better","values":[0,0],"isMain":false},{"metricName":"# partially unaligned contigs","quality":"Less is better","values":[1,0],"isMain":false},{"metricName":"Partially unaligned length","quality":"Less is better","values":[1950,0],"isMain":false}]],["Mismatches",[{"metricName":"# mismatches per 100 kbp","quality":"Less is better","values":["0.00","0.00"],"isMain":true},{"metricName":"# mismatches","quality":"Less is better","values":[0,0],"isMain":false},{"metricName":"# indels per 100 kbp","quality":"Less is better","values":["0.00","0.00"],"isMain":true},{"metricName":"# indels","quality":"Less is better","values":[0,0],"isMain":false},{"metricName":" # indels (<= 5 bp)","quality":"Less is better","values":[0,0],"isMain":false},{"metricName":" # indels (> 5 bp)","quality":"Less is better","values":[0,0],"isMain":false},{"metricName":"Indels length","quality":"Less is better","values":[0,0],"isMain":false},{"metricName":"# N's per 100 kbp","quality":"Less is better","values":["0.00","0.00"],"isMain":true},{"metricName":"# N's","quality":"Less is better","values":[0,0],"isMain":false}]],["Statistics without reference",[{"metricName":"# contigs","quality":"Equal","values":[3,1],"isMain":true},{"metricName":"# contigs (>= 0 bp)","quality":"Equal","values":[3,1],"isMain":false},{"metricName":"# contigs (>= 1000 bp)","quality":"Equal","values":[3,1],"isMain":false},{"metricName":"Largest contig","quality":"More is better","values":[3980,6650],"isMain":true},{"metricName":"Total length","quality":"More is better","values":[6710,6650],"isMain":true},{"metricName":"Total length (>= 0 bp)","quality":"More is better","values":[6710,6650],"isMain":false},{"metricName":"Total length (>= 1000 bp)","quality":"More is better","values":[6710,6650],"isMain":true},{"metricName":"N50","quality":"More is better","values":[3980,6650],"isMain":false},{"metricName":"N90","quality":"More is better","values":[1120,6650],"isMain":false},{"metricName":"auN","quality":"More is better","values":["2934.0","6650.0"],"isMain":false},{"metricName":"L50","quality":"Less is better","values":[1,1],"isMain":false},{"metricName":"L90","quality":"Less is better","values":[3,1],"isMain":false},{"metricName":"GC (%)","quality":"Equal","values":["51.28","52.00"],"isMain":false}]],["K-mer-based statistics",[{"metricName":"K-mer-based compl. (%)","quality":"More is better","values":["68.09","100.00"],"isMain":true},{"metricName":"K-mer-based cor. length (%)","quality":"More is better","values":["100.00","100.00"],"isMain":false},{"metricName":"K-mer-based mis. length (%)","quality":"Less is better","values":["0.00","0.00"],"isMain":false},{"metricName":"K-mer-based undef. length (%)","quality":"Less is better","values":["0.00","0.00"],"isMain":false},{"metricName":"# k-mer-based misjoins","quality":"Less is better","values":[0,0],"isMain":true},{"metricName":" # k-mer-based translocations","quality":"Equal","values":[0,0],"isMain":false},{"metricName":" # k-mer-based 100kbp relocations","quality":"Equal","values":[0,0],"isMain":false}]],["Predicted genes",[{"metricName":"# predicted rRNA genes","quality":"More is better","values":["0 + 0 part","0 + 0 part"],"isMain":true}]],["Similarity statistics",[{"metricName":"# similar correct contigs","quality":"Equal","values":[0,0],"isMain":false},{"metricName":"# similar misassembled blocks","quality":"Equal","values":[0,0],"isMain":false}]],["Reference statistics",[{"metricName":"Reference length","quality":"Equal","values":[6650,6650],"isMain":false},{"metricName":"Reference fragments","quality":"Equal","values":[1,1],"isMain":false},{"metricName":"Reference GC (%)","quality":"Equal","values":["52.00","52.00"],"isMain":false},{"metricName":"Reference genomic features","quality":"Equal","values":[14,14],"isMain":false},{"metricName":"Reference operons","quality":"Equal","values":[0,0],"isMain":false}]]],"subreferences":[],"subreports":[],"minContig":500}
4643 </div>
4644 <div id='qualities-json'>
4645 {{ qualities }}
4646 </div>
4647 <div id='main-metrics-json'>
4648 {{ mainMetrics }}
4649 </div>
4650
4651 <div id="contigs-lengths-json">
4652 {"filenames":["contig1","contig2"],"lists_of_lengths":[[3980,1610,1120],[6650]]}
4653 </div>
4654 <div id='assemblies-lengths-json'>
4655 {"filenames":["contig1","contig2"],"assemblies_lengths":[6710,6650]}
4656 </div>
4657 <div id='reference-length-json'>
4658 {"reflen":[6650]}
4659 </div>
4660 <div id='tick-x-json'>
4661 {"tickX":1}
4662 </div>
4663 <div id='coord-nx-json'>
4664 {"coord_x":[[0.0,1e-10,59.31445603576751,59.314456035867515,83.30849478390462,83.30849478400462,100.0,100.0000000001],[0.0,1e-10,100.0,100.0000000001]],"coord_y":[[3980,3980,3980,1610,1610,1120,1120,0.0],[6650,6650,6650,0.0]],"filenames":["contig1","contig2"]}
4665 </div>
4666 <div id='coord-ngx-json'>
4667 {"coord_x":[[0.0,1e-10,59.849624060150376,59.84962406025038,84.06015037593986,84.06015037603986,100.90225563909775,100.90225563919775],[0.0,1e-10,100.0,100.0000000001]],"coord_y":[[3980,3980,3980,1610,1610,1120,1120,0.0],[6650,6650,6650,0.0]],"filenames":["contig1","contig2"]}
4668 </div>
4669 <div id='coord-nax-json'>
4670 {"coord_x":[[0.0,1e-10,30.253353204172875,30.253353204272873,54.24739195230998,54.247391952409984,70.93889716840536,70.93889716850536],[0.0,1e-10,100.0,100.0000000001]],"coord_y":[[2030,2030,2030,1610,1610,1120,1120,0.0],[6650,6650,6650,0.0]],"filenames":["contig1","contig2"]}
4671 </div>
4672 <div id='coord-ngax-json'>
4673 {"coord_x":[[0.0,1e-10,30.526315789473685,30.526315789573683,54.73684210526316,54.73684210536316,71.57894736842105,71.57894736852106],[0.0,1e-10,100.0,100.0000000001]],"coord_y":[[2030,2030,2030,1610,1610,1120,1120,0.0],[6650,6650,6650,0.0]],"filenames":["contig1","contig2"]}
4674 </div>
4675 <div id='coord-misassemblies-json'>
4676 {"coord_x":[[0,1],[0,1]],"coord_y":[[71.57894736842105,71.57894736842105],[100.0,100.0]],"filenames":["contig1","contig2"]}
4677 </div>
4678 <div id='features-in-contigs-json'>
4679 {"filenames":["contig1","contig2"],"features_in_contigs":{"contig1":[5,0,2],"contig2":[13]},"ref_features_number":14}
4680 </div>
4681 <div id='operons-in-contigs-json'>
4682 {{ operonsInContigs }}
4683 </div>
4684 <div id='summary-json'>
4685 [{{ num_contigs }},
4686 {{ Largest_alignment }},
4687 {{ Total_aligned_length }},
4688 {{ num_misassemblies }},
4689 {{ Misassembled_contigs_length }},
4690 {{ num_mismatches_per_100_kbp }},
4691 {{ num_indels_per_100_kbp }},
4692 {{ num_N's_per_100_kbp }},
4693 {{ Genome_fraction }},
4694 {{ Duplication_ratio }},
4695 {{ NGA50 }}]
4696 </div>
4697 <div id='misassemblies-json'>
4698 {{ allMisassemblies }}
4699 </div>
4700 <div id='krona-json'>
4701 {{ krona }}
4702 </div>
4703 <div id='gc-json'>
4704 {"filenames":["contig1","contig2"],"reference_index":2,"list_of_GC_distributions":[[[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,3,1,0,1,2,1,5,5,5,2,5,4,4,7,1,6,2,5,1,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]],[[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,3,2,1,0,0,5,3,4,4,7,3,5,2,4,7,0,10,1,1,2,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]],[[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,3,2,1,0,0,5,3,4,4,7,3,5,2,4,7,0,10,1,1,2,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]]],"list_of_GC_contigs_distributions":[[[0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100],[0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0]],[[0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100],[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0]]],"lists_of_gc_info":null}
4705 </div>
4706 <div id='icarus-json'>
4707 {"links":["icarus_viewers/alignment_viewer.html"],"links_names":["View in Icarus contig browser"]}
4708 </div>
4709 </div>
4710 </div>
4711
4712 <div class='json-code'>
4713 <div id='glossary-json'>
4714 {
4715 "# contigs" : "<span>is the total number of contigs in the assembly.</span>",
4716 "Largest contig" : "<span>is the length of the longest contig in the assembly.</span>",
4717 "Total length" : "<span>is the total number of bases in the assembly.</span>",
4718 "Reference length" : "<span>is the total number of bases in the reference.</span>",
4719
4720 "# contigs (>= 0 bp)" : "<span>is the total number of contigs in the assembly that have size greater than or equal to 0 bp.</span>",
4721 "Total length (>= 0 bp)" : "<span>is the total number of bases in the contigs having size greater than or equal to 0 bp.</span>",
4722
4723 "N50" : "<span>is the contig length such that using longer or equal length contigs produces half (50%) of the bases of the assembly. Usually there is no value that produces exactly 50%, so the technical definition is the maximum length x such that using contigs of length at least x accounts for at least 50% of the total assembly length. Similarly, Nx for any x between 0 and 100 could be computed (x% of assembly).</span>",
4724 "NG50" : "<span>is the contig length such that using longer or equal length contigs produces half (50%) of the bases of the reference genome. This metric is computed only if a reference genome is provided. Similarly, NGx for any x between 0 and 100 could be computed (x% of the reference).</span>",
4725
4726 "L50" : "<span>is the minimum number of contigs that produce half (50%) of the bases of the assembly. In other words, it's the number of contigs of length at least N50. Similarly, Lx for any x between 0 and 100 could be computed.</span>",
4727 "LG50" : "<span>is the minimum number of contigs that produce half (50%) of the bases of the reference genome. In other words, it's the number of contigs of length at least NG50. This metric is computed only if a reference genome is provided. Similarly, LGx for any x between 0 and 100 could be computed.</span>",
4728
4729 "NA50" : "<span>is N50 where the lengths of aligned blocks are counted instead of contig lengths. I.e., if a contig has a misassembly with respect to the reference, the contig is broken into smaller pieces. This metric is computed only if a reference genome is provided. Similarly, NAx for any x between 0 and 100 could be computed.</span>",
4730 "NGA50" : "<span>is NG50 where the lengths of aligned blocks are counted instead of contig lengths. I.e., if a contig has a misassembly with respect to the reference, the contig is broken into smaller pieces. This metric is computed only if a reference genome is provided. Similarly, NGAx for any x between 0 and 100 could be computed.</span>",
4731
4732 "LA50" : "<span>is L50 where aligned blocks are counted instead of contigs. I.e., if a contig has a misassembly with respect to the reference, the contig is broken into smaller pieces. Similarly, LAx for any x between 0 and 100 could be computed.</span>",
4733 "LGA50" : "<span>is LG50 where aligned blocks are counted instead of contigs. I.e., if a contig has a misassembly with respect to the reference, the contig is broken into smaller pieces. Similarly, LGAx for any x between 0 and 100 could be computed.</span>",
4734
4735 "auN" : "<span>is the area under the Nx curve.</span>",
4736 "auNG" : "<span>is the area under the NGx curve.</span>",
4737 "auNA" : "<span>is the area under the NAx curve.</span>",
4738 "auNGA" : "<span>is the area under the NGAx curve.</span>",
4739
4740 "Average %IDY" : "<span>is the average of alignment identity percent (alignment accuracy) among all contigs.</span>",
4741 "# misassemblies" : "<span>is the number of positions in the assembled contigs where the left flanking sequence aligns over 1 kbp away from the right flanking sequence on the reference (<i>relocation</i>) or they overlap on more than 1 kbp (<i>relocation</i>) or flanking sequences align on different strands (<i>inversion</i>) or different chromosomes (<i>translocation</i>).</span>",
4742 "# large block misassemblies" : "<span>is the number of misassemblies between alignments with length greater than or equal to 3 kbp and with the misassembly threshold equal to 5 kbp (instead of default 1 kbp for regular misassemblies).</span>",
4743 "# misassembled contigs" : "<span>is the number of contigs that contain misassembly events.</span>",
4744 "Misassembled contigs length" : "<span>is the number of total bases contained in all contigs that have one or more misassemblies.</span>",
4745
4746 "# relocations" : "<span>is the number of relocation events among all misassembly events. Relocation is a misassembly where the left flanking sequence aligns over 1 kbp away from the right flanking sequence on the reference, or they overlap by more than 1 kbp and both flanking sequences align on the same chromosome.</span>",
4747 "# translocations" : "<span>is the number of translocation events among all misassembly events. Translocation is a misassembly where the flanking sequences align on different chromosomes.</span>",
4748 "# interspecies translocations" : "<span>is the number of interspecies translocation events among all misassembly events. Interspecies translocation is a misassembly where the flanking sequences align on different references (based on alignments to the combined reference).</span>",
4749 "# inversions" : "<span>is the number of inversion events among all misassembly events. Inversion is a misassembly where it is not a <i>relocation</i> and the flanking sequences align on opposite strands of the same chromosome.</span>",
4750 "# large relocations" : "<span>is the number of relocation events among all large block misassemblies. Relocation is a misassembly where the left flanking sequence aligns over 5 kbp away from the right flanking sequence on the reference, or they overlap by more than 5 kbp and both flanking sequences align on the same chromosome.</span>",
4751 "# large translocations" : "<span>is the number of translocation events among all large block misassemblies. Translocation is a misassembly where the flanking sequences align on different chromosomes.</span>",
4752 "# large i/s translocations" : "<span>is the number of interspecies translocation events among all large block misassemblies. Interspecies translocation is a misassembly where the flanking sequences align on different references (based on alignments to the combined reference).</span>",
4753 "# large inversions" : "<span>is the number of inversion events among all large block misassemblies. Inversion is a misassembly where it is not a <i>relocation</i> and the flanking sequences align on opposite strands of the same chromosome.</span>",
4754 "# local misassemblies" : "<span>is the number of local misassemblies. We define a local misassembly breakpoint as a breakpoint that satisfies these conditions: <ol> <li>Two or more distinct alignments cover the breakpoint.</li> <li>The gap between left and right flanking sequences is less than the misassembly threshold (1 kbp by default).</li> <li>The left and right flanking sequences both are on the same strand of the same chromosome of the reference genome.</li> </ol> </span>",
4755 "# scaffold gap ext. mis." : "<span>is the number of scaffold gap size extensive misassemblies. We define a scaffold gap size misassembly as a breakpoint where the flanking sequences are combined in a scaffold on the wrong distance. These misassemblies are not included in the total number of misassemblies. </span>",
4756 "# scaffold gap loc. mis." : "<span>is the number of scaffold gap size local misassemblies. Such breakpoints satisfy the local misassembly conditions but they occur inside scaffolds. These misassemblies are not included in the total number of local misassemblies. </span>",
4757 "# possibly misassembled contigs": "<span>is the number of contigs that contain large unaligned fragment (default min length is 500 bp) and thus could possibly contain interspecies translocation with unknown reference.</span>",
4758 "# possible misassemblies" : "<span>is the number of putative interspecies translocations in possibly misassembled contigs if each large unaligned fragment is supposed to be a fragment of unknown reference.</span>",
4759 "# intergenomic misassemblies" : "<span>is the number of all found and putative (possible) interspecies translocations.</span>",
4760 "# structural variations" : "<span>is the number of misassemblies matched with structural variations.</span>",
4761 "# possible TEs" : "<span>is the number of misassemblies possibly caused by transposable elements (TEs). We define a possible TE as an event that satisfies these conditions: <ol> <li>There are two misassembly breakpoints of the same type around a short alignment (less than 7 kbp by default)</li> <li>The gap between two long flanking sequences on the sides of the short alignment is less than 7 kbp.</li> <li> The long flanking sequences both are on the same strand of the same chromosome of the reference genome.</li> </ol> </span>",
4762 "# unaligned mis. contigs" : "<span>is the number of contigs that have the number of unaligned bases more than 50% of the contig length and a misassembly event in their aligned fragment. Note that such misassemblies are not counted in <i># misassemblies</i> and other <i>misassemblies</i> statistics.</span>",
4763
4764 "# fully unaligned contigs" : "<span>is the number of contigs that have no alignment to the reference sequence.</span>",
4765 "Fully unaligned length" : "<span>is the total number of bases contained in all fully unaligned contigs. Uncalled bases (N's) are not counted.</span>",
4766 "# partially unaligned contigs" : "<span>is the number of contigs that have at least one alignment to the reference sequence but also have at least one unaligned fragment of length &ge; <i>unaligned-part-size threshold</i> (uncalled bases (N's) are not counted towards the fragment length).</span>",
4767 "Partially unaligned length" : "<span>is the total number of unaligned bases in all partially unaligned contigs. Uncalled bases (N's) are not counted.</span>",
4768
4769 "# ambiguous contigs" : "<span>is the number of contigs that have reference alignments of equal quality in multiple locations on the reference.</span>",
4770 "Ambiguous contigs length" : "<span>is the total number of bases contained in all ambiguous contigs.</span>",
4771
4772 "Genome fraction (%)" : "<span>is the total number of aligned bases in the reference, divided by the genome size. A base in the reference genome is counted as aligned if there is at least one contig with at least one alignment to this base. Contigs from repeat regions may map to multiple places, and thus may be counted multiple times in this quantity.</span>",
4773 "GC (%)" : "<span>is the total number of G and C nucleotides in the assembly, divided by the total length of the assembly.</span>",
4774 "Reference GC (%)" : "<span>is the total number of G and C nucleotides in the reference, divided by the total length of the reference.</span>",
4775
4776 "# mismatches per 100 kbp" : "<span>is the average number of mismatches per 100,000 aligned bases in the assembly.</span>",
4777 "# mismatches" : "<span>is the number of mismatches in all aligned bases in the assembly.</span>",
4778 "# indels per 100 kbp" : "<span>is the average number of indels per 100,000 aligned bases in the assembly.</span>",
4779 "# indels" : "<span>is the number of indels in all aligned bases in the assembly.</span>",
4780 "# indels (<= 5 bp)" : "<span>is the number of indels of length less than or equal to 5 bp.</span>",
4781 "# indels (> 5 bp)" : "<span>is the number of indels of length greater than 5 bp.</span>",
4782 "Indels length" : "<span>is the number of total bases contained in all indels.</span>",
4783
4784 "# genomic features" : "<span>is the number of genomic features (genes, transcripts, CDS) in the assembly (complete and partial), based on a user-provided annotated list of gene positions in the reference genome. A feature counts as 'partially covered' if the assembly contains at least 100 bp of this feature but not the whole feature.</span>",
4785 "# operons" : "<span>is the number of operons in the assembly (complete and partial), based on a user-provided annotated list of operon positions in the reference genome. An operon counts as 'partially covered' if the assembly contains at least 100 bp of this operon but not the whole operon.</span>",
4786 "# predicted genes (unique)" : "<span>is the number of unique genes in the assembly found by a gene prediction tool.</span>",
4787 "# predicted genes (>= 0 bp)" : "<span>is the number of found genes having length greater than or equal to 0 bp.</span>",
4788
4789 "Complete BUSCO (%)" : "<span>is the percent of BUSCO (Universal Single-Copy Ortholog) genes found in the assembly in a complete form.</span>",
4790 "Partial BUSCO (%)" : "<span>is the percent of BUSCO (Universal Single-Copy Ortholog) genes found in the assembly in a partial form.</span>",
4791
4792 "Cumulative length" : "<span>plot shows the growth of assembly contig lengths. On the x-axis, contigs are ordered from largest (contig #1) to smallest. The y-axis gives the size of the x largest contigs in the assembly.</span>",
4793 "Nx" : "<span>plot shows the Nx metric value as x varies from 0 to 100.</span> <span>Nx is the minimum contig length <b>y</b> such that using contigs of length at least <b>y</b> accounts for at least x% of the total assembly length.</span>",
4794 "NGx" : "<span>plot shows the NGx metric value as x varies from 0 to 100.</span> <span>NGx is the minimum contig length <b>y</b> such that using contigs of length at least <b>y</b> accounts for at least x% of the bases of the reference genome. This metric is computed only if a reference genome is provided.</span>",
4795 "NAx" : "<span>plot shows the NAx metric value as x varies from 0 to 100.</span> <span>NAx is computed similarly to Nx, but based on lengths of aligned blocks instead of contig lengths. Contigs are broken into aligned blocks at misassembly breakpoints. NAx is the minimum block length <b>y</b> such that using blocks of length at least <b>y</b> accounts for at least x% of the bases of the assembly. This metric is computed only if a reference genome is provided.</span>",
4796 "NGAx" : "<span>plot shows the NGAx metric value as x varies from 0 to 100.</span><span>NGAx is computed similarly to NGx, but based on lengths of aligned blocks instead of contig lengths. Contigs are broken at misassembly breakpoints. NGAx is the minimum block length <b>y</b> such that using blocks of length at least <b>y</b> accounts for at least x% of the bases of the reference genome. This metric is computed only if a reference genome is provided.</span>",
4797 "GC content" : "<span>plot shows the distribution of GC percentage among the contigs, i.e., the total number of bases in contigs with such GC content. Typically, the distribution is approximately Gaussian. However, for some genomes it is not Gaussian. For assembly projects with contaminants, the GC distribution of the contaminants often differs from the reference genome and may give a superposition of multiple curves with different peaks.</span>",
4798
4799 "Duplication ratio" : "<span>is the total number of aligned bases in the assembly, divided by the total number of aligned bases in the reference (see the <b>Genome fraction (%)</b> metric). If the assembly contains many contigs that cover the same regions of the reference, its <i>Duplication ratio</i> may be much larger than 1. This may occur due to overestimating repeat multiplicities and due to small overlaps between contigs, among other reasons.</span>",
4800 "Largest alignment" : "<span>is the length of the largest continuous alignment in the assembly. This metric is always equal to the <i>Largest contig</i> metric but it can be smaller if the largest contig of the assembly contains a misassembly event.</span>",
4801 "Total aligned length" : "<span>is the total number of aligned bases in the assembly.</span>",
4802 "Avg contig read support" : "<span>is the average coverage of contigs that have large unique alignments to the reference. Read coverage is extracted from contig names (SPAdes/Velvet naming scheme only).</span>",
4803
4804 "# N's" : "<span>is the total number of uncalled bases (N's) in the assembly.</span>",
4805 "# N's per 100 kbp" : "<span>is the average number of uncalled bases (N's) per 100,000 assembly bases.</span>",
4806
4807 "# mapped" : "<span>is the number of reads that mapped to the assembly.</span>",
4808 "Mapped (%)" : "<span>is the percent of reads that mapped to the assembly.</span>",
4809 "# properly paired" : "<span>is the number of reads that mapped within expected range and orientation of each other to the assembly.</span>",
4810 "Properly paired (%)" : "<span>is the percent of reads that mapped within expected range and orientation of each other to the assembly.</span>",
4811 "# singletons" : "<span>is the number of reads which do not overlap any other reads.</span>",
4812 "Singletons (%)" : "<span>is the percent of reads which do not overlap any other reads.</span>",
4813 "# misjoint mates" : "<span>is the number of reads with mate mapped to a different contig.</span>",
4814 "Misjoint mates (%)" : "<span>is the percent of reads with mate mapped to a different contig.</span>",
4815 "Avg. coverage depth" : "<span>is the average depth of coverage.</span>",
4816 "Coverage >= 1x (%)" : "<span>is the total number of bases with at least 1x coverage, divided by the total length of the assembly.</span>",
4817
4818 "# similar correct contigs" : "<span>is the number of correct contigs similar among > 50% assemblies (see Icarus for visualization).</span>",
4819 "# similar misassembled blocks" : "<span>is the number of misassembled blocks similar among > 50% assemblies (see Icarus for visualization).</span>"
4820 }
4821
4822 </div>
4823 </div>
4824 </div>
4825 </body>
4826 </html>