rinja_parser-0.3.5/.cargo_vcs_info.json0000644000000001520000000000100135160ustar { "git": { "sha1": "f6acf786b09359688907fc7634dd84824f017258" }, "path_in_vcs": "rinja_parser" }rinja_parser-0.3.5/.rustfmt.toml000064400000000000000000000004001046102023000147610ustar 00000000000000edition = "2021" group_imports = "StdExternalCrate" imports_granularity = "Module" newline_style = "Unix" normalize_comments = true unstable_features = true use_field_init_shorthand = true style_edition = "2024" ignore = [ "testing/tests/hello.rs", ] rinja_parser-0.3.5/Cargo.toml0000644000000027350000000000100115250ustar # THIS FILE IS AUTOMATICALLY GENERATED BY CARGO # # When uploading crates to the registry Cargo will automatically # "normalize" Cargo.toml files for maximal compatibility # with all versions of Cargo and also rewrite `path` dependencies # to registry (e.g., crates.io) dependencies. # # If you are reading this file be aware that the original Cargo.toml # will likely look very different (and much more reasonable). # See Cargo.toml.orig for the original contents. [package] edition = "2021" rust-version = "1.71" name = "rinja_parser" version = "0.3.5" build = false autobins = false autoexamples = false autotests = false autobenches = false description = "Parser for Rinja templates" homepage = "https://github.com/rinja-rs/rinja" documentation = "https://docs.rs/rinja" readme = "README.md" keywords = [ "markup", "template", "jinja2", "html", ] categories = ["template-engine"] license = "MIT OR Apache-2.0" repository = "https://github.com/rinja-rs/rinja" [package.metadata.docs.rs] all-features = true rustdoc-args = [ "--generate-link-to-definition", "--cfg=docsrs", ] [lib] name = "rinja_parser" path = "src/lib.rs" [[bench]] name = "from_str" path = "benches/from_str.rs" harness = false [dependencies.memchr] version = "2" [dependencies.nom] version = "7" features = ["alloc"] default-features = false [dependencies.serde] version = "1.0" features = ["derive"] optional = true [dev-dependencies.criterion] version = "0.5" [features] config = ["dep:serde"] rinja_parser-0.3.5/Cargo.toml.orig000064400000000000000000000014651046102023000152050ustar 00000000000000[package] name = "rinja_parser" version = "0.3.5" description = "Parser for Rinja templates" documentation = "https://docs.rs/rinja" keywords = ["markup", "template", "jinja2", "html"] categories = ["template-engine"] homepage = "https://github.com/rinja-rs/rinja" repository = "https://github.com/rinja-rs/rinja" license = "MIT OR Apache-2.0" workspace = ".." readme = "README.md" edition = "2021" rust-version = "1.71" [package.metadata.docs.rs] all-features = true rustdoc-args = ["--generate-link-to-definition", "--cfg=docsrs"] [features] config = ["dep:serde"] [dependencies] memchr = "2" nom = { version = "7", default-features = false, features = ["alloc"] } serde = { version = "1.0", optional = true, features = ["derive"] } [dev-dependencies] criterion = "0.5" [[bench]] name = "from_str" harness = false rinja_parser-0.3.5/LICENSE-APACHE000064400000000000000000000251301046102023000142350ustar 00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright 2017-2020 Dirkjan Ochtman Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. rinja_parser-0.3.5/LICENSE-MIT000064400000000000000000000020501046102023000137410ustar 00000000000000Copyright (c) 2017-2020 Dirkjan Ochtman Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. rinja_parser-0.3.5/README.md000064400000000000000000000015731046102023000135750ustar 00000000000000# rinja_parser: template parser for the Rinja templating engine [![Crates.io](https://img.shields.io/crates/v/rinja_parser?logo=rust&style=flat-square&logoColor=white "Crates.io")](https://crates.io/crates/rinja_parser) [![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/rinja-rs/rinja/rust.yml?branch=master&logo=github&style=flat-square&logoColor=white "GitHub Workflow Status")](https://github.com/rinja-rs/rinja/actions/workflows/rust.yml) [![Book](https://img.shields.io/readthedocs/rinja?label=book&logo=readthedocs&style=flat-square&logoColor=white "Book")](https://rinja.readthedocs.io/) [![docs.rs](https://img.shields.io/docsrs/rinja_parser?logo=docsdotrs&style=flat-square&logoColor=white "docs.rs")](https://docs.rs/rinja_parser/) This crate contains the procedural macros used by the [Rinja](https://github.com/rinja-rs/rinja) templating engine. rinja_parser-0.3.5/_typos.toml000064400000000000000000000007361046102023000145300ustar 00000000000000[default] locale = "en-us" [files] extend-exclude = [ # generated files "book/ethicalads-theme.css", "fuzzing/fuzz/artifacts/", "fuzzing/fuzz/corpus/", "target/", "rinja_parser/tests/*.txt", # fillter texts "rinja/benches/strings.inc", # too many false positives "testing/tests/gen_ws_tests.py", ] [default.extend-words] # French words exemple = "exemple" existant = "existant" # used in tests Ba = "Ba" fo = "fo" Fo = "Fo" sur = "sur" rinja_parser-0.3.5/benches/from_str.rs000064400000000000000000000026731046102023000161300ustar 00000000000000use criterion::{Criterion, Throughput, black_box, criterion_group, criterion_main}; use rinja_parser::{Ast, Syntax}; criterion_main!(benches); criterion_group!(benches, librustdoc); fn librustdoc(c: &mut Criterion) { let mut group = c.benchmark_group("librustdoc"); let mut add_benchmark = |name: &str, src: &str| { group.throughput(Throughput::Bytes(src.len() as u64)); group.bench_function(name, |b| { let syntax = &Syntax::default(); b.iter(|| Ast::from_str(black_box(src), None, black_box(syntax)).unwrap()); }); }; let all: String = LIBRUSTDOC.iter().map(|&(_, src)| src).collect(); add_benchmark("all", &all); for (name, src) in LIBRUSTDOC { add_benchmark(name, src); } group.finish(); } const LIBRUSTDOC: &[(&str, &str)] = &[ ("item_info", include_str!("./librustdoc/item_info.html")), ("item_union", include_str!("./librustdoc/item_union.html")), ("page", include_str!("./librustdoc/page.html")), ("print_item", include_str!("./librustdoc/print_item.html")), ( "short_item_info", include_str!("./librustdoc/short_item_info.html"), ), ("sidebar", include_str!("./librustdoc/sidebar.html")), ("source", include_str!("./librustdoc/source.html")), ( "type_layout_size", include_str!("./librustdoc/type_layout_size.html"), ), ("type_layout", include_str!("./librustdoc/type_layout.html")), ]; rinja_parser-0.3.5/benches/librustdoc/LICENSE.md000064400000000000000000000006561046102023000175040ustar 00000000000000The files in this folder were copied verbatim from [librustdoc/html/templates] in version eeb59f16a5f40e14dc29b95155b7f2569329e3ec. Dual licensed under MIT OR Apache-2.0. Please find the authors in [their Git history]. [librustdoc/html/templates]: [their Git history]: rinja_parser-0.3.5/benches/librustdoc/item_info.html000064400000000000000000000002451046102023000207310ustar 00000000000000{% if !items.is_empty() %} {% for item in items %} {{item|safe}} {# #} {% endfor %} {% endif %} rinja_parser-0.3.5/benches/librustdoc/item_union.html000064400000000000000000000020131046102023000211210ustar 00000000000000

    {{ self.render_attributes_in_pre()|safe }}
    {{ self.render_union()|safe }}
{{ self.document()|safe }} {% if self.fields_iter().peek().is_some() %}

{# #} Fields§ {# #}

{% for (field, ty) in self.fields_iter() %} {% let name = field.name.expect("union field name") %} {# #} § {# #} {{ name }}: {{+ self.print_ty(ty)|safe }} {# #} {% if let Some(stability_class) = self.stability_field(field) %} {% endif %} {{ self.document_field(field)|safe }} {% endfor %} {% endif %} {{ self.render_assoc_items()|safe }} {{ self.document_type_layout()|safe }} rinja_parser-0.3.5/benches/librustdoc/page.html000064400000000000000000000145351046102023000177030ustar 00000000000000 {# #} {# #} {# #} {# #} {# #} {# #} {# #} {{page.title}} {# #} {# #} {# #} {# #} {% if !layout.default_settings.is_empty() %} {# #} {% endif %} {# #} {# #} {% if page.css_class.contains("crate") %} {# #} {% else if page.css_class == "src" %} {# #} {# #} {% else if !page.css_class.contains("mod") %} {# #} {% else if !page.css_class.contains("sys") %} {# #} {% endif %} {# #} {% if layout.scrape_examples_extension %} {# #} {% endif %} {# #} {% if layout.css_file_extension.is_some() %} {# #} {% endif %} {% if !layout.favicon.is_empty() %} {# #} {% else %} {# #} {# #} {% endif %} {{ layout.external_html.in_header|safe }} {# #} {# #} {# #} {{ layout.external_html.before_content|safe }} {% if page.css_class != "src" %} {% endif %} {# #} {# #}
{# #} {% if page.css_class != "src" %}
{% endif %} {# defined in storage.js to avoid duplicating complex UI across every page #} {# and because the search form only works if JS is enabled anyway #} {# #}
{{ content|safe }}
{# #} {% if page.css_class != "src" %}
{% endif %}
{# #} {{ layout.external_html.after_content|safe }} {# #} {# #} rinja_parser-0.3.5/benches/librustdoc/print_item.html000064400000000000000000000017361046102023000211400ustar 00000000000000
{# #}

{{typ}} {# The breadcrumbs of the item path, like std::string #} {% for component in path_components %} {{component.name}}:: {% endfor %} {{name}} {# #} {# #}

{# #} {% if !stability_since_raw.is_empty() %} {{ stability_since_raw|safe +}} · {#+ #} {% endif %} {% match src_href %} {% when Some with (href) %} source · {#+ #} {% else %} {% endmatch %} {# #} {# #}
{# #} rinja_parser-0.3.5/benches/librustdoc/short_item_info.html000064400000000000000000000016661046102023000221600ustar 00000000000000{% match self %} {% when Self::Deprecation with { message } %}
{# #} 👎 {# #} {{message|safe}} {# #}
{# #} {% when Self::Unstable with { feature, tracking } %}
{# #} 🔬 {# #} {# #} This is a nightly-only experimental API. ({# #} {{feature}} {# #} {% match tracking %} {% when Some with ((url, num)) %}  #{{num}} {# #} {% when None %} {% endmatch %} ) {# #} {# #}
{# #} {% when Self::Portability with { message } %}
{{message|safe}}
{# #} {% endmatch %} rinja_parser-0.3.5/benches/librustdoc/sidebar.html000064400000000000000000000024161046102023000203730ustar 00000000000000{% if !title.is_empty() %}

{# #} {{title_prefix}}{{title}} {# #}

{% endif %} rinja_parser-0.3.5/benches/librustdoc/source.html000064400000000000000000000014051046102023000202570ustar 00000000000000
{# #} {# https://developers.google.com/search/docs/crawling-indexing/robots-meta-tag#data-nosnippet-attr Do not show "1 2 3 4 5 ..." in web search results. #}
        {% for line in lines.clone() %}
            {% if embedded %}
                {{line|safe}}
            {%~ else %}
                {{line|safe}}
            {%~ endif %}
        {% endfor %}
    
{# #}
 {# #}
        
            {% if needs_expansion %}
                
            {% endif %}
            {{code_html|safe}}
         {# #}
    
{# #}
rinja_parser-0.3.5/benches/librustdoc/type_layout.html000064400000000000000000000054071046102023000213430ustar 00000000000000

{# #} Layout§ {# #}

{# #}
{# #} {% match type_layout_size %} {% when Ok(type_layout_size) %}
{# #}

{# #} Note: Most layout information is completely {#+ #} unstable and may even differ between compilations. {#+ #} The only exception is types with certain repr(...) {#+ #} attributes. Please see the Rust Reference's {#+ #} “Type Layout” {#+ #} chapter for details on type layout guarantees. {# #}

{# #}
{# #}

Size: {{+ type_layout_size|safe }}

{# #} {% if !variants.is_empty() %}

{# #} Size for each variant: {# #}

{# #}
    {# #} {% for (name, layout_size) in variants %}
  • {# #} {{ name }}: {#+ #} {{ layout_size|safe }}
  • {# #} {% endfor %}
{# #} {% endif %} {# This kind of layout error can occur with valid code, e.g. if you try to get the layout of a generic type such as `Vec`. #} {% when Err(LayoutError::Unknown(_)) %}

{# #} Note: Unable to compute type layout, {#+ #} possibly due to this type having generic parameters. {#+ #} Layout can only be computed for concrete, fully-instantiated types. {# #}

{# #} {# This kind of error probably can't happen with valid code, but we don't want to panic and prevent the docs from building, so we just let the user know that we couldn't compute the layout. #} {% when Err(LayoutError::SizeOverflow(_)) %}

{# #} Note: Encountered an error during type layout; {#+ #} the type was too big. {# #}

{# #} {% when Err(LayoutError::ReferencesError(_)) %}

{# #} Note: Encountered an error during type layout; {#+ #} the type references errors. {# #}

{# #} {% when Err(LayoutError::NormalizationFailure(_, _)) %}

{# #} Note: Encountered an error during type layout; {#+ #} the type failed to be normalized. {# #}

{# #} {% when Err(LayoutError::Cycle(_)) %}

{# #} Note: Encountered an error during type layout; {#+ #} the type's layout depended on the type's layout itself. {# #}

{# #} {% endmatch %}
{# #} rinja_parser-0.3.5/benches/librustdoc/type_layout_size.html000064400000000000000000000004341046102023000223700ustar 00000000000000{% if is_unsized %} (unsized) {% else %} {% if size == 1 %} 1 byte {% else %} {{ size +}} bytes {% endif %} {% if is_uninhabited %} {# +#} (uninhabited) {% endif %} {% endif %} rinja_parser-0.3.5/deny.toml000064400000000000000000000003631046102023000141460ustar 00000000000000[licenses] version = 2 allow = ["Apache-2.0", "MIT", "MIT-0", "Unicode-DFS-2016"] private = { ignore = true } [[licenses.clarify]] name = "ring" expression = "ISC AND MIT AND OpenSSL" license-files = [{ path = "LICENSE", hash = 0xbd0eed23 }] rinja_parser-0.3.5/src/expr.rs000064400000000000000000000461621046102023000144340ustar 00000000000000use std::collections::HashSet; use std::str; use nom::branch::alt; use nom::bytes::complete::{tag, take_till}; use nom::character::complete::{char, digit1}; use nom::combinator::{consumed, cut, fail, map, not, opt, peek, recognize, value}; use nom::error::ErrorKind; use nom::error_position; use nom::multi::{fold_many0, many0, separated_list0, separated_list1}; use nom::sequence::{pair, preceded, terminated, tuple}; use crate::{ CharLit, ErrorContext, Level, Num, ParseResult, PathOrIdentifier, StrLit, WithSpan, char_lit, filter, identifier, keyword, not_ws, num_lit, path_or_identifier, str_lit, ws, }; macro_rules! expr_prec_layer { ( $name:ident, $inner:ident, $op:expr ) => { fn $name(i: &'a str, level: Level) -> ParseResult<'a, WithSpan<'a, Self>> { let (_, level) = level.nest(i)?; let start = i; let (i, left) = Self::$inner(i, level)?; let (i, right) = many0(pair(ws($op), |i| Self::$inner(i, level)))(i)?; Ok(( i, right.into_iter().fold(left, |left, (op, right)| { WithSpan::new(Self::BinOp(op, Box::new(left), Box::new(right)), start) }), )) } }; } #[derive(Clone, Debug, PartialEq)] pub enum Expr<'a> { BoolLit(bool), NumLit(&'a str, Num<'a>), StrLit(StrLit<'a>), CharLit(CharLit<'a>), Var(&'a str), Path(Vec<&'a str>), Array(Vec>>), Attr(Box>>, &'a str), Index(Box>>, Box>>), Filter(Filter<'a>), As(Box>>, &'a str), NamedArgument(&'a str, Box>>), Unary(&'a str, Box>>), BinOp( &'a str, Box>>, Box>>, ), Range( &'a str, Option>>>, Option>>>, ), Group(Box>>), Tuple(Vec>>), Call(Box>>, Vec>>), RustMacro(Vec<&'a str>, &'a str), Try(Box>>), /// This variant should never be used directly. It is created when generating filter blocks. FilterSource, IsDefined(&'a str), IsNotDefined(&'a str), } impl<'a> Expr<'a> { pub(super) fn arguments( i: &'a str, level: Level, is_template_macro: bool, ) -> ParseResult<'a, Vec>> { let (_, level) = level.nest(i)?; let mut named_arguments = HashSet::new(); let start = i; preceded( ws(char('(')), cut(terminated( separated_list0( char(','), ws(move |i| { // Needed to prevent borrowing it twice between this closure and the one // calling `Self::named_arguments`. let named_arguments = &mut named_arguments; let has_named_arguments = !named_arguments.is_empty(); let (i, expr) = alt(( move |i| { Self::named_argument( i, level, named_arguments, start, is_template_macro, ) }, move |i| Self::parse(i, level), ))(i)?; if has_named_arguments && !matches!(*expr, Self::NamedArgument(_, _)) { Err(nom::Err::Failure(ErrorContext::new( "named arguments must always be passed last", start, ))) } else { Ok((i, expr)) } }), ), tuple((opt(ws(char(','))), char(')'))), )), )(i) } fn named_argument( i: &'a str, level: Level, named_arguments: &mut HashSet<&'a str>, start: &'a str, is_template_macro: bool, ) -> ParseResult<'a, WithSpan<'a, Self>> { if !is_template_macro { // If this is not a template macro, we don't want to parse named arguments so // we instead return an error which will allow to continue the parsing. return fail(i); } let (_, level) = level.nest(i)?; let (i, (argument, _, value)) = tuple((identifier, ws(char('=')), move |i| Self::parse(i, level)))(i)?; if named_arguments.insert(argument) { Ok(( i, WithSpan::new(Self::NamedArgument(argument, Box::new(value)), start), )) } else { Err(nom::Err::Failure(ErrorContext::new( format!("named argument `{argument}` was passed more than once"), start, ))) } } pub(super) fn parse(i: &'a str, level: Level) -> ParseResult<'a, WithSpan<'a, Self>> { let (_, level) = level.nest(i)?; let start = i; let range_right = move |i| { pair( ws(alt((tag("..="), tag("..")))), opt(move |i| Self::or(i, level)), )(i) }; alt(( map(range_right, |(op, right)| { WithSpan::new(Self::Range(op, None, right.map(Box::new)), start) }), map( pair(move |i| Self::or(i, level), opt(range_right)), |(left, right)| match right { Some((op, right)) => WithSpan::new( Self::Range(op, Some(Box::new(left)), right.map(Box::new)), start, ), None => left, }, ), ))(i) } expr_prec_layer!(or, and, tag("||")); expr_prec_layer!(and, compare, tag("&&")); expr_prec_layer!( compare, bor, alt(( tag("=="), tag("!="), tag(">="), tag(">"), tag("<="), tag("<"), )) ); expr_prec_layer!(bor, bxor, value("|", tag("bitor"))); expr_prec_layer!(bxor, band, token_xor); expr_prec_layer!(band, shifts, token_bitand); expr_prec_layer!(shifts, addsub, alt((tag(">>"), tag("<<")))); expr_prec_layer!(addsub, muldivmod, alt((tag("+"), tag("-")))); expr_prec_layer!(muldivmod, is_as, alt((tag("*"), tag("/"), tag("%")))); fn is_as(i: &'a str, level: Level) -> ParseResult<'a, WithSpan<'a, Self>> { let start = i; let (before_keyword, lhs) = Self::filtered(i, level)?; let (j, rhs) = opt(ws(identifier))(before_keyword)?; let i = match rhs { Some("is") => j, Some("as") => { let (i, target) = opt(identifier)(j)?; let target = target.unwrap_or_default(); if crate::PRIMITIVE_TYPES.contains(&target) { return Ok((i, WithSpan::new(Self::As(Box::new(lhs), target), start))); } else if target.is_empty() { return Err(nom::Err::Failure(ErrorContext::new( "`as` operator expects the name of a primitive type on its right-hand side", before_keyword.trim_start(), ))); } else { return Err(nom::Err::Failure(ErrorContext::new( format!( "`as` operator expects the name of a primitive type on its right-hand \ side, found `{target}`" ), before_keyword.trim_start(), ))); } } _ => return Ok((before_keyword, lhs)), }; let (i, rhs) = opt(terminated(opt(keyword("not")), ws(keyword("defined"))))(i)?; let ctor = match rhs { None => { return Err(nom::Err::Failure(ErrorContext::new( "expected `defined` or `not defined` after `is`", // We use `start` to show the whole `var is` thing instead of the current token. start, ))); } Some(None) => Self::IsDefined, Some(Some(_)) => Self::IsNotDefined, }; let var_name = match *lhs { Self::Var(var_name) => var_name, Self::Attr(_, _) => { return Err(nom::Err::Failure(ErrorContext::new( "`is defined` operator can only be used on variables, not on their fields", start, ))); } _ => { return Err(nom::Err::Failure(ErrorContext::new( "`is defined` operator can only be used on variables", start, ))); } }; Ok((i, WithSpan::new(ctor(var_name), start))) } fn filtered(i: &'a str, mut level: Level) -> ParseResult<'a, WithSpan<'a, Self>> { let start = i; let (mut i, mut res) = Self::prefix(i, level)?; while let (j, Some((name, args))) = opt(|i| filter(i, &mut level))(i)? { i = j; let mut arguments = args.unwrap_or_else(|| Vec::with_capacity(1)); arguments.insert(0, res); res = WithSpan::new(Self::Filter(Filter { name, arguments }), start); } Ok((i, res)) } fn prefix(i: &'a str, mut level: Level) -> ParseResult<'a, WithSpan<'a, Self>> { let (_, nested) = level.nest(i)?; let start = i; let (i, (ops, mut expr)) = pair( many0(ws(alt((tag("!"), tag("-"), tag("*"), tag("&"))))), |i| Suffix::parse(i, nested), )(i)?; for op in ops.iter().rev() { // This is a rare place where we create recursion in the parsed AST // without recursing the parser call stack. However, this can lead // to stack overflows in drop glue when the AST is very deep. level = level.nest(i)?.1; expr = WithSpan::new(Self::Unary(op, Box::new(expr)), start); } Ok((i, expr)) } fn single(i: &'a str, level: Level) -> ParseResult<'a, WithSpan<'a, Self>> { let (_, level) = level.nest(i)?; alt(( Self::num, Self::str, Self::char, Self::path_var_bool, move |i| Self::array(i, level), move |i| Self::group(i, level), ))(i) } fn group(i: &'a str, level: Level) -> ParseResult<'a, WithSpan<'a, Self>> { let (_, level) = level.nest(i)?; let start = i; let (i, expr) = preceded(ws(char('(')), opt(|i| Self::parse(i, level)))(i)?; let Some(expr) = expr else { let (i, _) = char(')')(i)?; return Ok((i, WithSpan::new(Self::Tuple(vec![]), start))); }; let (i, comma) = ws(opt(peek(char(','))))(i)?; if comma.is_none() { let (i, _) = char(')')(i)?; return Ok((i, WithSpan::new(Self::Group(Box::new(expr)), start))); } let mut exprs = vec![expr]; let (i, ()) = fold_many0( preceded(char(','), ws(|i| Self::parse(i, level))), || (), |(), expr| { exprs.push(expr); }, )(i)?; let (i, _) = pair(ws(opt(char(','))), char(')'))(i)?; Ok((i, WithSpan::new(Self::Tuple(exprs), start))) } fn array(i: &'a str, level: Level) -> ParseResult<'a, WithSpan<'a, Self>> { let start = i; let (i, level) = level.nest(i)?; let (i, array) = preceded( ws(char('[')), cut(terminated( opt(terminated( separated_list1(char(','), ws(move |i| Self::parse(i, level))), ws(opt(char(','))), )), char(']'), )), )(i)?; Ok(( i, WithSpan::new(Self::Array(array.unwrap_or_default()), start), )) } fn path_var_bool(i: &'a str) -> ParseResult<'a, WithSpan<'a, Self>> { let start = i; map(path_or_identifier, |v| match v { PathOrIdentifier::Path(v) => Self::Path(v), PathOrIdentifier::Identifier("true") => Self::BoolLit(true), PathOrIdentifier::Identifier("false") => Self::BoolLit(false), PathOrIdentifier::Identifier(v) => Self::Var(v), })(i) .map(|(i, expr)| (i, WithSpan::new(expr, start))) } fn str(i: &'a str) -> ParseResult<'a, WithSpan<'a, Self>> { let start = i; map(str_lit, |i| WithSpan::new(Self::StrLit(i), start))(i) } fn num(i: &'a str) -> ParseResult<'a, WithSpan<'a, Self>> { let start = i; let (i, (full, num)) = consumed(num_lit)(i)?; Ok((i, WithSpan::new(Expr::NumLit(full, num), start))) } fn char(i: &'a str) -> ParseResult<'a, WithSpan<'a, Self>> { let start = i; map(char_lit, |i| WithSpan::new(Self::CharLit(i), start))(i) } #[must_use] pub fn contains_bool_lit_or_is_defined(&self) -> bool { match self { Self::BoolLit(_) | Self::IsDefined(_) | Self::IsNotDefined(_) => true, Self::Unary(_, expr) | Self::Group(expr) => expr.contains_bool_lit_or_is_defined(), Self::BinOp("&&" | "||", left, right) => { left.contains_bool_lit_or_is_defined() || right.contains_bool_lit_or_is_defined() } Self::NumLit(_, _) | Self::StrLit(_) | Self::CharLit(_) | Self::Var(_) | Self::FilterSource | Self::RustMacro(_, _) | Self::As(_, _) | Self::Call(_, _) | Self::Range(_, _, _) | Self::Try(_) | Self::NamedArgument(_, _) | Self::Filter(_) | Self::Attr(_, _) | Self::Index(_, _) | Self::Tuple(_) | Self::Array(_) | Self::BinOp(_, _, _) | Self::Path(_) => false, } } } fn token_xor(i: &str) -> ParseResult<'_> { let (i, good) = alt((value(true, keyword("xor")), value(false, char('^'))))(i)?; if good { Ok((i, "^")) } else { Err(nom::Err::Failure(ErrorContext::new( "the binary XOR operator is called `xor` in rinja", i, ))) } } fn token_bitand(i: &str) -> ParseResult<'_> { let (i, good) = alt(( value(true, keyword("bitand")), value(false, pair(char('&'), not(char('&')))), ))(i)?; if good { Ok((i, "&")) } else { Err(nom::Err::Failure(ErrorContext::new( "the binary AND operator is called `bitand` in rinja", i, ))) } } #[derive(Clone, Debug, PartialEq)] pub struct Filter<'a> { pub name: &'a str, pub arguments: Vec>>, } enum Suffix<'a> { Attr(&'a str), Index(WithSpan<'a, Expr<'a>>), Call(Vec>>), // The value is the arguments of the macro call. MacroCall(&'a str), Try, } impl<'a> Suffix<'a> { fn parse(i: &'a str, level: Level) -> ParseResult<'a, WithSpan<'a, Expr<'a>>> { let (_, level) = level.nest(i)?; let (mut i, mut expr) = Expr::single(i, level)?; loop { let (j, suffix) = opt(alt(( Self::attr, |i| Self::index(i, level), |i| Self::call(i, level), Self::r#try, Self::r#macro, )))(i)?; match suffix { Some(Self::Attr(attr)) => expr = WithSpan::new(Expr::Attr(expr.into(), attr), i), Some(Self::Index(index)) => { expr = WithSpan::new(Expr::Index(expr.into(), index.into()), i); } Some(Self::Call(args)) => expr = WithSpan::new(Expr::Call(expr.into(), args), i), Some(Self::Try) => expr = WithSpan::new(Expr::Try(expr.into()), i), Some(Self::MacroCall(args)) => match expr.inner { Expr::Path(path) => expr = WithSpan::new(Expr::RustMacro(path, args), i), Expr::Var(name) => expr = WithSpan::new(Expr::RustMacro(vec![name], args), i), _ => return Err(nom::Err::Failure(error_position!(i, ErrorKind::Tag))), }, None => break, } i = j; } Ok((i, expr)) } fn r#macro(i: &'a str) -> ParseResult<'a, Self> { fn nested_parenthesis(input: &str) -> ParseResult<'_, ()> { let mut nested = 0; let mut last = 0; let mut in_str = false; let mut escaped = false; for (i, c) in input.char_indices() { if !(c == '(' || c == ')') || !in_str { match c { '(' => nested += 1, ')' => { if nested == 0 { last = i; break; } nested -= 1; } '"' => { if in_str { if !escaped { in_str = false; } } else { in_str = true; } } '\\' => { escaped = !escaped; } _ => (), } } if escaped && c != '\\' { escaped = false; } } if nested == 0 { Ok((&input[last..], ())) } else { fail(input) } } preceded( pair(ws(char('!')), char('(')), cut(terminated( map(recognize(nested_parenthesis), Self::MacroCall), char(')'), )), )(i) } fn attr(i: &'a str) -> ParseResult<'a, Self> { map( preceded( ws(pair(char('.'), not(char('.')))), cut(alt((digit1, identifier))), ), Self::Attr, )(i) } fn index(i: &'a str, level: Level) -> ParseResult<'a, Self> { let (_, level) = level.nest(i)?; map( preceded( ws(char('[')), cut(terminated(ws(move |i| Expr::parse(i, level)), char(']'))), ), Self::Index, )(i) } fn call(i: &'a str, level: Level) -> ParseResult<'a, Self> { let (_, level) = level.nest(i)?; map(move |i| Expr::arguments(i, level, false), Self::Call)(i) } fn r#try(i: &'a str) -> ParseResult<'a, Self> { map(preceded(take_till(not_ws), char('?')), |_| Self::Try)(i) } } rinja_parser-0.3.5/src/lib.rs000064400000000000000000001061321046102023000142160ustar 00000000000000#![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))] #![deny(elided_lifetimes_in_paths)] #![deny(unreachable_pub)] use std::borrow::Cow; use std::cell::Cell; use std::env::current_dir; use std::ops::{Deref, DerefMut}; use std::path::Path; use std::sync::Arc; use std::{fmt, str}; use nom::branch::alt; use nom::bytes::complete::{escaped, is_not, tag, take_till, take_while_m_n}; use nom::character::complete::{anychar, char, one_of, satisfy}; use nom::combinator::{consumed, cut, fail, map, not, opt, recognize, value}; use nom::error::{ErrorKind, FromExternalError}; use nom::multi::{many0_count, many1}; use nom::sequence::{delimited, pair, preceded, tuple}; use nom::{AsChar, InputTakeAtPosition}; pub mod expr; pub use expr::{Expr, Filter}; mod memchr_splitter; pub mod node; pub use node::Node; mod target; pub use target::Target; #[cfg(test)] mod tests; mod _parsed { use std::path::Path; use std::sync::Arc; use std::{fmt, mem}; use super::node::Node; use super::{Ast, ParseError, Syntax}; pub struct Parsed { // `source` must outlive `ast`, so `ast` must be declared before `source` ast: Ast<'static>, #[allow(dead_code)] source: Arc, } impl Parsed { /// If `file_path` is `None`, it means the `source` is an inline template. Therefore, if /// a parsing error occurs, we won't display the path as it wouldn't be useful. pub fn new( source: Arc, file_path: Option>, syntax: &Syntax<'_>, ) -> Result { // Self-referential borrowing: `self` will keep the source alive as `String`, // internally we will transmute it to `&'static str` to satisfy the compiler. // However, we only expose the nodes with a lifetime limited to `self`. let src = unsafe { mem::transmute::<&str, &'static str>(source.as_ref()) }; let ast = Ast::from_str(src, file_path, syntax)?; Ok(Self { ast, source }) } // The return value's lifetime must be limited to `self` to uphold the unsafe invariant. #[must_use] pub fn nodes(&self) -> &[Node<'_>] { &self.ast.nodes } #[must_use] pub fn source(&self) -> &str { &self.source } } impl fmt::Debug for Parsed { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.debug_struct("Parsed") .field("nodes", &self.ast.nodes) .finish_non_exhaustive() } } impl PartialEq for Parsed { fn eq(&self, other: &Self) -> bool { self.ast.nodes == other.ast.nodes } } impl Default for Parsed { fn default() -> Self { Self { ast: Ast::default(), source: "".into(), } } } } pub use _parsed::Parsed; #[derive(Debug, Default)] pub struct Ast<'a> { nodes: Vec>, } impl<'a> Ast<'a> { /// If `file_path` is `None`, it means the `source` is an inline template. Therefore, if /// a parsing error occurs, we won't display the path as it wouldn't be useful. pub fn from_str( src: &'a str, file_path: Option>, syntax: &Syntax<'_>, ) -> Result { match Node::parse_template(src, &State::new(syntax)) { Ok(("", nodes)) => Ok(Self { nodes }), Ok(_) | Err(nom::Err::Incomplete(_)) => unreachable!(), Err( nom::Err::Error(ErrorContext { input, message, .. }) | nom::Err::Failure(ErrorContext { input, message, .. }), ) => Err(ParseError { message, offset: src.len() - input.len(), file_path, }), } } #[must_use] pub fn nodes(&self) -> &[Node<'a>] { &self.nodes } } /// Struct used to wrap types with their associated "span" which is used when generating errors /// in the code generation. pub struct WithSpan<'a, T> { inner: T, span: &'a str, } impl<'a, T> WithSpan<'a, T> { pub const fn new(inner: T, span: &'a str) -> Self { Self { inner, span } } pub fn span(&self) -> &'a str { self.span } pub fn deconstruct(self) -> (T, &'a str) { let Self { inner, span } = self; (inner, span) } } impl<'a, T> Deref for WithSpan<'a, T> { type Target = T; fn deref(&self) -> &Self::Target { &self.inner } } impl<'a, T> DerefMut for WithSpan<'a, T> { fn deref_mut(&mut self) -> &mut Self::Target { &mut self.inner } } impl<'a, T: fmt::Debug> fmt::Debug for WithSpan<'a, T> { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "{:?}", self.inner) } } impl<'a, T: Clone> Clone for WithSpan<'a, T> { fn clone(&self) -> Self { Self { inner: self.inner.clone(), span: self.span, } } } impl<'a, T: PartialEq> PartialEq for WithSpan<'a, T> { fn eq(&self, other: &Self) -> bool { // We never want to compare the span information. self.inner == other.inner } } #[derive(Debug, Clone, PartialEq, Eq)] pub struct ParseError { pub message: Option>, pub offset: usize, pub file_path: Option>, } impl std::error::Error for ParseError {} impl fmt::Display for ParseError { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { let ParseError { message, file_path, offset, } = self; if let Some(message) = message { writeln!(f, "{message}")?; } let path = file_path .as_ref() .and_then(|path| Some(strip_common(¤t_dir().ok()?, path))); match path { Some(path) => write!(f, "failed to parse template source\n --> {path}@{offset}"), None => write!(f, "failed to parse template source near offset {offset}"), } } } pub(crate) type ParseErr<'a> = nom::Err>; pub(crate) type ParseResult<'a, T = &'a str> = Result<(&'a str, T), ParseErr<'a>>; /// This type is used to handle `nom` errors and in particular to add custom error messages. /// It used to generate `ParserError`. /// /// It cannot be used to replace `ParseError` because it expects a generic, which would make /// `rinja`'s users experience less good (since this generic is only needed for `nom`). #[derive(Debug)] pub(crate) struct ErrorContext<'a> { pub(crate) input: &'a str, pub(crate) message: Option>, } impl<'a> ErrorContext<'a> { fn unclosed(kind: &str, tag: &str, i: &'a str) -> Self { Self::new(format!("unclosed {kind}, missing {tag:?}"), i) } fn new(message: impl Into>, input: &'a str) -> Self { Self { input, message: Some(message.into()), } } } impl<'a> nom::error::ParseError<&'a str> for ErrorContext<'a> { fn from_error_kind(input: &'a str, _code: ErrorKind) -> Self { Self { input, message: None, } } fn append(_: &'a str, _: ErrorKind, other: Self) -> Self { other } } impl<'a, E: std::fmt::Display> FromExternalError<&'a str, E> for ErrorContext<'a> { fn from_external_error(input: &'a str, _kind: ErrorKind, e: E) -> Self { Self { input, message: Some(Cow::Owned(e.to_string())), } } } impl<'a> From> for nom::Err> { fn from(cx: ErrorContext<'a>) -> Self { Self::Failure(cx) } } fn is_ws(c: char) -> bool { matches!(c, ' ' | '\t' | '\r' | '\n') } fn not_ws(c: char) -> bool { !is_ws(c) } fn ws<'a, O>( inner: impl FnMut(&'a str) -> ParseResult<'a, O>, ) -> impl FnMut(&'a str) -> ParseResult<'a, O> { delimited(take_till(not_ws), inner, take_till(not_ws)) } /// Skips input until `end` was found, but does not consume it. /// Returns tuple that would be returned when parsing `end`. fn skip_till<'a, 'b, O>( candidate_finder: impl crate::memchr_splitter::Splitter, end: impl FnMut(&'a str) -> ParseResult<'a, O>, ) -> impl FnMut(&'a str) -> ParseResult<'a, (&'a str, O)> { let mut next = alt((map(end, Some), map(anychar, |_| None))); move |start: &'a str| { let mut i = start; loop { i = match candidate_finder.split(i) { Some((_, j)) => j, None => return Err(nom::Err::Error(ErrorContext::new("`end` not found`", i))), }; i = match next(i)? { (j, Some(lookahead)) => return Ok((i, (j, lookahead))), (j, None) => j, }; } } } fn keyword<'a>(k: &'a str) -> impl FnMut(&'a str) -> ParseResult<'a> { move |i: &'a str| -> ParseResult<'a> { let (j, v) = identifier(i)?; if k == v { Ok((j, v)) } else { fail(i) } } } fn identifier(input: &str) -> ParseResult<'_> { fn start(s: &str) -> ParseResult<'_> { s.split_at_position1_complete( |c| !(c.is_alpha() || c == '_' || c >= '\u{0080}'), nom::error::ErrorKind::Alpha, ) } fn tail(s: &str) -> ParseResult<'_> { s.split_at_position1_complete( |c| !(c.is_alphanum() || c == '_' || c >= '\u{0080}'), nom::error::ErrorKind::Alpha, ) } recognize(pair(start, opt(tail)))(input) } fn bool_lit(i: &str) -> ParseResult<'_> { alt((keyword("false"), keyword("true")))(i) } #[derive(Debug, Clone, Copy, PartialEq)] pub enum Num<'a> { Int(&'a str, Option), Float(&'a str, Option), } fn num_lit<'a>(start: &'a str) -> ParseResult<'a, Num<'a>> { fn num_lit_suffix<'a, T: Copy>( kind: &'a str, list: &[(&str, T)], start: &'a str, i: &'a str, ) -> ParseResult<'a, T> { let (i, suffix) = identifier(i)?; if let Some(value) = list .iter() .copied() .find_map(|(name, value)| (name == suffix).then_some(value)) { Ok((i, value)) } else { Err(nom::Err::Failure(ErrorContext::new( format!("unknown {kind} suffix `{suffix}`"), start, ))) } } // Equivalent to . let int_with_base = pair(opt(char('-')), |i| { let (i, (kind, base)) = consumed(preceded( char('0'), alt(( value(2, char('b')), value(8, char('o')), value(16, char('x')), )), ))(i)?; match opt(separated_digits(base, false))(i)? { (i, Some(_)) => Ok((i, ())), (_, None) => Err(nom::Err::Failure(ErrorContext::new( format!("expected digits after `{kind}`"), start, ))), } }); // Equivalent to : // no `_` directly after the decimal point `.`, or between `e` and `+/-`. let float = |i: &'a str| -> ParseResult<'a, ()> { let (i, has_dot) = opt(pair(char('.'), separated_digits(10, true)))(i)?; let (i, has_exp) = opt(|i| { let (i, (kind, op)) = pair(one_of("eE"), opt(one_of("+-")))(i)?; match opt(separated_digits(10, op.is_none()))(i)? { (i, Some(_)) => Ok((i, ())), (_, None) => Err(nom::Err::Failure(ErrorContext::new( format!("expected decimal digits, `+` or `-` after exponent `{kind}`"), start, ))), } })(i)?; match (has_dot, has_exp) { (Some(_), _) | (_, Some(())) => Ok((i, ())), _ => fail(start), } }; let (i, num) = if let Ok((i, Some(num))) = opt(recognize(int_with_base))(start) { let (i, suffix) = opt(|i| num_lit_suffix("integer", INTEGER_TYPES, start, i))(i)?; (i, Num::Int(num, suffix)) } else { let (i, (num, float)) = consumed(preceded( pair(opt(char('-')), separated_digits(10, true)), opt(float), ))(start)?; if float.is_some() { let (i, suffix) = opt(|i| num_lit_suffix("float", FLOAT_TYPES, start, i))(i)?; (i, Num::Float(num, suffix)) } else { let (i, suffix) = opt(|i| num_lit_suffix("number", NUM_TYPES, start, i))(i)?; match suffix { Some(NumKind::Int(kind)) => (i, Num::Int(num, Some(kind))), Some(NumKind::Float(kind)) => (i, Num::Float(num, Some(kind))), None => (i, Num::Int(num, None)), } } }; Ok((i, num)) } /// Underscore separated digits of the given base, unless `start` is true this may start /// with an underscore. fn separated_digits(radix: u32, start: bool) -> impl Fn(&str) -> ParseResult<'_> { move |i| { recognize(tuple(( |i| match start { true => Ok((i, 0)), false => many0_count(char('_'))(i), }, satisfy(|ch| ch.is_digit(radix)), many0_count(satisfy(|ch| ch == '_' || ch.is_digit(radix))), )))(i) } } #[derive(Clone, Copy, Debug, PartialEq)] pub enum StrPrefix { Binary, CLike, } impl StrPrefix { #[must_use] pub fn to_char(self) -> char { match self { Self::Binary => 'b', Self::CLike => 'c', } } } impl fmt::Display for StrPrefix { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { use std::fmt::Write; f.write_char(self.to_char()) } } #[derive(Clone, Debug, PartialEq)] pub struct StrLit<'a> { pub prefix: Option, pub content: &'a str, } fn str_lit_without_prefix(i: &str) -> ParseResult<'_> { let (i, s) = delimited( char('"'), opt(escaped(is_not("\\\""), '\\', anychar)), char('"'), )(i)?; Ok((i, s.unwrap_or_default())) } fn str_lit(i: &str) -> Result<(&str, StrLit<'_>), ParseErr<'_>> { let (i, (prefix, content)) = tuple((opt(alt((char('b'), char('c')))), str_lit_without_prefix))(i)?; let prefix = match prefix { Some('b') => Some(StrPrefix::Binary), Some('c') => Some(StrPrefix::CLike), _ => None, }; Ok((i, StrLit { prefix, content })) } #[derive(Clone, Copy, Debug, PartialEq)] pub enum CharPrefix { Binary, } #[derive(Clone, Debug, PartialEq)] pub struct CharLit<'a> { pub prefix: Option, pub content: &'a str, } // Information about allowed character escapes is available at: // . fn char_lit(i: &str) -> Result<(&str, CharLit<'_>), ParseErr<'_>> { let start = i; let (i, (b_prefix, s)) = tuple(( opt(char('b')), delimited( char('\''), opt(escaped(is_not("\\\'"), '\\', anychar)), char('\''), ), ))(i)?; let Some(s) = s else { return Err(nom::Err::Failure(ErrorContext::new( "empty character literal", start, ))); }; let Ok(("", c)) = Char::parse(s) else { return Err(nom::Err::Failure(ErrorContext::new( "invalid character", start, ))); }; let (nb, max_value, err1, err2) = match c { Char::Literal | Char::Escaped => { return Ok((i, CharLit { prefix: b_prefix.map(|_| CharPrefix::Binary), content: s, })); } Char::AsciiEscape(nb) => ( nb, // `0x7F` is the maximum value for a `\x` escaped character. 0x7F, "invalid character in ascii escape", "must be a character in the range [\\x00-\\x7f]", ), Char::UnicodeEscape(nb) => ( nb, // `0x10FFFF` is the maximum value for a `\u` escaped character. 0x0010_FFFF, "invalid character in unicode escape", "unicode escape must be at most 10FFFF", ), }; let Ok(nb) = u32::from_str_radix(nb, 16) else { return Err(nom::Err::Failure(ErrorContext::new(err1, start))); }; if nb > max_value { return Err(nom::Err::Failure(ErrorContext::new(err2, start))); } Ok((i, CharLit { prefix: b_prefix.map(|_| CharPrefix::Binary), content: s, })) } /// Represents the different kinds of char declarations: enum Char<'a> { /// Any character that is not escaped. Literal, /// An escaped character (like `\n`) which doesn't require any extra check. Escaped, /// Ascii escape (like `\x12`). AsciiEscape(&'a str), /// Unicode escape (like `\u{12}`). UnicodeEscape(&'a str), } impl<'a> Char<'a> { fn parse(i: &'a str) -> ParseResult<'a, Self> { if i.chars().count() == 1 { return Ok(("", Self::Literal)); } map( tuple(( char('\\'), alt(( map(char('n'), |_| Self::Escaped), map(char('r'), |_| Self::Escaped), map(char('t'), |_| Self::Escaped), map(char('\\'), |_| Self::Escaped), map(char('0'), |_| Self::Escaped), map(char('\''), |_| Self::Escaped), // Not useful but supported by rust. map(char('"'), |_| Self::Escaped), map( tuple(( char('x'), take_while_m_n(2, 2, |c: char| c.is_ascii_hexdigit()), )), |(_, s)| Self::AsciiEscape(s), ), map( tuple(( tag("u{"), take_while_m_n(1, 6, |c: char| c.is_ascii_hexdigit()), char('}'), )), |(_, s, _)| Self::UnicodeEscape(s), ), )), )), |(_, ch)| ch, )(i) } } enum PathOrIdentifier<'a> { Path(Vec<&'a str>), Identifier(&'a str), } fn path_or_identifier(i: &str) -> ParseResult<'_, PathOrIdentifier<'_>> { let root = ws(opt(tag("::"))); let tail = opt(many1(preceded(ws(tag("::")), identifier))); let (i, (root, start, rest)) = tuple((root, identifier, tail))(i)?; let rest = rest.as_deref().unwrap_or_default(); // The returned identifier can be assumed to be path if: // - it is an absolute path (starts with `::`), or // - it has multiple components (at least one `::`), or // - the first letter is uppercase match (root, start, rest) { (Some(_), start, tail) => { let mut path = Vec::with_capacity(2 + tail.len()); path.push(""); path.push(start); path.extend(rest); Ok((i, PathOrIdentifier::Path(path))) } (None, name, []) if name.chars().next().map_or(true, char::is_lowercase) => { Ok((i, PathOrIdentifier::Identifier(name))) } (None, start, tail) => { let mut path = Vec::with_capacity(1 + tail.len()); path.push(start); path.extend(rest); Ok((i, PathOrIdentifier::Path(path))) } } } struct State<'a> { syntax: &'a Syntax<'a>, loop_depth: Cell, level: Cell, } impl<'a> State<'a> { fn new(syntax: &'a Syntax<'a>) -> State<'a> { State { syntax, loop_depth: Cell::new(0), level: Cell::new(Level::default()), } } fn nest<'b, T, F: FnOnce(&'b str) -> ParseResult<'b, T>>( &self, i: &'b str, callback: F, ) -> ParseResult<'b, T> { let prev_level = self.level.get(); let (_, level) = prev_level.nest(i)?; self.level.set(level); let ret = callback(i); self.level.set(prev_level); ret } fn tag_block_start<'i>(&self, i: &'i str) -> ParseResult<'i> { tag(self.syntax.block_start)(i) } fn tag_block_end<'i>(&self, i: &'i str) -> ParseResult<'i> { tag(self.syntax.block_end)(i) } fn tag_comment_start<'i>(&self, i: &'i str) -> ParseResult<'i> { tag(self.syntax.comment_start)(i) } fn tag_comment_end<'i>(&self, i: &'i str) -> ParseResult<'i> { tag(self.syntax.comment_end)(i) } fn tag_expr_start<'i>(&self, i: &'i str) -> ParseResult<'i> { tag(self.syntax.expr_start)(i) } fn tag_expr_end<'i>(&self, i: &'i str) -> ParseResult<'i> { tag(self.syntax.expr_end)(i) } fn enter_loop(&self) { self.loop_depth.set(self.loop_depth.get() + 1); } fn leave_loop(&self) { self.loop_depth.set(self.loop_depth.get() - 1); } fn is_in_loop(&self) -> bool { self.loop_depth.get() > 0 } } #[derive(Default, Hash, PartialEq, Clone, Copy)] pub struct Syntax<'a>(InnerSyntax<'a>); // This abstraction ensures that the fields are readable, but not writable. #[derive(Hash, PartialEq, Clone, Copy)] pub struct InnerSyntax<'a> { pub block_start: &'a str, pub block_end: &'a str, pub expr_start: &'a str, pub expr_end: &'a str, pub comment_start: &'a str, pub comment_end: &'a str, } impl<'a> Deref for Syntax<'a> { type Target = InnerSyntax<'a>; #[inline] fn deref(&self) -> &Self::Target { &self.0 } } impl Default for InnerSyntax<'static> { fn default() -> Self { Self { block_start: "{%", block_end: "%}", expr_start: "{{", expr_end: "}}", comment_start: "{#", comment_end: "#}", } } } impl<'a> fmt::Debug for Syntax<'a> { #[inline] fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { fmt_syntax("Syntax", self, f) } } impl<'a> fmt::Debug for InnerSyntax<'a> { #[inline] fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { fmt_syntax("InnerSyntax", self, f) } } fn fmt_syntax(name: &str, inner: &InnerSyntax<'_>, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.debug_struct(name) .field("block_start", &inner.block_start) .field("block_end", &inner.block_end) .field("expr_start", &inner.expr_start) .field("expr_end", &inner.expr_end) .field("comment_start", &inner.comment_start) .field("comment_end", &inner.comment_end) .finish() } #[derive(Debug, Default, Clone, Copy, Hash, PartialEq)] #[cfg_attr(feature = "config", derive(serde::Deserialize))] pub struct SyntaxBuilder<'a> { pub name: &'a str, pub block_start: Option<&'a str>, pub block_end: Option<&'a str>, pub expr_start: Option<&'a str>, pub expr_end: Option<&'a str>, pub comment_start: Option<&'a str>, pub comment_end: Option<&'a str>, } impl<'a> SyntaxBuilder<'a> { pub fn to_syntax(&self) -> Result, String> { let default = InnerSyntax::default(); let syntax = Syntax(InnerSyntax { block_start: self.block_start.unwrap_or(default.block_start), block_end: self.block_end.unwrap_or(default.block_end), expr_start: self.expr_start.unwrap_or(default.expr_start), expr_end: self.expr_end.unwrap_or(default.expr_end), comment_start: self.comment_start.unwrap_or(default.comment_start), comment_end: self.comment_end.unwrap_or(default.comment_end), }); for (s, k, is_closing) in [ (syntax.block_start, "opening block", false), (syntax.block_end, "closing block", true), (syntax.expr_start, "opening expression", false), (syntax.expr_end, "closing expression", true), (syntax.comment_start, "opening comment", false), (syntax.comment_end, "closing comment", true), ] { if s.len() < 2 { return Err(format!( "delimiters must be at least two characters long. \ The {k} delimiter ({s:?}) is too short", )); } else if s.chars().any(char::is_whitespace) { return Err(format!( "delimiters may not contain white spaces. \ The {k} delimiter ({s:?}) contains white spaces", )); } else if is_closing && ['(', '-', '+', '~', '.', '>', '<', '&', '|', '!'] .contains(&s.chars().next().unwrap()) { return Err(format!( "closing delimiters may not start with operators. \ The {k} delimiter ({s:?}) starts with operator `{}`", s.chars().next().unwrap(), )); } } for ((s1, k1), (s2, k2)) in [ ( (syntax.block_start, "block"), (syntax.expr_start, "expression"), ), ( (syntax.block_start, "block"), (syntax.comment_start, "comment"), ), ( (syntax.expr_start, "expression"), (syntax.comment_start, "comment"), ), ] { if s1.starts_with(s2) || s2.starts_with(s1) { let (s1, k1, s2, k2) = match s1.len() < s2.len() { true => (s1, k1, s2, k2), false => (s2, k2, s1, k1), }; return Err(format!( "an opening delimiter may not be the prefix of another delimiter. \ The {k1} delimiter ({s1:?}) clashes with the {k2} delimiter ({s2:?})", )); } } Ok(syntax) } } #[derive(Clone, Copy, Default)] pub(crate) struct Level(u8); impl Level { fn nest(self, i: &str) -> ParseResult<'_, Level> { if self.0 >= Self::MAX_DEPTH { return Err(nom::Err::Failure(ErrorContext::new( "your template code is too deeply nested, or last expression is too complex", i, ))); } Ok((i, Level(self.0 + 1))) } const MAX_DEPTH: u8 = 128; } fn filter<'a>( i: &'a str, level: &mut Level, ) -> ParseResult<'a, (&'a str, Option>>>)> { let (j, _) = take_till(not_ws)(i)?; let had_spaces = i.len() != j.len(); let (j, _) = pair(char('|'), not(char('|')))(j)?; if !had_spaces { *level = level.nest(i)?.1; cut(pair( ws(identifier), opt(|i| Expr::arguments(i, *level, false)), ))(j) } else { Err(nom::Err::Failure(ErrorContext::new( "the filter operator `|` must not be preceded by any whitespace characters\n\ the binary OR operator is called `bitor` in rinja", i, ))) } } /// Returns the common parts of two paths. /// /// The goal of this function is to reduce the path length based on the `base` argument /// (generally the path where the program is running into). For example: /// /// ```text /// current dir: /a/b/c /// path: /a/b/c/d/e.txt /// ``` /// /// `strip_common` will return `d/e.txt`. #[must_use] pub fn strip_common(base: &Path, path: &Path) -> String { let path = match path.canonicalize() { Ok(path) => path, Err(_) => return path.display().to_string(), }; let mut components_iter = path.components().peekable(); for current_path_component in base.components() { let Some(path_component) = components_iter.peek() else { return path.display().to_string(); }; if current_path_component != *path_component { break; } components_iter.next(); } let path_parts = components_iter .map(|c| c.as_os_str().to_string_lossy()) .collect::>(); if path_parts.is_empty() { path.display().to_string() } else { path_parts.join(std::path::MAIN_SEPARATOR_STR) } } #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum IntKind { I8, I16, I32, I64, I128, Isize, U8, U16, U32, U64, U128, Usize, } #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum FloatKind { F16, F32, F64, F128, } #[derive(Debug, Clone, Copy, PartialEq, Eq)] enum NumKind { Int(IntKind), Float(FloatKind), } /// Primitive integer types. Also used as number suffixes. const INTEGER_TYPES: &[(&str, IntKind)] = &[ ("i8", IntKind::I8), ("i16", IntKind::I16), ("i32", IntKind::I32), ("i64", IntKind::I64), ("i128", IntKind::I128), ("isize", IntKind::Isize), ("u8", IntKind::U8), ("u16", IntKind::U16), ("u32", IntKind::U32), ("u64", IntKind::U64), ("u128", IntKind::U128), ("usize", IntKind::Usize), ]; /// Primitive floating point types. Also used as number suffixes. const FLOAT_TYPES: &[(&str, FloatKind)] = &[ ("f16", FloatKind::F16), ("f32", FloatKind::F32), ("f64", FloatKind::F64), ("f128", FloatKind::F128), ]; /// Primitive numeric types. Also used as number suffixes. const NUM_TYPES: &[(&str, NumKind)] = &{ let mut list = [("", NumKind::Int(IntKind::I8)); INTEGER_TYPES.len() + FLOAT_TYPES.len()]; let mut i = 0; let mut o = 0; while i < INTEGER_TYPES.len() { let (name, value) = INTEGER_TYPES[i]; list[o] = (name, NumKind::Int(value)); i += 1; o += 1; } let mut i = 0; while i < FLOAT_TYPES.len() { let (name, value) = FLOAT_TYPES[i]; list[o] = (name, NumKind::Float(value)); i += 1; o += 1; } list }; /// Complete list of named primitive types. const PRIMITIVE_TYPES: &[&str] = &{ let mut list = [""; NUM_TYPES.len() + 1]; let mut i = 0; let mut o = 0; while i < NUM_TYPES.len() { list[o] = NUM_TYPES[i].0; i += 1; o += 1; } list[o] = "bool"; list }; #[cfg(not(windows))] #[cfg(test)] mod test { use std::path::Path; use super::*; #[test] fn test_strip_common() { // Full path is returned instead of empty when the entire path is in common. assert_eq!(strip_common(Path::new("home"), Path::new("home")), "home"); let cwd = std::env::current_dir().expect("current_dir failed"); // We need actual existing paths for `canonicalize` to work, so let's do that. let entry = cwd .read_dir() .expect("read_dir failed") .filter_map(std::result::Result::ok) .find(|f| f.path().is_file()) .expect("no entry"); // Since they have the complete path in common except for the folder entry name, it should // return only the folder entry name. assert_eq!( strip_common(&cwd, &entry.path()), entry.file_name().to_string_lossy() ); // In this case it cannot canonicalize `/a/b/c` so it returns the path as is. assert_eq!(strip_common(&cwd, Path::new("/a/b/c")), "/a/b/c"); } #[test] fn test_num_lit() { // Should fail. assert!(num_lit(".").is_err()); // Should succeed. assert_eq!( num_lit("1.2E-02").unwrap(), ("", Num::Float("1.2E-02", None)) ); assert_eq!(num_lit("4e3").unwrap(), ("", Num::Float("4e3", None)),); assert_eq!(num_lit("4e+_3").unwrap(), ("", Num::Float("4e+_3", None)),); // Not supported because Rust wants a number before the `.`. assert!(num_lit(".1").is_err()); assert!(num_lit(".1E-02").is_err()); // A `_` directly after the `.` denotes a field. assert_eq!(num_lit("1._0").unwrap(), ("._0", Num::Int("1", None))); assert_eq!(num_lit("1_.0").unwrap(), ("", Num::Float("1_.0", None))); // Not supported (voluntarily because of `1..` syntax). assert_eq!(num_lit("1.").unwrap(), (".", Num::Int("1", None))); assert_eq!(num_lit("1_.").unwrap(), (".", Num::Int("1_", None))); assert_eq!(num_lit("1_2.").unwrap(), (".", Num::Int("1_2", None))); // Numbers with suffixes assert_eq!( num_lit("-1usize").unwrap(), ("", Num::Int("-1", Some(IntKind::Usize))) ); assert_eq!( num_lit("123_f32").unwrap(), ("", Num::Float("123_", Some(FloatKind::F32))) ); assert_eq!( num_lit("1_.2_e+_3_f64|into_isize").unwrap(), ( "|into_isize", Num::Float("1_.2_e+_3_", Some(FloatKind::F64)) ) ); assert_eq!( num_lit("4e3f128").unwrap(), ("", Num::Float("4e3", Some(FloatKind::F128))), ); } #[test] fn test_char_lit() { let lit = |s: &'static str| crate::CharLit { prefix: None, content: s, }; assert_eq!(char_lit("'a'").unwrap(), ("", lit("a"))); assert_eq!(char_lit("'字'").unwrap(), ("", lit("字"))); // Escaped single characters. assert_eq!(char_lit("'\\\"'").unwrap(), ("", lit("\\\""))); assert_eq!(char_lit("'\\''").unwrap(), ("", lit("\\'"))); assert_eq!(char_lit("'\\t'").unwrap(), ("", lit("\\t"))); assert_eq!(char_lit("'\\n'").unwrap(), ("", lit("\\n"))); assert_eq!(char_lit("'\\r'").unwrap(), ("", lit("\\r"))); assert_eq!(char_lit("'\\0'").unwrap(), ("", lit("\\0"))); // Escaped ascii characters (up to `0x7F`). assert_eq!(char_lit("'\\x12'").unwrap(), ("", lit("\\x12"))); assert_eq!(char_lit("'\\x02'").unwrap(), ("", lit("\\x02"))); assert_eq!(char_lit("'\\x6a'").unwrap(), ("", lit("\\x6a"))); assert_eq!(char_lit("'\\x7F'").unwrap(), ("", lit("\\x7F"))); // Escaped unicode characters (up to `0x10FFFF`). assert_eq!(char_lit("'\\u{A}'").unwrap(), ("", lit("\\u{A}"))); assert_eq!(char_lit("'\\u{10}'").unwrap(), ("", lit("\\u{10}"))); assert_eq!(char_lit("'\\u{aa}'").unwrap(), ("", lit("\\u{aa}"))); assert_eq!(char_lit("'\\u{10FFFF}'").unwrap(), ("", lit("\\u{10FFFF}"))); // Check with `b` prefix. assert_eq!( char_lit("b'a'").unwrap(), ("", crate::CharLit { prefix: Some(crate::CharPrefix::Binary), content: "a" }) ); // Should fail. assert!(char_lit("''").is_err()); assert!(char_lit("'\\o'").is_err()); assert!(char_lit("'\\x'").is_err()); assert!(char_lit("'\\x1'").is_err()); assert!(char_lit("'\\x80'").is_err()); assert!(char_lit("'\\u'").is_err()); assert!(char_lit("'\\u{}'").is_err()); assert!(char_lit("'\\u{110000}'").is_err()); } #[test] fn test_str_lit() { assert_eq!( str_lit(r#"b"hello""#).unwrap(), ("", StrLit { prefix: Some(StrPrefix::Binary), content: "hello" }) ); assert_eq!( str_lit(r#"c"hello""#).unwrap(), ("", StrLit { prefix: Some(StrPrefix::CLike), content: "hello" }) ); assert!(str_lit(r#"d"hello""#).is_err()); } } rinja_parser-0.3.5/src/memchr_splitter.rs000064400000000000000000000065321046102023000166540ustar 00000000000000pub(crate) trait Splitter: Copy { /// If any of the needles was found in the haystack, then split the haystack at the first hit. /// /// Since only the first byte of a needle is inspected, be aware that there can be /// false-positives. Always compare the latter string of the output if it fits the expected /// prefix. fn split<'a>(&self, haystack: &'a str) -> Option<(&'a str, &'a str)>; } impl Splitter for &T { #[inline] fn split<'a>(&self, haystack: &'a str) -> Option<(&'a str, &'a str)> { T::split(self, haystack) } } // define and implement a string splitter using memchr macro_rules! new_memchr_type { ($struct:ident $split_unchecked:ident $memchr:ident $($field:ident)*) => { #[derive(Debug, Clone, Copy)] pub(crate) struct $struct { $($field: u8,)* } impl $struct { #[track_caller] pub(crate) fn new($($field: &str),*) -> Self { Self { $($field: $field.as_bytes()[0],)* } } #[inline] pub(crate) fn split<'a>(&self, haystack: &'a str) -> Option<(&'a str, &'a str)> { // SAFETY: During the construction of `self` we used strings as inputs, and a // string always starts with a byte at char boundary. unsafe { $split_unchecked($(self.$field,)* haystack) } } } impl Splitter for $struct { #[inline] fn split<'a>(&self, haystack: &'a str) -> Option<(&'a str, &'a str)> { self.split(haystack) } } /// SAFETY: caller has to ensure that the needle is at a char boundary pub(crate) unsafe fn $split_unchecked( $($field: u8,)* haystack: &str, ) -> Option<(&str, &str)> { let idx = memchr::$memchr($($field,)* haystack.as_bytes())?; // SAFETY: The caller ensures that the needles are at char boundary. // The found index `< haystack.len()`. Some((haystack.get_unchecked(..idx), haystack.get_unchecked(idx..))) } }; } new_memchr_type!(Splitter1 split1_unchecked memchr a); new_memchr_type!(Splitter2 split2_unchecked memchr2 a b); new_memchr_type!(Splitter3 split3_unchecked memchr3 a b c); #[test] fn candidate_finder() { assert_eq!( Splitter1::new("test").split("abctefg"), Some(("abc", "tefg")), ); assert_eq!(Splitter1::new("xyz").split("abctefg"), None); assert_eq!( Splitter2::new("xyz", "foo").split("abctefg"), Some(("abcte", "fg")), ); assert_eq!(Splitter2::new("oof", "xyz").split("abctefg"), None); assert_eq!( Splitter3::new("oof", "apples", "xyz").split("abctefg"), Some(("", "abctefg")), ); assert_eq!( Splitter3::new("oof", "peaches", "xyz").split("abctefg"), None ); assert_eq!( Splitter3::new("test", "test", "test").split("abctefg"), Some(("abc", "tefg")), ); assert_eq!( Splitter3::new("🧚‍♀️Life", "😀Laugh", "😻Love") .split("sed diam nonumy eirmod tempor 🧚‍♀️Life ut labore et dolore magna aliquyam"), Some(( "sed diam nonumy eirmod tempor ", "🧚‍♀️Life ut labore et dolore magna aliquyam" )), ); } rinja_parser-0.3.5/src/node.rs000064400000000000000000001272741046102023000144070ustar 00000000000000use std::str; use nom::branch::alt; use nom::bytes::complete::{tag, take_till}; use nom::character::complete::{anychar, char}; use nom::combinator::{ complete, consumed, cut, eof, fail, map, map_opt, not, opt, peek, recognize, value, }; use nom::multi::{many0, separated_list0, separated_list1}; use nom::sequence::{delimited, pair, preceded, tuple}; use crate::memchr_splitter::{Splitter1, Splitter2, Splitter3}; use crate::{ ErrorContext, Expr, Filter, ParseResult, State, Target, WithSpan, filter, identifier, is_ws, keyword, not_ws, skip_till, str_lit_without_prefix, ws, }; #[derive(Debug, PartialEq)] pub enum Node<'a> { Lit(WithSpan<'a, Lit<'a>>), Comment(WithSpan<'a, Comment<'a>>), Expr(Ws, WithSpan<'a, Expr<'a>>), Call(WithSpan<'a, Call<'a>>), Let(WithSpan<'a, Let<'a>>), If(WithSpan<'a, If<'a>>), Match(WithSpan<'a, Match<'a>>), Loop(Box>>), Extends(WithSpan<'a, Extends<'a>>), BlockDef(WithSpan<'a, BlockDef<'a>>), Include(WithSpan<'a, Include<'a>>), Import(WithSpan<'a, Import<'a>>), Macro(WithSpan<'a, Macro<'a>>), Raw(WithSpan<'a, Raw<'a>>), Break(WithSpan<'a, Ws>), Continue(WithSpan<'a, Ws>), FilterBlock(WithSpan<'a, FilterBlock<'a>>), } impl<'a> Node<'a> { pub(super) fn parse_template(i: &'a str, s: &State<'_>) -> ParseResult<'a, Vec> { let (i, result) = match complete(|i| Self::many(i, s))(i) { Ok((i, result)) => (i, result), Err(err) => { if let nom::Err::Error(err) | nom::Err::Failure(err) = &err { if err.message.is_none() { opt(|i| unexpected_tag(i, s))(err.input)?; } } return Err(err); } }; let (i, _) = opt(|i| unexpected_tag(i, s))(i)?; let (i, is_eof) = opt(eof)(i)?; if is_eof.is_none() { return Err(nom::Err::Failure(ErrorContext::new( "cannot parse entire template\n\ you should never encounter this error\n\ please report this error to ", i, ))); } Ok((i, result)) } fn many(i: &'a str, s: &State<'_>) -> ParseResult<'a, Vec> { many0(alt(( map(|i| Lit::parse(i, s), Self::Lit), map(|i| Comment::parse(i, s), Self::Comment), |i| Self::expr(i, s), |i| Self::parse(i, s), )))(i) } fn parse(i: &'a str, s: &State<'_>) -> ParseResult<'a, Self> { #[inline] fn wrap<'a, T>( func: impl FnOnce(T) -> Node<'a>, result: ParseResult<'a, T>, ) -> ParseResult<'a, Node<'a>> { result.map(|(i, n)| (i, func(n))) } let start = i; let (j, tag) = preceded( |i| s.tag_block_start(i), peek(preceded( pair(opt(Whitespace::parse), take_till(not_ws)), identifier, )), )(i)?; let func = match tag { "call" => |i, s| wrap(Self::Call, Call::parse(i, s)), "let" | "set" => |i, s| wrap(Self::Let, Let::parse(i, s)), "if" => |i, s| wrap(Self::If, If::parse(i, s)), "for" => |i, s| wrap(|n| Self::Loop(Box::new(n)), Loop::parse(i, s)), "match" => |i, s| wrap(Self::Match, Match::parse(i, s)), "extends" => |i, _s| wrap(Self::Extends, Extends::parse(i)), "include" => |i, _s| wrap(Self::Include, Include::parse(i)), "import" => |i, _s| wrap(Self::Import, Import::parse(i)), "block" => |i, s| wrap(Self::BlockDef, BlockDef::parse(i, s)), "macro" => |i, s| wrap(Self::Macro, Macro::parse(i, s)), "raw" => |i, s| wrap(Self::Raw, Raw::parse(i, s)), "break" => |i, s| Self::r#break(i, s), "continue" => |i, s| Self::r#continue(i, s), "filter" => |i, s| wrap(Self::FilterBlock, FilterBlock::parse(i, s)), _ => return fail(start), }; let (i, node) = s.nest(j, |i| func(i, s))?; let (i, closed) = cut_node( None, alt((value(true, |i| s.tag_block_end(i)), value(false, ws(eof)))), )(i)?; match closed { true => Ok((i, node)), false => Err(ErrorContext::unclosed("block", s.syntax.block_end, start).into()), } } fn r#break(i: &'a str, s: &State<'_>) -> ParseResult<'a, Self> { let mut p = tuple(( opt(Whitespace::parse), ws(keyword("break")), opt(Whitespace::parse), )); let (j, (pws, _, nws)) = p(i)?; if !s.is_in_loop() { return Err(nom::Err::Failure(ErrorContext::new( "you can only `break` inside a `for` loop", i, ))); } Ok((j, Self::Break(WithSpan::new(Ws(pws, nws), i)))) } fn r#continue(i: &'a str, s: &State<'_>) -> ParseResult<'a, Self> { let mut p = tuple(( opt(Whitespace::parse), ws(keyword("continue")), opt(Whitespace::parse), )); let (j, (pws, _, nws)) = p(i)?; if !s.is_in_loop() { return Err(nom::Err::Failure(ErrorContext::new( "you can only `continue` inside a `for` loop", i, ))); } Ok((j, Self::Continue(WithSpan::new(Ws(pws, nws), i)))) } fn expr(i: &'a str, s: &State<'_>) -> ParseResult<'a, Self> { let start = i; let (i, (pws, expr)) = preceded( |i| s.tag_expr_start(i), cut_node( None, pair( opt(Whitespace::parse), ws(|i| Expr::parse(i, s.level.get())), ), ), )(i)?; let (i, (nws, closed)) = cut_node( None, pair( opt(Whitespace::parse), alt((value(true, |i| s.tag_expr_end(i)), value(false, ws(eof)))), ), )(i)?; match closed { true => Ok((i, Self::Expr(Ws(pws, nws), expr))), false => Err(ErrorContext::unclosed("expression", s.syntax.expr_end, start).into()), } } #[must_use] pub fn span(&self) -> &str { match self { Self::Lit(span) => span.span, Self::Comment(span) => span.span, Self::Expr(_, span) => span.span, Self::Call(span) => span.span, Self::Let(span) => span.span, Self::If(span) => span.span, Self::Match(span) => span.span, Self::Loop(span) => span.span, Self::Extends(span) => span.span, Self::BlockDef(span) => span.span, Self::Include(span) => span.span, Self::Import(span) => span.span, Self::Macro(span) => span.span, Self::Raw(span) => span.span, Self::Break(span) => span.span, Self::Continue(span) => span.span, Self::FilterBlock(span) => span.span, } } } fn cut_node<'a, O>( kind: Option<&'static str>, inner: impl FnMut(&'a str) -> ParseResult<'a, O>, ) -> impl FnMut(&'a str) -> ParseResult<'a, O> { let mut inner = cut(inner); move |i: &'a str| { let result = inner(i); if let Err(nom::Err::Failure(err) | nom::Err::Error(err)) = &result { if err.message.is_none() { opt(|i| unexpected_raw_tag(kind, i))(err.input)?; } } result } } fn unexpected_tag<'a>(i: &'a str, s: &State<'_>) -> ParseResult<'a, ()> { value( (), tuple(( |i| s.tag_block_start(i), opt(Whitespace::parse), |i| unexpected_raw_tag(None, i), )), )(i) } fn unexpected_raw_tag<'a>(kind: Option<&'static str>, i: &'a str) -> ParseResult<'a, ()> { let (_, tag) = ws(identifier)(i)?; let msg = match tag { "end" | "elif" | "else" | "when" => match kind { Some(kind) => { format!("node `{tag}` was not expected in the current context: `{kind}` block") } None => format!("node `{tag}` was not expected in the current context"), }, tag if tag.starts_with("end") => format!("unexpected closing tag `{tag}`"), tag => format!("unknown node `{tag}`"), }; Err(nom::Err::Failure(ErrorContext::new(msg, i))) } #[derive(Debug, PartialEq)] pub struct When<'a> { pub ws: Ws, pub target: Vec>, pub nodes: Vec>, } impl<'a> When<'a> { fn r#else(i: &'a str, s: &State<'_>) -> ParseResult<'a, WithSpan<'a, Self>> { let start = i; let mut p = tuple(( |i| s.tag_block_start(i), opt(Whitespace::parse), ws(keyword("else")), cut_node( Some("match-else"), tuple(( opt(Whitespace::parse), |i| s.tag_block_end(i), cut_node(Some("match-else"), |i| Node::many(i, s)), )), ), )); let (i, (_, pws, _, (nws, _, nodes))) = p(i)?; Ok(( i, WithSpan::new( Self { ws: Ws(pws, nws), target: vec![Target::Placeholder("_")], nodes, }, start, ), )) } #[allow(clippy::self_named_constructors)] fn when(i: &'a str, s: &State<'_>) -> ParseResult<'a, WithSpan<'a, Self>> { let start = i; let endwhen = map( consumed(ws(pair( delimited( |i| s.tag_block_start(i), opt(Whitespace::parse), ws(keyword("endwhen")), ), cut_node( Some("match-endwhen"), tuple(( opt(Whitespace::parse), |i| s.tag_block_end(i), many0(value((), ws(|i| Comment::parse(i, s)))), )), ), ))), |(span, (pws, _))| { // A comment node is used to pass the whitespace suppressing information to the // generator. This way we don't have to fix up the next `when` node or the closing // `endmatch`. Any whitespaces after `endwhen` are to be suppressed. Actually, they // don't wind up in the AST anyway. Node::Comment(WithSpan::new( Comment { ws: Ws(pws, Some(Whitespace::Suppress)), content: "", }, span, )) }, ); let mut p = tuple(( |i| s.tag_block_start(i), opt(Whitespace::parse), ws(keyword("when")), cut_node( Some("match-when"), tuple(( separated_list1(char('|'), ws(|i| Target::parse(i, s))), opt(Whitespace::parse), |i| s.tag_block_end(i), cut_node(Some("match-when"), |i| Node::many(i, s)), opt(endwhen), )), ), )); let (i, (_, pws, _, (target, nws, _, mut nodes, endwhen))) = p(i)?; if let Some(endwhen) = endwhen { nodes.push(endwhen); } Ok(( i, WithSpan::new( Self { ws: Ws(pws, nws), target, nodes, }, start, ), )) } } #[derive(Debug, PartialEq)] pub struct Cond<'a> { pub ws: Ws, pub cond: Option>, pub nodes: Vec>, } impl<'a> Cond<'a> { fn parse(i: &'a str, s: &State<'_>) -> ParseResult<'a, WithSpan<'a, Self>> { let start = i; let (i, (_, pws, cond, nws, _, nodes)) = tuple(( |i| s.tag_block_start(i), opt(Whitespace::parse), alt(( preceded(ws(keyword("else")), opt(|i| CondTest::parse(i, s))), preceded( ws(keyword("elif")), cut_node(Some("if-elif"), map(|i| CondTest::parse_cond(i, s), Some)), ), )), opt(Whitespace::parse), cut_node(Some("if"), |i| s.tag_block_end(i)), cut_node(Some("if"), |i| Node::many(i, s)), ))(i)?; Ok(( i, WithSpan::new( Self { ws: Ws(pws, nws), cond, nodes, }, start, ), )) } } #[derive(Debug, PartialEq)] pub struct CondTest<'a> { pub target: Option>, pub expr: WithSpan<'a, Expr<'a>>, pub contains_bool_lit_or_is_defined: bool, } impl<'a> CondTest<'a> { fn parse(i: &'a str, s: &State<'_>) -> ParseResult<'a, Self> { preceded( ws(keyword("if")), cut_node(Some("if"), |i| Self::parse_cond(i, s)), )(i) } fn parse_cond(i: &'a str, s: &State<'_>) -> ParseResult<'a, Self> { let (i, (target, expr)) = pair( opt(delimited( ws(alt((keyword("let"), keyword("set")))), ws(|i| Target::parse(i, s)), ws(char('=')), )), ws(|i| Expr::parse(i, s.level.get())), )(i)?; let contains_bool_lit_or_is_defined = expr.contains_bool_lit_or_is_defined(); Ok((i, Self { target, expr, contains_bool_lit_or_is_defined, })) } } #[derive(Clone, Copy, Debug, PartialEq)] pub enum Whitespace { Preserve, Suppress, Minimize, } impl Whitespace { fn parse(i: &str) -> ParseResult<'_, Self> { map_opt(anychar, Self::parse_char)(i) } fn parse_char(c: char) -> Option { match c { '+' => Some(Self::Preserve), '-' => Some(Self::Suppress), '~' => Some(Self::Minimize), _ => None, } } } fn check_block_start<'a>( i: &'a str, start: &'a str, s: &State<'_>, node: &str, expected: &str, ) -> ParseResult<'a> { if i.is_empty() { return Err(nom::Err::Failure(ErrorContext::new( format!("expected `{expected}` to terminate `{node}` node, found nothing"), start, ))); } s.tag_block_start(i) } #[derive(Debug, PartialEq)] pub struct Loop<'a> { pub ws1: Ws, pub var: Target<'a>, pub iter: WithSpan<'a, Expr<'a>>, pub cond: Option>>, pub body: Vec>, pub ws2: Ws, pub else_nodes: Vec>, pub ws3: Ws, } impl<'a> Loop<'a> { fn parse(i: &'a str, s: &State<'_>) -> ParseResult<'a, WithSpan<'a, Self>> { fn content<'a>(i: &'a str, s: &State<'_>) -> ParseResult<'a, Vec>> { s.enter_loop(); let result = Node::many(i, s); s.leave_loop(); result } let start = i; let if_cond = preceded( ws(keyword("if")), cut_node(Some("for-if"), ws(|i| Expr::parse(i, s.level.get()))), ); let else_block = |i| { let mut p = preceded( ws(keyword("else")), cut_node( Some("for-else"), tuple(( opt(Whitespace::parse), delimited( |i| s.tag_block_end(i), |i| Node::many(i, s), |i| s.tag_block_start(i), ), opt(Whitespace::parse), )), ), ); let (i, (pws, nodes, nws)) = p(i)?; Ok((i, (pws, nodes, nws))) }; let body_and_end = |i| { let (i, (body, (_, pws, else_block, _, nws))) = cut_node( Some("for"), tuple(( |i| content(i, s), cut_node( Some("for"), tuple(( |i| check_block_start(i, start, s, "for", "endfor"), opt(Whitespace::parse), opt(else_block), end_node("for", "endfor"), opt(Whitespace::parse), )), ), )), )(i)?; Ok((i, (body, pws, else_block, nws))) }; let mut p = tuple(( opt(Whitespace::parse), ws(keyword("for")), cut_node( Some("for"), tuple(( ws(|i| Target::parse(i, s)), ws(keyword("in")), cut_node( Some("for"), tuple(( ws(|i| Expr::parse(i, s.level.get())), opt(if_cond), opt(Whitespace::parse), |i| s.tag_block_end(i), body_and_end, )), ), )), ), )); let (i, (pws1, _, (var, _, (iter, cond, nws1, _, (body, pws2, else_block, nws2))))) = p(i)?; let (nws3, else_nodes, pws3) = else_block.unwrap_or_default(); Ok(( i, WithSpan::new( Self { ws1: Ws(pws1, nws1), var, iter, cond, body, ws2: Ws(pws2, nws3), else_nodes, ws3: Ws(pws3, nws2), }, start, ), )) } } #[derive(Debug, PartialEq)] pub struct Macro<'a> { pub ws1: Ws, pub name: &'a str, pub args: Vec<&'a str>, pub nodes: Vec>, pub ws2: Ws, } impl<'a> Macro<'a> { fn parse(i: &'a str, s: &State<'_>) -> ParseResult<'a, WithSpan<'a, Self>> { fn parameters(i: &str) -> ParseResult<'_, Vec<&str>> { delimited( ws(char('(')), separated_list0(char(','), ws(identifier)), tuple((opt(ws(char(','))), char(')'))), )(i) } let start_s = i; let mut start = tuple(( opt(Whitespace::parse), ws(keyword("macro")), cut_node( Some("macro"), tuple(( ws(identifier), opt(ws(parameters)), opt(Whitespace::parse), |i| s.tag_block_end(i), )), ), )); let (j, (pws1, _, (name, params, nws1, _))) = start(i)?; if is_rust_keyword(name) { return Err(nom::Err::Failure(ErrorContext::new( format!("'{name}' is not a valid name for a macro"), i, ))); } let mut end = cut_node( Some("macro"), tuple(( |i| Node::many(i, s), cut_node( Some("macro"), tuple(( |i| check_block_start(i, start_s, s, "macro", "endmacro"), opt(Whitespace::parse), end_node("macro", "endmacro"), cut_node( Some("macro"), preceded( opt(|before| { let (after, end_name) = ws(identifier)(before)?; check_end_name(before, after, name, end_name, "macro") }), opt(Whitespace::parse), ), ), )), ), )), ); let (i, (contents, (_, pws2, _, nws2))) = end(j)?; Ok(( i, WithSpan::new( Self { ws1: Ws(pws1, nws1), name, args: params.unwrap_or_default(), nodes: contents, ws2: Ws(pws2, nws2), }, start_s, ), )) } } #[derive(Debug, PartialEq)] pub struct FilterBlock<'a> { pub ws1: Ws, pub filters: Filter<'a>, pub nodes: Vec>, pub ws2: Ws, } impl<'a> FilterBlock<'a> { fn parse(i: &'a str, s: &State<'_>) -> ParseResult<'a, WithSpan<'a, Self>> { let mut level = s.level.get(); let start_s = i; let mut start = tuple(( opt(Whitespace::parse), ws(keyword("filter")), cut_node( Some("filter"), tuple(( ws(identifier), opt(|i| Expr::arguments(i, s.level.get(), false)), many0(|i| { filter(i, &mut level).map(|(j, (name, params))| (j, (name, params, i))) }), ws(|i| Ok((i, ()))), opt(Whitespace::parse), |i| s.tag_block_end(i), )), ), )); let (i, (pws1, _, (filter_name, params, extra_filters, (), nws1, _))) = start(i)?; let mut arguments = params.unwrap_or_default(); arguments.insert(0, WithSpan::new(Expr::FilterSource, start_s)); let mut filters = Filter { name: filter_name, arguments, }; for (filter_name, args, span) in extra_filters { filters = Filter { name: filter_name, arguments: { let mut args = args.unwrap_or_default(); args.insert(0, WithSpan::new(Expr::Filter(filters), span)); args }, }; } let mut end = cut_node( Some("filter"), tuple(( |i| Node::many(i, s), cut_node( Some("filter"), tuple(( |i| check_block_start(i, start_s, s, "filter", "endfilter"), opt(Whitespace::parse), end_node("filter", "endfilter"), opt(Whitespace::parse), )), ), )), ); let (i, (nodes, (_, pws2, _, nws2))) = end(i)?; Ok(( i, WithSpan::new( Self { ws1: Ws(pws1, nws1), filters, nodes, ws2: Ws(pws2, nws2), }, start_s, ), )) } } #[derive(Debug, PartialEq)] pub struct Import<'a> { pub ws: Ws, pub path: &'a str, pub scope: &'a str, } impl<'a> Import<'a> { fn parse(i: &'a str) -> ParseResult<'a, WithSpan<'a, Self>> { let start = i; let mut p = tuple(( opt(Whitespace::parse), ws(keyword("import")), cut_node( Some("import"), tuple(( ws(str_lit_without_prefix), ws(keyword("as")), cut_node(Some("import"), pair(ws(identifier), opt(Whitespace::parse))), )), ), )); let (i, (pws, _, (path, _, (scope, nws)))) = p(i)?; Ok(( i, WithSpan::new( Self { ws: Ws(pws, nws), path, scope, }, start, ), )) } } #[derive(Debug, PartialEq)] pub struct Call<'a> { pub ws: Ws, pub scope: Option<&'a str>, pub name: &'a str, pub args: Vec>>, } impl<'a> Call<'a> { fn parse(i: &'a str, s: &State<'_>) -> ParseResult<'a, WithSpan<'a, Self>> { let start = i; let mut p = tuple(( opt(Whitespace::parse), ws(keyword("call")), cut_node( Some("call"), tuple(( opt(tuple((ws(identifier), ws(tag("::"))))), ws(identifier), opt(ws(|nested| Expr::arguments(nested, s.level.get(), true))), opt(Whitespace::parse), )), ), )); let (i, (pws, _, (scope, name, args, nws))) = p(i)?; let scope = scope.map(|(scope, _)| scope); let args = args.unwrap_or_default(); Ok(( i, WithSpan::new( Self { ws: Ws(pws, nws), scope, name, args, }, start, ), )) } } #[derive(Debug, PartialEq)] pub struct Match<'a> { pub ws1: Ws, pub expr: WithSpan<'a, Expr<'a>>, pub arms: Vec>>, pub ws2: Ws, } impl<'a> Match<'a> { fn parse(i: &'a str, s: &State<'_>) -> ParseResult<'a, WithSpan<'a, Self>> { let start = i; let mut p = tuple(( opt(Whitespace::parse), ws(keyword("match")), cut_node( Some("match"), tuple(( ws(|i| Expr::parse(i, s.level.get())), opt(Whitespace::parse), |i| s.tag_block_end(i), cut_node( Some("match"), tuple(( ws(many0(ws(value((), |i| Comment::parse(i, s))))), many0(|i| When::when(i, s)), cut_node( Some("match"), tuple(( opt(|i| When::r#else(i, s)), cut_node( Some("match"), tuple(( ws(|i| { check_block_start(i, start, s, "match", "endmatch") }), opt(Whitespace::parse), end_node("match", "endmatch"), opt(Whitespace::parse), )), ), )), ), )), ), )), ), )); let (i, (pws1, _, (expr, nws1, _, (_, mut arms, (else_arm, (_, pws2, _, nws2)))))) = p(i)?; if let Some(arm) = else_arm { arms.push(arm); } if arms.is_empty() { return Err(nom::Err::Failure(ErrorContext::new( "`match` nodes must contain at least one `when` node and/or an `else` case", start, ))); } Ok(( i, WithSpan::new( Self { ws1: Ws(pws1, nws1), expr, arms, ws2: Ws(pws2, nws2), }, start, ), )) } } #[derive(Debug, PartialEq)] pub struct BlockDef<'a> { pub ws1: Ws, pub name: &'a str, pub nodes: Vec>, pub ws2: Ws, } impl<'a> BlockDef<'a> { fn parse(i: &'a str, s: &State<'_>) -> ParseResult<'a, WithSpan<'a, Self>> { let start_s = i; let mut start = tuple(( opt(Whitespace::parse), ws(keyword("block")), cut_node( Some("block"), tuple((ws(identifier), opt(Whitespace::parse), |i| { s.tag_block_end(i) })), ), )); let (i, (pws1, _, (name, nws1, _))) = start(i)?; let mut end = cut_node( Some("block"), tuple(( |i| Node::many(i, s), cut_node( Some("block"), tuple(( |i| check_block_start(i, start_s, s, "block", "endblock"), opt(Whitespace::parse), end_node("block", "endblock"), cut_node( Some("block"), tuple(( opt(|before| { let (after, end_name) = ws(identifier)(before)?; check_end_name(before, after, name, end_name, "block") }), opt(Whitespace::parse), )), ), )), ), )), ); let (i, (nodes, (_, pws2, _, (_, nws2)))) = end(i)?; Ok(( i, WithSpan::new( BlockDef { ws1: Ws(pws1, nws1), name, nodes, ws2: Ws(pws2, nws2), }, start_s, ), )) } } fn check_end_name<'a>( before: &'a str, after: &'a str, name: &'a str, end_name: &'a str, kind: &str, ) -> ParseResult<'a> { if name == end_name { return Ok((after, end_name)); } Err(nom::Err::Failure(ErrorContext::new( match name.is_empty() && !end_name.is_empty() { true => format!("unexpected name `{end_name}` in `end{kind}` tag for unnamed `{kind}`"), false => format!("expected name `{name}` in `end{kind}` tag, found `{end_name}`"), }, before, ))) } #[derive(Debug, PartialEq)] pub struct Lit<'a> { pub lws: &'a str, pub val: &'a str, pub rws: &'a str, } impl<'a> Lit<'a> { fn parse(i: &'a str, s: &State<'_>) -> ParseResult<'a, WithSpan<'a, Self>> { let start = i; let (i, ()) = not(eof)(i)?; let candidate_finder = Splitter3::new( s.syntax.block_start, s.syntax.comment_start, s.syntax.expr_start, ); let p_start = alt(( tag(s.syntax.block_start), tag(s.syntax.comment_start), tag(s.syntax.expr_start), )); let (i, content) = opt(recognize(skip_till(candidate_finder, p_start)))(i)?; let (i, content) = match content { Some("") => { // {block,comment,expr}_start follows immediately. return fail(i); } Some(content) => (i, content), None => ("", i), // there is no {block,comment,expr}_start: take everything }; Ok((i, WithSpan::new(Self::split_ws_parts(content), start))) } pub(crate) fn split_ws_parts(s: &'a str) -> Self { let trimmed_start = s.trim_start_matches(is_ws); let len_start = s.len() - trimmed_start.len(); let trimmed = trimmed_start.trim_end_matches(is_ws); Self { lws: &s[..len_start], val: trimmed, rws: &trimmed_start[trimmed.len()..], } } } #[derive(Debug, PartialEq)] pub struct Raw<'a> { pub ws1: Ws, pub lit: Lit<'a>, pub ws2: Ws, } impl<'a> Raw<'a> { fn parse(i: &'a str, s: &State<'_>) -> ParseResult<'a, WithSpan<'a, Self>> { let start = i; let endraw = tuple(( |i| s.tag_block_start(i), opt(Whitespace::parse), ws(keyword("endraw")), // sic: ignore `{% end %}` in raw blocks opt(Whitespace::parse), peek(|i| s.tag_block_end(i)), )); let mut p = tuple(( opt(Whitespace::parse), ws(keyword("raw")), cut_node( Some("raw"), tuple(( opt(Whitespace::parse), |i| s.tag_block_end(i), consumed(skip_till(Splitter1::new(s.syntax.block_start), endraw)), )), ), )); let (_, (pws1, _, (nws1, _, (contents, (i, (_, pws2, _, nws2, _)))))) = p(i)?; let lit = Lit::split_ws_parts(contents); let ws1 = Ws(pws1, nws1); let ws2 = Ws(pws2, nws2); Ok((i, WithSpan::new(Self { ws1, lit, ws2 }, start))) } } #[derive(Debug, PartialEq)] pub struct Let<'a> { pub ws: Ws, pub var: Target<'a>, pub val: Option>>, } impl<'a> Let<'a> { fn parse(i: &'a str, s: &State<'_>) -> ParseResult<'a, WithSpan<'a, Self>> { let start = i; let mut p = tuple(( opt(Whitespace::parse), ws(alt((keyword("let"), keyword("set")))), cut_node( Some("let"), tuple(( ws(|i| Target::parse(i, s)), opt(preceded( ws(char('=')), ws(|i| Expr::parse(i, s.level.get())), )), opt(Whitespace::parse), )), ), )); let (i, (pws, _, (var, val, nws))) = p(i)?; Ok(( i, WithSpan::new( Let { ws: Ws(pws, nws), var, val, }, start, ), )) } } #[derive(Debug, PartialEq)] pub struct If<'a> { pub ws: Ws, pub branches: Vec>>, } impl<'a> If<'a> { fn parse(i: &'a str, s: &State<'_>) -> ParseResult<'a, WithSpan<'a, Self>> { let start = i; let mut p = tuple(( opt(Whitespace::parse), |i| CondTest::parse(i, s), cut_node( Some("if"), tuple(( opt(Whitespace::parse), |i| s.tag_block_end(i), cut_node( Some("if"), tuple(( |i| Node::many(i, s), many0(|i| Cond::parse(i, s)), cut_node( Some("if"), tuple(( |i| check_block_start(i, start, s, "if", "endif"), opt(Whitespace::parse), end_node("if", "endif"), opt(Whitespace::parse), )), ), )), ), )), ), )); let (i, (pws1, cond, (nws1, _, (nodes, elifs, (_, pws2, _, nws2))))) = p(i)?; let mut branches = vec![WithSpan::new( Cond { ws: Ws(pws1, nws1), cond: Some(cond), nodes, }, start, )]; branches.extend(elifs); Ok(( i, WithSpan::new( Self { ws: Ws(pws2, nws2), branches, }, start, ), )) } } #[derive(Debug, PartialEq)] pub struct Include<'a> { pub ws: Ws, pub path: &'a str, } impl<'a> Include<'a> { fn parse(i: &'a str) -> ParseResult<'a, WithSpan<'a, Self>> { let start = i; let mut p = tuple(( opt(Whitespace::parse), ws(keyword("include")), cut_node( Some("include"), pair(ws(str_lit_without_prefix), opt(Whitespace::parse)), ), )); let (i, (pws, _, (path, nws))) = p(i)?; Ok(( i, WithSpan::new( Self { ws: Ws(pws, nws), path, }, start, ), )) } } #[derive(Debug, PartialEq)] pub struct Extends<'a> { pub path: &'a str, } impl<'a> Extends<'a> { fn parse(i: &'a str) -> ParseResult<'a, WithSpan<'a, Self>> { let start = i; let (i, (pws, _, (path, nws))) = tuple(( opt(Whitespace::parse), ws(keyword("extends")), cut_node( Some("extends"), pair(ws(str_lit_without_prefix), opt(Whitespace::parse)), ), ))(i)?; match (pws, nws) { (None, None) => Ok((i, WithSpan::new(Self { path }, start))), (_, _) => Err(nom::Err::Failure(ErrorContext::new( "whitespace control is not allowed on `extends`", start, ))), } } } #[derive(Debug, PartialEq)] pub struct Comment<'a> { pub ws: Ws, pub content: &'a str, } impl<'a> Comment<'a> { fn parse(i: &'a str, s: &State<'_>) -> ParseResult<'a, WithSpan<'a, Self>> { #[derive(Debug, Clone, Copy)] enum Tag { Open, Close, } fn tag<'a>(i: &'a str, s: &State<'_>) -> ParseResult<'a, Tag> { alt(( value(Tag::Open, |i| s.tag_comment_start(i)), value(Tag::Close, |i| s.tag_comment_end(i)), ))(i) } fn content<'a>(mut i: &'a str, s: &State<'_>) -> ParseResult<'a> { let mut depth = 0usize; let start = i; loop { let splitter = Splitter2::new(s.syntax.comment_start, s.syntax.comment_end); let (k, tag) = opt(skip_till(splitter, |i| tag(i, s)))(i)?; let Some((j, tag)) = tag else { return Err( ErrorContext::unclosed("comment", s.syntax.comment_end, start).into(), ); }; match tag { Tag::Open => match depth.checked_add(1) { Some(new_depth) => depth = new_depth, None => { return Err(nom::Err::Failure(ErrorContext::new( "too deeply nested comments", start, ))); } }, Tag::Close => match depth.checked_sub(1) { Some(new_depth) => depth = new_depth, None => return Ok((j, &start[..start.len() - k.len()])), }, } i = j; } } let start = i; let (i, content) = preceded( |i| s.tag_comment_start(i), cut_node(Some("comment"), |i| content(i, s)), )(i)?; let mut ws = Ws(None, None); if content.len() == 1 && matches!(content, "-" | "+" | "~") { return Err(nom::Err::Failure(ErrorContext::new( format!( "ambiguous whitespace stripping\n\ use `{}{content} {content}{}` to apply the same whitespace stripping on both \ sides", s.syntax.comment_start, s.syntax.comment_end, ), start, ))); } else if content.len() >= 2 { ws.0 = Whitespace::parse_char(content.chars().next().unwrap_or_default()); ws.1 = Whitespace::parse_char(content.chars().next_back().unwrap_or_default()); } Ok((i, WithSpan::new(Self { ws, content }, start))) } } /// First field is "minus/plus sign was used on the left part of the item". /// /// Second field is "minus/plus sign was used on the right part of the item". #[derive(Clone, Copy, Debug, PartialEq)] pub struct Ws(pub Option, pub Option); fn end_node<'a, 'g: 'a>( node: &'g str, expected: &'g str, ) -> impl Fn(&'a str) -> ParseResult<'a> + 'g { move |start| { let (i, actual) = ws(identifier)(start)?; if actual == expected { Ok((i, actual)) } else if actual.starts_with("end") { Err(nom::Err::Failure(ErrorContext::new( format!("expected `{expected}` to terminate `{node}` node, found `{actual}`"), start, ))) } else { fail(start) } } } #[doc(hidden)] pub const MAX_KW_LEN: usize = 8; const MAX_REPL_LEN: usize = MAX_KW_LEN + 2; #[doc(hidden)] pub const KWS: &[&[[u8; MAX_REPL_LEN]]] = { // FIXME: Replace `u8` with `[core:ascii::Char; MAX_REPL_LEN]` once // is stable. const KW2: &[[u8; MAX_REPL_LEN]] = &[ *b"r#as______", *b"r#do______", *b"r#fn______", *b"r#if______", *b"r#in______", ]; const KW3: &[[u8; MAX_REPL_LEN]] = &[ *b"r#box_____", *b"r#dyn_____", *b"r#for_____", *b"r#let_____", *b"r#mod_____", *b"r#mut_____", *b"r#pub_____", *b"r#ref_____", *b"r#try_____", *b"r#use_____", ]; const KW4: &[[u8; MAX_REPL_LEN]] = &[ *b"r#else____", *b"r#enum____", *b"r#impl____", *b"r#move____", *b"r#priv____", *b"r#true____", *b"r#type____", ]; const KW5: &[[u8; MAX_REPL_LEN]] = &[ *b"r#async___", *b"r#await___", *b"r#break___", *b"r#const___", *b"r#crate___", *b"r#false___", *b"r#final___", *b"r#macro___", *b"r#match___", *b"r#trait___", *b"r#where___", *b"r#while___", *b"r#yield___", ]; const KW6: &[[u8; MAX_REPL_LEN]] = &[ *b"r#become__", *b"r#extern__", *b"r#return__", *b"r#static__", *b"r#struct__", *b"r#typeof__", *b"r#unsafe__", ]; const KW7: &[[u8; MAX_REPL_LEN]] = &[*b"r#unsized_", *b"r#virtual_"]; const KW8: &[[u8; MAX_REPL_LEN]] = &[*b"r#abstract", *b"r#continue", *b"r#override"]; &[&[], &[], KW2, KW3, KW4, KW5, KW6, KW7, KW8] }; // These ones are only used in the parser, hence why they're private. const KWS_EXTRA: &[&[[u8; MAX_REPL_LEN]]] = { const KW4: &[[u8; MAX_REPL_LEN]] = &[*b"r#loop____", *b"r#self____", *b"r#Self____"]; const KW5: &[[u8; MAX_REPL_LEN]] = &[*b"r#super___", *b"r#union___"]; &[&[], &[], &[], &[], KW4, KW5, &[], &[], &[]] }; fn is_rust_keyword(ident: &str) -> bool { fn is_rust_keyword_inner( kws: &[&[[u8; MAX_REPL_LEN]]], padded_ident: &[u8; MAX_KW_LEN], ident_len: usize, ) -> bool { // Since the individual buckets are quite short, a linear search is faster than a binary search. kws[ident_len] .iter() .any(|&probe| padded_ident == &probe[2..]) } if ident.len() > MAX_KW_LEN { return false; } let ident_len = ident.len(); let mut padded_ident = [b'_'; MAX_KW_LEN]; padded_ident[..ident.len()].copy_from_slice(ident.as_bytes()); is_rust_keyword_inner(KWS, &padded_ident, ident_len) || is_rust_keyword_inner(KWS_EXTRA, &padded_ident, ident_len) } #[cfg(test)] mod kws_tests { use super::{KWS, KWS_EXTRA, MAX_REPL_LEN, is_rust_keyword}; fn ensure_utf8_inner(entry: &[&[[u8; MAX_REPL_LEN]]]) { for kws in entry { for kw in *kws { assert!(std::str::from_utf8(kw).is_ok(), "not UTF-8: {kw:?}"); } } } // Ensure that all strings are UTF-8, because we use `from_utf8_unchecked()` further down. #[test] fn ensure_utf8() { assert_eq!(KWS.len(), KWS_EXTRA.len()); ensure_utf8_inner(KWS); ensure_utf8_inner(KWS_EXTRA); } #[test] fn test_is_rust_keyword() { assert!(is_rust_keyword("super")); assert!(is_rust_keyword("become")); assert!(!is_rust_keyword("supeeeer")); assert!(!is_rust_keyword("sur")); } } rinja_parser-0.3.5/src/target.rs000064400000000000000000000206671046102023000147460ustar 00000000000000use nom::branch::alt; use nom::bytes::complete::tag; use nom::character::complete::{char, one_of}; use nom::combinator::{consumed, map, map_res, opt}; use nom::multi::separated_list1; use nom::sequence::{pair, preceded, tuple}; use crate::{ CharLit, ErrorContext, Num, ParseErr, ParseResult, PathOrIdentifier, State, StrLit, WithSpan, bool_lit, char_lit, identifier, keyword, num_lit, path_or_identifier, str_lit, ws, }; #[derive(Clone, Debug, PartialEq)] pub enum Target<'a> { Name(&'a str), Tuple(Vec<&'a str>, Vec>), Array(Vec<&'a str>, Vec>), Struct(Vec<&'a str>, Vec<(&'a str, Target<'a>)>), NumLit(&'a str, Num<'a>), StrLit(StrLit<'a>), CharLit(CharLit<'a>), BoolLit(&'a str), Path(Vec<&'a str>), OrChain(Vec>), Placeholder(&'a str), /// The `Option` is the variable name (if any) in `var_name @ ..`. Rest(WithSpan<'a, Option<&'a str>>), } impl<'a> Target<'a> { /// Parses multiple targets with `or` separating them pub(super) fn parse(i: &'a str, s: &State<'_>) -> ParseResult<'a, Self> { map( separated_list1(ws(tag("or")), |i| s.nest(i, |i| Self::parse_one(i, s))), |mut opts| match opts.len() { 1 => opts.pop().unwrap(), _ => Self::OrChain(opts), }, )(i) } /// Parses a single target without an `or`, unless it is wrapped in parentheses. fn parse_one(i: &'a str, s: &State<'_>) -> ParseResult<'a, Self> { let mut opt_opening_paren = map(opt(ws(char('('))), |o| o.is_some()); let mut opt_opening_brace = map(opt(ws(char('{'))), |o| o.is_some()); let mut opt_opening_bracket = map(opt(ws(char('['))), |o| o.is_some()); let (i, lit) = opt(Self::lit)(i)?; if let Some(lit) = lit { return Ok((i, lit)); } // match tuples and unused parentheses let (i, target_is_tuple) = opt_opening_paren(i)?; if target_is_tuple { let (i, (singleton, mut targets)) = collect_targets(i, s, ')', Self::unnamed)?; if singleton { return Ok((i, targets.pop().unwrap())); } return Ok(( i, Self::Tuple(Vec::new(), only_one_rest_pattern(targets, false, "tuple")?), )); } let (i, target_is_array) = opt_opening_bracket(i)?; if target_is_array { let (i, (singleton, mut targets)) = collect_targets(i, s, ']', Self::unnamed)?; if singleton { return Ok((i, targets.pop().unwrap())); } return Ok(( i, Self::Array(Vec::new(), only_one_rest_pattern(targets, true, "array")?), )); } let path = |i| { map_res(path_or_identifier, |v| match v { PathOrIdentifier::Path(v) => Ok(v), PathOrIdentifier::Identifier(v) => Err(v), })(i) }; // match structs let (i, path) = opt(path)(i)?; if let Some(path) = path { let i_before_matching_with = i; let (i, _) = opt(ws(keyword("with")))(i)?; let (i, is_unnamed_struct) = opt_opening_paren(i)?; if is_unnamed_struct { let (i, (_, targets)) = collect_targets(i, s, ')', Self::unnamed)?; return Ok(( i, Self::Tuple(path, only_one_rest_pattern(targets, false, "struct")?), )); } let (i, is_named_struct) = opt_opening_brace(i)?; if is_named_struct { let (i, (_, targets)) = collect_targets(i, s, '}', Self::named)?; return Ok((i, Self::Struct(path, targets))); } return Ok((i_before_matching_with, Self::Path(path))); } // neither literal nor struct nor path let (new_i, name) = identifier(i)?; let target = match name { "_" => Self::Placeholder(name), _ => verify_name(i, name)?, }; Ok((new_i, target)) } fn lit(i: &'a str) -> ParseResult<'a, Self> { alt(( map(str_lit, Self::StrLit), map(char_lit, Self::CharLit), map(consumed(num_lit), |(full, num)| Target::NumLit(full, num)), map(bool_lit, Self::BoolLit), ))(i) } fn unnamed(i: &'a str, s: &State<'_>) -> ParseResult<'a, Self> { alt((Self::rest, |i| Self::parse(i, s)))(i) } fn named(init_i: &'a str, s: &State<'_>) -> ParseResult<'a, (&'a str, Self)> { let (i, rest) = opt(consumed(Self::rest))(init_i)?; if let Some(rest) = rest { let (_, chr) = ws(opt(one_of(",:")))(i)?; if let Some(chr) = chr { return Err(nom::Err::Failure(ErrorContext::new( format!( "unexpected `{chr}` character after `..`\n\ note that in a named struct, `..` must come last to ignore other members" ), i, ))); } if let Target::Rest(ref s) = rest.1 { if s.inner.is_some() { return Err(nom::Err::Failure(ErrorContext::new( "`@ ..` cannot be used in struct", s.span, ))); } } return Ok((i, rest)); } let (i, (src, target)) = pair( identifier, opt(preceded(ws(char(':')), |i| Self::parse(i, s))), )(init_i)?; if src == "_" { return Err(nom::Err::Failure(ErrorContext::new( "cannot use placeholder `_` as source in named struct", init_i, ))); } let target = match target { Some(target) => target, None => verify_name(init_i, src)?, }; Ok((i, (src, target))) } fn rest(start: &'a str) -> ParseResult<'a, Self> { let (i, (ident, _)) = tuple((opt(tuple((identifier, ws(char('@'))))), tag("..")))(start)?; Ok(( i, Self::Rest(WithSpan::new(ident.map(|(ident, _)| ident), start)), )) } } fn verify_name<'a>( input: &'a str, name: &'a str, ) -> Result, nom::Err>> { match name { "self" | "writer" => Err(nom::Err::Failure(ErrorContext::new( format!("cannot use `{name}` as a name"), input, ))), _ => Ok(Target::Name(name)), } } fn collect_targets<'a, T>( i: &'a str, s: &State<'_>, delim: char, mut one: impl FnMut(&'a str, &State<'_>) -> ParseResult<'a, T>, ) -> ParseResult<'a, (bool, Vec)> { let opt_comma = |i| map(ws(opt(char(','))), |o| o.is_some())(i); let opt_end = |i| map(ws(opt(char(delim))), |o| o.is_some())(i); let (i, has_end) = opt_end(i)?; if has_end { return Ok((i, (false, Vec::new()))); } let (i, targets) = opt(separated_list1(ws(char(',')), |i| one(i, s)))(i)?; let Some(targets) = targets else { return Err(nom::Err::Failure(ErrorContext::new( "expected comma separated list of members", i, ))); }; let (i, (has_comma, has_end)) = pair(opt_comma, opt_end)(i)?; if !has_end { let msg = match has_comma { true => format!("expected member, or `{delim}` as terminator"), false => format!("expected `,` for more members, or `{delim}` as terminator"), }; return Err(nom::Err::Failure(ErrorContext::new(msg, i))); } let singleton = !has_comma && targets.len() == 1; Ok((i, (singleton, targets))) } fn only_one_rest_pattern<'a>( targets: Vec>, allow_named_rest: bool, type_kind: &str, ) -> Result>, ParseErr<'a>> { let mut found_rest = false; for target in &targets { if let Target::Rest(s) = target { if !allow_named_rest && s.inner.is_some() { return Err(nom::Err::Failure(ErrorContext::new( "`@ ..` is only allowed in slice patterns", s.span, ))); } if found_rest { return Err(nom::Err::Failure(ErrorContext::new( format!("`..` can only be used once per {type_kind} pattern"), s.span, ))); } found_rest = true; } } Ok(targets) } rinja_parser-0.3.5/src/tests.rs000064400000000000000000001012521046102023000146100ustar 00000000000000use crate::node::{Lit, Whitespace, Ws}; use crate::{Ast, Expr, Filter, InnerSyntax, Node, Num, StrLit, Syntax, WithSpan}; impl WithSpan<'static, T> { fn no_span(inner: T) -> Self { Self { inner, span: "" } } } fn check_ws_split(s: &str, res: &(&str, &str, &str)) { let Lit { lws, val, rws } = Lit::split_ws_parts(s); assert_eq!(lws, res.0); assert_eq!(val, res.1); assert_eq!(rws, res.2); } #[test] fn test_ws_splitter() { check_ws_split("", &("", "", "")); check_ws_split("a", &("", "a", "")); check_ws_split("\ta", &("\t", "a", "")); check_ws_split("b\n", &("", "b", "\n")); check_ws_split(" \t\r\n", &(" \t\r\n", "", "")); } #[test] #[should_panic] fn test_invalid_block() { Ast::from_str("{% extend \"blah\" %}", None, &Syntax::default()).unwrap(); } fn int_lit(i: &str) -> Expr<'_> { Expr::NumLit(i, Num::Int(i, None)) } #[test] fn test_parse_filter() { let syntax = Syntax::default(); assert_eq!( Ast::from_str("{{ strvar|e }}", None, &syntax) .unwrap() .nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Filter(Filter { name: "e", arguments: vec![WithSpan::no_span(Expr::Var("strvar"))] })), )], ); assert_eq!( Ast::from_str("{{ 2|abs }}", None, &syntax).unwrap().nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Filter(Filter { name: "abs", arguments: vec![WithSpan::no_span(int_lit("2"))] })), )], ); assert_eq!( Ast::from_str("{{ -2|abs }}", None, &syntax).unwrap().nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Filter(Filter { name: "abs", arguments: vec![WithSpan::no_span(Expr::Unary( "-", WithSpan::no_span(int_lit("2")).into() ))] })), )], ); assert_eq!( Ast::from_str("{{ (1 - 2)|abs }}", None, &syntax) .unwrap() .nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Filter(Filter { name: "abs", arguments: vec![WithSpan::no_span(Expr::Group( WithSpan::no_span(Expr::BinOp( "-", WithSpan::no_span(int_lit("1")).into(), WithSpan::no_span(int_lit("2")).into() )) .into() ))], })), )], ); } #[test] fn test_parse_numbers() { let syntax = Syntax::default(); assert_eq!( Ast::from_str("{{ 2 }}", None, &syntax).unwrap().nodes, vec![Node::Expr(Ws(None, None), WithSpan::no_span(int_lit("2")))], ); assert_eq!( Ast::from_str("{{ 2.5 }}", None, &syntax).unwrap().nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::NumLit("2.5", Num::Float("2.5", None))) )], ); } #[test] fn test_parse_var() { let s = Syntax::default(); assert_eq!(Ast::from_str("{{ foo }}", None, &s).unwrap().nodes, vec![ Node::Expr(Ws(None, None), WithSpan::no_span(Expr::Var("foo"))) ],); assert_eq!( Ast::from_str("{{ foo_bar }}", None, &s).unwrap().nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Var("foo_bar")) )], ); assert_eq!(Ast::from_str("{{ none }}", None, &s).unwrap().nodes, vec![ Node::Expr(Ws(None, None), WithSpan::no_span(Expr::Var("none"))) ],); } #[test] fn test_parse_const() { let s = Syntax::default(); assert_eq!(Ast::from_str("{{ FOO }}", None, &s).unwrap().nodes, vec![ Node::Expr(Ws(None, None), WithSpan::no_span(Expr::Path(vec!["FOO"]))) ],); assert_eq!( Ast::from_str("{{ FOO_BAR }}", None, &s).unwrap().nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Path(vec!["FOO_BAR"])) )], ); assert_eq!(Ast::from_str("{{ NONE }}", None, &s).unwrap().nodes, vec![ Node::Expr(Ws(None, None), WithSpan::no_span(Expr::Path(vec!["NONE"]))) ],); } #[test] fn test_parse_path() { let s = Syntax::default(); assert_eq!(Ast::from_str("{{ None }}", None, &s).unwrap().nodes, vec![ Node::Expr(Ws(None, None), WithSpan::no_span(Expr::Path(vec!["None"]))) ],); assert_eq!( Ast::from_str("{{ Some(123) }}", None, &s).unwrap().nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Call( Box::new(WithSpan::no_span(Expr::Path(vec!["Some"]))), vec![WithSpan::no_span(int_lit("123"))] )), )], ); assert_eq!( Ast::from_str("{{ Ok(123) }}", None, &s).unwrap().nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Call( Box::new(WithSpan::no_span(Expr::Path(vec!["Ok"]))), vec![WithSpan::no_span(int_lit("123"))] )), )], ); assert_eq!( Ast::from_str("{{ Err(123) }}", None, &s).unwrap().nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Call( Box::new(WithSpan::no_span(Expr::Path(vec!["Err"]))), vec![WithSpan::no_span(int_lit("123"))] )), )], ); } #[test] fn test_parse_var_call() { assert_eq!( Ast::from_str("{{ function(\"123\", 3) }}", None, &Syntax::default()) .unwrap() .nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Call( Box::new(WithSpan::no_span(Expr::Var("function"))), vec![ WithSpan::no_span(Expr::StrLit(StrLit { content: "123", prefix: None, })), WithSpan::no_span(int_lit("3")) ] )), )], ); } #[test] fn test_parse_path_call() { let s = Syntax::default(); assert_eq!( Ast::from_str("{{ Option::None }}", None, &s).unwrap().nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Path(vec!["Option", "None"])) )], ); assert_eq!( Ast::from_str("{{ Option::Some(123) }}", None, &s) .unwrap() .nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Call( Box::new(WithSpan::no_span(Expr::Path(vec!["Option", "Some"]))), vec![WithSpan::no_span(int_lit("123"))], ),) )], ); assert_eq!( Ast::from_str("{{ self::function(\"123\", 3) }}", None, &s) .unwrap() .nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Call( Box::new(WithSpan::no_span(Expr::Path(vec!["self", "function"]))), vec![ WithSpan::no_span(Expr::StrLit(StrLit { content: "123", prefix: None, })), WithSpan::no_span(int_lit("3")) ], ),) )], ); } #[test] fn test_parse_root_path() { let syntax = Syntax::default(); assert_eq!( Ast::from_str("{{ std::string::String::new() }}", None, &syntax) .unwrap() .nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Call( Box::new(WithSpan::no_span(Expr::Path(vec![ "std", "string", "String", "new" ]))), vec![] )), )], ); assert_eq!( Ast::from_str("{{ ::std::string::String::new() }}", None, &syntax) .unwrap() .nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Call( Box::new(WithSpan::no_span(Expr::Path(vec![ "", "std", "string", "String", "new" ]))), vec![] )), )], ); } #[test] fn test_rust_macro() { let syntax = Syntax::default(); assert_eq!( Ast::from_str("{{ vec!(1, 2, 3) }}", None, &syntax) .unwrap() .nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::RustMacro(vec!["vec"], "1, 2, 3")), )], ); assert_eq!( Ast::from_str("{{ alloc::vec!(1, 2, 3) }}", None, &syntax) .unwrap() .nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::RustMacro(vec!["alloc", "vec"], "1, 2, 3")), )], ); assert_eq!(Ast::from_str("{{a!()}}", None, &syntax).unwrap().nodes, [ Node::Expr( Ws(None, None), WithSpan::no_span(Expr::RustMacro(vec!["a"], "")) ) ],); assert_eq!(Ast::from_str("{{a !()}}", None, &syntax).unwrap().nodes, [ Node::Expr( Ws(None, None), WithSpan::no_span(Expr::RustMacro(vec!["a"], "")) ) ],); assert_eq!(Ast::from_str("{{a! ()}}", None, &syntax).unwrap().nodes, [ Node::Expr( Ws(None, None), WithSpan::no_span(Expr::RustMacro(vec!["a"], "")) ) ],); assert_eq!(Ast::from_str("{{a ! ()}}", None, &syntax).unwrap().nodes, [ Node::Expr( Ws(None, None), WithSpan::no_span(Expr::RustMacro(vec!["a"], "")) ) ],); assert_eq!(Ast::from_str("{{A!()}}", None, &syntax).unwrap().nodes, [ Node::Expr( Ws(None, None), WithSpan::no_span(Expr::RustMacro(vec!["A"], "")) ) ],); assert_eq!( &*Ast::from_str("{{a.b.c!( hello )}}", None, &syntax) .unwrap_err() .to_string(), "failed to parse template source near offset 7", ); } #[test] fn change_delimiters_parse_filter() { let syntax = Syntax(InnerSyntax { expr_start: "{=", expr_end: "=}", ..InnerSyntax::default() }); Ast::from_str("{= strvar|e =}", None, &syntax).unwrap(); } #[test] fn unicode_delimiters_in_syntax() { let syntax = Syntax(InnerSyntax { expr_start: "🖎", // U+1F58E == b"\xf0\x9f\x96\x8e" expr_end: "✍", // U+270D = b'\xe2\x9c\x8d' ..InnerSyntax::default() }); assert_eq!( Ast::from_str("Here comes the expression: 🖎 e ✍.", None, &syntax) .unwrap() .nodes(), [ Node::Lit(WithSpan::no_span(Lit { lws: "", val: "Here comes the expression:", rws: " ", })), Node::Expr(Ws(None, None), WithSpan::no_span(Expr::Var("e")),), Node::Lit(WithSpan::no_span(Lit { lws: "", val: ".", rws: "", })), ], ); } #[test] fn test_precedence() { let syntax = Syntax::default(); assert_eq!( Ast::from_str("{{ a + b == c }}", None, &syntax) .unwrap() .nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::BinOp( "==", WithSpan::no_span(Expr::BinOp( "+", WithSpan::no_span(Expr::Var("a")).into(), WithSpan::no_span(Expr::Var("b")).into() )) .into(), WithSpan::no_span(Expr::Var("c")).into() ),) )], ); assert_eq!( Ast::from_str("{{ a + b * c - d / e }}", None, &syntax) .unwrap() .nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::BinOp( "-", WithSpan::no_span(Expr::BinOp( "+", WithSpan::no_span(Expr::Var("a")).into(), WithSpan::no_span(Expr::BinOp( "*", WithSpan::no_span(Expr::Var("b")).into(), WithSpan::no_span(Expr::Var("c")).into() )) .into() )) .into(), WithSpan::no_span(Expr::BinOp( "/", WithSpan::no_span(Expr::Var("d")).into(), WithSpan::no_span(Expr::Var("e")).into() )) .into(), )) )], ); assert_eq!( Ast::from_str("{{ a * (b + c) / -d }}", None, &syntax) .unwrap() .nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::BinOp( "/", Box::new(WithSpan::no_span(Expr::BinOp( "*", Box::new(WithSpan::no_span(Expr::Var("a"))), Box::new(WithSpan::no_span(Expr::Group(Box::new(WithSpan::no_span( Expr::BinOp( "+", Box::new(WithSpan::no_span(Expr::Var("b"))), Box::new(WithSpan::no_span(Expr::Var("c"))) ) ))))) ))), Box::new(WithSpan::no_span(Expr::Unary( "-", Box::new(WithSpan::no_span(Expr::Var("d"))) ))) )) )], ); assert_eq!( Ast::from_str("{{ a || b && c || d && e }}", None, &syntax) .unwrap() .nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::BinOp( "||", Box::new(WithSpan::no_span(Expr::BinOp( "||", Box::new(WithSpan::no_span(Expr::Var("a"))), Box::new(WithSpan::no_span(Expr::BinOp( "&&", Box::new(WithSpan::no_span(Expr::Var("b"))), Box::new(WithSpan::no_span(Expr::Var("c"))) ))), ))), Box::new(WithSpan::no_span(Expr::BinOp( "&&", Box::new(WithSpan::no_span(Expr::Var("d"))), Box::new(WithSpan::no_span(Expr::Var("e"))) ))), )) )], ); } #[test] fn test_associativity() { let syntax = Syntax::default(); assert_eq!( Ast::from_str("{{ a + b + c }}", None, &syntax) .unwrap() .nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::BinOp( "+", Box::new(WithSpan::no_span(Expr::BinOp( "+", Box::new(WithSpan::no_span(Expr::Var("a"))), Box::new(WithSpan::no_span(Expr::Var("b"))) ))), Box::new(WithSpan::no_span(Expr::Var("c"))) )) )], ); assert_eq!( Ast::from_str("{{ a * b * c }}", None, &syntax) .unwrap() .nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::BinOp( "*", Box::new(WithSpan::no_span(Expr::BinOp( "*", Box::new(WithSpan::no_span(Expr::Var("a"))), Box::new(WithSpan::no_span(Expr::Var("b"))) ))), Box::new(WithSpan::no_span(Expr::Var("c"))) )) )], ); assert_eq!( Ast::from_str("{{ a && b && c }}", None, &syntax) .unwrap() .nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::BinOp( "&&", Box::new(WithSpan::no_span(Expr::BinOp( "&&", Box::new(WithSpan::no_span(Expr::Var("a"))), Box::new(WithSpan::no_span(Expr::Var("b"))) ))), Box::new(WithSpan::no_span(Expr::Var("c"))) )) )], ); assert_eq!( Ast::from_str("{{ a + b - c + d }}", None, &syntax) .unwrap() .nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::BinOp( "+", Box::new(WithSpan::no_span(Expr::BinOp( "-", Box::new(WithSpan::no_span(Expr::BinOp( "+", Box::new(WithSpan::no_span(Expr::Var("a"))), Box::new(WithSpan::no_span(Expr::Var("b"))) ))), Box::new(WithSpan::no_span(Expr::Var("c"))) ))), Box::new(WithSpan::no_span(Expr::Var("d"))) )) )], ); assert_eq!( Ast::from_str("{{ a == b != c > d > e == f }}", None, &syntax) .unwrap() .nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::BinOp( "==", Box::new(WithSpan::no_span(Expr::BinOp( ">", Box::new(WithSpan::no_span(Expr::BinOp( ">", Box::new(WithSpan::no_span(Expr::BinOp( "!=", Box::new(WithSpan::no_span(Expr::BinOp( "==", Box::new(WithSpan::no_span(Expr::Var("a"))), Box::new(WithSpan::no_span(Expr::Var("b"))) ))), Box::new(WithSpan::no_span(Expr::Var("c"))) ))), Box::new(WithSpan::no_span(Expr::Var("d"))) ))), Box::new(WithSpan::no_span(Expr::Var("e"))) ))), Box::new(WithSpan::no_span(Expr::Var("f"))) )) )], ); } #[test] fn test_odd_calls() { let syntax = Syntax::default(); assert_eq!( Ast::from_str("{{ a[b](c) }}", None, &syntax).unwrap().nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Call( Box::new(WithSpan::no_span(Expr::Index( Box::new(WithSpan::no_span(Expr::Var("a"))), Box::new(WithSpan::no_span(Expr::Var("b"))) ))), vec![WithSpan::no_span(Expr::Var("c"))], ),) )], ); assert_eq!( Ast::from_str("{{ (a + b)(c) }}", None, &syntax) .unwrap() .nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Call( Box::new(WithSpan::no_span(Expr::Group(Box::new(WithSpan::no_span( Expr::BinOp( "+", Box::new(WithSpan::no_span(Expr::Var("a"))), Box::new(WithSpan::no_span(Expr::Var("b"))) ) ))))), vec![WithSpan::no_span(Expr::Var("c"))], ),) )], ); assert_eq!( Ast::from_str("{{ a + b(c) }}", None, &syntax) .unwrap() .nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::BinOp( "+", Box::new(WithSpan::no_span(Expr::Var("a"))), Box::new(WithSpan::no_span(Expr::Call( Box::new(WithSpan::no_span(Expr::Var("b"))), vec![WithSpan::no_span(Expr::Var("c"))] ))), )), )], ); assert_eq!( Ast::from_str("{{ (-a)(b) }}", None, &syntax).unwrap().nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Call( Box::new(WithSpan::no_span(Expr::Group(Box::new(WithSpan::no_span( Expr::Unary("-", Box::new(WithSpan::no_span(Expr::Var("a")))) ))))), vec![WithSpan::no_span(Expr::Var("b"))], ),) )], ); assert_eq!( Ast::from_str("{{ -a(b) }}", None, &syntax).unwrap().nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Unary( "-", Box::new(WithSpan::no_span(Expr::Call( Box::new(WithSpan::no_span(Expr::Var("a"))), vec![WithSpan::no_span(Expr::Var("b"))] ))) ),) )], ); assert_eq!( Ast::from_str("{{ a(b)|c }}", None, &syntax).unwrap().nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Filter(Filter { name: "c", arguments: vec![WithSpan::no_span(Expr::Call( Box::new(WithSpan::no_span(Expr::Var("a"))), vec![WithSpan::no_span(Expr::Var("b"))] ))] }),) )] ); assert_eq!( Ast::from_str("{{ a(b)| c }}", None, &syntax).unwrap().nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Filter(Filter { name: "c", arguments: vec![WithSpan::no_span(Expr::Call( Box::new(WithSpan::no_span(Expr::Var("a"))), vec![WithSpan::no_span(Expr::Var("b"))] ))] })), )] ); } #[test] fn test_parse_comments() { #[track_caller] fn one_comment_ws(source: &str, ws: Ws) { let s = &Syntax::default(); let mut nodes = Ast::from_str(source, None, s).unwrap().nodes; assert_eq!(nodes.len(), 1, "expected to parse one node"); match nodes.pop().unwrap() { Node::Comment(comment) => assert_eq!(comment.ws, ws), node => panic!("expected a comment not, but parsed {node:?}"), } } one_comment_ws("{##}", Ws(None, None)); one_comment_ws("{#- #}", Ws(Some(Whitespace::Suppress), None)); one_comment_ws("{# -#}", Ws(None, Some(Whitespace::Suppress))); one_comment_ws( "{#--#}", Ws(Some(Whitespace::Suppress), Some(Whitespace::Suppress)), ); one_comment_ws( "{#- foo\n bar -#}", Ws(Some(Whitespace::Suppress), Some(Whitespace::Suppress)), ); one_comment_ws( "{#- foo\n {#- bar\n -#} baz -#}", Ws(Some(Whitespace::Suppress), Some(Whitespace::Suppress)), ); one_comment_ws("{#+ #}", Ws(Some(Whitespace::Preserve), None)); one_comment_ws("{# +#}", Ws(None, Some(Whitespace::Preserve))); one_comment_ws( "{#++#}", Ws(Some(Whitespace::Preserve), Some(Whitespace::Preserve)), ); one_comment_ws( "{#+ foo\n bar +#}", Ws(Some(Whitespace::Preserve), Some(Whitespace::Preserve)), ); one_comment_ws( "{#+ foo\n {#+ bar\n +#} baz -+#}", Ws(Some(Whitespace::Preserve), Some(Whitespace::Preserve)), ); one_comment_ws("{#~ #}", Ws(Some(Whitespace::Minimize), None)); one_comment_ws("{# ~#}", Ws(None, Some(Whitespace::Minimize))); one_comment_ws( "{#~~#}", Ws(Some(Whitespace::Minimize), Some(Whitespace::Minimize)), ); one_comment_ws( "{#~ foo\n bar ~#}", Ws(Some(Whitespace::Minimize), Some(Whitespace::Minimize)), ); one_comment_ws( "{#~ foo\n {#~ bar\n ~#} baz -~#}", Ws(Some(Whitespace::Minimize), Some(Whitespace::Minimize)), ); one_comment_ws("{# foo {# bar #} {# {# baz #} qux #} #}", Ws(None, None)); } #[test] fn test_parse_tuple() { let syntax = Syntax::default(); assert_eq!( Ast::from_str("{{ () }}", None, &syntax).unwrap().nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Tuple(vec![]),) )], ); assert_eq!( Ast::from_str("{{ (1) }}", None, &syntax).unwrap().nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Group(Box::new(WithSpan::no_span(int_lit("1"))),)) )], ); assert_eq!( Ast::from_str("{{ (1,) }}", None, &syntax).unwrap().nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Tuple(vec![WithSpan::no_span(int_lit("1"))])), )], ); assert_eq!( Ast::from_str("{{ (1, ) }}", None, &syntax).unwrap().nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Tuple(vec![WithSpan::no_span(int_lit("1"))])), )], ); assert_eq!( Ast::from_str("{{ (1 ,) }}", None, &syntax).unwrap().nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Tuple(vec![WithSpan::no_span(int_lit("1"))])), )], ); assert_eq!( Ast::from_str("{{ (1 , ) }}", None, &syntax).unwrap().nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Tuple(vec![WithSpan::no_span(int_lit("1"))])), )], ); assert_eq!( Ast::from_str("{{ (1, 2) }}", None, &syntax).unwrap().nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Tuple(vec![ WithSpan::no_span(int_lit("1")), WithSpan::no_span(int_lit("2")) ])), )], ); assert_eq!( Ast::from_str("{{ (1, 2,) }}", None, &syntax).unwrap().nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Tuple(vec![ WithSpan::no_span(int_lit("1")), WithSpan::no_span(int_lit("2")) ])), )], ); assert_eq!( Ast::from_str("{{ (1, 2, 3) }}", None, &syntax) .unwrap() .nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Tuple(vec![ WithSpan::no_span(int_lit("1")), WithSpan::no_span(int_lit("2")), WithSpan::no_span(int_lit("3")) ])), )], ); assert_eq!( Ast::from_str("{{ ()|abs }}", None, &syntax).unwrap().nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Filter(Filter { name: "abs", arguments: vec![WithSpan::no_span(Expr::Tuple(vec![]))] })), )], ); assert_eq!( Ast::from_str("{{ (1)|abs }}", None, &syntax).unwrap().nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Filter(Filter { name: "abs", arguments: vec![WithSpan::no_span(Expr::Group(Box::new(WithSpan::no_span( int_lit("1") ))))] })), )], ); assert_eq!( Ast::from_str("{{ (1,)|abs }}", None, &syntax) .unwrap() .nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Filter(Filter { name: "abs", arguments: vec![WithSpan::no_span(Expr::Tuple(vec![WithSpan::no_span( int_lit("1") )]))] })), )], ); assert_eq!( Ast::from_str("{{ (1, 2)|abs }}", None, &syntax) .unwrap() .nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Filter(Filter { name: "abs", arguments: vec![WithSpan::no_span(Expr::Tuple(vec![ WithSpan::no_span(int_lit("1")), WithSpan::no_span(int_lit("2")) ]))] })), )], ); } #[test] fn test_missing_space_after_kw() { let syntax = Syntax::default(); let err = Ast::from_str("{%leta=b%}", None, &syntax).unwrap_err(); assert_eq!( err.to_string(), "unknown node `leta`\nfailed to parse template source near offset 2", ); } #[test] fn test_parse_array() { let syntax = Syntax::default(); assert_eq!( Ast::from_str("{{ [] }}", None, &syntax).unwrap().nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Array(vec![])) )], ); assert_eq!( Ast::from_str("{{ [1] }}", None, &syntax).unwrap().nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Array(vec![WithSpan::no_span(int_lit("1"))])) )], ); assert_eq!( Ast::from_str("{{ [ 1] }}", None, &syntax).unwrap().nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Array(vec![WithSpan::no_span(int_lit("1"))])) )], ); assert_eq!( Ast::from_str("{{ [1 ] }}", None, &syntax).unwrap().nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Array(vec![WithSpan::no_span(int_lit("1"))])) )], ); assert_eq!( Ast::from_str("{{ [1,2] }}", None, &syntax).unwrap().nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Array(vec![ WithSpan::no_span(int_lit("1")), WithSpan::no_span(int_lit("2")) ])) )], ); assert_eq!( Ast::from_str("{{ [1 ,2] }}", None, &syntax).unwrap().nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Array(vec![ WithSpan::no_span(int_lit("1")), WithSpan::no_span(int_lit("2")) ])) )], ); assert_eq!( Ast::from_str("{{ [1, 2] }}", None, &syntax).unwrap().nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Array(vec![ WithSpan::no_span(int_lit("1")), WithSpan::no_span(int_lit("2")) ])) )], ); assert_eq!( Ast::from_str("{{ [1,2 ] }}", None, &syntax).unwrap().nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Array(vec![ WithSpan::no_span(int_lit("1")), WithSpan::no_span(int_lit("2")) ])) )], ); assert_eq!( Ast::from_str("{{ []|foo }}", None, &syntax).unwrap().nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Filter(Filter { name: "foo", arguments: vec![WithSpan::no_span(Expr::Array(vec![]))] })) )], ); assert_eq!( Ast::from_str("{{ []| foo }}", None, &syntax).unwrap().nodes, vec![Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Filter(Filter { name: "foo", arguments: vec![WithSpan::no_span(Expr::Array(vec![]))] })) )], ); let n = || { Node::Expr( Ws(None, None), WithSpan::no_span(Expr::Array(vec![WithSpan::no_span(Expr::NumLit( "1", Num::Int("1", None), ))])), ) }; assert_eq!( Ast::from_str( "{{ [1,] }}{{ [1 ,] }}{{ [1, ] }}{{ [1 , ] }}", None, &syntax ) .unwrap() .nodes, vec![n(), n(), n(), n()], ); } #[test] fn fuzzed_unicode_slice() { let d = "{eeuuu{b&{!!&{!!11{{ 0!(!1q҄א!)!!!!!!n!"; assert!(Ast::from_str(d, None, &Syntax::default()).is_err()); } #[test] fn fuzzed_macro_no_end() { let s = "{%macro super%}{%endmacro"; assert!(Ast::from_str(s, None, &Syntax::default()).is_err()); } #[test] fn fuzzed_target_recursion() { const TEMPLATE: &str = include_str!("../tests/target-recursion.txt"); assert!(Ast::from_str(TEMPLATE, None, &Syntax::default()).is_err()); } #[test] fn fuzzed_unary_recursion() { const TEMPLATE: &str = include_str!("../tests/unary-recursion.txt"); assert!(Ast::from_str(TEMPLATE, None, &Syntax::default()).is_err()); } #[test] fn fuzzed_comment_depth() { let (sender, receiver) = std::sync::mpsc::channel(); let test = std::thread::spawn(move || { const TEMPLATE: &str = include_str!("../tests/comment-depth.txt"); assert!(Ast::from_str(TEMPLATE, None, &Syntax::default()).is_ok()); sender.send(()).unwrap(); }); receiver .recv_timeout(std::time::Duration::from_secs(3)) .expect("timeout"); test.join().unwrap(); } #[test] fn let_set() { assert_eq!( Ast::from_str("{% let a %}", None, &Syntax::default()) .unwrap() .nodes(), Ast::from_str("{% set a %}", None, &Syntax::default()) .unwrap() .nodes(), ); } #[test] fn fuzzed_filter_recursion() { const TEMPLATE: &str = include_str!("../tests/filter-recursion.txt"); assert!(Ast::from_str(TEMPLATE, None, &Syntax::default()).is_err()); } rinja_parser-0.3.5/tests/comment-depth.txt000064400000000000000000020726541046102023000167770ustar 00000000000000{#{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{;#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{{#{{##}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}#}rinja_parser-0.3.5/tests/filter-recursion.txt000064400000000000000000007037311046102023000175220ustar 00000000000000{{s|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A||A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AAA|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|AA|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|AA|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|AA|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|E|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|F|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|AA|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A rinja_parser-0.3.5/tests/target-recursion.txt000064400000000000000000000076601046102023000175210ustar 00000000000000{{([(A(A(A(A(A(A(A(A(A(A(A(AA(A(A(A(A(A(A(A(A(A(A(A(A(A(A(At(A(A(A({%let(A(A(A(A(A(A(A(A(A(A(A(A(A(AA(A(A(A(A(A(A(A(A(A(A(A(A(A(A(At(A(A(A(A(A(A(A(A(A(A(A(A(A(AA(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(Amacro(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A((A(A(A(A(A(A(A(A(At(A(A(A(A(A(A(A(A(A(A(A(A(A(AA(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(Amacro(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(At(A(A(A(A(A(A(A(A(A(A(A(A(A(AA(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(Amacro(A(A(A(A(A(A(A(A(A(A(A(A(A(A(AA(A(A(A(At(A(A(A(A(A(A(A(A(A(A(A(A(A(AA(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(Amacro(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A((A(A(A(A(A(A(A(A(At(A(A(A(A(A(A(A(A(A(A(A(A(A(AA(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(Amacro(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(AA((A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(I(A(A(A(A(A(A(A(A(A(A(A(A(A(AA(A(A(A(A(A(A(A(A(A(A(At(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(At(A(A(A(A(A(A(A(A(A(A(A(A(A(AA(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A((AAA((Amacro(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A((A(A(A(A(A(A(A(A(At(A(A(A(A(A(A(A(A(A(A(A(A(A(AA(A(A(A(A(A(A(A(A,A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(Amacro(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(AA((A(A(A(I(A(A(A(A(A(A(A(A(A(A(A(A(A(AA(A(A(A(A(A(A((A(Amacro(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A((A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(Amacro(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A((A(A(A(A(A(A(A(A(At(A(A(A(A(A(A(A(A(A(A(A(A(A(AA(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(Amacro(A(A(A(A(A(A(A(A(A(A(A(A(A(A(AA(A(A(A(At(A(A(A(A(A(A(A(A(A(A(A(A(A(AA(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(Amacro(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A((A(A(A(A(A(AA(tA(A((A(A(A(A(A(A(A(A(A(A(A(A(A(AA(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(Amacro(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(I(A(A(A(A(A(A(A(A(A(A(A(A(A(AA(A(A(A(A(A(A(A(A(A(A(At(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(At(A(A(A(A(A(A(A(A(A(A(A(A(A(AA(A(A(A(A(A(A(A(A(A(A(A(AA(A(A(A(At(A(A(A(A(A(A(A(A(A(A(A(A(A(AA(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(Amacro(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A((A(A(A(A(A(A(A(A(At(A(A(A(A(A(A(A(A(A(A(A(A(A(AA(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(Amacro(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(AA((A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(I(A(A(A(A(A(A(A(A(A(A(A(A(A(AA(A(A(A(A(A(A(A(A(A(A(At(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(At(A(A(A(A(A(A(A(A(A(A(A(A(A(AA(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A((AAA((Amacro(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A((A(A(A(A(A(A(A(A(At(A(A(A(A(A(A(A(A(A(A(A(A(A(AA(A(A(A(A(A(A(A(A,A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(Amacro(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(AA((A(A(A(I(A(A(A(A(A(A(A(A(A(A(A(A(A(AA(A(A(A(A(A(A((A(Amacro(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A((A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(Amacro(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A((A(A(A(A(A(A(A(A(At(A(A(A(A(A(A(A(A(A(A(A(A(A(AA(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(Amacro(A(A(A(A(A(A(A(A(A(A(A(A(A(A(AA(A(A(A(At(A(A(A(A(A(A(A(A(A(A(A(A(A(AA(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(Amacro(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A((A(A(A(A(A(AA(tA(A((A(A(A(A(A(A(A(A(A(A(A(A(A(AA(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(Amacro(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(I(A(A(A(A(A(A(A(A(A(A(A(A(A(AA(A(A(A(A(A(A(A(A(A(A(At(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(At(A(A(A(A(A(A(A(A(A(A(A(A(A(AA(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(Amacro(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A((A(A(A(A(A(A(A(A(At(A(A(A(A(A(A(A(A(A(A(A(A(A(AA(A(A(A(A(A(A(A(A,A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(Amacro(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(AA(A(A(A(A(A(A(A(A(A(A(A(A(A(A(w),((0),)),(((128,(((((((((((((+((((((A(A(A((((,{([ (A((A(((AAAA(A(rinja_parser-0.3.5/tests/unary-recursion.txt000064400000000000000000003153151046102023000173700ustar 00000000000000{{!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!ʉrinja_parser-0.3.5/tomlfmt.toml000064400000000000000000000002071046102023000146660ustar 00000000000000table_order = ["workspace", "package", "badges", "lib", "features", "dependencies", "build-dependencies", "dev-dependencies", "bench"]