pax_global_header00006660000000000000000000000064146626545630014533gustar00rootroot0000000000000052 comment=f4be732b2168b1810aa48bfad689e19c4364931f rio-0.8.5/000077500000000000000000000000001466265456300123365ustar00rootroot00000000000000rio-0.8.5/.github/000077500000000000000000000000001466265456300136765ustar00rootroot00000000000000rio-0.8.5/.github/dependabot.yml000066400000000000000000000005041466265456300165250ustar00rootroot00000000000000version: 2 updates: - package-ecosystem: cargo directory: "/" schedule: interval: daily open-pull-requests-limit: 10 - package-ecosystem: gitsubmodule directory: "/" schedule: interval: daily - package-ecosystem: "github-actions" directory: "/" schedule: interval: weekly rio-0.8.5/.github/workflows/000077500000000000000000000000001466265456300157335ustar00rootroot00000000000000rio-0.8.5/.github/workflows/build.yml000066400000000000000000000045101466265456300175550ustar00rootroot00000000000000name: build on: push: branches: - main pull_request: branches: - main jobs: fmt: name: fmt runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - run: rustup update && rustup component add rustfmt - run: cargo fmt -- --check clippy: name: clippy runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - run: rustup update && rustup component add clippy - uses: Swatinem/rust-cache@v2 - run: cargo clippy --all --all-targets clippy_msrv: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - run: rustup update && rustup override set 1.75 && rustup component add clippy - uses: Swatinem/rust-cache@v2 - run: cargo clippy --all-targets -- -D warnings -D clippy::all - run: cargo clippy --all-targets --all-features -- -D warnings -D clippy::all test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 with: submodules: true - run: rustup update - uses: Swatinem/rust-cache@v2 - run: cargo test --verbose --all --all-features env: RUST_BACKTRACE: 1 rustdoc: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - run: rustup update - uses: Swatinem/rust-cache@v2 - run: cargo doc --all-features --no-deps rustdoc_msrv: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - run: rustup update && rustup override set 1.75 - uses: Swatinem/rust-cache@v2 - run: cargo doc --all-features --no-deps env: RUSTDOCFLAGS: -D warnings deny: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - run: rustup update - uses: Swatinem/rust-cache@v2 - run: cargo install cargo-deny || true - run: cargo deny check semver_checks: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 with: submodules: true - run: rustup update - uses: Swatinem/rust-cache@v2 - run: cargo install cargo-semver-checks || true - run: cargo semver-checks check-release --exclude rio_testsuite typos: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: Swatinem/rust-cache@v2 - run: cargo install typos-cli || true - run: typos rio-0.8.5/.gitignore000066400000000000000000000000361466265456300143250ustar00rootroot00000000000000/target **/*.rs.bk Cargo.lock rio-0.8.5/.gitmodules000066400000000000000000000003161466265456300145130ustar00rootroot00000000000000[submodule "testsuite/rdf-tests"] path = testsuite/rdf-tests url = https://github.com/w3c/rdf-tests.git [submodule "testsuite/rdf-star"] path = testsuite/rdf-star url = https://github.com/w3c/rdf-star/ rio-0.8.5/CHANGELOG.md000066400000000000000000000156161466265456300141600ustar00rootroot00000000000000# Changelog ## [0.8.5] - 2024-08-28 ### Changed - Bump MSRV to 1.75 - Bump quick-xml to 0.36 ## [0.8.4] - 2022-04-19 ### Changed - Turtle and TriG: Hopefully actually fixes parsing of prefixes named like a keyword (`prefix`, `base`, `graph`, `true` and `false`). ## [0.8.3] - 2022-03-18 ### Changed - Upgrades the MSRV to 1.60. - RDF/XML: properly clear the XML parser buffer during parsing to avoid it to grow indefinitely. ## [0.8.2] - 2022-02-22 ### Changed - Sets officially the minimal supported Rust version to 1.58. - Turtle and TriG: Fixes parsing of prefixes named like a keyword (`prefix`, `base`, `graph`, `true` and `false`). ## [0.8.1] - 2022-01-17 ### Changed - Upgrades `quick-xml` to 0.27. # Changelog ## [0.8.0] - 2022-12-18 ### Added - Generalized RDF: Quoted triples are now allowed to contain generalized terms. - `GeneralizedNQuadsParser` for NQuads syntax with generalized RDF (all terms might be IRIs, blank nodes, literals, variables or quoted triples). - XML: Properly resolves already declared entities in entity declarations. ### Removed - `From` and `From` for `GeneralizedTerm`, `TryFrom` for `Subject` and `Term`. Conversions between `Triple`, `Quad` and `GeneralizedQuad`. ### Changed - Upgrades `quick-xml` to 0.26 ## [0.7.3] - 2022-07-09 ### Changed - Adds `RdfXmlParser::buffer_position`. ## [0.7.2] - 2022-06-11 ### Changed - Upgrades `quick-xml` dependency of `rio_xml` to 0.23. ## [0.7.1] - 2022-03-25 ### Added - `TurtleParser::prefixes()` and `TriGParser::prefixes()` to fetch the list of IRI prefixes in the parsed file. ## [0.7.0] - 2022-03-05 ### Removed - Adapters for [sophia_api](https://github.com/pchampin/sophia_rs). - Support of [oxiri](https://github.com/oxigraph/oxiri) 0.1. ### Changed - Formatters now flushes when the `finish` method is called. - The `NTriplesFormatter` and `NQuadsFormatter` `finish` method is also now fallible. ## [0.6.2] - 2022-01-11 ### Added - Support of [oxiri](https://github.com/oxigraph/oxiri) 0.2. ### Changed - The parsers now crashes before a possible stack overflow error when ready too many nested anonymous blank nodes, collections or RDF-star nested triples. ## [0.6.1] - 2021-07-28 ### Added - Support of [sophia_api](https://github.com/pchampin/sophia_rs) 0.7. ### Changed - The Turtle/TriG parsers now enforce that named blank node identifiers do not collide with the identifiers auto generated by Rio. ## [0.6.0] - 2021-07-01 ### Added - Support of [RDF-star](https://w3c.github.io/rdf-star/cg-spec/) model. - Support of [RDF-star concrete syntaxes](https://w3c.github.io/rdf-star/cg-spec/#concrete-syntaxes): NTriples, NQuads, Turtle and TriG now support RDF-star by default. ### Changed - The `Triple`s and `Quad` subject has the type `Subject` (union of `NamedNode`, `BlankNode` and `Triple`). - The `Quad` graph name has the type `Option` (union of `NamedNode`, `BlankNode` and the default graph). - Small optimization in formatters. - `Triple` and `Quad` formatting do not output training dot. - RDF/XML parser keeps spaces at the beginning and the end of parsed values (literals...). ## [0.5.3] - 2021-03-10 ### Changed - RDF/XML parser now resolves custom XML entities - Upgrades `quick_xml` dependency to 0.22. This release fixes wasm compilation problems ## [0.5.2] - 2021-02-19 ### Added - `RdfXmlSerializer::with_indentation` to format RDF/XML with indentation ### Changed - Fixes a bug in RDF/XML formatting where ":" was used in local names - Upgrades `quick_xml` dependency to 0.21 ## [0.5.1] - 2021-01-01 ### Changed - Upgrades `quick_xml` dependency to 0.20 - Improves code style ## [0.5.0] - 2020-08-08 ### Added - Model structures and parsers now implement [Sophia](https://crates.io/crates/sophia_api) traits. This is disabled by default and hidden behind the `sophia` feature. - `Into` is now implemented by `TurtleError` and `RdfXmlError` for easy conversions. ### Removed - Removes `language_tag` and `iri` from `rio_api`. These modules are now the crates [`oxiri`](https://crates.io/crates/oxiri) and [`oxilangtag`](https://crates.io/crates/oxilangtag). ### Changed - `base_iri` parameter of parser constructors is now taking values of type `Option>` instead of `&str`. - Parser constructors are now returning `Self` and not `Result`. - RDF/XML serializers now use `std::io::Error` error type instead of `rio_xml::RdfXmlError` because only I/O related errors might be returned. - RDF/XML serializer now tries to extract predicate prefixes. - Use `u64` instead of `usize` to report file positions in order to support parsing big files on 32 bits systems. ## [0.4.2] - 2020-04-04 - Normalizes all language tags to lowercase in the `rio_turtle` and `rio_xml` crates. - Introduces the `LanguageTag` struct to parse and normalize case of language tags. - Fixes Turtle parsing when the parser look ahead needs to span multiple lines. - Makes `Iri` implement `AsRef` and `FromStr`. ## [0.4.1] - 2020-03-19 - Makes `Iri` allow resolving against base IRIs with not hierarchical path (like `file:foo`). - Upgrades `quick-xml` dependency to 0.18. ## [0.4.0] - 2020-01-07 - Adds "generalized" RDF support and generalized Trig parser behind a "generalized" feature flag. - Allows to recover NTriples and NQuads parser errors, the parser jumps to the next line if the current line parsing fail. - Makes `Iri` parser do the full IRI validation. ## [0.3.1] - 2019-09-02 ### Added - `Iri::as_str` and `Display` implementation to `rio_api`. ## [0.3.0] - 2019-08-28 ### Added - `TriplesFormatter` and `QuadsFormatter` with implementations for NTriples, NQuads, Turtle, TriG and RDF/XML. - `Iri` to `rio_api` that allows to do partial IRI validation and resolution. - `ParseError::textual_position` that allows to get the error position from a `TurtleError` or a `RdfXmlError`. ### Changed - `TripleParser` have been renamed to `TriplesParser` for consistency. - `QuadParser` have been renamed to `QuadsParser` for consistency. - `TriplesParser::parse_step` and `TriplesParser::parse_all` `on_triple` callbacks should now return a `Result`. It allows library user to return more easily errors from their callback code. The same change have been applied to `QuadsParser`. - Literals formatting only escape the characters required by the canonical NTriples syntax. ## [0.2.0] - 2019-08-11 ### Added - `Quad` struct and `QuadParser` trait to `rio_api`. - N-Quads (`NQuadsParser`) and TriG (`TriGParser`) parsers to `rio_turtle`. - `rdf_xml` crate with an RDF/XML parser. ### Changed - `\r` characters could also end comments in Turtle/TriG. - Fixes IRI parsing when the IRI has an authority and a query and/or fragment but no path. - Do not allow "[] ." lines in Turtle. - Minor optimisations to the Turtle parser. ## [0.1.0] - 2019-07-28 ### Added - `rio_api` crate with `Triple` struct and `TripleParser` trait. - `rio_turtle` crate with N-Triples (`TurtleParser`) and Turtle (`TurtleParser`). rio-0.8.5/Cargo.toml000066400000000000000000000003071466265456300142660ustar00rootroot00000000000000[workspace] members = [ "api", "turtle", "testsuite", "xml" ] resolver = "2" [patch.crates-io] rio_api = { path = "api" } rio_turtle = { path = "turtle" } rio_xml = { path = "xml" } rio-0.8.5/LICENSE000066400000000000000000000261351466265456300133520ustar00rootroot00000000000000 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 [yyyy] [name of copyright owner] 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. rio-0.8.5/README.md000066400000000000000000000062361466265456300136240ustar00rootroot00000000000000Rio === [![actions status](https://github.com/oxigraph/rio/workflows/build/badge.svg)](https://github.com/oxigraph/rio/actions) Rio is a low level library which provides conformant and fast parsers and formatters for RDF related file formats. These libraries are going to be replaced by the [oxttl](https://crates.io/crates/oxttl) and [oxrdfxml](https://crates.io/crates/oxrdfxml) libraries. It currently provides [N-Triples](https://docs.rs/rio_turtle/latest/rio_turtle/struct.NTriplesParser.html), [N-Quads](https://docs.rs/rio_turtle/latest/rio_turtle/struct.NQuadsParser.html), [Turtle](https://docs.rs/rio_turtle/latest/rio_turtle/struct.TurtleParser.html), [TriG](https://docs.rs/rio_turtle/latest/rio_turtle/struct.TrigParser.html) and [RDF/XML](https://docs.rs/rio_xml/latest/rio_xml/struct.RdfXmlParser.html) parsers and formatters. It is split into multiple crates: * `rio_api` provides common traits and data structures to be used in Rio parsers (`Triple`, `TriplesParser`, `Iri`...). [![Latest Version](https://img.shields.io/crates/v/rio_api.svg)](https://crates.io/crates/rio_api) [![Released API docs](https://docs.rs/rio_api/badge.svg)](https://docs.rs/rio_api) * `rio_turtle` provides conformant streaming parsers and formatters for [Turtle](https://www.w3.org/TR/turtle/), [TriG](https://www.w3.org/TR/trig/), [N-Triples](https://www.w3.org/TR/n-triples/) and [N-Quads](https://www.w3.org/TR/n-quads/). [RDF-star](https://w3c.github.io/rdf-star/cg-spec/) syntaxes are also supported: [Turtle-star](https://w3c.github.io/rdf-star/cg-spec/#turtle-star), [TriG-star](https://w3c.github.io/rdf-star/cg-spec/#trig-star), [N-Triples-star](https://w3c.github.io/rdf-star/cg-spec/#n-triples-star) and [N-Quads-star](https://w3c.github.io/rdf-star/cg-spec/#n-quads-star). [![Latest Version](https://img.shields.io/crates/v/rio_turtle.svg)](https://crates.io/crates/rio_turtle) [![Released API docs](https://docs.rs/rio_turtle/badge.svg)](https://docs.rs/rio_turtle) * `rio_xml` provides a conformant streaming parser and a formatter for [RDF/XML](https://www.w3.org/TR/rdf-syntax-grammar/). [![Latest Version](https://img.shields.io/crates/v/rio_xml.svg)](https://crates.io/crates/rio_xml) [![Released API docs](https://docs.rs/rio_xml/badge.svg)](https://docs.rs/rio_xml) There is also the `rio_testsuite` crate that is used for testing Rio parsers against the [W3C RDF tests](http://w3c.github.io/rdf-tests/) to ensure their conformance. It provides both an executable for building implementation reports and integration test to quickly ensure that the parsers stay conformant. It is not designed to be used outside of Rio. ## License Copyright 2019-2021 The Rio developers. 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. rio-0.8.5/api/000077500000000000000000000000001466265456300131075ustar00rootroot00000000000000rio-0.8.5/api/Cargo.toml000066400000000000000000000007401466265456300150400ustar00rootroot00000000000000[package] name = "rio_api" version = "0.8.5" authors = ["Tpt ", "Pierre-Antoine Champin "] license = "Apache-2.0" readme = "../README.md" keywords = ["RDF", "parser"] repository = "https://github.com/oxigraph/rio" description = """ Common data structures for RDF formats parsers and serializers """ edition = "2021" rust-version = "1.75" [package.metadata.docs.rs] all-features = true [features] default = [] generalized = [] rio-0.8.5/api/src/000077500000000000000000000000001466265456300136765ustar00rootroot00000000000000rio-0.8.5/api/src/formatter.rs000066400000000000000000000010651466265456300162510ustar00rootroot00000000000000//! Interfaces for RDF formatters. //! //! The main types are [`TriplesFormatter`] for triples parsing and [`QuadsFormatter`] for quads parsing. use crate::model::{Quad, Triple}; use std::error::Error; /// A formatter for [`Triple`]. pub trait TriplesFormatter { type Error: Error; /// Writes a triple fn format(&mut self, triple: &Triple<'_>) -> Result<(), Self::Error>; } /// A formatter for [`Quad`]. pub trait QuadsFormatter { type Error: Error; /// Writes a quad fn format(&mut self, quad: &Quad<'_>) -> Result<(), Self::Error>; } rio-0.8.5/api/src/generalized.rs000066400000000000000000000265611466265456300165470ustar00rootroot00000000000000//! This module contains extensions for generalized RDF / RDF-star. //! Its elements are re-exported by `model` and `parser`, respectively. /// Data structures for generalized [RDF 1.1 Concepts](https://www.w3.org/TR/rdf11-concepts/), /// allowing variables, and any kind of node in any Triple/Quad position. pub mod model { use std::convert::TryFrom; use std::error::Error; use std::fmt; pub use crate::model::*; /// A SPARQL [variable](https://www.w3.org/TR/sparql11-query/#QSynVariables). /// /// The default string formatter is returning a SPARQL compatible representation. /// /// ``` /// use rio_api::model::Variable; /// /// assert_eq!( /// "?foobar", /// Variable { name: "foobar" }.to_string() /// ) /// ``` /// /// Using it requires to enable the `generalized` feature. #[derive(Eq, PartialEq, Ord, PartialOrd, Debug, Clone, Copy, Hash)] pub struct Variable<'a> { /// The name of the [variable](https://www.w3.org/TR/sparql11-query/#QSynVariables) itself. pub name: &'a str, } impl<'a> fmt::Display for Variable<'a> { #[inline] fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "?{}", self.name) } } // /// A generalized RDF [term](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-term). /// /// It is the union of /// * [IRI](https://www.w3.org/TR/rdf11-concepts/#dfn-iri) references (absolute *or relative*), /// * [blank nodes](https://www.w3.org/TR/rdf11-concepts/#dfn-blank-node) /// * [literals](https://www.w3.org/TR/rdf11-concepts/#dfn-literal) and /// * [variables](https://www.w3.org/TR/sparql11-query/#QSynVariables). /// * [quoted triples](https://www.w3.org/2021/12/rdf-star.html#dfn-quoted) /// /// The default string formatter is returning an N-Triples, Turtle and SPARQL compatible representation. /// /// Using it requires to enable the `generalized` feature. #[derive(Eq, PartialEq, Debug, Clone, Copy, Hash)] pub enum GeneralizedTerm<'a> { NamedNode(NamedNode<'a>), BlankNode(BlankNode<'a>), Literal(Literal<'a>), Variable(Variable<'a>), Triple(&'a [GeneralizedTerm<'a>; 3]), } impl<'a> From> for GeneralizedTerm<'a> { #[inline] fn from(other: NamedNode<'a>) -> GeneralizedTerm<'a> { GeneralizedTerm::NamedNode(other) } } impl<'a> From> for GeneralizedTerm<'a> { #[inline] fn from(other: BlankNode<'a>) -> GeneralizedTerm<'a> { GeneralizedTerm::BlankNode(other) } } impl<'a> From> for GeneralizedTerm<'a> { #[inline] fn from(other: Literal<'a>) -> GeneralizedTerm<'a> { GeneralizedTerm::Literal(other) } } impl<'a> From> for GeneralizedTerm<'a> { #[inline] fn from(other: Variable<'a>) -> GeneralizedTerm<'a> { GeneralizedTerm::Variable(other) } } impl<'a> From> for GeneralizedTerm<'a> { #[inline] fn from(other: GraphName<'a>) -> GeneralizedTerm<'a> { match other { GraphName::NamedNode(inner) => GeneralizedTerm::NamedNode(inner), GraphName::BlankNode(inner) => GeneralizedTerm::BlankNode(inner), } } } impl<'a> TryFrom> for NamedNode<'a> { type Error = StrictRdfError; #[inline] fn try_from(other: GeneralizedTerm<'a>) -> Result, StrictRdfError> { match other { GeneralizedTerm::NamedNode(inner) => Ok(inner), GeneralizedTerm::BlankNode(_) => Err(StrictRdfError { message: "Blank node cannot be used as predicate", }), GeneralizedTerm::Literal(_) => Err(StrictRdfError { message: "Literal cannot be used as predicate", }), GeneralizedTerm::Variable(_) => Err(StrictRdfError { message: "Variable cannot be converted to Term", }), GeneralizedTerm::Triple(_) => Err(StrictRdfError { message: "Triple cannot be used as predicate", }), } } } impl<'a> TryFrom> for GraphName<'a> { type Error = StrictRdfError; #[inline] fn try_from(other: GeneralizedTerm<'a>) -> Result, StrictRdfError> { match other { GeneralizedTerm::NamedNode(inner) => Ok(GraphName::NamedNode(inner)), GeneralizedTerm::BlankNode(inner) => Ok(GraphName::BlankNode(inner)), GeneralizedTerm::Literal(_) => Err(StrictRdfError { message: "Literal cannot be used a graph name", }), GeneralizedTerm::Variable(_) => Err(StrictRdfError { message: "Variable cannot be converted to Term", }), GeneralizedTerm::Triple(_) => Err(StrictRdfError { message: "Triple cannot be used as a graph name", }), } } } impl<'a> fmt::Display for GeneralizedTerm<'a> { #[inline] fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { GeneralizedTerm::NamedNode(node) => node.fmt(f), GeneralizedTerm::BlankNode(node) => node.fmt(f), GeneralizedTerm::Literal(literal) => literal.fmt(f), GeneralizedTerm::Variable(variable) => variable.fmt(f), GeneralizedTerm::Triple(triple) => { write!(f, "<< {} {} {} >>", triple[0], triple[1], triple[2]) } } } } // /// A generalized [RDF triple](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-triple) in a [RDF dataset](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-dataset). /// /// The default string formatter is returning a SPARQL representation. /// /// ``` /// use rio_api::model::{GeneralizedQuad, Variable}; /// /// assert_eq!( /// "?s ?p ?o .", /// GeneralizedQuad { /// subject: Variable { name: "s" }.into(), /// predicate: Variable { name: "p" }.into(), /// object: Variable { name: "o" }.into(), /// graph_name: None, /// }.to_string() /// ); /// /// assert_eq!( /// "GRAPH ?g { ?s ?p ?o .}", /// GeneralizedQuad { /// subject: Variable { name: "s" }.into(), /// predicate: Variable { name: "p" }.into(), /// object: Variable { name: "o" }.into(), /// graph_name: Some(Variable { name: "g" }.into()), /// }.to_string() /// ); /// ``` /// /// Using it requires to enable the `generalized` feature. #[derive(Eq, PartialEq, Debug, Clone, Hash)] pub struct GeneralizedQuad<'a> { pub subject: GeneralizedTerm<'a>, pub predicate: GeneralizedTerm<'a>, pub object: GeneralizedTerm<'a>, pub graph_name: Option>, } impl<'a> fmt::Display for GeneralizedQuad<'a> { #[inline] fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { if let Some(graph_name) = &self.graph_name { write!(f, "GRAPH {} {{ ", graph_name)?; } write!(f, "{} {} {} .", self.subject, self.predicate, self.object)?; if self.graph_name.is_some() { write!(f, "}}")?; } Ok(()) } } // /// An error raised when generalized RDF cannot be converted to strict RDF. #[derive(Debug, Clone, Copy)] pub struct StrictRdfError { pub message: &'static str, } impl fmt::Display for StrictRdfError { #[inline] fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { self.message.fmt(f) } } impl Error for StrictRdfError {} } /// Interface for generalized RDF parsers. pub mod parser { use super::model::GeneralizedQuad; use std::error::Error; /// A parser returning generalized [`Quad`](super::model::Quad). /// /// Using it requires to enable the `generalized` feature. pub trait GeneralizedQuadsParser { type Error: Error; /// Parses the complete file and calls `on_quad` each time a new quad is read. /// /// May fails on errors caused by the parser itself or by the callback function `on_quad`. fn parse_all>( &mut self, on_quad: &mut impl FnMut(GeneralizedQuad<'_>) -> Result<(), E>, ) -> Result<(), E> { while !self.is_end() { self.parse_step(on_quad)? } Ok(()) } /// Parses a small chunk of the file and calls `on_quad` each time a new quad is read. /// (A "small chunk" could be a line for an N-Quads parser.) /// /// This method should be called as long as [`is_end`](GeneralizedQuadsParser::is_end) returns false. /// /// May fails on errors caused by the parser itself or by the callback function `on_quad`. fn parse_step>( &mut self, on_quad: &mut impl FnMut(GeneralizedQuad<'_>) -> Result<(), E>, ) -> Result<(), E>; /// Returns `true` if the file has been completely consumed by the parser. fn is_end(&self) -> bool; /// Converts the parser into a `Result` iterator. /// /// `convert_quad` is a function converting Rio [`GeneralizedQuad`]s to `T`. fn into_iter( self, convert_quad: F, ) -> GeneralizedQuadsParserIterator where E: From, F: FnMut(GeneralizedQuad<'_>) -> Result, Self: Sized, { GeneralizedQuadsParserIterator { parser: self, buffer: Vec::default(), convert_quad, } } } /// Created with the method [`into_iter`](GeneralizedQuadsParser::into_iter()). /// /// Using it requires to enable the `generalized` feature. pub struct GeneralizedQuadsParserIterator< T, E: From, F: FnMut(GeneralizedQuad<'_>) -> Result, P: GeneralizedQuadsParser, > { parser: P, buffer: Vec, convert_quad: F, } impl Iterator for GeneralizedQuadsParserIterator where E: From, F: FnMut(GeneralizedQuad<'_>) -> Result, P: GeneralizedQuadsParser + Sized, { type Item = Result; fn next(&mut self) -> Option> { loop { if let Some(r) = self.buffer.pop() { return Some(Ok(r)); } if self.parser.is_end() { return None; } let buffer = &mut self.buffer; let convert_quad = &mut self.convert_quad; if let Err(e) = self .parser .parse_step(&mut |q| convert_quad(q).map(|q| buffer.push(q))) { return Some(Err(e)); } } } } } rio-0.8.5/api/src/lib.rs000066400000000000000000000007161466265456300150160ustar00rootroot00000000000000//! This crate provides basic interfaces and data structures for building [RDF 1.1](https://www.w3.org/TR/rdf11-concepts/) and [RDF-star](https://w3c.github.io/rdf-star/cg-spec/) parsers. //! //! It is currently used by the `rio_turtle` and `rio_xml` crates. #![deny(unsafe_code)] #![cfg_attr(docsrs, feature(doc_auto_cfg))] #![doc(test(attr(deny(warnings))))] pub mod formatter; pub mod model; pub mod parser; #[cfg(feature = "generalized")] mod generalized; rio-0.8.5/api/src/model.rs000066400000000000000000000267301466265456300153540ustar00rootroot00000000000000//! Data structures for [RDF 1.1](https://www.w3.org/TR/rdf11-concepts/) and [RDF-star](https://w3c.github.io/rdf-star/cg-spec/) concepts like IRI, literal or triples. #[cfg(feature = "generalized")] pub use crate::generalized::model::*; use std::fmt; use std::fmt::Write; /// An RDF [IRI](https://www.w3.org/TR/rdf11-concepts/#dfn-iri). /// /// The default string formatter is returning an N-Triples, Turtle and SPARQL compatible representation. /// /// ``` /// use rio_api::model::NamedNode; /// /// assert_eq!( /// "", /// NamedNode { iri: "http://example.com/foo" }.to_string() /// ) /// ``` #[derive(Eq, PartialEq, Ord, PartialOrd, Debug, Clone, Copy, Hash)] pub struct NamedNode<'a> { /// The [IRI](https://www.w3.org/TR/rdf11-concepts/#dfn-iri) itself. pub iri: &'a str, } impl<'a> fmt::Display for NamedNode<'a> { #[inline] fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "<{}>", self.iri) } } /// An RDF [blank node](https://www.w3.org/TR/rdf11-concepts/#dfn-blank-node). /// /// /// The default string formatter is returning an N-Triples, Turtle and SPARQL compatible representation. /// /// ``` /// use rio_api::model::BlankNode; /// /// assert_eq!( /// "_:a1", /// BlankNode { id: "a1" }.to_string() /// ) /// ``` #[derive(Eq, PartialEq, Debug, Clone, Copy, Hash)] pub struct BlankNode<'a> { /// The [blank node identifier](https://www.w3.org/TR/rdf11-concepts/#dfn-blank-node-identifier). pub id: &'a str, } impl<'a> fmt::Display for BlankNode<'a> { #[inline] fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "_:{}", self.id) } } /// An RDF [literal](https://www.w3.org/TR/rdf11-concepts/#dfn-literal). /// /// The default string formatter is returning an N-Triples, Turtle and SPARQL compatible representation. /// /// The language tags should be lowercased [as suggested by the RDF specification](https://www.w3.org/TR/rdf11-concepts/#dfn-language-tagged-string). /// /// ``` /// use rio_api::model::NamedNode; /// use rio_api::model::Literal; /// /// assert_eq!( /// "\"foo\\nbar\"", /// Literal::Simple { value: "foo\nbar" }.to_string() /// ); /// /// assert_eq!( /// "\"1999-01-01\"^^", /// Literal::Typed { value: "1999-01-01", datatype: NamedNode {iri: "http://www.w3.org/2001/XMLSchema#date" }}.to_string() /// ); /// /// assert_eq!( /// "\"foo\"@en", /// Literal::LanguageTaggedString { value: "foo", language: "en" }.to_string() /// ); /// ``` #[derive(Eq, PartialEq, Debug, Clone, Copy, Hash)] pub enum Literal<'a> { /// A [simple literal](https://www.w3.org/TR/rdf11-concepts/#dfn-simple-literal) without datatype or language form. Simple { /// The [lexical form](https://www.w3.org/TR/rdf11-concepts/#dfn-lexical-form). value: &'a str, }, /// A [language-tagged string](https://www.w3.org/TR/rdf11-concepts/#dfn-language-tagged-string) LanguageTaggedString { /// The [lexical form](https://www.w3.org/TR/rdf11-concepts/#dfn-lexical-form). value: &'a str, /// The [language tag](https://www.w3.org/TR/rdf11-concepts/#dfn-language-tag). language: &'a str, }, /// A literal with an explicit datatype Typed { /// The [lexical form](https://www.w3.org/TR/rdf11-concepts/#dfn-lexical-form). value: &'a str, /// The [datatype IRI](https://www.w3.org/TR/rdf11-concepts/#dfn-datatype-iri). datatype: NamedNode<'a>, }, } impl<'a> fmt::Display for Literal<'a> { #[inline] fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { Literal::Simple { value } => fmt_quoted_str(value, f), Literal::LanguageTaggedString { value, language } => { fmt_quoted_str(value, f)?; write!(f, "@{}", language) } Literal::Typed { value, datatype } => { fmt_quoted_str(value, f)?; write!(f, "^^{}", datatype) } } } } /// A restriction of [Term] that can be used as the [subject of an RDF triple](https://www.w3.org/TR/rdf11-concepts/#dfn-subject). /// /// The default string formatter is returning an N-Triples, Turtle and SPARQL compatible representation. #[derive(Eq, PartialEq, Debug, Clone, Copy, Hash)] pub enum Subject<'a> { NamedNode(NamedNode<'a>), BlankNode(BlankNode<'a>), /// Rio does support [RDF-star](https://w3c.github.io/rdf-star/cg-spec/2021-07-01.html#dfn-triple), which allows triples to be the subject of other triples. Triple(&'a Triple<'a>), } impl<'a> fmt::Display for Subject<'a> { #[inline] fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { Subject::NamedNode(node) => node.fmt(f), Subject::BlankNode(node) => node.fmt(f), Subject::Triple(triple) => write!(f, "<< {} >>", triple), } } } impl<'a> From> for Subject<'a> { #[inline] fn from(node: NamedNode<'a>) -> Self { Subject::NamedNode(node) } } impl<'a> From> for Subject<'a> { #[inline] fn from(node: BlankNode<'a>) -> Self { Subject::BlankNode(node) } } impl<'a> From<&'a Triple<'a>> for Subject<'a> { #[inline] fn from(triple: &'a Triple<'a>) -> Self { Subject::Triple(triple) } } impl<'a> From> for Subject<'a> { #[inline] fn from(node: GraphName<'a>) -> Self { match node { GraphName::BlankNode(node) => Subject::BlankNode(node), GraphName::NamedNode(node) => Subject::NamedNode(node), } } } /// An RDF [term](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-term). /// /// It is the union of [IRIs](https://www.w3.org/TR/rdf11-concepts/#dfn-iri), [blank nodes](https://www.w3.org/TR/rdf11-concepts/#dfn-blank-node) and [literals](https://www.w3.org/TR/rdf11-concepts/#dfn-literal). /// /// The default string formatter is returning an N-Triples, Turtle and SPARQL compatible representation. #[derive(Eq, PartialEq, Debug, Clone, Copy, Hash)] pub enum Term<'a> { NamedNode(NamedNode<'a>), BlankNode(BlankNode<'a>), Literal(Literal<'a>), /// Rio does support [RDF-star](https://w3c.github.io/rdf-star/cg-spec/2021-07-01.html#dfn-rdf-star-terms), which allows triples to be terms inside of other triples. Triple(&'a Triple<'a>), } impl<'a> fmt::Display for Term<'a> { #[inline] fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { Term::NamedNode(node) => node.fmt(f), Term::BlankNode(node) => node.fmt(f), Term::Literal(literal) => literal.fmt(f), Term::Triple(triple) => write!(f, "<< {} >>", triple), } } } impl<'a> From> for Term<'a> { #[inline] fn from(node: NamedNode<'a>) -> Self { Term::NamedNode(node) } } impl<'a> From> for Term<'a> { #[inline] fn from(node: BlankNode<'a>) -> Self { Term::BlankNode(node) } } impl<'a> From> for Term<'a> { #[inline] fn from(literal: Literal<'a>) -> Self { Term::Literal(literal) } } impl<'a> From<&'a Triple<'a>> for Term<'a> { #[inline] fn from(triple: &'a Triple<'a>) -> Self { Term::Triple(triple) } } impl<'a> From> for Term<'a> { #[inline] fn from(resource: Subject<'a>) -> Self { match resource { Subject::NamedNode(node) => Term::NamedNode(node), Subject::BlankNode(node) => Term::BlankNode(node), Subject::Triple(triple) => Term::Triple(triple), } } } impl<'a> From> for Term<'a> { #[inline] fn from(resource: GraphName<'a>) -> Self { match resource { GraphName::NamedNode(node) => Term::NamedNode(node), GraphName::BlankNode(node) => Term::BlankNode(node), } } } /// A [RDF triple](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-triple). /// /// The default string formatter is returning a N-Triples, Turtle and SPARQL compatible representation. /// /// ``` /// use rio_api::model::NamedNode; /// use rio_api::model::Triple; /// /// assert_eq!( /// " ", /// Triple { /// subject: NamedNode { iri: "http://example.com/foo" }.into(), /// predicate: NamedNode { iri: "http://schema.org/sameAs" }, /// object: NamedNode { iri: "http://example.com/foo" }.into(), /// }.to_string() /// ) /// ``` #[derive(Eq, PartialEq, Debug, Clone, Copy, Hash)] pub struct Triple<'a> { pub subject: Subject<'a>, pub predicate: NamedNode<'a>, pub object: Term<'a>, } impl<'a> fmt::Display for Triple<'a> { #[inline] fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "{} {} {}", self.subject, self.predicate, self.object) } } /// A restriction of [Term] that can be used in the graph name position. /// /// The default string formatter is returning an N-Triples, Turtle and SPARQL compatible representation. #[derive(Eq, PartialEq, Debug, Clone, Copy, Hash)] pub enum GraphName<'a> { NamedNode(NamedNode<'a>), BlankNode(BlankNode<'a>), } impl<'a> fmt::Display for GraphName<'a> { #[inline] fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { GraphName::NamedNode(node) => node.fmt(f), GraphName::BlankNode(node) => node.fmt(f), } } } impl<'a> From> for GraphName<'a> { #[inline] fn from(node: NamedNode<'a>) -> Self { GraphName::NamedNode(node) } } impl<'a> From> for GraphName<'a> { #[inline] fn from(node: BlankNode<'a>) -> Self { GraphName::BlankNode(node) } } /// A [RDF triple](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-triple) in a [RDF dataset](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-dataset). /// /// The default string formatter is returning a N-Quads representation. /// /// ``` /// use rio_api::model::NamedNode; /// use rio_api::model::Quad; /// /// assert_eq!( /// " ", /// Quad { /// subject: NamedNode { iri: "http://example.com/foo" }.into(), /// predicate: NamedNode { iri: "http://schema.org/sameAs" }, /// object: NamedNode { iri: "http://example.com/foo" }.into(), /// graph_name: Some(NamedNode { iri: "http://example.com/" }.into()), /// }.to_string() /// ) /// ``` #[derive(Eq, PartialEq, Debug, Clone, Copy, Hash)] pub struct Quad<'a> { pub subject: Subject<'a>, pub predicate: NamedNode<'a>, pub object: Term<'a>, pub graph_name: Option>, } impl<'a> fmt::Display for Quad<'a> { #[inline] fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { if let Some(graph_name) = self.graph_name { write!( f, "{} {} {} {}", self.subject, self.predicate, self.object, graph_name ) } else { write!(f, "{} {} {}", self.subject, self.predicate, self.object) } } } #[inline] fn fmt_quoted_str(string: &str, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.write_char('"')?; for c in string.chars() { match c { '\n' => f.write_str("\\n"), '\r' => f.write_str("\\r"), '"' => f.write_str("\\\""), '\\' => f.write_str("\\\\"), c => f.write_char(c), }?; } f.write_char('"') } rio-0.8.5/api/src/parser.rs000066400000000000000000000142751466265456300155510ustar00rootroot00000000000000//! Interfaces for RDF parsers. //! //! The main types are [`TriplesParser`] for triples parsing and [`QuadsParser`] for quads parsing. #[cfg(feature = "generalized")] pub use crate::generalized::parser::*; use crate::model::{Quad, Triple}; use std::error::Error; /// A parser returning [`Triple`]. pub trait TriplesParser: Sized { type Error: Error; /// Parses the complete file and calls `on_triple` each time a new triple is read. /// /// May fail on errors caused by the parser itself or by the callback function `on_triple`. fn parse_all>( &mut self, on_triple: &mut impl FnMut(Triple<'_>) -> Result<(), E>, ) -> Result<(), E> { while !self.is_end() { self.parse_step(on_triple)?; } Ok(()) } /// Parses a small chunk of the file and calls `on_triple` each time a new triple is read. /// (A "small chunk" could be a line for an N-Triples parser.) /// /// This method should be called as long as [`is_end`](TriplesParser::is_end) returns false. /// /// It may fail on errors caused by the parser itself or by the callback function `on_triple`. fn parse_step>( &mut self, on_triple: &mut impl FnMut(Triple<'_>) -> Result<(), E>, ) -> Result<(), E>; /// Returns `true` if the file has been completely consumed by the parser. fn is_end(&self) -> bool; /// Converts the parser into a `Result` iterator. /// /// `convert_triple` is a function converting Rio [`Triple`] to `T`. fn into_iter, F: FnMut(Triple<'_>) -> Result>( self, convert_triple: F, ) -> TriplesParserIterator { TriplesParserIterator { parser: self, buffer: Vec::default(), convert_triple, } } } /// Created with the method [`into_iter`](TriplesParser::into_iter()). pub struct TriplesParserIterator< T, E: From, F: FnMut(Triple<'_>) -> Result, P: TriplesParser, > { parser: P, buffer: Vec, convert_triple: F, } impl, F: FnMut(Triple<'_>) -> Result, P: TriplesParser> Iterator for TriplesParserIterator { type Item = Result; fn next(&mut self) -> Option> { loop { if let Some(r) = self.buffer.pop() { return Some(Ok(r)); } if self.parser.is_end() { return None; } let buffer = &mut self.buffer; let convert_triple = &mut self.convert_triple; if let Err(e) = self .parser .parse_step(&mut |t| convert_triple(t).map(|t| buffer.push(t))) { return Some(Err(e)); } } } } /// A parser returning [`Quad`]. pub trait QuadsParser: Sized { type Error: Error; /// Parses the complete file and calls `on_quad` each time a new quad is read. /// /// May fails on errors caused by the parser itself or by the callback function `on_quad`. fn parse_all>( &mut self, on_quad: &mut impl FnMut(Quad<'_>) -> Result<(), E>, ) -> Result<(), E> { while !self.is_end() { self.parse_step(on_quad)? } Ok(()) } /// Parses a small chunk of the file and calls `on_quad` each time a new quad is read. /// (A "small chunk" could be a line for an N-Quads parser.) /// /// This method should be called as long as [`is_end`](QuadsParser::is_end) returns false. /// /// May fails on errors caused by the parser itself or by the callback function `on_quad`. fn parse_step>( &mut self, on_quad: &mut impl FnMut(Quad<'_>) -> Result<(), E>, ) -> Result<(), E>; /// Returns `true` if the file has been completely consumed by the parser. fn is_end(&self) -> bool; /// Converts the parser into a `Result` iterator. /// /// `convert_triple` is a function converting Rio [`Triple`] to `T`. fn into_iter, F: FnMut(Quad<'_>) -> Result>( self, convert_quad: F, ) -> QuadsParserIterator { QuadsParserIterator { parser: self, buffer: Vec::default(), convert_quad, } } } /// Created with the method [`into_iter`](QuadsParser::into_iter()). pub struct QuadsParserIterator< T, E: From, F: FnMut(Quad<'_>) -> Result, P: QuadsParser, > { parser: P, buffer: Vec, convert_quad: F, } impl, F: FnMut(Quad<'_>) -> Result, P: QuadsParser> Iterator for QuadsParserIterator { type Item = Result; fn next(&mut self) -> Option> { loop { if let Some(r) = self.buffer.pop() { return Some(Ok(r)); } if self.parser.is_end() { return None; } let buffer = &mut self.buffer; let convert_quad = &mut self.convert_quad; if let Err(e) = self .parser .parse_step(&mut |q| convert_quad(q).map(|q| buffer.push(q))) { return Some(Err(e)); } } } } /// Error trait that allows to get the textual position of the error pub trait ParseError: Error { /// Returns the position of the error in the text, if known. fn textual_position(&self) -> Option; } #[derive(Eq, PartialEq, Debug, Clone, Copy, Hash)] pub struct LineBytePosition { line_number: u64, byte_number: u64, } impl LineBytePosition { /// Creates a new position where `line_number` and `byte_number` are both starting from 1 pub fn new(line_number: u64, byte_number: u64) -> Self { Self { line_number, byte_number, } } /// The line number where the error occurred starting from 0 pub fn line_number(&self) -> u64 { self.line_number } /// The byte number where the error occurred starting from 0 pub fn byte_number(&self) -> u64 { self.byte_number } } rio-0.8.5/deny.toml000066400000000000000000000001321466265456300141660ustar00rootroot00000000000000[licenses] allow = [ "Apache-2.0", "MIT", ] [sources] unknown-registry = "deny" rio-0.8.5/fuzz/000077500000000000000000000000001466265456300133345ustar00rootroot00000000000000rio-0.8.5/fuzz/.gitignore000066400000000000000000000000271466265456300153230ustar00rootroot00000000000000target corpus artifactsrio-0.8.5/fuzz/Cargo.toml000066400000000000000000000011151466265456300152620ustar00rootroot00000000000000[package] name = "rio-fuzz" version = "0.0.0" authors = ["Automatically generated"] publish = false edition = "2021" [package.metadata] cargo-fuzz = true [dependencies] libfuzzer-sys = "0.4" rio_api = { path = "../api" } rio_turtle = { path = "../turtle" } rio_xml = { path = "../xml" } [workspace] [[bin]] name = "ntriples" path = "fuzz_targets/ntriples.rs" [[bin]] name = "nquads" path = "fuzz_targets/nquads.rs" [[bin]] name = "turtle" path = "fuzz_targets/turtle.rs" [[bin]] name = "trig" path = "fuzz_targets/trig.rs" [[bin]] name = "rdf_xml" path = "fuzz_targets/rdf_xml.rs" rio-0.8.5/fuzz/fuzz_targets/000077500000000000000000000000001466265456300160635ustar00rootroot00000000000000rio-0.8.5/fuzz/fuzz_targets/nquads.rs000066400000000000000000000003601466265456300177230ustar00rootroot00000000000000#![no_main] use libfuzzer_sys::fuzz_target; use rio_api::parser::QuadsParser; use rio_turtle::{NQuadsParser, TurtleError}; fuzz_target!(|data: &[u8]| { NQuadsParser::new(data).parse_all(&mut |_| Ok(()) as Result<(), TurtleError>); }); rio-0.8.5/fuzz/fuzz_targets/ntriples.rs000066400000000000000000000003661466265456300202760ustar00rootroot00000000000000#![no_main] use libfuzzer_sys::fuzz_target; use rio_api::parser::TriplesParser; use rio_turtle::{NTriplesParser, TurtleError}; fuzz_target!(|data: &[u8]| { NTriplesParser::new(data).parse_all(&mut |_| Ok(()) as Result<(), TurtleError>); }); rio-0.8.5/fuzz/fuzz_targets/rdf_xml.rs000066400000000000000000000003651466265456300200700ustar00rootroot00000000000000#![no_main] use libfuzzer_sys::fuzz_target; use rio_api::parser::TriplesParser; use rio_xml::{RdfXmlError, RdfXmlParser}; fuzz_target!(|data: &[u8]| { RdfXmlParser::new(data, None).parse_all(&mut |_| Ok(()) as Result<(), RdfXmlError>); }); rio-0.8.5/fuzz/fuzz_targets/trig.rs000066400000000000000000000003621466265456300173770ustar00rootroot00000000000000#![no_main] use libfuzzer_sys::fuzz_target; use rio_api::parser::QuadsParser; use rio_turtle::{TriGParser, TurtleError}; fuzz_target!(|data: &[u8]| { TriGParser::new(data, None).parse_all(&mut |_| Ok(()) as Result<(), TurtleError>); }); rio-0.8.5/fuzz/fuzz_targets/turtle.rs000066400000000000000000000003701466265456300177500ustar00rootroot00000000000000#![no_main] use libfuzzer_sys::fuzz_target; use rio_api::parser::TriplesParser; use rio_turtle::{TurtleError, TurtleParser}; fuzz_target!(|data: &[u8]| { TurtleParser::new(data, None).parse_all(&mut |_| Ok(()) as Result<(), TurtleError>); }); rio-0.8.5/testsuite/000077500000000000000000000000001466265456300143675ustar00rootroot00000000000000rio-0.8.5/testsuite/Cargo.toml000066400000000000000000000012271466265456300163210ustar00rootroot00000000000000[package] name = "rio_testsuite" version = "0.8.5" authors = ["Tpt "] license = "Apache-2.0" readme = "../README.md" repository = "https://github.com/oxigraph/rio" description = """ W3C testsuite evaluator for Rio parsers """ edition = "2021" publish = false [dependencies] rio_api = { version = "0.8", path = "../api" } rio_turtle = { version = "0.8", path = "../turtle" } rio_xml = { version = "0.8", path = "../xml" } oxiri = "0.2" permutohedron = "0.2" [dev-dependencies] criterion = "0.5" [features] default = [] generalized = ["rio_api/generalized", "rio_turtle/generalized"] [[bench]] name = "w3c_testsuite" harness = false rio-0.8.5/testsuite/benches/000077500000000000000000000000001466265456300157765ustar00rootroot00000000000000rio-0.8.5/testsuite/benches/w3c_testsuite.rs000066400000000000000000000163451466265456300211620ustar00rootroot00000000000000use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion, Throughput}; use oxiri::Iri; use rio_api::parser::*; use rio_testsuite::manifest::TestManifest; use rio_testsuite::parser_evaluator::*; use rio_turtle::*; use std::error::Error; use std::io::Read; use std::path::PathBuf; fn get_test_path() -> PathBuf { let mut base_path = PathBuf::from(env!("CARGO_MANIFEST_DIR")); base_path.push("rdf-tests"); base_path } fn test_data_from_testsuite( manifest_uri: String, include_tests_types: &[&str], ) -> Result, Box> { let test_path = get_test_path(); let manifest = TestManifest::new(manifest_uri, |url| parse_w3c_rdf_test_file(url, &test_path)); let mut data = Vec::default(); for test in manifest { let test = test?; if include_tests_types.contains(&test.kind.iri.as_str()) { read_w3c_rdf_test_file(&test.action, &test_path)? .read_to_end(&mut data) .map_err(|e| TestEvaluationError::Io(test.action, e))?; data.push(b'\n'); } } Ok(data) } fn ntriples_test_data() -> Result, Box> { test_data_from_testsuite( "http://w3c.github.io/rdf-tests/ntriples/manifest.ttl".to_owned(), &["http://www.w3.org/ns/rdftest#TestNTriplesPositiveSyntax"], ) } fn nquads_test_data() -> Result, Box> { test_data_from_testsuite( "http://w3c.github.io/rdf-tests/nquads/manifest.ttl".to_owned(), &["http://www.w3.org/ns/rdftest#TestNQuadsPositiveSyntax"], ) } fn turtle_test_data() -> Result, Box> { test_data_from_testsuite( "http://w3c.github.io/rdf-tests/turtle/manifest.ttl".to_owned(), &[ "http://www.w3.org/ns/rdftest#TestTurtlePositiveSyntax", "http://www.w3.org/ns/rdftest#TestTurtleEval", ], ) } fn trig_test_data() -> Result, Box> { test_data_from_testsuite( "http://w3c.github.io/rdf-tests/trig/manifest.ttl".to_owned(), &[ "http://www.w3.org/ns/rdftest#TestTrigPositiveSyntax", "http://www.w3.org/ns/rdftest#TestTrigEval", ], ) } fn parse_bench( c: &mut Criterion, parser_name: &str, data_name: &str, data: Vec, bench: impl Fn(&[u8]), ) { let mut group = c.benchmark_group(parser_name); group.throughput(Throughput::Bytes(data.len() as u64)); group.bench_with_input(BenchmarkId::from_parameter(data_name), &data, |b, data| { b.iter(|| bench(data)) }); group.finish(); } fn parse_ntriples(c: &mut Criterion, name: &str, data: Vec) { parse_bench(c, "ntriples", name, data, |data| { let mut count: u64 = 0; NTriplesParser::new(data) .parse_all(&mut |_| { count += 1; Ok(()) as Result<(), TurtleError> }) .unwrap(); }); } fn parse_nquads(c: &mut Criterion, name: &str, data: Vec) { parse_bench(c, "nquads", name, data, |data| { let mut count: u64 = 0; NQuadsParser::new(data) .parse_all(&mut |_| { count += 1; Ok(()) as Result<(), TurtleError> }) .unwrap(); }); } fn parse_turtle(c: &mut Criterion, name: &str, data: Vec) { let base_iri = Iri::parse("http://example.com/ex".to_owned()).unwrap(); parse_bench(c, "turtle", name, data, |data| { let mut count: u64 = 0; TurtleParser::new(data, Some(base_iri.clone())) .parse_all(&mut |_| { count += 1; Ok(()) as Result<(), TurtleError> }) .unwrap(); }); } fn parse_trig(c: &mut Criterion, name: &str, data: Vec) { let base_iri = Iri::parse("http://example.com/ex".to_owned()).unwrap(); parse_bench(c, "trig", name, data, |data| { let mut count: u64 = 0; TriGParser::new(data, Some(base_iri.clone())) .parse_all(&mut |_| { count += 1; Ok(()) as Result<(), TurtleError> }) .unwrap(); }); } #[cfg(feature = "generalized")] fn parse_gtrig(c: &mut Criterion, name: &str, data: Vec) { parse_bench(c, "gtrig", name, data, |data| { let mut count: u64 = 0; GTriGParser::new( data, Some(Iri::parse("http://example.org/base/".to_owned()).unwrap()), ) .parse_all(&mut |_| { count += 1; Ok(()) as Result<(), TurtleError> }) .unwrap(); }); } fn bench_parse_ntriples_with_ntriples(c: &mut Criterion) { parse_ntriples( c, "ntriples", match ntriples_test_data() { Ok(d) => d, Err(e) => { eprintln!("{}", e); return; } }, ) } fn bench_parse_ntriples_with_turtle(c: &mut Criterion) { parse_turtle( c, "ntriples", match ntriples_test_data() { Ok(d) => d, Err(e) => { eprintln!("{}", e); return; } }, ) } #[allow(unused_variables)] fn bench_parse_ntriples_with_gtrig(c: &mut Criterion) { #[cfg(feature = "generalized")] parse_gtrig( c, "ntriples", match ntriples_test_data() { Ok(d) => d, Err(e) => { eprintln!("{}", e); return; } }, ) } fn bench_parse_nquads_with_nquads(c: &mut Criterion) { parse_nquads( c, "nquads", match nquads_test_data() { Ok(d) => d, Err(e) => { eprintln!("{}", e); return; } }, ) } fn bench_parse_turtle_with_turtle(c: &mut Criterion) { parse_turtle( c, "turtle", match turtle_test_data() { Ok(d) => d, Err(e) => { eprintln!("{}", e); return; } }, ) } #[allow(unused_variables)] fn bench_parse_turtle_with_gtrig(c: &mut Criterion) { #[cfg(feature = "generalized")] parse_gtrig( c, "turtle", match turtle_test_data() { Ok(d) => d, Err(e) => { eprintln!("{}", e); return; } }, ) } fn bench_parse_trig_with_trig(c: &mut Criterion) { parse_trig( c, "trig", match trig_test_data() { Ok(d) => d, Err(e) => { eprintln!("{}", e); return; } }, ) } #[allow(unused_variables)] fn bench_parse_trig_with_gtrig(c: &mut Criterion) { #[cfg(feature = "generalized")] parse_gtrig( c, "trig", match trig_test_data() { Ok(d) => d, Err(e) => { eprintln!("{}", e); return; } }, ) } criterion_group!( w3c_testsuite, bench_parse_ntriples_with_ntriples, bench_parse_ntriples_with_turtle, bench_parse_ntriples_with_gtrig, bench_parse_nquads_with_nquads, bench_parse_turtle_with_turtle, bench_parse_turtle_with_gtrig, bench_parse_trig_with_trig, bench_parse_trig_with_gtrig, ); criterion_main!(w3c_testsuite); rio-0.8.5/testsuite/rdf-star/000077500000000000000000000000001466265456300161115ustar00rootroot00000000000000rio-0.8.5/testsuite/rdf-tests/000077500000000000000000000000001466265456300163025ustar00rootroot00000000000000rio-0.8.5/testsuite/rio-tests/000077500000000000000000000000001466265456300163205ustar00rootroot00000000000000rio-0.8.5/testsuite/rio-tests/bad_lang.ttl000066400000000000000000000000601466265456300205700ustar00rootroot00000000000000 "foo"@badlanguagetag .rio-0.8.5/testsuite/rio-tests/bad_parentheses.ttl000066400000000000000000000044321466265456300221770ustar00rootroot00000000000000(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( rio-0.8.5/testsuite/rio-tests/blank_node_with_linebreak.nt000066400000000000000000000001231466265456300240220ustar00rootroot00000000000000 _:1 . rio-0.8.5/testsuite/rio-tests/blank_node_with_linebreak.ttl000066400000000000000000000001641466265456300242110ustar00rootroot00000000000000@prefix state: . state:state [ ] . rio-0.8.5/testsuite/rio-tests/keyword_vs_prefix.nq000066400000000000000000000011301466265456300224240ustar00rootroot00000000000000 . . . . . . rio-0.8.5/testsuite/rio-tests/keyword_vs_prefix.nt000066400000000000000000000005501466265456300224340ustar00rootroot00000000000000 . . . . rio-0.8.5/testsuite/rio-tests/keyword_vs_prefix.trig000066400000000000000000000007041466265456300227610ustar00rootroot00000000000000base prefix prefix: prefix base: prefix graph: prefix true: prefix false: prefix prefixF: prefix baseF: prefix graphF: prefix trueF: prefix falseF: prefix:s prefix:p true:o . base:s base:p false:o . graph:g { graph:s graph:p graph:o . } prefixF:s prefixF:p trueF:o . baseF:s baseF:p falseF:o . graphF:g { graphF:s graphF:p graphF:o . } rio-0.8.5/testsuite/rio-tests/keyword_vs_prefix.ttl000066400000000000000000000005041466265456300226150ustar00rootroot00000000000000base prefix prefix: prefix base: prefix true: prefix false: prefix prefixF: prefix baseF: prefix trueF: prefix falseF: prefix:s prefix:p true:o . base:s base:p false:o . prefixF:s prefixF:p trueF:o . baseF:s baseF:p falseF:o . rio-0.8.5/testsuite/rio-tests/language_normalization.nt000066400000000000000000000000471466265456300234150ustar00rootroot00000000000000 "foo"@en-us .rio-0.8.5/testsuite/rio-tests/language_normalization.rdf000066400000000000000000000002771466265456300235540ustar00rootroot00000000000000 rio-0.8.5/testsuite/rio-tests/language_normalization.ttl000066400000000000000000000000471466265456300235770ustar00rootroot00000000000000 "foo"@en-US .rio-0.8.5/testsuite/rio-tests/literal_value_space.nt000066400000000000000000000001301466265456300226600ustar00rootroot00000000000000 " bar\n" . rio-0.8.5/testsuite/rio-tests/literal_value_space.rdf000066400000000000000000000003201466265456300230130ustar00rootroot00000000000000 bar rio-0.8.5/testsuite/rio-tests/manifest.ttl000066400000000000000000000045431466265456300206610ustar00rootroot00000000000000@prefix mf: . @prefix rdf: . @prefix rdfs: . @prefix rdft: . <> rdf:type mf:Manifest ; rdfs:comment "Rio test case" ; mf:entries ( <#blank_node_with_linebreak> <#bad_lang> <#language_normalization_ttl> <#language_normalization_xml> <#xml_entities> <#xml_nested_entities> <#literal_value_space> <#bad_parentheses> <#keyword_vs_prefix_ttl> <#keyword_vs_prefix_trig> ) . <#no_end_line_jump> rdf:type rdft:TestNTriplesPositiveSyntax ; mf:name "No line jump at the end of the file" ; mf:action . <#blank_node_with_linebreak> rdf:type rdft:TestTurtleEval ; mf:name "blank node with linebreak" ; mf:action ; mf:result . <#language_normalization_ttl> rdf:type rdft:TestTurtleEval ; mf:name "language case normalization" ; mf:action ; mf:result . <#language_normalization_xml> rdf:type rdft:TestXMLEval ; mf:name "language case normalization" ; mf:action ; mf:result . <#bad_lang> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad language tag" ; mf:action . <#xml_entities> rdf:type rdft:TestXMLEval ; mf:name "custom XML entities" ; mf:action ; mf:result . <#xml_nested_entities> rdf:type rdft:TestXMLEval ; mf:name "custom XML entities with nested definitions" ; mf:action ; mf:result . <#literal_value_space> rdf:type rdft:TestXMLEval ; mf:name "spaces in literal values" ; mf:action ; mf:result . <#bad_parentheses> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "a lot of parentheses that might generate a stack overflow" ; mf:action . <#keyword_vs_prefix_ttl> rdf:type rdft:TestTurtleEval ; mf:name "usage of keywords as prefix" ; mf:action ; mf:result . <#keyword_vs_prefix_trig> rdf:type rdft:TestTrigEval ; mf:name "usage of keywords as prefix" ; mf:action ; mf:result . rio-0.8.5/testsuite/rio-tests/no_end_line_jump.nt000066400000000000000000000001001466265456300221560ustar00rootroot00000000000000 .rio-0.8.5/testsuite/rio-tests/xml_entities.nt000066400000000000000000000001501466265456300213630ustar00rootroot00000000000000 "bar"^^ . rio-0.8.5/testsuite/rio-tests/xml_entities.rdf000066400000000000000000000005311466265456300215200ustar00rootroot00000000000000 ]> bar rio-0.8.5/testsuite/rio-tests/xml_nested_entities.nt000066400000000000000000000001501466265456300227250ustar00rootroot00000000000000 "bar"^^ . rio-0.8.5/testsuite/rio-tests/xml_nested_entities.rdf000066400000000000000000000006501466265456300230640ustar00rootroot00000000000000 ]> bar rio-0.8.5/testsuite/serd-tests/000077500000000000000000000000001466265456300164645ustar00rootroot00000000000000rio-0.8.5/testsuite/serd-tests/COPYING000066400000000000000000000013661466265456300175250ustar00rootroot00000000000000 Copyright 2011-2020 David Robillard Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. rio-0.8.5/testsuite/serd-tests/LICENSE000066400000000000000000000013641466265456300174750ustar00rootroot00000000000000Copyright 2011-2017 David Robillard Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.rio-0.8.5/testsuite/serd-tests/README.md000066400000000000000000000001021466265456300177340ustar00rootroot00000000000000Testsuite from [Serd](https://drobilla.net/software/serd) project.rio-0.8.5/testsuite/serd-tests/bad/000077500000000000000000000000001466265456300172125ustar00rootroot00000000000000rio-0.8.5/testsuite/serd-tests/bad/bad-00.ttl000066400000000000000000000000561466265456300207030ustar00rootroot00000000000000# prefix name must end in a : @prefix a <#> . rio-0.8.5/testsuite/serd-tests/bad/bad-01.ttl000066400000000000000000000001501466265456300206770ustar00rootroot00000000000000# Forbidden by RDF - predicate cannot be blank @prefix : . :a [ :b :c ] :d . rio-0.8.5/testsuite/serd-tests/bad/bad-02.ttl000066400000000000000000000001411466265456300207000ustar00rootroot00000000000000# Forbidden by RDF - predicate cannot be blank @prefix : . :a [] :b . rio-0.8.5/testsuite/serd-tests/bad/bad-03.ttl000066400000000000000000000001231466265456300207010ustar00rootroot00000000000000# 'a' only allowed as a predicate @prefix : . a :a :b . rio-0.8.5/testsuite/serd-tests/bad/bad-04.ttl000066400000000000000000000001571466265456300207110ustar00rootroot00000000000000# No comma is allowed in collections @prefix : . :a :b ( "apple", "banana" ) . rio-0.8.5/testsuite/serd-tests/bad/bad-05.ttl000066400000000000000000000001371466265456300207100ustar00rootroot00000000000000# N3 {}s are not in Turtle @prefix : . { :a :b :c . } :d :e . rio-0.8.5/testsuite/serd-tests/bad/bad-06.ttl000066400000000000000000000001331466265456300207050ustar00rootroot00000000000000# is and of are not in turtle @prefix : . :a is :b of :c . rio-0.8.5/testsuite/serd-tests/bad/bad-07.ttl000066400000000000000000000001341466265456300207070ustar00rootroot00000000000000# paths are not in turtle @prefix : . :a.:b.:c . :a^:b^:c . rio-0.8.5/testsuite/serd-tests/bad/bad-08.ttl000066400000000000000000000000621466265456300207100ustar00rootroot00000000000000@keywords something. # @keywords is not in turtle rio-0.8.5/testsuite/serd-tests/bad/bad-09.ttl000066400000000000000000000001221466265456300207060ustar00rootroot00000000000000# implies is not in turtle @prefix : . :a => :b . rio-0.8.5/testsuite/serd-tests/bad/bad-10.ttl000066400000000000000000000001251466265456300207010ustar00rootroot00000000000000# equivalence is not in turtle @prefix : . :a = :b . rio-0.8.5/testsuite/serd-tests/bad/bad-11.ttl000066400000000000000000000001241466265456300207010ustar00rootroot00000000000000# @forAll is not in turtle @prefix : . @forAll :x . rio-0.8.5/testsuite/serd-tests/bad/bad-12.ttl000066400000000000000000000001261466265456300207040ustar00rootroot00000000000000# @forSome is not in turtle @prefix : . @forSome :x . rio-0.8.5/testsuite/serd-tests/bad/bad-13.ttl000066400000000000000000000001151466265456300207030ustar00rootroot00000000000000# <= is not in turtle @prefix : . :a <= :b . rio-0.8.5/testsuite/serd-tests/bad/bad-14.ttl000066400000000000000000000001631466265456300207070ustar00rootroot00000000000000# Test long literals with missing end @prefix : . :a :b """a long literal with newlines rio-0.8.5/testsuite/serd-tests/bad/bad-base.ttl000066400000000000000000000000551466265456300213750ustar00rootroot00000000000000@base "I'm quite certain this is not a URI" .rio-0.8.5/testsuite/serd-tests/bad/bad-blank.ttl000066400000000000000000000000701466265456300215470ustar00rootroot00000000000000@prefix eg: . _:.bad a eg:Thing .rio-0.8.5/testsuite/serd-tests/bad/bad-bom.ttl000066400000000000000000000002071466265456300212370ustar00rootroot00000000000000ï»´# This file starts with the first two bytes of the UTF-8 Byte Order Mark a . rio-0.8.5/testsuite/serd-tests/bad/bad-char-in-local.ttl000066400000000000000000000001351466265456300230730ustar00rootroot00000000000000@prefix eg: . eg:†bad . rio-0.8.5/testsuite/serd-tests/bad/bad-char-in-prefix.ttl000066400000000000000000000000671466265456300233020ustar00rootroot00000000000000bad†:s . rio-0.8.5/testsuite/serd-tests/bad/bad-char-in-uri.ttl000066400000000000000000000000771466265456300226050ustar00rootroot00000000000000<ÿÿÿ://a.example/s> "\u0006!#[]\u007F" . rio-0.8.5/testsuite/serd-tests/bad/bad-datatype.ttl000066400000000000000000000000631466265456300222750ustar00rootroot00000000000000<> "hello"^^"not-a-uri" .rio-0.8.5/testsuite/serd-tests/bad/bad-dot-after-subject.ttl000066400000000000000000000001111466265456300237760ustar00rootroot00000000000000 . . rio-0.8.5/testsuite/serd-tests/bad/bad-dot-in-collection.ttl000066400000000000000000000000351466265456300240040ustar00rootroot00000000000000[ (1. rio-0.8.5/testsuite/serd-tests/bad/bad-eof-after-quotes.ttl000066400000000000000000000000651466265456300236520ustar00rootroot00000000000000@prefix eg: . <> eg:comment ""rio-0.8.5/testsuite/serd-tests/bad/bad-eof-at-string-start.ttl000066400000000000000000000000641466265456300242750ustar00rootroot00000000000000@prefix eg: . <> eg:comment "rio-0.8.5/testsuite/serd-tests/bad/bad-eof-in-blank.ttl000066400000000000000000000001051466265456300227210ustar00rootroot00000000000000@prefix eg: . <> eg:thing [ eg:comment "Thing"rio-0.8.5/testsuite/serd-tests/bad/bad-eof-in-escape.ttl000066400000000000000000000000711466265456300230740ustar00rootroot00000000000000@prefix eg: . <> eg:comment """\uArio-0.8.5/testsuite/serd-tests/bad/bad-eof-in-lang-suffix.ttl000066400000000000000000000001201466265456300240520ustar00rootroot00000000000000@prefix eg: . <> eg:comment "That ain't no language"@en-xrio-0.8.5/testsuite/serd-tests/bad/bad-eof-in-lang.ttl000066400000000000000000000001151466265456300225540ustar00rootroot00000000000000@prefix eg: . <> eg:comment "That ain't no language"@ario-0.8.5/testsuite/serd-tests/bad/bad-eof-in-list.ttl000066400000000000000000000001001466265456300226000ustar00rootroot00000000000000@prefix eg: . <> eg:thing ( eg:car eg:cdrrio-0.8.5/testsuite/serd-tests/bad/bad-eof-in-long-string.ttl000066400000000000000000000001301466265456300240730ustar00rootroot00000000000000@prefix eg: . <> eg:comment """This is the string that never endsrio-0.8.5/testsuite/serd-tests/bad/bad-eof-in-object-list.ttl000066400000000000000000000000621466265456300240530ustar00rootroot00000000000000@prefix eg: . <> eg:p eg:o ,rio-0.8.5/testsuite/serd-tests/bad/bad-eof-in-object-list2.ttl000066400000000000000000000001001466265456300241260ustar00rootroot00000000000000@prefix eg: . <> eg:p eg:o ; eg:p1 eg:o2 ,rio-0.8.5/testsuite/serd-tests/bad/bad-eof-in-predicate-list.ttl000066400000000000000000000000621466265456300245450ustar00rootroot00000000000000@prefix eg: . <> eg:p eg:o ;rio-0.8.5/testsuite/serd-tests/bad/bad-eof-in-string.ttl000066400000000000000000000001261466265456300231430ustar00rootroot00000000000000@prefix eg: . <> eg:comment "This is the string that never endsrio-0.8.5/testsuite/serd-tests/bad/bad-eof-in-triple-quote.ttl000066400000000000000000000000751466265456300242720ustar00rootroot00000000000000@prefix eg: . <> eg:comment """Hello""rio-0.8.5/testsuite/serd-tests/bad/bad-eof-in-uri-scheme.nt000066400000000000000000000000611466265456300235120ustar00rootroot00000000000000 . <> eg:uri """\!""" . rio-0.8.5/testsuite/serd-tests/bad/bad-ext-namedblank-op.ttl000066400000000000000000000001151466265456300237660ustar00rootroot00000000000000@prefix eg: . eg:s eg:p [ =: _:o ; eg:name "o" ] . rio-0.8.5/testsuite/serd-tests/bad/bad-graph-blank-label.trig000066400000000000000000000000711466265456300240660ustar00rootroot00000000000000PREFIX : GRAPH [ :p :o ] { :s :p :o } rio-0.8.5/testsuite/serd-tests/bad/bad-hex-digit.ttl000066400000000000000000000001031466265456300223370ustar00rootroot00000000000000 "\uABCG" . rio-0.8.5/testsuite/serd-tests/bad/bad-id-clash.ttl000066400000000000000000000000331466265456300221430ustar00rootroot00000000000000_:b1 a _:b2 . _:b2 a _:B1 .rio-0.8.5/testsuite/serd-tests/bad/bad-lang.ttl000066400000000000000000000000531466265456300214020ustar00rootroot00000000000000<> "hello"@\bad .rio-0.8.5/testsuite/serd-tests/bad/bad-list.ttl000066400000000000000000000001031466265456300214300ustar00rootroot00000000000000<> , invalid .rio-0.8.5/testsuite/serd-tests/bad/bad-list2.ttl000066400000000000000000000000641466265456300215200ustar00rootroot00000000000000@prefix eg: . <> eg:thing ( .rio-0.8.5/testsuite/serd-tests/bad/bad-long-literal-in-list.ttl000066400000000000000000000000451466265456300244300ustar00rootroot00000000000000<> ("""") .rio-0.8.5/testsuite/serd-tests/bad/bad-missing-semi.ttl000066400000000000000000000001031466265456300230610ustar00rootroot00000000000000@prefix a: . a:s1 a:p1 a:o1 a:s2 a:p2 a:o2 . rio-0.8.5/testsuite/serd-tests/bad/bad-missing-uri-scheme.nt000066400000000000000000000000241466265456300240050ustar00rootroot00000000000000 . rio-0.8.5/testsuite/serd-tests/bad/bad-misspelled-base.ttl000066400000000000000000000000421466265456300235300ustar00rootroot00000000000000@baze eg: . rio-0.8.5/testsuite/serd-tests/bad/bad-misspelled-prefix.ttl000066400000000000000000000000441466265456300241150ustar00rootroot00000000000000@prefox eg: . rio-0.8.5/testsuite/serd-tests/bad/bad-namespace.ttl000066400000000000000000000000251466265456300224140ustar00rootroot00000000000000@prefix eg: "what?" .rio-0.8.5/testsuite/serd-tests/bad/bad-ns.ttl000066400000000000000000000000261466265456300211010ustar00rootroot00000000000000<> a badprefix:Thing .rio-0.8.5/testsuite/serd-tests/bad/bad-null-byte.ttl000066400000000000000000000000331466265456300223720ustar00rootroot00000000000000prefix : <#> . [] :x :y . rio-0.8.5/testsuite/serd-tests/bad/bad-num.ttl000066400000000000000000000000451466265456300212610ustar00rootroot00000000000000<> .hello .rio-0.8.5/testsuite/serd-tests/bad/bad-object.ttl000066400000000000000000000000671466265456300217340ustar00rootroot00000000000000@prefix eg: . eg:thing a four . rio-0.8.5/testsuite/serd-tests/bad/bad-object2.ttl000066400000000000000000000000701466265456300220100ustar00rootroot00000000000000@prefix eg: . eg:thing a fives . rio-0.8.5/testsuite/serd-tests/bad/bad-pn-escape.ttl000066400000000000000000000000541466265456300223350ustar00rootroot00000000000000@prefix : . :s :p :\a rio-0.8.5/testsuite/serd-tests/bad/bad-prefix.ttl000066400000000000000000000000511466265456300217540ustar00rootroot00000000000000@prefix _invalid . rio-0.8.5/testsuite/serd-tests/bad/bad-quote-in-uri.ttl000066400000000000000000000001101466265456300230110ustar00rootroot00000000000000 .rio-0.8.5/testsuite/serd-tests/bad/bad-semicolon-after-subject.ttl000066400000000000000000000001111466265456300252000ustar00rootroot00000000000000 ; . rio-0.8.5/testsuite/serd-tests/bad/bad-string.ttl000066400000000000000000000000431466265456300217660ustar00rootroot00000000000000<> "hellorio-0.8.5/testsuite/serd-tests/bad/bad-subject.ttl000066400000000000000000000000411466265456300221150ustar00rootroot00000000000000invalid.:thing a invalid.Thing . rio-0.8.5/testsuite/serd-tests/bad/bad-uri-escape.ttl000066400000000000000000000001221466265456300225130ustar00rootroot00000000000000 . rio-0.8.5/testsuite/serd-tests/bad/bad-uri-scheme-start.nt000066400000000000000000000001101466265456300234650ustar00rootroot00000000000000<2http://example.org/s> . rio-0.8.5/testsuite/serd-tests/bad/bad-uri-scheme.nt000066400000000000000000000001061466265456300223370ustar00rootroot00000000000000 . rio-0.8.5/testsuite/serd-tests/bad/bad-uri-truncated.nt000066400000000000000000000000041466265456300230610ustar00rootroot00000000000000 . a:thing x a:Thing .rio-0.8.5/testsuite/serd-tests/bad/invalid-char-in-local.ttl000066400000000000000000000001421466265456300237710ustar00rootroot00000000000000@prefix eg: . eg:¿invalid . rio-0.8.5/testsuite/serd-tests/bad/invalid-char-in-prefix.ttl000066400000000000000000000000741466265456300242000ustar00rootroot00000000000000invalid¿:s . rio-0.8.5/testsuite/serd-tests/bad/manifest.ttl000066400000000000000000000244041466265456300215510ustar00rootroot00000000000000@prefix mf: . @prefix rdf: . @prefix rdfs: . @prefix rdft: . <> rdf:type mf:Manifest ; rdfs:comment "Serd bad syntax test cases" ; mf:entries ( <#bad-00> <#bad-01> <#bad-02> <#bad-03> <#bad-04> <#bad-05> <#bad-06> <#bad-07> <#bad-08> <#bad-09> <#bad-10> <#bad-11> <#bad-12> <#bad-13> <#bad-14> <#bad-base> <#bad-blank> <#bad-bom> <#bad-char-in-local> <#bad-char-in-prefix> <#bad-char-in-uri> <#bad-datatype> <#bad-dot-after-subject> <#bad-dot-in-collection> <#bad-eof-after-quotes> <#bad-eof-at-string-start> <#bad-eof-in-blank> <#bad-eof-in-escape> <#bad-eof-in-lang-suffix> <#bad-eof-in-lang> <#bad-eof-in-list> <#bad-eof-in-object-list2> <#bad-eof-in-object-list> <#bad-eof-in-predicate-list> <#bad-eof-in-long-string> <#bad-eof-in-string> <#bad-eof-in-triple-quote> <#bad-eof-in-uri> <#bad-eof-in-uri-scheme> <#bad-escape> <#bad-ext-namedblank-op> <#bad-graph-blank-label> <#bad-hex-digit> # I do not understand why this file is bad <#bad-id-clash> <#bad-lang> <#bad-list2> <#bad-list> <#bad-long-literal-in-list> <#bad-missing-semi> <#bad-misspelled-base> <#bad-misspelled-prefix> <#bad-namespace> <#bad-ns> <#bad-null-byte> <#bad-num> <#bad-object2> <#bad-object> <#bad-pn-escape> <#bad-prefix> <#bad-quote-in-uri> <#bad-semicolon-after-subject> <#bad-string> <#bad-subject> <#bad-uri-escape> <#bad-verb> <#invalid-char-in-local> <#invalid-char-in-prefix> <#bad-missing-uri-scheme.nt> <#bad-uri-scheme.nt> <#bad-uri-scheme-start.nt> <#bad-uri-truncated.nt> ) . <#bad-00> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-00" ; mf:action . <#bad-01> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-01" ; mf:action . <#bad-02> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-02" ; mf:action . <#bad-03> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-03" ; mf:action . <#bad-04> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-04" ; mf:action . <#bad-05> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-05" ; mf:action . <#bad-06> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-06" ; mf:action . <#bad-07> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-07" ; mf:action . <#bad-08> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-08" ; mf:action . <#bad-09> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-09" ; mf:action . <#bad-10> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-10" ; mf:action . <#bad-11> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-11" ; mf:action . <#bad-12> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-12" ; mf:action . <#bad-13> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-13" ; mf:action . <#bad-14> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-14" ; mf:action . <#bad-base> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-base" ; mf:action . <#bad-blank> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-blank" ; mf:action . <#bad-bom> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-bom" ; mf:action . <#bad-char-in-local> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-char-in-local" ; mf:action . <#bad-char-in-prefix> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-char-in-prefix" ; mf:action . <#bad-char-in-uri> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-char-in-uri" ; mf:action . <#bad-datatype> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-datatype" ; mf:action . <#bad-dot-after-subject> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-dot-after-subject" ; mf:action . <#bad-dot-in-collection> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-dot-in-collection" ; mf:action . <#bad-eof-after-quotes> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-eof-after-quotes" ; mf:action . <#bad-eof-at-string-start> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-eof-at-string-start" ; mf:action . <#bad-eof-in-blank> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-eof-in-blank" ; mf:action . <#bad-eof-in-escape> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-eof-in-escape" ; mf:action . <#bad-eof-in-lang-suffix> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-eof-in-lang-suffix" ; mf:action . <#bad-eof-in-lang> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-eof-in-lang" ; mf:action . <#bad-eof-in-list> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-eof-in-list" ; mf:action . <#bad-eof-in-object-list2> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-eof-in-object-list2" ; mf:action . <#bad-eof-in-object-list> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-eof-in-object-list" ; mf:action . <#bad-eof-in-predicate-list> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-eof-in-predicate-list" ; mf:action . <#bad-eof-in-long-string> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-eof-in-long-string" ; mf:action . <#bad-eof-in-string> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-eof-in-string" ; mf:action . <#bad-eof-in-triple-quote> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-eof-in-triple-quote" ; mf:action . <#bad-eof-in-uri> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-eof-in-uri" ; mf:action . <#bad-eof-in-uri-scheme> rdf:type rdft:TestNTriplesNegativeSyntax ; mf:name "bad-eof-in-uri-scheme" ; mf:action . <#bad-escape> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-escape" ; mf:action . <#bad-ext-namedblank-op> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-ext-namedblank-op" ; mf:action . <#bad-graph-blank-label> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "bad-graph-blank-label" ; mf:action . <#bad-hex-digit> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-hex-digit" ; mf:action . <#bad-id-clash> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-id-clash" ; mf:action . <#bad-lang> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-lang" ; mf:action . <#bad-list2> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-list2" ; mf:action . <#bad-list> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-list" ; mf:action . <#bad-long-literal-in-list> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-long-literal-in-list" ; mf:action . <#bad-missing-semi> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-missing-semi" ; mf:action . <#bad-misspelled-base> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-misspelled-base" ; mf:action . <#bad-misspelled-prefix> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-misspelled-prefix" ; mf:action . <#bad-namespace> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-namespace" ; mf:action . <#bad-ns> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-ns" ; mf:action . <#bad-null-byte> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-null-byte" ; mf:action . <#bad-num> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-num" ; mf:action . <#bad-object2> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-object2" ; mf:action . <#bad-object> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-object" ; mf:action . <#bad-pn-escape> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-pn-escape" ; mf:action . <#bad-prefix> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-prefix" ; mf:action . <#bad-quote-in-uri> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-quote-in-uri" ; mf:action . <#bad-semicolon-after-subject> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-semicolon-after-subject" ; mf:action . <#bad-string> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-string" ; mf:action . <#bad-subject> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-subject" ; mf:action . <#bad-uri-escape> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-uri-escape" ; mf:action . <#bad-verb> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-verb" ; mf:action . <#invalid-char-in-local> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "invalid-char-in-local" ; mf:action . <#invalid-char-in-prefix> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "invalid-char-in-prefix" ; mf:action . <#bad-missing-uri-scheme.nt> rdf:type rdft:TestNTriplesNegativeSyntax ; mf:name "bad-missing-uri-scheme" ; mf:action . <#bad-uri-scheme.nt> rdf:type rdft:TestNTriplesNegativeSyntax ; mf:name "bad-uri-scheme" ; mf:action . <#bad-uri-scheme-start.nt> rdf:type rdft:TestNTriplesNegativeSyntax ; mf:name "bad-uri-scheme-start" ; mf:action . <#bad-uri-truncated.nt> rdf:type rdft:TestNTriplesNegativeSyntax ; mf:name "bad-uri-truncated" ; mf:action . rio-0.8.5/testsuite/serd-tests/good/000077500000000000000000000000001466265456300174145ustar00rootroot00000000000000rio-0.8.5/testsuite/serd-tests/good/README.txt000066400000000000000000000010451466265456300211120ustar00rootroot00000000000000These are the tests for the Turtle Terse RDF Triple Language that must be passed by conformant systems. See http://www.dajobe.org/2004/01/turtle/ for the full conformance information. The format is a set of good tests and bad tests. Good tests are a pair of files: abc.ttl abc.out which are the input Turtle file and the expected output RDF triples, written in N-Triples. bad tests are of the form bad-XX.ttl which must fail. The tests should be performed with an assumed base URI of http://www.w3.org/2001/sw/DataAccess/df1/tests/ Dave rio-0.8.5/testsuite/serd-tests/good/UTF-8.nt000066400000000000000000000644621466265456300205760ustar00rootroot00000000000000 "\nUTF-8 encoded sample plain-text file\n\u203E\u203E\u203E\u203E\u203E\u203E\u203E\u203E\u203E\u203E\u203E\u203E\u203E\u203E\u203E\u203E\u203E\u203E\u203E\u203E\u203E\u203E\u203E\u203E\u203E\u203E\u203E\u203E\u203E\u203E\u203E\u203E\u203E\u203E\u203E\u203E\n\nMarkus Kuhn [\u02C8ma\u02B3k\u028As ku\u02D0n] \u2014 2002-07-25\n\n\nThe ASCII compatible UTF-8 encoding used in this plain-text file\nis defined in Unicode, ISO 10646-1, and RFC 2279.\n\n\nUsing Unicode/UTF-8, you can write in emails and source code things such as\n\nMathematics and sciences:\n\n \u222E E\u22C5da = Q, n \u2192 \u221E, \u2211 f(i) = \u220F g(i), \u23A7\u23A1\u239B\u250C\u2500\u2500\u2500\u2500\u2500\u2510\u239E\u23A4\u23AB\n \u23AA\u23A2\u239C\u2502a\u00B2+b\u00B3 \u239F\u23A5\u23AA\n \u2200x\u2208\u211D: \u2308x\u2309 = \u2212\u230A\u2212x\u230B, \u03B1 \u2227 \u00AC\u03B2 = \u00AC(\u00AC\u03B1 \u2228 \u03B2), \u23AA\u23A2\u239C\u2502\u2500\u2500\u2500\u2500\u2500 \u239F\u23A5\u23AA\n \u23AA\u23A2\u239C\u23B7 c\u2088 \u239F\u23A5\u23AA\n \u2115 \u2286 \u2115\u2080 \u2282 \u2124 \u2282 \u211A \u2282 \u211D \u2282 \u2102, \u23A8\u23A2\u239C \u239F\u23A5\u23AC\n \u23AA\u23A2\u239C \u221E \u239F\u23A5\u23AA\n \u22A5 < a \u2260 b \u2261 c \u2264 d \u226A \u22A4 \u21D2 (\u27E6A\u27E7 \u21D4 \u27EAB\u27EB), \u23AA\u23A2\u239C \u23B2 \u239F\u23A5\u23AA\n \u23AA\u23A2\u239C \u23B3a\u2071-b\u2071\u239F\u23A5\u23AA\n 2H\u2082 + O\u2082 \u21CC 2H\u2082O, R = 4.7 k\u03A9, \u2300 200 mm \u23A9\u23A3\u239Di=1 \u23A0\u23A6\u23AD\n\nLinguistics and dictionaries:\n\n \u00F0i \u0131nt\u0259\u02C8n\u00E6\u0283\u0259n\u0259l f\u0259\u02C8n\u025Bt\u0131k \u0259so\u028Asi\u02C8e\u0131\u0283n\n Y [\u02C8\u028Fpsil\u0254n], Yen [j\u025Bn], Yoga [\u02C8jo\u02D0g\u0251]\n\nAPL:\n\n ((V\u2373V)=\u2373\u2374V)/V\u2190,V \u2337\u2190\u2373\u2192\u2374\u2206\u2207\u2283\u203E\u234E\u2355\u2308\n\nNicer typography in plain text files:\n\n \u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557\n \u2551 \u2551\n \u2551 \u2022 \u2018single\u2019 and \u201Cdouble\u201D quotes \u2551\n \u2551 \u2551\n \u2551 \u2022 Curly apostrophes: \u201CWe\u2019ve been here\u201D \u2551\n \u2551 \u2551\n \u2551 \u2022 Latin-1 apostrophe and accents: '\u00B4` \u2551\n \u2551 \u2551\n \u2551 \u2022 \u201Adeutsche\u2018 \u201EAnf\u00FChrungszeichen\u201C \u2551\n \u2551 \u2551\n \u2551 \u2022 \u2020, \u2021, \u2030, \u2022, 3\u20134, \u2014, \u22125/+5, \u2122, \u2026 \u2551\n \u2551 \u2551\n \u2551 \u2022 ASCII safety test: 1lI|, 0OD, 8B \u2551\n \u2551 \u256D\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256E \u2551\n \u2551 \u2022 the euro symbol: \u2502 14.95 \u20AC \u2502 \u2551\n \u2551 \u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256F \u2551\n \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D\n\nCombining characters:\n\n STARG\u039B\u030ATE SG-1, a = v\u0307 = r\u0308, a\u20D1 \u22A5 b\u20D1\n\nGreek (in Polytonic):\n\n The Greek anthem:\n\n \u03A3\u1F72 \u03B3\u03BD\u03C9\u03C1\u1F77\u03B6\u03C9 \u1F00\u03C0\u1F78 \u03C4\u1F74\u03BD \u03BA\u1F79\u03C8\u03B7\n \u03C4\u03BF\u1FE6 \u03C3\u03C0\u03B1\u03B8\u03B9\u03BF\u1FE6 \u03C4\u1F74\u03BD \u03C4\u03C1\u03BF\u03BC\u03B5\u03C1\u1F75,\n \u03C3\u1F72 \u03B3\u03BD\u03C9\u03C1\u1F77\u03B6\u03C9 \u1F00\u03C0\u1F78 \u03C4\u1F74\u03BD \u1F44\u03C8\u03B7\n \u03C0\u03BF\u1F7A \u03BC\u1F72 \u03B2\u1F77\u03B1 \u03BC\u03B5\u03C4\u03C1\u1F71\u03B5\u03B9 \u03C4\u1F74 \u03B3\u1FC6.\n\n \u1FBF\u0391\u03C0\u1FBF \u03C4\u1F70 \u03BA\u1F79\u03BA\u03BA\u03B1\u03BB\u03B1 \u03B2\u03B3\u03B1\u03BB\u03BC\u1F73\u03BD\u03B7\n \u03C4\u1FF6\u03BD \u1FFE\u0395\u03BB\u03BB\u1F75\u03BD\u03C9\u03BD \u03C4\u1F70 \u1F31\u03B5\u03C1\u1F71\n \u03BA\u03B1\u1F76 \u03C3\u1F70\u03BD \u03C0\u03C1\u1FF6\u03C4\u03B1 \u1F00\u03BD\u03B4\u03C1\u03B5\u03B9\u03C9\u03BC\u1F73\u03BD\u03B7\n \u03C7\u03B1\u1FD6\u03C1\u03B5, \u1F66 \u03C7\u03B1\u1FD6\u03C1\u03B5, \u1FBF\u0395\u03BB\u03B5\u03C5\u03B8\u03B5\u03C1\u03B9\u1F71!\n\n From a speech of Demosthenes in the 4th century BC:\n\n \u039F\u1F50\u03C7\u1F76 \u03C4\u03B1\u1F50\u03C4\u1F70 \u03C0\u03B1\u03C1\u1F77\u03C3\u03C4\u03B1\u03C4\u03B1\u1F77 \u03BC\u03BF\u03B9 \u03B3\u03B9\u03B3\u03BD\u1F7D\u03C3\u03BA\u03B5\u03B9\u03BD, \u1F66 \u1F04\u03BD\u03B4\u03C1\u03B5\u03C2 \u1FBF\u0391\u03B8\u03B7\u03BD\u03B1\u1FD6\u03BF\u03B9,\n \u1F45\u03C4\u03B1\u03BD \u03C4\u1FBF \u03B5\u1F30\u03C2 \u03C4\u1F70 \u03C0\u03C1\u1F71\u03B3\u03BC\u03B1\u03C4\u03B1 \u1F00\u03C0\u03BF\u03B2\u03BB\u1F73\u03C8\u03C9 \u03BA\u03B1\u1F76 \u1F45\u03C4\u03B1\u03BD \u03C0\u03C1\u1F78\u03C2 \u03C4\u03BF\u1F7A\u03C2\n \u03BB\u1F79\u03B3\u03BF\u03C5\u03C2 \u03BF\u1F53\u03C2 \u1F00\u03BA\u03BF\u1F7B\u03C9\u0387 \u03C4\u03BF\u1F7A\u03C2 \u03BC\u1F72\u03BD \u03B3\u1F70\u03C1 \u03BB\u1F79\u03B3\u03BF\u03C5\u03C2 \u03C0\u03B5\u03C1\u1F76 \u03C4\u03BF\u1FE6\n \u03C4\u03B9\u03BC\u03C9\u03C1\u1F75\u03C3\u03B1\u03C3\u03B8\u03B1\u03B9 \u03A6\u1F77\u03BB\u03B9\u03C0\u03C0\u03BF\u03BD \u1F41\u03C1\u1FF6 \u03B3\u03B9\u03B3\u03BD\u03BF\u03BC\u1F73\u03BD\u03BF\u03C5\u03C2, \u03C4\u1F70 \u03B4\u1F72 \u03C0\u03C1\u1F71\u03B3\u03BC\u03B1\u03C4\u1FBF\n \u03B5\u1F30\u03C2 \u03C4\u03BF\u1FE6\u03C4\u03BF \u03C0\u03C1\u03BF\u1F75\u03BA\u03BF\u03BD\u03C4\u03B1, \u1F65\u03C3\u03B8\u1FBF \u1F45\u03C0\u03C9\u03C2 \u03BC\u1F74 \u03C0\u03B5\u03B9\u03C3\u1F79\u03BC\u03B5\u03B8\u1FBF \u03B1\u1F50\u03C4\u03BF\u1F76\n \u03C0\u03C1\u1F79\u03C4\u03B5\u03C1\u03BF\u03BD \u03BA\u03B1\u03BA\u1FF6\u03C2 \u03C3\u03BA\u1F73\u03C8\u03B1\u03C3\u03B8\u03B1\u03B9 \u03B4\u1F73\u03BF\u03BD. \u03BF\u1F50\u03B4\u1F73\u03BD \u03BF\u1F56\u03BD \u1F04\u03BB\u03BB\u03BF \u03BC\u03BF\u03B9 \u03B4\u03BF\u03BA\u03BF\u1FE6\u03C3\u03B9\u03BD\n \u03BF\u1F31 \u03C4\u1F70 \u03C4\u03BF\u03B9\u03B1\u1FE6\u03C4\u03B1 \u03BB\u1F73\u03B3\u03BF\u03BD\u03C4\u03B5\u03C2 \u1F22 \u03C4\u1F74\u03BD \u1F51\u03C0\u1F79\u03B8\u03B5\u03C3\u03B9\u03BD, \u03C0\u03B5\u03C1\u1F76 \u1F27\u03C2 \u03B2\u03BF\u03C5\u03BB\u03B5\u1F7B\u03B5\u03C3\u03B8\u03B1\u03B9,\n \u03BF\u1F50\u03C7\u1F76 \u03C4\u1F74\u03BD \u03BF\u1F56\u03C3\u03B1\u03BD \u03C0\u03B1\u03C1\u03B9\u03C3\u03C4\u1F71\u03BD\u03C4\u03B5\u03C2 \u1F51\u03BC\u1FD6\u03BD \u1F01\u03BC\u03B1\u03C1\u03C4\u1F71\u03BD\u03B5\u03B9\u03BD. \u1F10\u03B3\u1F7C \u03B4\u1F73, \u1F45\u03C4\u03B9 \u03BC\u1F73\u03BD\n \u03C0\u03BF\u03C4\u1FBF \u1F10\u03BE\u1FC6\u03BD \u03C4\u1FC7 \u03C0\u1F79\u03BB\u03B5\u03B9 \u03BA\u03B1\u1F76 \u03C4\u1F70 \u03B1\u1F51\u03C4\u1FC6\u03C2 \u1F14\u03C7\u03B5\u03B9\u03BD \u1F00\u03C3\u03C6\u03B1\u03BB\u1FF6\u03C2 \u03BA\u03B1\u1F76 \u03A6\u1F77\u03BB\u03B9\u03C0\u03C0\u03BF\u03BD\n \u03C4\u03B9\u03BC\u03C9\u03C1\u1F75\u03C3\u03B1\u03C3\u03B8\u03B1\u03B9, \u03BA\u03B1\u1F76 \u03BC\u1F71\u03BB\u1FBF \u1F00\u03BA\u03C1\u03B9\u03B2\u1FF6\u03C2 \u03BF\u1F36\u03B4\u03B1\u0387 \u1F10\u03C0\u1FBF \u1F10\u03BC\u03BF\u1FE6 \u03B3\u1F71\u03C1, \u03BF\u1F50 \u03C0\u1F71\u03BB\u03B1\u03B9\n \u03B3\u1F73\u03B3\u03BF\u03BD\u03B5\u03BD \u03C4\u03B1\u1FE6\u03C4\u1FBF \u1F00\u03BC\u03C6\u1F79\u03C4\u03B5\u03C1\u03B1\u0387 \u03BD\u1FE6\u03BD \u03BC\u1F73\u03BD\u03C4\u03BF\u03B9 \u03C0\u1F73\u03C0\u03B5\u03B9\u03C3\u03BC\u03B1\u03B9 \u03C4\u03BF\u1FE6\u03B8\u1FBF \u1F31\u03BA\u03B1\u03BD\u1F78\u03BD\n \u03C0\u03C1\u03BF\u03BB\u03B1\u03B2\u03B5\u1FD6\u03BD \u1F21\u03BC\u1FD6\u03BD \u03B5\u1F36\u03BD\u03B1\u03B9 \u03C4\u1F74\u03BD \u03C0\u03C1\u1F7D\u03C4\u03B7\u03BD, \u1F45\u03C0\u03C9\u03C2 \u03C4\u03BF\u1F7A\u03C2 \u03C3\u03C5\u03BC\u03BC\u1F71\u03C7\u03BF\u03C5\u03C2\n \u03C3\u1F7D\u03C3\u03BF\u03BC\u03B5\u03BD. \u1F10\u1F70\u03BD \u03B3\u1F70\u03C1 \u03C4\u03BF\u1FE6\u03C4\u03BF \u03B2\u03B5\u03B2\u03B1\u1F77\u03C9\u03C2 \u1F51\u03C0\u1F71\u03C1\u03BE\u1FC3, \u03C4\u1F79\u03C4\u03B5 \u03BA\u03B1\u1F76 \u03C0\u03B5\u03C1\u1F76 \u03C4\u03BF\u1FE6\n \u03C4\u1F77\u03BD\u03B1 \u03C4\u03B9\u03BC\u03C9\u03C1\u1F75\u03C3\u03B5\u03C4\u03B1\u1F77 \u03C4\u03B9\u03C2 \u03BA\u03B1\u1F76 \u1F43\u03BD \u03C4\u03C1\u1F79\u03C0\u03BF\u03BD \u1F10\u03BE\u1F73\u03C3\u03C4\u03B1\u03B9 \u03C3\u03BA\u03BF\u03C0\u03B5\u1FD6\u03BD\u0387 \u03C0\u03C1\u1F76\u03BD \u03B4\u1F72\n \u03C4\u1F74\u03BD \u1F00\u03C1\u03C7\u1F74\u03BD \u1F40\u03C1\u03B8\u1FF6\u03C2 \u1F51\u03C0\u03BF\u03B8\u1F73\u03C3\u03B8\u03B1\u03B9, \u03BC\u1F71\u03C4\u03B1\u03B9\u03BF\u03BD \u1F21\u03B3\u03BF\u1FE6\u03BC\u03B1\u03B9 \u03C0\u03B5\u03C1\u1F76 \u03C4\u1FC6\u03C2\n \u03C4\u03B5\u03BB\u03B5\u03C5\u03C4\u1FC6\u03C2 \u1F41\u03BD\u03C4\u03B9\u03BD\u03BF\u1FE6\u03BD \u03C0\u03BF\u03B9\u03B5\u1FD6\u03C3\u03B8\u03B1\u03B9 \u03BB\u1F79\u03B3\u03BF\u03BD.\n\n \u0394\u03B7\u03BC\u03BF\u03C3\u03B8\u1F73\u03BD\u03BF\u03C5\u03C2, \u0393\u1FFD \u1FBF\u039F\u03BB\u03C5\u03BD\u03B8\u03B9\u03B1\u03BA\u1F78\u03C2\n\nGeorgian:\n\n From a Unicode conference invitation:\n\n \u10D2\u10D7\u10EE\u10DD\u10D5\u10D7 \u10D0\u10EE\u10DA\u10D0\u10D5\u10D4 \u10D2\u10D0\u10D8\u10D0\u10E0\u10DD\u10D7 \u10E0\u10D4\u10D2\u10D8\u10E1\u10E2\u10E0\u10D0\u10EA\u10D8\u10D0 Unicode-\u10D8\u10E1 \u10DB\u10D4\u10D0\u10D7\u10D4 \u10E1\u10D0\u10D4\u10E0\u10D7\u10D0\u10E8\u10DD\u10E0\u10D8\u10E1\u10DD\n \u10D9\u10DD\u10DC\u10E4\u10D4\u10E0\u10D4\u10DC\u10EA\u10D8\u10D0\u10D6\u10D4 \u10D3\u10D0\u10E1\u10D0\u10E1\u10EC\u10E0\u10D4\u10D1\u10D0\u10D3, \u10E0\u10DD\u10DB\u10D4\u10DA\u10D8\u10EA \u10D2\u10D0\u10D8\u10DB\u10D0\u10E0\u10D7\u10D4\u10D1\u10D0 10-12 \u10DB\u10D0\u10E0\u10E2\u10E1,\n \u10E5. \u10DB\u10D0\u10D8\u10DC\u10EA\u10E8\u10D8, \u10D2\u10D4\u10E0\u10DB\u10D0\u10DC\u10D8\u10D0\u10E8\u10D8. \u10D9\u10DD\u10DC\u10E4\u10D4\u10E0\u10D4\u10DC\u10EA\u10D8\u10D0 \u10E8\u10D4\u10F0\u10D9\u10E0\u10D4\u10D1\u10E1 \u10D4\u10E0\u10D7\u10D0\u10D3 \u10DB\u10E1\u10DD\u10E4\u10DA\u10D8\u10DD\u10E1\n \u10D4\u10E5\u10E1\u10DE\u10D4\u10E0\u10E2\u10D4\u10D1\u10E1 \u10D8\u10E1\u10D4\u10D7 \u10D3\u10D0\u10E0\u10D2\u10D4\u10D1\u10E8\u10D8 \u10E0\u10DD\u10D2\u10DD\u10E0\u10D8\u10EA\u10D0\u10D0 \u10D8\u10DC\u10E2\u10D4\u10E0\u10DC\u10D4\u10E2\u10D8 \u10D3\u10D0 Unicode-\u10D8,\n \u10D8\u10DC\u10E2\u10D4\u10E0\u10DC\u10D0\u10EA\u10D8\u10DD\u10DC\u10D0\u10DA\u10D8\u10D6\u10D0\u10EA\u10D8\u10D0 \u10D3\u10D0 \u10DA\u10DD\u10D9\u10D0\u10DA\u10D8\u10D6\u10D0\u10EA\u10D8\u10D0, Unicode-\u10D8\u10E1 \u10D2\u10D0\u10DB\u10DD\u10E7\u10D4\u10DC\u10D4\u10D1\u10D0\n \u10DD\u10DE\u10D4\u10E0\u10D0\u10EA\u10D8\u10E3\u10DA \u10E1\u10D8\u10E1\u10E2\u10D4\u10DB\u10D4\u10D1\u10E1\u10D0, \u10D3\u10D0 \u10D2\u10D0\u10DB\u10DD\u10E7\u10D4\u10DC\u10D4\u10D1\u10D8\u10D7 \u10DE\u10E0\u10DD\u10D2\u10E0\u10D0\u10DB\u10D4\u10D1\u10E8\u10D8, \u10E8\u10E0\u10D8\u10E4\u10E2\u10D4\u10D1\u10E8\u10D8,\n \u10E2\u10D4\u10E5\u10E1\u10E2\u10D4\u10D1\u10D8\u10E1 \u10D3\u10D0\u10DB\u10E3\u10E8\u10D0\u10D5\u10D4\u10D1\u10D0\u10E1\u10D0 \u10D3\u10D0 \u10DB\u10E0\u10D0\u10D5\u10D0\u10DA\u10D4\u10DC\u10DD\u10D5\u10D0\u10DC \u10D9\u10DD\u10DB\u10DE\u10D8\u10E3\u10E2\u10D4\u10E0\u10E3\u10DA \u10E1\u10D8\u10E1\u10E2\u10D4\u10DB\u10D4\u10D1\u10E8\u10D8.\n\nRussian:\n\n From a Unicode conference invitation:\n\n \u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0439\u0442\u0435\u0441\u044C \u0441\u0435\u0439\u0447\u0430\u0441 \u043D\u0430 \u0414\u0435\u0441\u044F\u0442\u0443\u044E \u041C\u0435\u0436\u0434\u0443\u043D\u0430\u0440\u043E\u0434\u043D\u0443\u044E \u041A\u043E\u043D\u0444\u0435\u0440\u0435\u043D\u0446\u0438\u044E \u043F\u043E\n Unicode, \u043A\u043E\u0442\u043E\u0440\u0430\u044F \u0441\u043E\u0441\u0442\u043E\u0438\u0442\u0441\u044F 10-12 \u043C\u0430\u0440\u0442\u0430 1997 \u0433\u043E\u0434\u0430 \u0432 \u041C\u0430\u0439\u043D\u0446\u0435 \u0432 \u0413\u0435\u0440\u043C\u0430\u043D\u0438\u0438.\n \u041A\u043E\u043D\u0444\u0435\u0440\u0435\u043D\u0446\u0438\u044F \u0441\u043E\u0431\u0435\u0440\u0435\u0442 \u0448\u0438\u0440\u043E\u043A\u0438\u0439 \u043A\u0440\u0443\u0433 \u044D\u043A\u0441\u043F\u0435\u0440\u0442\u043E\u0432 \u043F\u043E \u0432\u043E\u043F\u0440\u043E\u0441\u0430\u043C \u0433\u043B\u043E\u0431\u0430\u043B\u044C\u043D\u043E\u0433\u043E\n \u0418\u043D\u0442\u0435\u0440\u043D\u0435\u0442\u0430 \u0438 Unicode, \u043B\u043E\u043A\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0438\u043D\u0442\u0435\u0440\u043D\u0430\u0446\u0438\u043E\u043D\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u0438, \u0432\u043E\u043F\u043B\u043E\u0449\u0435\u043D\u0438\u044E \u0438\n \u043F\u0440\u0438\u043C\u0435\u043D\u0435\u043D\u0438\u044E Unicode \u0432 \u0440\u0430\u0437\u043B\u0438\u0447\u043D\u044B\u0445 \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0445 \u0441\u0438\u0441\u0442\u0435\u043C\u0430\u0445 \u0438 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u043D\u044B\u0445\n \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F\u0445, \u0448\u0440\u0438\u0444\u0442\u0430\u0445, \u0432\u0435\u0440\u0441\u0442\u043A\u0435 \u0438 \u043C\u043D\u043E\u0433\u043E\u044F\u0437\u044B\u0447\u043D\u044B\u0445 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u043D\u044B\u0445 \u0441\u0438\u0441\u0442\u0435\u043C\u0430\u0445.\n\nThai (UCS Level 2):\n\n Excerpt from a poetry on The Romance of The Three Kingdoms (a Chinese\n classic 'San Gua'):\n\n [----------------------------|------------------------]\n \u0E4F \u0E41\u0E1C\u0E48\u0E19\u0E14\u0E34\u0E19\u0E2E\u0E31\u0E48\u0E19\u0E40\u0E2A\u0E37\u0E48\u0E2D\u0E21\u0E42\u0E17\u0E23\u0E21\u0E41\u0E2A\u0E19\u0E2A\u0E31\u0E07\u0E40\u0E27\u0E0A \u0E1E\u0E23\u0E30\u0E1B\u0E01\u0E40\u0E01\u0E28\u0E01\u0E2D\u0E07\u0E1A\u0E39\u0E4A\u0E01\u0E39\u0E49\u0E02\u0E36\u0E49\u0E19\u0E43\u0E2B\u0E21\u0E48\n \u0E2A\u0E34\u0E1A\u0E2A\u0E2D\u0E07\u0E01\u0E29\u0E31\u0E15\u0E23\u0E34\u0E22\u0E4C\u0E01\u0E48\u0E2D\u0E19\u0E2B\u0E19\u0E49\u0E32\u0E41\u0E25\u0E16\u0E31\u0E14\u0E44\u0E1B \u0E2A\u0E2D\u0E07\u0E2D\u0E07\u0E04\u0E4C\u0E44\u0E0B\u0E23\u0E49\u0E42\u0E07\u0E48\u0E40\u0E02\u0E25\u0E32\u0E40\u0E1A\u0E32\u0E1B\u0E31\u0E0D\u0E0D\u0E32\n \u0E17\u0E23\u0E07\u0E19\u0E31\u0E1A\u0E16\u0E37\u0E2D\u0E02\u0E31\u0E19\u0E17\u0E35\u0E40\u0E1B\u0E47\u0E19\u0E17\u0E35\u0E48\u0E1E\u0E36\u0E48\u0E07 \u0E1A\u0E49\u0E32\u0E19\u0E40\u0E21\u0E37\u0E2D\u0E07\u0E08\u0E36\u0E07\u0E27\u0E34\u0E1B\u0E23\u0E34\u0E15\u0E40\u0E1B\u0E47\u0E19\u0E19\u0E31\u0E01\u0E2B\u0E19\u0E32\n \u0E42\u0E2E\u0E08\u0E34\u0E4B\u0E19\u0E40\u0E23\u0E35\u0E22\u0E01\u0E17\u0E31\u0E1E\u0E17\u0E31\u0E48\u0E27\u0E2B\u0E31\u0E27\u0E40\u0E21\u0E37\u0E2D\u0E07\u0E21\u0E32 \u0E2B\u0E21\u0E32\u0E22\u0E08\u0E30\u0E06\u0E48\u0E32\u0E21\u0E14\u0E0A\u0E31\u0E48\u0E27\u0E15\u0E31\u0E27\u0E2A\u0E33\u0E04\u0E31\u0E0D\n \u0E40\u0E2B\u0E21\u0E37\u0E2D\u0E19\u0E02\u0E31\u0E1A\u0E44\u0E2A\u0E44\u0E25\u0E48\u0E40\u0E2A\u0E37\u0E2D\u0E08\u0E32\u0E01\u0E40\u0E04\u0E2B\u0E32 \u0E23\u0E31\u0E1A\u0E2B\u0E21\u0E32\u0E1B\u0E48\u0E32\u0E40\u0E02\u0E49\u0E32\u0E21\u0E32\u0E40\u0E25\u0E22\u0E2D\u0E32\u0E2A\u0E31\u0E0D\n \u0E1D\u0E48\u0E32\u0E22\u0E2D\u0E49\u0E2D\u0E07\u0E2D\u0E38\u0E49\u0E19\u0E22\u0E38\u0E41\u0E22\u0E01\u0E43\u0E2B\u0E49\u0E41\u0E15\u0E01\u0E01\u0E31\u0E19 \u0E43\u0E0A\u0E49\u0E2A\u0E32\u0E27\u0E19\u0E31\u0E49\u0E19\u0E40\u0E1B\u0E47\u0E19\u0E0A\u0E19\u0E27\u0E19\u0E0A\u0E37\u0E48\u0E19\u0E0A\u0E27\u0E19\u0E43\u0E08\n \u0E1E\u0E25\u0E31\u0E19\u0E25\u0E34\u0E09\u0E38\u0E22\u0E01\u0E38\u0E22\u0E01\u0E35\u0E01\u0E25\u0E31\u0E1A\u0E01\u0E48\u0E2D\u0E40\u0E2B\u0E15\u0E38 \u0E0A\u0E48\u0E32\u0E07\u0E2D\u0E32\u0E40\u0E1E\u0E28\u0E08\u0E23\u0E34\u0E07\u0E2B\u0E19\u0E32\u0E1F\u0E49\u0E32\u0E23\u0E49\u0E2D\u0E07\u0E44\u0E2B\u0E49\n \u0E15\u0E49\u0E2D\u0E07\u0E23\u0E1A\u0E23\u0E32\u0E06\u0E48\u0E32\u0E1F\u0E31\u0E19\u0E08\u0E19\u0E1A\u0E23\u0E23\u0E25\u0E31\u0E22 \u0E24\u0E45\u0E2B\u0E32\u0E43\u0E04\u0E23\u0E04\u0E49\u0E33\u0E0A\u0E39\u0E01\u0E39\u0E49\u0E1A\u0E23\u0E23\u0E25\u0E31\u0E07\u0E01\u0E4C \u0E2F\n\n (The above is a two-column text. If combining characters are handled\n correctly, the lines of the second column should be aligned with the\n | character above.)\n\nEthiopian:\n\n Proverbs in the Amharic language:\n\n \u1230\u121B\u12ED \u12A0\u12ED\u1273\u1228\u1235 \u1295\u1309\u1225 \u12A0\u12ED\u12A8\u1230\u1235\u1362\n \u1265\u120B \u12AB\u1208\u129D \u12A5\u1295\u12F0\u12A0\u1263\u1274 \u1260\u1246\u1218\u1320\u129D\u1362\n \u130C\u1325 \u12EB\u1208\u1264\u1271 \u1241\u121D\u1325\u1293 \u1290\u12CD\u1362\n \u12F0\u1200 \u1260\u1215\u120D\u1219 \u1245\u1264 \u1263\u12ED\u1320\u1323 \u1295\u1323\u1275 \u1260\u1308\u12F0\u1208\u12CD\u1362\n \u12E8\u12A0\u134D \u12C8\u1208\u121D\u1273 \u1260\u1245\u1264 \u12A0\u12ED\u1273\u123D\u121D\u1362\n \u12A0\u12ED\u1325 \u1260\u1260\u120B \u12F3\u12CB \u1270\u1218\u1273\u1362\n \u1232\u1270\u1228\u1309\u1219 \u12ED\u12F0\u1228\u130D\u1219\u1362\n \u1240\u1235 \u1260\u1240\u1235\u1365 \u12D5\u1295\u1241\u120B\u120D \u1260\u12A5\u130D\u1229 \u12ED\u1204\u12F3\u120D\u1362\n \u12F5\u122D \u1262\u12EB\u1265\u122D \u12A0\u1295\u1260\u1233 \u12EB\u1235\u122D\u1362\n \u1230\u12CD \u12A5\u1295\u12F0\u1264\u1271 \u12A5\u1295\u1305 \u12A5\u1295\u12F0 \u1309\u1228\u1264\u1271 \u12A0\u12ED\u1270\u12F3\u12F0\u122D\u121D\u1362\n \u12A5\u130D\u12DC\u122D \u12E8\u12A8\u1348\u1270\u12CD\u1295 \u1309\u122E\u122E \u1233\u12ED\u12D8\u130B\u12CD \u12A0\u12ED\u12F5\u122D\u121D\u1362\n \u12E8\u130E\u1228\u1264\u1275 \u120C\u1263\u1365 \u1262\u12EB\u12E9\u1275 \u12ED\u1235\u1245 \u1263\u12EB\u12E9\u1275 \u12EB\u1320\u120D\u1245\u1362\n \u1225\u122B \u12A8\u1218\u134D\u1273\u1275 \u120D\u1304\u1295 \u120B\u134B\u1273\u1275\u1362\n \u12D3\u1263\u12ED \u121B\u12F0\u122A\u12EB \u12E8\u1208\u12CD\u1365 \u130D\u1295\u12F5 \u12ED\u12DE \u12ED\u12DE\u122B\u120D\u1362\n \u12E8\u12A5\u1235\u120B\u121D \u12A0\u1308\u1229 \u1218\u12AB \u12E8\u12A0\u121E\u122B \u12A0\u1308\u1229 \u12CB\u122D\u12AB\u1362\n \u1270\u1295\u130B\u120E \u1262\u1270\u1349 \u1270\u1218\u120D\u1236 \u1263\u1349\u1362\n \u12C8\u12F3\u1305\u1205 \u121B\u122D \u1262\u1206\u1295 \u1328\u122D\u1235\u1205 \u12A0\u1275\u120B\u1230\u12CD\u1362\n \u12A5\u130D\u122D\u1205\u1295 \u1260\u134D\u122B\u123D\u1205 \u120D\u12AD \u12D8\u122D\u130B\u1362\n\nRunes:\n\n \u16BB\u16D6 \u16B3\u16B9\u16AB\u16A6 \u16A6\u16AB\u16CF \u16BB\u16D6 \u16D2\u16A2\u16DE\u16D6 \u16A9\u16BE \u16A6\u16AB\u16D7 \u16DA\u16AA\u16BE\u16DE\u16D6 \u16BE\u16A9\u16B1\u16A6\u16B9\u16D6\u16AA\u16B1\u16DE\u16A2\u16D7 \u16B9\u16C1\u16A6 \u16A6\u16AA \u16B9\u16D6\u16E5\u16AB\n\n (Old English, which transcribed into Latin reads 'He cwaeth that he\n bude thaem lande northweardum with that Westsae.' and means 'He said\n that he lived in the northern land near the Western Sea.')\n\nBraille:\n\n \u284C\u2801\u2827\u2811 \u283C\u2801\u2812 \u284D\u281C\u2807\u2811\u2839\u2830\u280E \u2863\u2815\u280C\n\n \u284D\u281C\u2807\u2811\u2839 \u283A\u2801\u280E \u2819\u2811\u2801\u2819\u2812 \u281E\u2815 \u2803\u2811\u281B\u2814 \u283A\u280A\u2839\u2832 \u2879\u283B\u2811 \u280A\u280E \u281D\u2815 \u2819\u2833\u2803\u281E\n \u2831\u2801\u281E\u2811\u2827\u283B \u2801\u2803\u2833\u281E \u2839\u2801\u281E\u2832 \u2879\u2811 \u2817\u2811\u281B\u280A\u280C\u283B \u2815\u280B \u2819\u280A\u280E \u2803\u2825\u2817\u280A\u2801\u2807 \u283A\u2801\u280E\n \u280E\u280A\u281B\u281D\u282B \u2803\u2839 \u2839\u2811 \u280A\u2807\u283B\u281B\u2839\u280D\u2801\u281D\u2802 \u2839\u2811 \u280A\u2807\u283B\u2805\u2802 \u2839\u2811 \u2825\u281D\u2819\u283B\u281E\u2801\u2805\u283B\u2802\n \u2801\u281D\u2819 \u2839\u2811 \u2821\u280A\u2811\u280B \u280D\u2833\u2817\u281D\u283B\u2832 \u284E\u280A\u2817\u2815\u2815\u281B\u2811 \u280E\u280A\u281B\u281D\u282B \u280A\u281E\u2832 \u2841\u281D\u2819\n \u284E\u280A\u2817\u2815\u2815\u281B\u2811\u2830\u280E \u281D\u2801\u280D\u2811 \u283A\u2801\u280E \u281B\u2815\u2815\u2819 \u2825\u280F\u2815\u281D \u2830\u2861\u2801\u281D\u281B\u2811\u2802 \u280B\u2815\u2817 \u2801\u281D\u2839\u2839\u2814\u281B \u2819\u2811\n \u2821\u2815\u280E\u2811 \u281E\u2815 \u280F\u2825\u281E \u2819\u280A\u280E \u2819\u2801\u281D\u2819 \u281E\u2815\u2832\n\n \u2855\u2807\u2819 \u284D\u281C\u2807\u2811\u2839 \u283A\u2801\u280E \u2801\u280E \u2819\u2811\u2801\u2819 \u2801\u280E \u2801 \u2819\u2815\u2815\u2817\u2824\u281D\u2801\u280A\u2807\u2832\n\n \u284D\u2814\u2819\u2816 \u284A \u2819\u2815\u281D\u2830\u281E \u280D\u2811\u2801\u281D \u281E\u2815 \u280E\u2801\u2839 \u2839\u2801\u281E \u284A \u2805\u281D\u282A\u2802 \u2815\u280B \u280D\u2839\n \u282A\u281D \u2805\u281D\u282A\u2807\u282B\u281B\u2811\u2802 \u2831\u2801\u281E \u2839\u283B\u2811 \u280A\u280E \u280F\u281C\u281E\u280A\u280A\u2825\u2807\u281C\u2807\u2839 \u2819\u2811\u2801\u2819 \u2801\u2803\u2833\u281E\n \u2801 \u2819\u2815\u2815\u2817\u2824\u281D\u2801\u280A\u2807\u2832 \u284A \u280D\u280A\u2823\u281E \u2819\u2801\u2827\u2811 \u2803\u2811\u2832 \u2814\u280A\u2807\u2814\u282B\u2802 \u280D\u2839\u280E\u2811\u2807\u280B\u2802 \u281E\u2815\n \u2817\u2811\u281B\u281C\u2819 \u2801 \u280A\u2815\u280B\u280B\u2814\u2824\u281D\u2801\u280A\u2807 \u2801\u280E \u2839\u2811 \u2819\u2811\u2801\u2819\u2811\u280C \u280F\u280A\u2811\u280A\u2811 \u2815\u280B \u280A\u2817\u2815\u281D\u280D\u2815\u281D\u281B\u283B\u2839\n \u2814 \u2839\u2811 \u281E\u2817\u2801\u2819\u2811\u2832 \u2843\u2825\u281E \u2839\u2811 \u283A\u280A\u280E\u2819\u2815\u280D \u2815\u280B \u2833\u2817 \u2801\u281D\u280A\u2811\u280C\u2815\u2817\u280E\n \u280A\u280E \u2814 \u2839\u2811 \u280E\u280A\u280D\u280A\u2807\u2811\u2806 \u2801\u281D\u2819 \u280D\u2839 \u2825\u281D\u2819\u2801\u2807\u2807\u282A\u282B \u2819\u2801\u281D\u2819\u280E\n \u2829\u2801\u2807\u2807 \u281D\u2815\u281E \u2819\u280A\u280C\u2825\u2817\u2803 \u280A\u281E\u2802 \u2815\u2817 \u2839\u2811 \u284A\u2833\u281D\u281E\u2817\u2839\u2830\u280E \u2819\u2815\u281D\u2811 \u280B\u2815\u2817\u2832 \u2879\u2833\n \u283A\u280A\u2807\u2807 \u2839\u283B\u2811\u280B\u2815\u2817\u2811 \u280F\u283B\u280D\u280A\u281E \u280D\u2811 \u281E\u2815 \u2817\u2811\u280F\u2811\u2801\u281E\u2802 \u2811\u280D\u280F\u2819\u2801\u281E\u280A\u280A\u2801\u2807\u2807\u2839\u2802 \u2839\u2801\u281E\n \u284D\u281C\u2807\u2811\u2839 \u283A\u2801\u280E \u2801\u280E \u2819\u2811\u2801\u2819 \u2801\u280E \u2801 \u2819\u2815\u2815\u2817\u2824\u281D\u2801\u280A\u2807\u2832\n\n (The first couple of paragraphs of \"A Christmas Carol\" by Dickens)\n\nCompact font selection example text:\n\n ABCDEFGHIJKLMNOPQRSTUVWXYZ /0123456789\n abcdefghijklmnopqrstuvwxyz \u00A3\u00A9\u00B5\u00C0\u00C6\u00D6\u00DE\u00DF\u00E9\u00F6\u00FF\n \u2013\u2014\u2018\u201C\u201D\u201E\u2020\u2022\u2026\u2030\u2122\u0153\u0160\u0178\u017E\u20AC \u0391\u0392\u0393\u0394\u03A9\u03B1\u03B2\u03B3\u03B4\u03C9 \u0410\u0411\u0412\u0413\u0414\u0430\u0431\u0432\u0433\u0434\n \u2200\u2202\u2208\u211D\u2227\u222A\u2261\u221E \u2191\u2197\u21A8\u21BB\u21E3 \u2510\u253C\u2554\u2558\u2591\u25BA\u263A\u2640 \uFB01\uFFFD\u2440\u2082\u1F20\u1E02\u04E5\u1E84\u0250\u02D0\u234E\u05D0\u0531\u10D0\n\nGreetings in various languages:\n\n Hello world, \u039A\u03B1\u03BB\u03B7\u03BC\u1F73\u03C1\u03B1 \u03BA\u1F79\u03C3\u03BC\u03B5, \u30B3\u30F3\u30CB\u30C1\u30CF\n\nBox drawing alignment tests: \u2588\n \u2589\n \u2554\u2550\u2550\u2566\u2550\u2550\u2557 \u250C\u2500\u2500\u252C\u2500\u2500\u2510 \u256D\u2500\u2500\u252C\u2500\u2500\u256E \u256D\u2500\u2500\u252C\u2500\u2500\u256E \u250F\u2501\u2501\u2533\u2501\u2501\u2513 \u250E\u2512\u250F\u2511 \u2577 \u257B \u250F\u252F\u2513 \u250C\u2530\u2510 \u258A \u2571\u2572\u2571\u2572\u2573\u2573\u2573\n \u2551\u250C\u2500\u2568\u2500\u2510\u2551 \u2502\u2554\u2550\u2567\u2550\u2557\u2502 \u2502\u2552\u2550\u256A\u2550\u2555\u2502 \u2502\u2553\u2500\u2541\u2500\u2556\u2502 \u2503\u250C\u2500\u2542\u2500\u2510\u2503 \u2517\u2543\u2544\u2519 \u2576\u253C\u2574\u257A\u254B\u2578\u2520\u253C\u2528 \u251D\u254B\u2525 \u258B \u2572\u2571\u2572\u2571\u2573\u2573\u2573\n \u2551\u2502\u2572 \u2571\u2502\u2551 \u2502\u2551 \u2551\u2502 \u2502\u2502 \u2502 \u2502\u2502 \u2502\u2551 \u2503 \u2551\u2502 \u2503\u2502 \u257F \u2502\u2503 \u250D\u2545\u2546\u2513 \u2575 \u2579 \u2517\u2537\u251B \u2514\u2538\u2518 \u258C \u2571\u2572\u2571\u2572\u2573\u2573\u2573\n \u2560\u2561 \u2573 \u255E\u2563 \u251C\u2562 \u255F\u2524 \u251C\u253C\u2500\u253C\u2500\u253C\u2524 \u251C\u256B\u2500\u2542\u2500\u256B\u2524 \u2523\u253F\u257E\u253C\u257C\u253F\u252B \u2515\u251B\u2516\u251A \u250C\u2504\u2504\u2510 \u254E \u250F\u2505\u2505\u2513 \u250B \u258D \u2572\u2571\u2572\u2571\u2573\u2573\u2573\n \u2551\u2502\u2571 \u2572\u2502\u2551 \u2502\u2551 \u2551\u2502 \u2502\u2502 \u2502 \u2502\u2502 \u2502\u2551 \u2503 \u2551\u2502 \u2503\u2502 \u257D \u2502\u2503 \u2591\u2591\u2592\u2592\u2593\u2593\u2588\u2588 \u250A \u2506 \u254E \u254F \u2507 \u250B \u258E\n \u2551\u2514\u2500\u2565\u2500\u2518\u2551 \u2502\u255A\u2550\u2564\u2550\u255D\u2502 \u2502\u2558\u2550\u256A\u2550\u255B\u2502 \u2502\u2559\u2500\u2540\u2500\u255C\u2502 \u2503\u2514\u2500\u2542\u2500\u2518\u2503 \u2591\u2591\u2592\u2592\u2593\u2593\u2588\u2588 \u250A \u2506 \u254E \u254F \u2507 \u250B \u258F\n \u255A\u2550\u2550\u2569\u2550\u2550\u255D \u2514\u2500\u2500\u2534\u2500\u2500\u2518 \u2570\u2500\u2500\u2534\u2500\u2500\u256F \u2570\u2500\u2500\u2534\u2500\u2500\u256F \u2517\u2501\u2501\u253B\u2501\u2501\u251B \u2597\u2584\u2596\u259B\u2580\u259C \u2514\u254C\u254C\u2518 \u254E \u2517\u254D\u254D\u251B \u250B \u2581\u2582\u2583\u2584\u2585\u2586\u2587\u2588\n \u259D\u2580\u2598\u2599\u2584\u259F\n" . "\n Two byte Unicode escape: \u00E0\n Largest Unicode escape in Turtle: \U0010FFFF\n" . rio-0.8.5/testsuite/serd-tests/good/UTF-8.ttl000066400000000000000000000336421466265456300207540ustar00rootroot00000000000000@prefix rdfs: . <> rdfs:comment """ UTF-8 encoded sample plain-text file ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ Markus Kuhn [ˈmaʳkÊŠs kuËn] — 2002-07-25 The ASCII compatible UTF-8 encoding used in this plain-text file is defined in Unicode, ISO 10646-1, and RFC 2279. Using Unicode/UTF-8, you can write in emails and source code things such as Mathematics and sciences: ∮ Eâ‹…da = Q, n → ∞, ∑ f(i) = ∠g(i), ⎧⎡⎛┌─────â”⎞⎤⎫ ⎪⎢⎜│a²+b³ ⎟⎥⎪ ∀x∈â„: ⌈x⌉ = −⌊−x⌋, α ∧ ¬β = ¬(¬α ∨ β), ⎪⎢⎜│───── ⎟⎥⎪ ⎪⎢⎜⎷ c₈ ⎟⎥⎪ â„• ⊆ â„•â‚€ ⊂ ℤ ⊂ ℚ ⊂ ℠⊂ â„‚, ⎨⎢⎜ ⎟⎥⎬ ⎪⎢⎜ ∞ ⎟⎥⎪ ⊥ < a ≠ b ≡ c ≤ d ≪ ⊤ ⇒ (⟦A⟧ ⇔ ⟪B⟫), ⎪⎢⎜ ⎲ ⎟⎥⎪ ⎪⎢⎜ ⎳aâ±-bâ±âŽŸâŽ¥âŽª 2Hâ‚‚ + Oâ‚‚ ⇌ 2Hâ‚‚O, R = 4.7 kΩ, ⌀ 200 mm ⎩⎣âŽi=1 ⎠⎦⎭ Linguistics and dictionaries: ði ıntəˈnæʃənÉ™l fəˈnÉ›tık É™soÊŠsiˈeıʃn Y [ˈÊpsilÉ”n], Yen [jÉ›n], Yoga [ˈjoËgÉ‘] APL: ((Vâ³V)=â³â´V)/Vâ†,V ⌷â†â³â†’â´âˆ†âˆ‡âŠƒâ€¾âŽâ•⌈ Nicer typography in plain text files: â•”â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•— â•‘ â•‘ â•‘ • ‘single’ and “double†quotes â•‘ â•‘ â•‘ â•‘ • Curly apostrophes: “We’ve been here†║ â•‘ â•‘ â•‘ • Latin-1 apostrophe and accents: '´` â•‘ â•‘ â•‘ â•‘ • ‚deutsche‘ „Anführungszeichen“ â•‘ â•‘ â•‘ â•‘ • †, ‡, ‰, •, 3–4, —, −5/+5, â„¢, … â•‘ â•‘ â•‘ â•‘ • ASCII safety test: 1lI|, 0OD, 8B â•‘ â•‘ ╭─────────╮ â•‘ â•‘ • the euro symbol: │ 14.95 € │ â•‘ â•‘ ╰─────────╯ â•‘ ╚â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â• Combining characters: STARGΛ̊TE SG-1, a = v̇ = r̈, a⃑ ⊥ b⃑ Greek (in Polytonic): The Greek anthem: Σὲ γνωÏίζω ἀπὸ τὴν κόψη τοῦ σπαθιοῦ τὴν Ï„ÏομεÏá½µ, σὲ γνωÏίζω ἀπὸ τὴν ὄψη ποὺ μὲ βία μετÏάει τὴ γῆ. ᾿Απ᾿ τὰ κόκκαλα βγαλμένη τῶν ῾Ελλήνων τὰ ἱεÏá½± καὶ σὰν Ï€Ïῶτα ἀνδÏειωμένη χαῖÏε, ὦ χαῖÏε, ᾿ΕλευθεÏιά! From a speech of Demosthenes in the 4th century BC: Οá½Ï‡á½¶ ταá½Ï„á½° παÏίσταταί μοι γιγνώσκειν, ὦ ἄνδÏες ᾿Αθηναῖοι, ὅταν τ᾿ εἰς τὰ Ï€Ïάγματα ἀποβλέψω καὶ ὅταν Ï€Ïὸς τοὺς λόγους οὓς ἀκούω· τοὺς μὲν Î³á½°Ï Î»á½¹Î³Î¿Ï…Ï‚ πεÏá½¶ τοῦ τιμωÏήσασθαι Φίλιππον á½Ïá¿¶ γιγνομένους, τὰ δὲ Ï€Ïάγματ᾿ εἰς τοῦτο Ï€Ïοήκοντα, ὥσθ᾿ ὅπως μὴ πεισόμεθ᾿ αá½Ï„οὶ Ï€ÏότεÏον κακῶς σκέψασθαι δέον. οá½Î´á½³Î½ οὖν ἄλλο μοι δοκοῦσιν οἱ τὰ τοιαῦτα λέγοντες á¼¢ τὴν ὑπόθεσιν, πεÏá½¶ á¼§Ï‚ βουλεύεσθαι, οá½Ï‡á½¶ τὴν οὖσαν παÏιστάντες ὑμῖν á¼Î¼Î±Ïτάνειν. á¼Î³á½¼ δέ, ὅτι μέν ποτ᾿ á¼Î¾á¿†Î½ τῇ πόλει καὶ τὰ αὑτῆς ἔχειν ἀσφαλῶς καὶ Φίλιππον τιμωÏήσασθαι, καὶ μάλ᾿ ἀκÏιβῶς οἶδα· á¼Ï€á¾¿ á¼Î¼Î¿á¿¦ γάÏ, οὠπάλαι γέγονεν ταῦτ᾿ ἀμφότεÏα· νῦν μέντοι πέπεισμαι τοῦθ᾿ ἱκανὸν Ï€Ïολαβεῖν ἡμῖν εἶναι τὴν Ï€Ïώτην, ὅπως τοὺς συμμάχους σώσομεν. á¼á½°Î½ Î³á½°Ï Ï„Î¿á¿¦Ï„Î¿ βεβαίως ὑπάÏξῃ, τότε καὶ πεÏá½¶ τοῦ τίνα τιμωÏήσεταί τις καὶ ὃν Ï„Ïόπον á¼Î¾á½³ÏƒÏ„αι σκοπεῖν· Ï€Ïὶν δὲ τὴν á¼€Ïχὴν á½€Ïθῶς ὑποθέσθαι, μάταιον ἡγοῦμαι πεÏá½¶ τῆς τελευτῆς á½Î½Ï„ινοῦν ποιεῖσθαι λόγον. Δημοσθένους, Γ´ ᾿Ολυνθιακὸς Georgian: From a Unicode conference invitation: გთხáƒáƒ•თ áƒáƒ®áƒšáƒáƒ•ე გáƒáƒ˜áƒáƒ áƒáƒ— რეგისტრáƒáƒªáƒ˜áƒ Unicode-ის მეáƒáƒ—ე სáƒáƒ”რთáƒáƒ¨áƒáƒ áƒ˜áƒ¡áƒ კáƒáƒœáƒ¤áƒ”რენციáƒáƒ–ე დáƒáƒ¡áƒáƒ¡áƒ¬áƒ áƒ”ბáƒáƒ“, რáƒáƒ›áƒ”ლიც გáƒáƒ˜áƒ›áƒáƒ áƒ—ებრ10-12 მáƒáƒ áƒ¢áƒ¡, ქ. მáƒáƒ˜áƒœáƒªáƒ¨áƒ˜, გერმáƒáƒœáƒ˜áƒáƒ¨áƒ˜. კáƒáƒœáƒ¤áƒ”რენცირშეჰკრებს ერთáƒáƒ“ მსáƒáƒ¤áƒšáƒ˜áƒáƒ¡ ექსპერტებს ისეთ დáƒáƒ áƒ’ებში რáƒáƒ’áƒáƒ áƒ˜áƒªáƒáƒ ინტერნეტი დრUnicode-ი, ინტერნáƒáƒªáƒ˜áƒáƒœáƒáƒšáƒ˜áƒ–áƒáƒªáƒ˜áƒ დრლáƒáƒ™áƒáƒšáƒ˜áƒ–áƒáƒªáƒ˜áƒ, Unicode-ის გáƒáƒ›áƒáƒ§áƒ”ნებრáƒáƒžáƒ”რáƒáƒªáƒ˜áƒ£áƒš სისტემებსáƒ, დრგáƒáƒ›áƒáƒ§áƒ”ნებით პრáƒáƒ’რáƒáƒ›áƒ”ბში, შრიფტებში, ტექსტების დáƒáƒ›áƒ£áƒ¨áƒáƒ•ებáƒáƒ¡áƒ დრმრáƒáƒ•áƒáƒšáƒ”ნáƒáƒ•áƒáƒœ კáƒáƒ›áƒžáƒ˜áƒ£áƒ¢áƒ”რულ სისტემებში. Russian: From a Unicode conference invitation: ЗарегиÑтрируйтеÑÑŒ ÑÐµÐ¹Ñ‡Ð°Ñ Ð½Ð° ДеÑÑтую Международную Конференцию по Unicode, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ ÑоÑтоитÑÑ 10-12 марта 1997 года в Майнце в Германии. ÐšÐ¾Ð½Ñ„ÐµÑ€ÐµÐ½Ñ†Ð¸Ñ Ñоберет широкий круг ÑкÑпертов по вопроÑам глобального Интернета и Unicode, локализации и интернационализации, воплощению и применению Unicode в различных операционных ÑиÑтемах и программных приложениÑÑ…, шрифтах, верÑтке и многоÑзычных компьютерных ÑиÑтемах. Thai (UCS Level 2): Excerpt from a poetry on The Romance of The Three Kingdoms (a Chinese classic 'San Gua'): [----------------------------|------------------------] ๠à¹à¸œà¹ˆà¸™à¸”ินฮั่นเสื่อมโทรมà¹à¸ªà¸™à¸ªà¸±à¸‡à¹€à¸§à¸Š พระปà¸à¹€à¸à¸¨à¸à¸­à¸‡à¸šà¸¹à¹Šà¸à¸¹à¹‰à¸‚ึ้นใหม่ สิบสองà¸à¸©à¸±à¸•ริย์à¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²à¹à¸¥à¸–ัดไป สององค์ไซร้โง่เขลาเบาปัà¸à¸à¸² ทรงนับถือขันทีเป็นที่พึ่ง บ้านเมืองจึงวิปริตเป็นนัà¸à¸«à¸™à¸² โฮจิ๋นเรียà¸à¸—ัพทั่วหัวเมืองมา หมายจะฆ่ามดชั่วตัวสำคัภเหมือนขับไสไล่เสือจาà¸à¹€à¸„หา รับหมาป่าเข้ามาเลยอาสัภà¸à¹ˆà¸²à¸¢à¸­à¹‰à¸­à¸‡à¸­à¸¸à¹‰à¸™à¸¢à¸¸à¹à¸¢à¸à¹ƒà¸«à¹‰à¹à¸•à¸à¸à¸±à¸™ ใช้สาวนั้นเป็นชนวนชื่นชวนใจ พลันลิฉุยà¸à¸¸à¸¢à¸à¸µà¸à¸¥à¸±à¸šà¸à¹ˆà¸­à¹€à¸«à¸•ุ ช่างอาเพศจริงหนาฟ้าร้องไห้ ต้องรบราฆ่าฟันจนบรรลัย ฤๅหาใครค้ำชูà¸à¸¹à¹‰à¸šà¸£à¸£à¸¥à¸±à¸‡à¸à¹Œ ฯ (The above is a two-column text. If combining characters are handled correctly, the lines of the second column should be aligned with the | character above.) Ethiopian: Proverbs in the Amharic language: ሰማይ አይታረስ ንጉሥ አይከሰስᢠብላ ካለአእንደአባቴ በቆመጠáŠá¢ ጌጥ ያለቤቱ á‰áˆáŒ¥áŠ“ áŠá‹á¢ ደሀ በሕáˆáˆ™ ቅቤ ባይጠጣ ንጣት በገደለá‹á¢ የአá ወለáˆá‰³ በቅቤ አይታሽáˆá¢ አይጥ በበላ ዳዋ ተመታᢠሲተረጉሙ ይደረáŒáˆ™á¢ ቀስ በቀስᥠዕንá‰áˆ‹áˆ በእáŒáˆ© ይሄዳáˆá¢ ድር ቢያብር አንበሳ ያስርᢠሰዠእንደቤቱ እንጅ እንደ ጉረቤቱ አይተዳደርáˆá¢ እáŒá‹œáˆ­ የከáˆá‰°á‹áŠ• ጉሮሮ ሳይዘጋዠአይድርáˆá¢ የጎረቤት ሌባᥠቢያዩት ይስቅ ባያዩት ያጠáˆá‰…ᢠሥራ ከመáታት áˆáŒ„ን ላá‹á‰³á‰µá¢ ዓባይ ማደሪያ የለá‹á¥ áŒáŠ•á‹µ ይዞ ይዞራáˆá¢ የእስላሠአገሩ መካ የአሞራ አገሩ ዋርካᢠተንጋሎ ቢተበተመáˆáˆ¶ ባá‰á¢ ወዳጅህ ማር ቢሆን ጨርስህ አትላሰá‹á¢ እáŒáˆ­áˆ…ን በáራሽህ áˆáŠ­ ዘርጋᢠRunes: ᚻᛖ ᚳᚹᚫᚦ ᚦᚫᛠᚻᛖ ᛒᚢᛞᛖ ᚩᚾ ᚦᚫᛗ ᛚᚪᚾᛞᛖ ᚾᚩᚱᚦᚹᛖᚪᚱᛞᚢᛗ áš¹á›áš¦ ᚦᚪ ᚹᛖᛥᚫ (Old English, which transcribed into Latin reads 'He cwaeth that he bude thaem lande northweardum with that Westsae.' and means 'He said that he lived in the northern land near the Western Sea.') Braille: ⡌â â §â ‘ â ¼â â ’ â¡â œâ ‡â ‘⠹⠰⠎ ⡣⠕⠌ â¡â œâ ‡â ‘â ¹ â ºâ â Ž ⠙⠑â â ™â ’ â žâ • ⠃⠑⠛⠔ ⠺⠊⠹⠲ ⡹⠻⠑ â Šâ Ž â â • ⠙⠳⠃⠞ â ±â â žâ ‘â §â » â â ƒâ ³â ž â ¹â â žâ ² ⡹⠑ ⠗⠑⠛⠊⠌⠻ â •â ‹ ⠙⠊⠎ ⠃⠥⠗⠊â â ‡ â ºâ â Ž â Žâ Šâ ›â â « ⠃⠹ ⠹⠑ ⠊⠇⠻⠛⠹â â â â ‚ ⠹⠑ ⠊⠇⠻⠅⠂ ⠹⠑ â ¥â â ™â »â žâ â …⠻⠂ â â â ™ ⠹⠑ â ¡â Šâ ‘â ‹ â â ³â —â â »â ² ⡎⠊⠗⠕⠕⠛⠑ â Žâ Šâ ›â â « â Šâ žâ ² â¡â â ™ ⡎⠊⠗⠕⠕⠛⠑⠰⠎ â â â â ‘ â ºâ â Ž ⠛⠕⠕⠙ â ¥â â •â  â °â¡¡â â â ›â ‘â ‚ â ‹â •â — â â â ¹â ¹â ”â › ⠙⠑ â ¡â •â Žâ ‘ â žâ • â â ¥â ž ⠙⠊⠎ â ™â â â ™ â žâ •â ² ⡕⠇⠙ â¡â œâ ‡â ‘â ¹ â ºâ â Ž â â Ž ⠙⠑â â ™ â â Ž â  â ™â •â •â —â ¤â â â Šâ ‡â ² â¡â ”⠙⠖ ⡊ ⠙⠕â â °â ž â â ‘â â  â žâ • â Žâ â ¹ â ¹â â ž ⡊ â …â â ªâ ‚ â •â ‹ â â ¹ â ªâ  â …â â ªâ ‡â «â ›â ‘â ‚ â ±â â ž ⠹⠻⠑ â Šâ Ž â â œâ žâ Šâ Šâ ¥â ‡â œâ ‡â ¹ ⠙⠑â â ™ â â ƒâ ³â ž â  â ™â •â •â —â ¤â â â Šâ ‡â ² ⡊ â â Šâ £â ž â ™â â §â ‘ ⠃⠑⠲ ⠔⠊⠇⠔⠫⠂ â â ¹â Žâ ‘⠇⠋⠂ â žâ • ⠗⠑⠛⠜⠙ â  â Šâ •â ‹â ‹â ”â ¤â â â Šâ ‡ â â Ž ⠹⠑ ⠙⠑â â ™â ‘â Œ â â Šâ ‘â Šâ ‘ â •â ‹ â Šâ —â •â â â •â â ›â »â ¹ â ” ⠹⠑ â žâ —â â ™â ‘â ² ⡃⠥⠞ ⠹⠑ â ºâ Šâ Žâ ™â •â  â •â ‹ ⠳⠗ â â â Šâ ‘⠌⠕⠗⠎ â Šâ Ž â ” ⠹⠑ â Žâ Šâ â Šâ ‡â ‘â † â â â ™ â â ¹ â ¥â â ™â â ‡â ‡â ªâ « â ™â â â ™â Ž â ©â â ‡â ‡ â â •â ž ⠙⠊⠌⠥⠗⠃ â Šâ žâ ‚ â •â — ⠹⠑ ⡊⠳â â žâ —⠹⠰⠎ ⠙⠕â â ‘ â ‹â •â —â ² ⡹⠳ ⠺⠊⠇⠇ ⠹⠻⠑⠋⠕⠗⠑ â â »â â Šâ ž â â ‘ â žâ • â —â ‘â â ‘â â žâ ‚ â ‘â â â ™â â žâ Šâ Šâ â ‡â ‡â ¹â ‚ â ¹â â ž â¡â œâ ‡â ‘â ¹ â ºâ â Ž â â Ž ⠙⠑â â ™ â â Ž â  â ™â •â •â —â ¤â â â Šâ ‡â ² (The first couple of paragraphs of "A Christmas Carol" by Dickens) Compact font selection example text: ABCDEFGHIJKLMNOPQRSTUVWXYZ /0123456789 abcdefghijklmnopqrstuvwxyz £©µÀÆÖÞßéöÿ –—‘“â€â€žâ€ â€¢â€¦â€°â„¢Å“ŠŸž€ ΑΒΓΔΩαβγδω ÐБВГДабвгд ∀∂∈â„∧∪≡∞ ↑↗↨↻⇣ â”┼╔╘░►☺♀ ï¬ï¿½â‘€â‚‚ἠḂӥẄÉËâŽ×ԱრGreetings in various languages: Hello world, ΚαλημέÏα κόσμε, コンニãƒãƒ Box drawing alignment tests: â–ˆ â–‰ â•”â•â•╦â•â•â•— ┌──┬──┠╭──┬──╮ ╭──┬──╮ â”â”â”┳â”â”┓ ┎┒â”┑ â•· â•» â”┯┓ ┌┰┠▊ ╱╲╱╲╳╳╳ ║┌─╨─â”â•‘ │╔â•â•§â•╗│ │╒â•╪â•╕│ │╓─â•─╖│ ┃┌─╂─â”┃ ┗╃╄┙ ╶┼╴╺╋╸┠┼┨ â”╋┥ â–‹ ╲╱╲╱╳╳╳ ║│╲ ╱│║ │║ ║│ ││ │ ││ │║ ┃ ║│ ┃│ â•¿ │┃ â”╅╆┓ ╵ ╹ â”—â”·â”› └┸┘ â–Œ ╱╲╱╲╳╳╳ â• â•¡ ╳ ╞╣ ├╢ ╟┤ ├┼─┼─┼┤ ├╫─╂─╫┤ ┣┿╾┼╼┿┫ ┕┛┖┚ ┌┄┄┠╎ â”┅┅┓ ┋ ■╲╱╲╱╳╳╳ ║│╱ ╲│║ │║ ║│ ││ │ ││ │║ ┃ ║│ ┃│ ╽ │┃ ░░▒▒▓▓██ ┊ ┆ ╎ ╠┇ ┋ â–Ž ║└─╥─┘║ │╚â•╤â•â•│ │╘â•╪â•╛│ │╙─╀─╜│ ┃└─╂─┘┃ ░░▒▒▓▓██ ┊ ┆ ╎ ╠┇ ┋ ■╚â•â•â•©â•â•╠└──┴──┘ ╰──┴──╯ ╰──┴──╯ â”—â”â”â”»â”â”â”› ▗▄▖▛▀▜ └╌╌┘ ╎ â”—â•â•â”› ┋ â–▂▃▄▅▆▇█ â–▀▘▙▄▟ """ . <> rdfs:comment """ Two byte Unicode escape: \u00E0 Largest Unicode escape in Turtle: \U0010FFFF """ . rio-0.8.5/testsuite/serd-tests/good/base.nt000066400000000000000000000002141466265456300206660ustar00rootroot00000000000000 . rio-0.8.5/testsuite/serd-tests/good/base.ttl000066400000000000000000000000221466265456300210450ustar00rootroot00000000000000 a . rio-0.8.5/testsuite/serd-tests/good/manifest.ttl000066400000000000000000000172741466265456300217620ustar00rootroot00000000000000@prefix mf: . @prefix rdf: . @prefix rdfs: . @prefix rdft: . <> rdf:type mf:Manifest ; rdfs:comment "Serd good syntax test cases" ; mf:entries ( <#test-14> <#base> <#test-14> <#test-15> <#test-16> <#test-18> <#test-30> <#test-a-without-whitespace> <#test-backspace> <#test-base-nopath> <#test-base-query> <#test-blank-cont> <#test-blank-in-list> <#test-blank-node-statement> <#test-blankdot> # we do not support BOM <#test-bom> <#test-cr> <#test-delete> <#test-digit-start-pname> <#test-empty-path-base> <#test-empty> <#test-eof-at-page-end> # We prefer to decode before IRI validation <#test-escapes> # this is an extension <#test-ext-namedblank-iri> # this is an extension <#test-ext-namedblank-prefix> <#test-form-feed> <#test-id> <#test-lang> <#test-list-in-blank> <#test-list-subject> <#test-list> <#test-long-string> <#test-several-eaten-dots> <#test-no-spaces> <#test-non-curie-uri> <#test-num> # We prefer to raise an error on invalid unicode code points <#test-out-of-range-unicode> <#test-prefix> <#test-pretty> <#test-rel> <#test-semi-dot> # We validate URI escaping <#test-uri-escape> <#test-uri> <#test-utf8-uri> <#UTF-8> ) . <#test-14> rdf:type rdft:TestTurtleEval ; mf:name "test-14" ; mf:action . <#base> rdf:type rdft:TestTurtleEval ; mf:name "base" ; mf:action ; mf:result . <#test-14> rdf:type rdft:TestTurtleEval ; mf:name "test-14" ; mf:action ; mf:result . <#test-15> rdf:type rdft:TestTurtleEval ; mf:name "test-15" ; mf:action ; mf:result . <#test-16> rdf:type rdft:TestTurtleEval ; mf:name "test-16" ; mf:action ; mf:result . <#test-18> rdf:type rdft:TestTurtleEval ; mf:name "test-18" ; mf:action ; mf:result . <#test-30> rdf:type rdft:TestTurtleEval ; mf:name "test-30" ; mf:action ; mf:result . <#test-a-without-whitespace> rdf:type rdft:TestTurtleEval ; mf:name "test-a-without-whitespace" ; mf:action ; mf:result . <#test-backspace> rdf:type rdft:TestTurtleEval ; mf:name "test-backspace" ; mf:action ; mf:result . <#test-base-nopath> rdf:type rdft:TestTurtleEval ; mf:name "test-base-nopath" ; mf:action ; mf:result . <#test-base-query> rdf:type rdft:TestTurtleEval ; mf:name "test-base-query" ; mf:action ; mf:result . <#test-blank-cont> rdf:type rdft:TestTurtleEval ; mf:name "test-blank-cont" ; mf:action ; mf:result . <#test-blankdot> rdf:type rdft:TestTurtleEval ; mf:name "test-blankdot" ; mf:action ; mf:result . <#test-blank-in-list> rdf:type rdft:TestTurtleEval ; mf:name "test-blank-in-list" ; mf:action ; mf:result . <#test-blank-node-statement> rdf:type rdft:TestTurtleEval ; mf:name "test-blank-node-statement" ; mf:action ; mf:result . <#test-bom> rdf:type rdft:TestTurtleEval ; mf:name "test-bom" ; mf:action ; mf:result . <#test-cr> rdf:type rdft:TestTurtleEval ; mf:name "test-cr" ; mf:action ; mf:result . <#test-delete> rdf:type rdft:TestTurtleEval ; mf:name "test-delete" ; mf:action ; mf:result . <#test-digit-start-pname> rdf:type rdft:TestTurtleEval ; mf:name "test-digit-start-pname" ; mf:action ; mf:result . <#test-empty-path-base> rdf:type rdft:TestTurtleEval ; mf:name "test-empty-path-base" ; mf:action ; mf:result . <#test-empty> rdf:type rdft:TestTurtleEval ; mf:name "test-empty" ; mf:action ; mf:result . <#test-eof-at-page-end> rdf:type rdft:TestTurtleEval ; mf:name "test-eof-at-page-end" ; mf:action ; mf:result . <#test-escapes> rdf:type rdft:TestTurtleEval ; mf:name "test-escapes" ; mf:action ; mf:result . <#test-ext-namedblank-iri> rdf:type rdft:TestTurtleEval ; mf:name "test-ext-namedblank-iri" ; mf:action ; mf:result . <#test-ext-namedblank-prefix> rdf:type rdft:TestTurtleEval ; mf:name "test-ext-namedblank-prefix" ; mf:action ; mf:result . <#test-form-feed> rdf:type rdft:TestTurtleEval ; mf:name "test-form-feed" ; mf:action ; mf:result . <#test-id> rdf:type rdft:TestTurtleEval ; mf:name "test-id" ; mf:action ; mf:result . <#test-lang> rdf:type rdft:TestTurtleEval ; mf:name "test-lang" ; mf:action ; mf:result . <#test-list-in-blank> rdf:type rdft:TestTurtleEval ; mf:name "test-list-in-blank" ; mf:action ; mf:result . <#test-list-subject> rdf:type rdft:TestTurtleEval ; mf:name "test-list-subject" ; mf:action ; mf:result . <#test-list> rdf:type rdft:TestTurtleEval ; mf:name "test-list" ; mf:action ; mf:result . <#test-long-string> rdf:type rdft:TestTurtleEval ; mf:name "test-long-string" ; mf:action ; mf:result . <#test-several-eaten-dots> rdf:type rdft:TestTrigEval ; mf:name "test-several-eaten-dots" ; mf:action ; mf:result . <#test-no-spaces> rdf:type rdft:TestTurtleEval ; mf:name "test-no-spaces" ; mf:action ; mf:result . <#test-non-curie-uri> rdf:type rdft:TestTurtleEval ; mf:name "test-non-curie-uri" ; mf:action ; mf:result . <#test-num> rdf:type rdft:TestTurtleEval ; mf:name "test-num" ; mf:action ; mf:result . <#test-out-of-range-unicode> rdf:type rdft:TestTurtleEval ; mf:name "test-out-of-range-unicode" ; mf:action ; mf:result . <#test-prefix> rdf:type rdft:TestTurtleEval ; mf:name "test-prefix" ; mf:action ; mf:result . <#test-pretty> rdf:type rdft:TestTurtleEval ; mf:name "test-pretty" ; mf:action ; mf:result . <#test-rel> rdf:type rdft:TestTurtleEval ; mf:name "test-rel" ; mf:action ; mf:result . <#test-semi-dot> rdf:type rdft:TestTurtleEval ; mf:name "test-semi-dot" ; mf:action ; mf:result . <#test-uri-escape> rdf:type rdft:TestTurtleEval ; mf:name "test-uri-escape" ; mf:action ; mf:result . <#test-uri> rdf:type rdft:TestTurtleEval ; mf:name "test-uri" ; mf:action ; mf:result . <#test-utf8-uri> rdf:type rdft:TestTurtleEval ; mf:name "test-utf8-uri" ; mf:action ; mf:result . <#UTF-8> rdf:type rdft:TestTurtleEval ; mf:name "UTF-8" ; mf:action ; mf:result . rio-0.8.5/testsuite/serd-tests/good/qualify-in.ttl000066400000000000000000000001541466265456300222170ustar00rootroot00000000000000@prefix eg: . . rio-0.8.5/testsuite/serd-tests/good/qualify-out.ttl000066400000000000000000000000701466265456300224150ustar00rootroot00000000000000@prefix eg: . eg:s eg:p eg:o . rio-0.8.5/testsuite/serd-tests/good/test-14.nt000066400000000000000000033763121466265456300211770ustar00rootroot00000000000000 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . rio-0.8.5/testsuite/serd-tests/good/test-14.ttl000066400000000000000000006473071466265456300213630ustar00rootroot00000000000000# 10000 triples, more than the default Bison stack size @prefix : . :a1 :a1 :a1. :a2 :a2 :a2. :a3 :a3 :a3. :a4 :a4 :a4. :a5 :a5 :a5. :a6 :a6 :a6. :a7 :a7 :a7. :a8 :a8 :a8. :a9 :a9 :a9. :a10 :a10 :a10. :a11 :a11 :a11. :a12 :a12 :a12. :a13 :a13 :a13. :a14 :a14 :a14. :a15 :a15 :a15. :a16 :a16 :a16. :a17 :a17 :a17. :a18 :a18 :a18. :a19 :a19 :a19. :a20 :a20 :a20. :a21 :a21 :a21. :a22 :a22 :a22. :a23 :a23 :a23. :a24 :a24 :a24. :a25 :a25 :a25. :a26 :a26 :a26. :a27 :a27 :a27. :a28 :a28 :a28. :a29 :a29 :a29. :a30 :a30 :a30. :a31 :a31 :a31. :a32 :a32 :a32. :a33 :a33 :a33. :a34 :a34 :a34. :a35 :a35 :a35. :a36 :a36 :a36. :a37 :a37 :a37. :a38 :a38 :a38. :a39 :a39 :a39. :a40 :a40 :a40. :a41 :a41 :a41. :a42 :a42 :a42. :a43 :a43 :a43. :a44 :a44 :a44. :a45 :a45 :a45. :a46 :a46 :a46. :a47 :a47 :a47. :a48 :a48 :a48. :a49 :a49 :a49. :a50 :a50 :a50. :a51 :a51 :a51. :a52 :a52 :a52. :a53 :a53 :a53. :a54 :a54 :a54. :a55 :a55 :a55. :a56 :a56 :a56. :a57 :a57 :a57. :a58 :a58 :a58. :a59 :a59 :a59. :a60 :a60 :a60. :a61 :a61 :a61. :a62 :a62 :a62. :a63 :a63 :a63. :a64 :a64 :a64. :a65 :a65 :a65. :a66 :a66 :a66. :a67 :a67 :a67. :a68 :a68 :a68. :a69 :a69 :a69. :a70 :a70 :a70. :a71 :a71 :a71. :a72 :a72 :a72. :a73 :a73 :a73. :a74 :a74 :a74. :a75 :a75 :a75. :a76 :a76 :a76. :a77 :a77 :a77. :a78 :a78 :a78. :a79 :a79 :a79. :a80 :a80 :a80. :a81 :a81 :a81. :a82 :a82 :a82. :a83 :a83 :a83. :a84 :a84 :a84. :a85 :a85 :a85. :a86 :a86 :a86. :a87 :a87 :a87. :a88 :a88 :a88. :a89 :a89 :a89. :a90 :a90 :a90. :a91 :a91 :a91. :a92 :a92 :a92. :a93 :a93 :a93. :a94 :a94 :a94. :a95 :a95 :a95. :a96 :a96 :a96. :a97 :a97 :a97. :a98 :a98 :a98. :a99 :a99 :a99. :a100 :a100 :a100. :a101 :a101 :a101. :a102 :a102 :a102. :a103 :a103 :a103. :a104 :a104 :a104. :a105 :a105 :a105. :a106 :a106 :a106. :a107 :a107 :a107. :a108 :a108 :a108. :a109 :a109 :a109. :a110 :a110 :a110. :a111 :a111 :a111. :a112 :a112 :a112. :a113 :a113 :a113. :a114 :a114 :a114. :a115 :a115 :a115. :a116 :a116 :a116. :a117 :a117 :a117. :a118 :a118 :a118. :a119 :a119 :a119. :a120 :a120 :a120. :a121 :a121 :a121. :a122 :a122 :a122. :a123 :a123 :a123. :a124 :a124 :a124. :a125 :a125 :a125. :a126 :a126 :a126. :a127 :a127 :a127. :a128 :a128 :a128. :a129 :a129 :a129. :a130 :a130 :a130. :a131 :a131 :a131. :a132 :a132 :a132. :a133 :a133 :a133. :a134 :a134 :a134. :a135 :a135 :a135. :a136 :a136 :a136. :a137 :a137 :a137. :a138 :a138 :a138. :a139 :a139 :a139. :a140 :a140 :a140. :a141 :a141 :a141. :a142 :a142 :a142. :a143 :a143 :a143. :a144 :a144 :a144. :a145 :a145 :a145. :a146 :a146 :a146. :a147 :a147 :a147. :a148 :a148 :a148. :a149 :a149 :a149. :a150 :a150 :a150. :a151 :a151 :a151. :a152 :a152 :a152. :a153 :a153 :a153. :a154 :a154 :a154. :a155 :a155 :a155. :a156 :a156 :a156. :a157 :a157 :a157. :a158 :a158 :a158. :a159 :a159 :a159. :a160 :a160 :a160. :a161 :a161 :a161. :a162 :a162 :a162. :a163 :a163 :a163. :a164 :a164 :a164. :a165 :a165 :a165. :a166 :a166 :a166. :a167 :a167 :a167. :a168 :a168 :a168. :a169 :a169 :a169. :a170 :a170 :a170. :a171 :a171 :a171. :a172 :a172 :a172. :a173 :a173 :a173. :a174 :a174 :a174. :a175 :a175 :a175. :a176 :a176 :a176. :a177 :a177 :a177. :a178 :a178 :a178. :a179 :a179 :a179. :a180 :a180 :a180. :a181 :a181 :a181. :a182 :a182 :a182. :a183 :a183 :a183. :a184 :a184 :a184. :a185 :a185 :a185. :a186 :a186 :a186. :a187 :a187 :a187. :a188 :a188 :a188. :a189 :a189 :a189. :a190 :a190 :a190. :a191 :a191 :a191. :a192 :a192 :a192. :a193 :a193 :a193. :a194 :a194 :a194. :a195 :a195 :a195. :a196 :a196 :a196. :a197 :a197 :a197. :a198 :a198 :a198. :a199 :a199 :a199. :a200 :a200 :a200. :a201 :a201 :a201. :a202 :a202 :a202. :a203 :a203 :a203. :a204 :a204 :a204. :a205 :a205 :a205. :a206 :a206 :a206. :a207 :a207 :a207. :a208 :a208 :a208. :a209 :a209 :a209. :a210 :a210 :a210. :a211 :a211 :a211. :a212 :a212 :a212. :a213 :a213 :a213. :a214 :a214 :a214. :a215 :a215 :a215. :a216 :a216 :a216. :a217 :a217 :a217. :a218 :a218 :a218. :a219 :a219 :a219. :a220 :a220 :a220. :a221 :a221 :a221. :a222 :a222 :a222. :a223 :a223 :a223. :a224 :a224 :a224. :a225 :a225 :a225. :a226 :a226 :a226. :a227 :a227 :a227. :a228 :a228 :a228. :a229 :a229 :a229. :a230 :a230 :a230. :a231 :a231 :a231. :a232 :a232 :a232. :a233 :a233 :a233. :a234 :a234 :a234. :a235 :a235 :a235. :a236 :a236 :a236. :a237 :a237 :a237. :a238 :a238 :a238. :a239 :a239 :a239. :a240 :a240 :a240. :a241 :a241 :a241. :a242 :a242 :a242. :a243 :a243 :a243. :a244 :a244 :a244. :a245 :a245 :a245. :a246 :a246 :a246. :a247 :a247 :a247. :a248 :a248 :a248. :a249 :a249 :a249. :a250 :a250 :a250. :a251 :a251 :a251. :a252 :a252 :a252. :a253 :a253 :a253. :a254 :a254 :a254. :a255 :a255 :a255. :a256 :a256 :a256. :a257 :a257 :a257. :a258 :a258 :a258. :a259 :a259 :a259. :a260 :a260 :a260. :a261 :a261 :a261. :a262 :a262 :a262. :a263 :a263 :a263. :a264 :a264 :a264. :a265 :a265 :a265. :a266 :a266 :a266. :a267 :a267 :a267. :a268 :a268 :a268. :a269 :a269 :a269. :a270 :a270 :a270. :a271 :a271 :a271. :a272 :a272 :a272. :a273 :a273 :a273. :a274 :a274 :a274. :a275 :a275 :a275. :a276 :a276 :a276. :a277 :a277 :a277. :a278 :a278 :a278. :a279 :a279 :a279. :a280 :a280 :a280. :a281 :a281 :a281. :a282 :a282 :a282. :a283 :a283 :a283. :a284 :a284 :a284. :a285 :a285 :a285. :a286 :a286 :a286. :a287 :a287 :a287. :a288 :a288 :a288. :a289 :a289 :a289. :a290 :a290 :a290. :a291 :a291 :a291. :a292 :a292 :a292. :a293 :a293 :a293. :a294 :a294 :a294. :a295 :a295 :a295. :a296 :a296 :a296. :a297 :a297 :a297. :a298 :a298 :a298. :a299 :a299 :a299. :a300 :a300 :a300. :a301 :a301 :a301. :a302 :a302 :a302. :a303 :a303 :a303. :a304 :a304 :a304. :a305 :a305 :a305. :a306 :a306 :a306. :a307 :a307 :a307. :a308 :a308 :a308. :a309 :a309 :a309. :a310 :a310 :a310. :a311 :a311 :a311. :a312 :a312 :a312. :a313 :a313 :a313. :a314 :a314 :a314. :a315 :a315 :a315. :a316 :a316 :a316. :a317 :a317 :a317. :a318 :a318 :a318. :a319 :a319 :a319. :a320 :a320 :a320. :a321 :a321 :a321. :a322 :a322 :a322. :a323 :a323 :a323. :a324 :a324 :a324. :a325 :a325 :a325. :a326 :a326 :a326. :a327 :a327 :a327. :a328 :a328 :a328. :a329 :a329 :a329. :a330 :a330 :a330. :a331 :a331 :a331. :a332 :a332 :a332. :a333 :a333 :a333. :a334 :a334 :a334. :a335 :a335 :a335. :a336 :a336 :a336. :a337 :a337 :a337. :a338 :a338 :a338. :a339 :a339 :a339. :a340 :a340 :a340. :a341 :a341 :a341. :a342 :a342 :a342. :a343 :a343 :a343. :a344 :a344 :a344. :a345 :a345 :a345. :a346 :a346 :a346. :a347 :a347 :a347. :a348 :a348 :a348. :a349 :a349 :a349. :a350 :a350 :a350. :a351 :a351 :a351. :a352 :a352 :a352. :a353 :a353 :a353. :a354 :a354 :a354. :a355 :a355 :a355. :a356 :a356 :a356. :a357 :a357 :a357. :a358 :a358 :a358. :a359 :a359 :a359. :a360 :a360 :a360. :a361 :a361 :a361. :a362 :a362 :a362. :a363 :a363 :a363. :a364 :a364 :a364. :a365 :a365 :a365. :a366 :a366 :a366. :a367 :a367 :a367. :a368 :a368 :a368. :a369 :a369 :a369. :a370 :a370 :a370. :a371 :a371 :a371. :a372 :a372 :a372. :a373 :a373 :a373. :a374 :a374 :a374. :a375 :a375 :a375. :a376 :a376 :a376. :a377 :a377 :a377. :a378 :a378 :a378. :a379 :a379 :a379. :a380 :a380 :a380. :a381 :a381 :a381. :a382 :a382 :a382. :a383 :a383 :a383. :a384 :a384 :a384. :a385 :a385 :a385. :a386 :a386 :a386. :a387 :a387 :a387. :a388 :a388 :a388. :a389 :a389 :a389. :a390 :a390 :a390. :a391 :a391 :a391. :a392 :a392 :a392. :a393 :a393 :a393. :a394 :a394 :a394. :a395 :a395 :a395. :a396 :a396 :a396. :a397 :a397 :a397. :a398 :a398 :a398. :a399 :a399 :a399. :a400 :a400 :a400. :a401 :a401 :a401. :a402 :a402 :a402. :a403 :a403 :a403. :a404 :a404 :a404. :a405 :a405 :a405. :a406 :a406 :a406. :a407 :a407 :a407. :a408 :a408 :a408. :a409 :a409 :a409. :a410 :a410 :a410. :a411 :a411 :a411. :a412 :a412 :a412. :a413 :a413 :a413. :a414 :a414 :a414. :a415 :a415 :a415. :a416 :a416 :a416. :a417 :a417 :a417. :a418 :a418 :a418. :a419 :a419 :a419. :a420 :a420 :a420. :a421 :a421 :a421. :a422 :a422 :a422. :a423 :a423 :a423. :a424 :a424 :a424. :a425 :a425 :a425. :a426 :a426 :a426. :a427 :a427 :a427. :a428 :a428 :a428. :a429 :a429 :a429. :a430 :a430 :a430. :a431 :a431 :a431. :a432 :a432 :a432. :a433 :a433 :a433. :a434 :a434 :a434. :a435 :a435 :a435. :a436 :a436 :a436. :a437 :a437 :a437. :a438 :a438 :a438. :a439 :a439 :a439. :a440 :a440 :a440. :a441 :a441 :a441. :a442 :a442 :a442. :a443 :a443 :a443. :a444 :a444 :a444. :a445 :a445 :a445. :a446 :a446 :a446. :a447 :a447 :a447. :a448 :a448 :a448. :a449 :a449 :a449. :a450 :a450 :a450. :a451 :a451 :a451. :a452 :a452 :a452. :a453 :a453 :a453. :a454 :a454 :a454. :a455 :a455 :a455. :a456 :a456 :a456. :a457 :a457 :a457. :a458 :a458 :a458. :a459 :a459 :a459. :a460 :a460 :a460. :a461 :a461 :a461. :a462 :a462 :a462. :a463 :a463 :a463. :a464 :a464 :a464. :a465 :a465 :a465. :a466 :a466 :a466. :a467 :a467 :a467. :a468 :a468 :a468. :a469 :a469 :a469. :a470 :a470 :a470. :a471 :a471 :a471. :a472 :a472 :a472. :a473 :a473 :a473. :a474 :a474 :a474. :a475 :a475 :a475. :a476 :a476 :a476. :a477 :a477 :a477. :a478 :a478 :a478. :a479 :a479 :a479. :a480 :a480 :a480. :a481 :a481 :a481. :a482 :a482 :a482. :a483 :a483 :a483. :a484 :a484 :a484. :a485 :a485 :a485. :a486 :a486 :a486. :a487 :a487 :a487. :a488 :a488 :a488. :a489 :a489 :a489. :a490 :a490 :a490. :a491 :a491 :a491. :a492 :a492 :a492. :a493 :a493 :a493. :a494 :a494 :a494. :a495 :a495 :a495. :a496 :a496 :a496. :a497 :a497 :a497. :a498 :a498 :a498. :a499 :a499 :a499. :a500 :a500 :a500. :a501 :a501 :a501. :a502 :a502 :a502. :a503 :a503 :a503. :a504 :a504 :a504. :a505 :a505 :a505. :a506 :a506 :a506. :a507 :a507 :a507. :a508 :a508 :a508. :a509 :a509 :a509. :a510 :a510 :a510. :a511 :a511 :a511. :a512 :a512 :a512. :a513 :a513 :a513. :a514 :a514 :a514. :a515 :a515 :a515. :a516 :a516 :a516. :a517 :a517 :a517. :a518 :a518 :a518. :a519 :a519 :a519. :a520 :a520 :a520. :a521 :a521 :a521. :a522 :a522 :a522. :a523 :a523 :a523. :a524 :a524 :a524. :a525 :a525 :a525. :a526 :a526 :a526. :a527 :a527 :a527. :a528 :a528 :a528. :a529 :a529 :a529. :a530 :a530 :a530. :a531 :a531 :a531. :a532 :a532 :a532. :a533 :a533 :a533. :a534 :a534 :a534. :a535 :a535 :a535. :a536 :a536 :a536. :a537 :a537 :a537. :a538 :a538 :a538. :a539 :a539 :a539. :a540 :a540 :a540. :a541 :a541 :a541. :a542 :a542 :a542. :a543 :a543 :a543. :a544 :a544 :a544. :a545 :a545 :a545. :a546 :a546 :a546. :a547 :a547 :a547. :a548 :a548 :a548. :a549 :a549 :a549. :a550 :a550 :a550. :a551 :a551 :a551. :a552 :a552 :a552. :a553 :a553 :a553. :a554 :a554 :a554. :a555 :a555 :a555. :a556 :a556 :a556. :a557 :a557 :a557. :a558 :a558 :a558. :a559 :a559 :a559. :a560 :a560 :a560. :a561 :a561 :a561. :a562 :a562 :a562. :a563 :a563 :a563. :a564 :a564 :a564. :a565 :a565 :a565. :a566 :a566 :a566. :a567 :a567 :a567. :a568 :a568 :a568. :a569 :a569 :a569. :a570 :a570 :a570. :a571 :a571 :a571. :a572 :a572 :a572. :a573 :a573 :a573. :a574 :a574 :a574. :a575 :a575 :a575. :a576 :a576 :a576. :a577 :a577 :a577. :a578 :a578 :a578. :a579 :a579 :a579. :a580 :a580 :a580. :a581 :a581 :a581. :a582 :a582 :a582. :a583 :a583 :a583. :a584 :a584 :a584. :a585 :a585 :a585. :a586 :a586 :a586. :a587 :a587 :a587. :a588 :a588 :a588. :a589 :a589 :a589. :a590 :a590 :a590. :a591 :a591 :a591. :a592 :a592 :a592. :a593 :a593 :a593. :a594 :a594 :a594. :a595 :a595 :a595. :a596 :a596 :a596. :a597 :a597 :a597. :a598 :a598 :a598. :a599 :a599 :a599. :a600 :a600 :a600. :a601 :a601 :a601. :a602 :a602 :a602. :a603 :a603 :a603. :a604 :a604 :a604. :a605 :a605 :a605. :a606 :a606 :a606. :a607 :a607 :a607. :a608 :a608 :a608. :a609 :a609 :a609. :a610 :a610 :a610. :a611 :a611 :a611. :a612 :a612 :a612. :a613 :a613 :a613. :a614 :a614 :a614. :a615 :a615 :a615. :a616 :a616 :a616. :a617 :a617 :a617. :a618 :a618 :a618. :a619 :a619 :a619. :a620 :a620 :a620. :a621 :a621 :a621. :a622 :a622 :a622. :a623 :a623 :a623. :a624 :a624 :a624. :a625 :a625 :a625. :a626 :a626 :a626. :a627 :a627 :a627. :a628 :a628 :a628. :a629 :a629 :a629. :a630 :a630 :a630. :a631 :a631 :a631. :a632 :a632 :a632. :a633 :a633 :a633. :a634 :a634 :a634. :a635 :a635 :a635. :a636 :a636 :a636. :a637 :a637 :a637. :a638 :a638 :a638. :a639 :a639 :a639. :a640 :a640 :a640. :a641 :a641 :a641. :a642 :a642 :a642. :a643 :a643 :a643. :a644 :a644 :a644. :a645 :a645 :a645. :a646 :a646 :a646. :a647 :a647 :a647. :a648 :a648 :a648. :a649 :a649 :a649. :a650 :a650 :a650. :a651 :a651 :a651. :a652 :a652 :a652. :a653 :a653 :a653. :a654 :a654 :a654. :a655 :a655 :a655. :a656 :a656 :a656. :a657 :a657 :a657. :a658 :a658 :a658. :a659 :a659 :a659. :a660 :a660 :a660. :a661 :a661 :a661. :a662 :a662 :a662. :a663 :a663 :a663. :a664 :a664 :a664. :a665 :a665 :a665. :a666 :a666 :a666. :a667 :a667 :a667. :a668 :a668 :a668. :a669 :a669 :a669. :a670 :a670 :a670. :a671 :a671 :a671. :a672 :a672 :a672. :a673 :a673 :a673. :a674 :a674 :a674. :a675 :a675 :a675. :a676 :a676 :a676. :a677 :a677 :a677. :a678 :a678 :a678. :a679 :a679 :a679. :a680 :a680 :a680. :a681 :a681 :a681. :a682 :a682 :a682. :a683 :a683 :a683. :a684 :a684 :a684. :a685 :a685 :a685. :a686 :a686 :a686. :a687 :a687 :a687. :a688 :a688 :a688. :a689 :a689 :a689. :a690 :a690 :a690. :a691 :a691 :a691. :a692 :a692 :a692. :a693 :a693 :a693. :a694 :a694 :a694. :a695 :a695 :a695. :a696 :a696 :a696. :a697 :a697 :a697. :a698 :a698 :a698. :a699 :a699 :a699. :a700 :a700 :a700. :a701 :a701 :a701. :a702 :a702 :a702. :a703 :a703 :a703. :a704 :a704 :a704. :a705 :a705 :a705. :a706 :a706 :a706. :a707 :a707 :a707. :a708 :a708 :a708. :a709 :a709 :a709. :a710 :a710 :a710. :a711 :a711 :a711. :a712 :a712 :a712. :a713 :a713 :a713. :a714 :a714 :a714. :a715 :a715 :a715. :a716 :a716 :a716. :a717 :a717 :a717. :a718 :a718 :a718. :a719 :a719 :a719. :a720 :a720 :a720. :a721 :a721 :a721. :a722 :a722 :a722. :a723 :a723 :a723. :a724 :a724 :a724. :a725 :a725 :a725. :a726 :a726 :a726. :a727 :a727 :a727. :a728 :a728 :a728. :a729 :a729 :a729. :a730 :a730 :a730. :a731 :a731 :a731. :a732 :a732 :a732. :a733 :a733 :a733. :a734 :a734 :a734. :a735 :a735 :a735. :a736 :a736 :a736. :a737 :a737 :a737. :a738 :a738 :a738. :a739 :a739 :a739. :a740 :a740 :a740. :a741 :a741 :a741. :a742 :a742 :a742. :a743 :a743 :a743. :a744 :a744 :a744. :a745 :a745 :a745. :a746 :a746 :a746. :a747 :a747 :a747. :a748 :a748 :a748. :a749 :a749 :a749. :a750 :a750 :a750. :a751 :a751 :a751. :a752 :a752 :a752. :a753 :a753 :a753. :a754 :a754 :a754. :a755 :a755 :a755. :a756 :a756 :a756. :a757 :a757 :a757. :a758 :a758 :a758. :a759 :a759 :a759. :a760 :a760 :a760. :a761 :a761 :a761. :a762 :a762 :a762. :a763 :a763 :a763. :a764 :a764 :a764. :a765 :a765 :a765. :a766 :a766 :a766. :a767 :a767 :a767. :a768 :a768 :a768. :a769 :a769 :a769. :a770 :a770 :a770. :a771 :a771 :a771. :a772 :a772 :a772. :a773 :a773 :a773. :a774 :a774 :a774. :a775 :a775 :a775. :a776 :a776 :a776. :a777 :a777 :a777. :a778 :a778 :a778. :a779 :a779 :a779. :a780 :a780 :a780. :a781 :a781 :a781. :a782 :a782 :a782. :a783 :a783 :a783. :a784 :a784 :a784. :a785 :a785 :a785. :a786 :a786 :a786. :a787 :a787 :a787. :a788 :a788 :a788. :a789 :a789 :a789. :a790 :a790 :a790. :a791 :a791 :a791. :a792 :a792 :a792. :a793 :a793 :a793. :a794 :a794 :a794. :a795 :a795 :a795. :a796 :a796 :a796. :a797 :a797 :a797. :a798 :a798 :a798. :a799 :a799 :a799. :a800 :a800 :a800. :a801 :a801 :a801. :a802 :a802 :a802. :a803 :a803 :a803. :a804 :a804 :a804. :a805 :a805 :a805. :a806 :a806 :a806. :a807 :a807 :a807. :a808 :a808 :a808. :a809 :a809 :a809. :a810 :a810 :a810. :a811 :a811 :a811. :a812 :a812 :a812. :a813 :a813 :a813. :a814 :a814 :a814. :a815 :a815 :a815. :a816 :a816 :a816. :a817 :a817 :a817. :a818 :a818 :a818. :a819 :a819 :a819. :a820 :a820 :a820. :a821 :a821 :a821. :a822 :a822 :a822. :a823 :a823 :a823. :a824 :a824 :a824. :a825 :a825 :a825. :a826 :a826 :a826. :a827 :a827 :a827. :a828 :a828 :a828. :a829 :a829 :a829. :a830 :a830 :a830. :a831 :a831 :a831. :a832 :a832 :a832. :a833 :a833 :a833. :a834 :a834 :a834. :a835 :a835 :a835. :a836 :a836 :a836. :a837 :a837 :a837. :a838 :a838 :a838. :a839 :a839 :a839. :a840 :a840 :a840. :a841 :a841 :a841. :a842 :a842 :a842. :a843 :a843 :a843. :a844 :a844 :a844. :a845 :a845 :a845. :a846 :a846 :a846. :a847 :a847 :a847. :a848 :a848 :a848. :a849 :a849 :a849. :a850 :a850 :a850. :a851 :a851 :a851. :a852 :a852 :a852. :a853 :a853 :a853. :a854 :a854 :a854. :a855 :a855 :a855. :a856 :a856 :a856. :a857 :a857 :a857. :a858 :a858 :a858. :a859 :a859 :a859. :a860 :a860 :a860. :a861 :a861 :a861. :a862 :a862 :a862. :a863 :a863 :a863. :a864 :a864 :a864. :a865 :a865 :a865. :a866 :a866 :a866. :a867 :a867 :a867. :a868 :a868 :a868. :a869 :a869 :a869. :a870 :a870 :a870. :a871 :a871 :a871. :a872 :a872 :a872. :a873 :a873 :a873. :a874 :a874 :a874. :a875 :a875 :a875. :a876 :a876 :a876. :a877 :a877 :a877. :a878 :a878 :a878. :a879 :a879 :a879. :a880 :a880 :a880. :a881 :a881 :a881. :a882 :a882 :a882. :a883 :a883 :a883. :a884 :a884 :a884. :a885 :a885 :a885. :a886 :a886 :a886. :a887 :a887 :a887. :a888 :a888 :a888. :a889 :a889 :a889. :a890 :a890 :a890. :a891 :a891 :a891. :a892 :a892 :a892. :a893 :a893 :a893. :a894 :a894 :a894. :a895 :a895 :a895. :a896 :a896 :a896. :a897 :a897 :a897. :a898 :a898 :a898. :a899 :a899 :a899. :a900 :a900 :a900. :a901 :a901 :a901. :a902 :a902 :a902. :a903 :a903 :a903. :a904 :a904 :a904. :a905 :a905 :a905. :a906 :a906 :a906. :a907 :a907 :a907. :a908 :a908 :a908. :a909 :a909 :a909. :a910 :a910 :a910. :a911 :a911 :a911. :a912 :a912 :a912. :a913 :a913 :a913. :a914 :a914 :a914. :a915 :a915 :a915. :a916 :a916 :a916. :a917 :a917 :a917. :a918 :a918 :a918. :a919 :a919 :a919. :a920 :a920 :a920. :a921 :a921 :a921. :a922 :a922 :a922. :a923 :a923 :a923. :a924 :a924 :a924. :a925 :a925 :a925. :a926 :a926 :a926. :a927 :a927 :a927. :a928 :a928 :a928. :a929 :a929 :a929. :a930 :a930 :a930. :a931 :a931 :a931. :a932 :a932 :a932. :a933 :a933 :a933. :a934 :a934 :a934. :a935 :a935 :a935. :a936 :a936 :a936. :a937 :a937 :a937. :a938 :a938 :a938. :a939 :a939 :a939. :a940 :a940 :a940. :a941 :a941 :a941. :a942 :a942 :a942. :a943 :a943 :a943. :a944 :a944 :a944. :a945 :a945 :a945. :a946 :a946 :a946. :a947 :a947 :a947. :a948 :a948 :a948. :a949 :a949 :a949. :a950 :a950 :a950. :a951 :a951 :a951. :a952 :a952 :a952. :a953 :a953 :a953. :a954 :a954 :a954. :a955 :a955 :a955. :a956 :a956 :a956. :a957 :a957 :a957. :a958 :a958 :a958. :a959 :a959 :a959. :a960 :a960 :a960. :a961 :a961 :a961. :a962 :a962 :a962. :a963 :a963 :a963. :a964 :a964 :a964. :a965 :a965 :a965. :a966 :a966 :a966. :a967 :a967 :a967. :a968 :a968 :a968. :a969 :a969 :a969. :a970 :a970 :a970. :a971 :a971 :a971. :a972 :a972 :a972. :a973 :a973 :a973. :a974 :a974 :a974. :a975 :a975 :a975. :a976 :a976 :a976. :a977 :a977 :a977. :a978 :a978 :a978. :a979 :a979 :a979. :a980 :a980 :a980. :a981 :a981 :a981. :a982 :a982 :a982. :a983 :a983 :a983. :a984 :a984 :a984. :a985 :a985 :a985. :a986 :a986 :a986. :a987 :a987 :a987. :a988 :a988 :a988. :a989 :a989 :a989. :a990 :a990 :a990. :a991 :a991 :a991. :a992 :a992 :a992. :a993 :a993 :a993. :a994 :a994 :a994. :a995 :a995 :a995. :a996 :a996 :a996. :a997 :a997 :a997. :a998 :a998 :a998. :a999 :a999 :a999. :a1000 :a1000 :a1000. :a1001 :a1001 :a1001. :a1002 :a1002 :a1002. :a1003 :a1003 :a1003. :a1004 :a1004 :a1004. :a1005 :a1005 :a1005. :a1006 :a1006 :a1006. :a1007 :a1007 :a1007. :a1008 :a1008 :a1008. :a1009 :a1009 :a1009. :a1010 :a1010 :a1010. :a1011 :a1011 :a1011. :a1012 :a1012 :a1012. :a1013 :a1013 :a1013. :a1014 :a1014 :a1014. :a1015 :a1015 :a1015. :a1016 :a1016 :a1016. :a1017 :a1017 :a1017. :a1018 :a1018 :a1018. :a1019 :a1019 :a1019. :a1020 :a1020 :a1020. :a1021 :a1021 :a1021. :a1022 :a1022 :a1022. :a1023 :a1023 :a1023. :a1024 :a1024 :a1024. :a1025 :a1025 :a1025. :a1026 :a1026 :a1026. :a1027 :a1027 :a1027. :a1028 :a1028 :a1028. :a1029 :a1029 :a1029. :a1030 :a1030 :a1030. :a1031 :a1031 :a1031. :a1032 :a1032 :a1032. :a1033 :a1033 :a1033. :a1034 :a1034 :a1034. :a1035 :a1035 :a1035. :a1036 :a1036 :a1036. :a1037 :a1037 :a1037. :a1038 :a1038 :a1038. :a1039 :a1039 :a1039. :a1040 :a1040 :a1040. :a1041 :a1041 :a1041. :a1042 :a1042 :a1042. :a1043 :a1043 :a1043. :a1044 :a1044 :a1044. :a1045 :a1045 :a1045. :a1046 :a1046 :a1046. :a1047 :a1047 :a1047. :a1048 :a1048 :a1048. :a1049 :a1049 :a1049. :a1050 :a1050 :a1050. :a1051 :a1051 :a1051. :a1052 :a1052 :a1052. :a1053 :a1053 :a1053. :a1054 :a1054 :a1054. :a1055 :a1055 :a1055. :a1056 :a1056 :a1056. :a1057 :a1057 :a1057. :a1058 :a1058 :a1058. :a1059 :a1059 :a1059. :a1060 :a1060 :a1060. :a1061 :a1061 :a1061. :a1062 :a1062 :a1062. :a1063 :a1063 :a1063. :a1064 :a1064 :a1064. :a1065 :a1065 :a1065. :a1066 :a1066 :a1066. :a1067 :a1067 :a1067. :a1068 :a1068 :a1068. :a1069 :a1069 :a1069. :a1070 :a1070 :a1070. :a1071 :a1071 :a1071. :a1072 :a1072 :a1072. :a1073 :a1073 :a1073. :a1074 :a1074 :a1074. :a1075 :a1075 :a1075. :a1076 :a1076 :a1076. :a1077 :a1077 :a1077. :a1078 :a1078 :a1078. :a1079 :a1079 :a1079. :a1080 :a1080 :a1080. :a1081 :a1081 :a1081. :a1082 :a1082 :a1082. :a1083 :a1083 :a1083. :a1084 :a1084 :a1084. :a1085 :a1085 :a1085. :a1086 :a1086 :a1086. :a1087 :a1087 :a1087. :a1088 :a1088 :a1088. :a1089 :a1089 :a1089. :a1090 :a1090 :a1090. :a1091 :a1091 :a1091. :a1092 :a1092 :a1092. :a1093 :a1093 :a1093. :a1094 :a1094 :a1094. :a1095 :a1095 :a1095. :a1096 :a1096 :a1096. :a1097 :a1097 :a1097. :a1098 :a1098 :a1098. :a1099 :a1099 :a1099. :a1100 :a1100 :a1100. :a1101 :a1101 :a1101. :a1102 :a1102 :a1102. :a1103 :a1103 :a1103. :a1104 :a1104 :a1104. :a1105 :a1105 :a1105. :a1106 :a1106 :a1106. :a1107 :a1107 :a1107. :a1108 :a1108 :a1108. :a1109 :a1109 :a1109. :a1110 :a1110 :a1110. :a1111 :a1111 :a1111. :a1112 :a1112 :a1112. :a1113 :a1113 :a1113. :a1114 :a1114 :a1114. :a1115 :a1115 :a1115. :a1116 :a1116 :a1116. :a1117 :a1117 :a1117. :a1118 :a1118 :a1118. :a1119 :a1119 :a1119. :a1120 :a1120 :a1120. :a1121 :a1121 :a1121. :a1122 :a1122 :a1122. :a1123 :a1123 :a1123. :a1124 :a1124 :a1124. :a1125 :a1125 :a1125. :a1126 :a1126 :a1126. :a1127 :a1127 :a1127. :a1128 :a1128 :a1128. :a1129 :a1129 :a1129. :a1130 :a1130 :a1130. :a1131 :a1131 :a1131. :a1132 :a1132 :a1132. :a1133 :a1133 :a1133. :a1134 :a1134 :a1134. :a1135 :a1135 :a1135. :a1136 :a1136 :a1136. :a1137 :a1137 :a1137. :a1138 :a1138 :a1138. :a1139 :a1139 :a1139. :a1140 :a1140 :a1140. :a1141 :a1141 :a1141. :a1142 :a1142 :a1142. :a1143 :a1143 :a1143. :a1144 :a1144 :a1144. :a1145 :a1145 :a1145. :a1146 :a1146 :a1146. :a1147 :a1147 :a1147. :a1148 :a1148 :a1148. :a1149 :a1149 :a1149. :a1150 :a1150 :a1150. :a1151 :a1151 :a1151. :a1152 :a1152 :a1152. :a1153 :a1153 :a1153. :a1154 :a1154 :a1154. :a1155 :a1155 :a1155. :a1156 :a1156 :a1156. :a1157 :a1157 :a1157. :a1158 :a1158 :a1158. :a1159 :a1159 :a1159. :a1160 :a1160 :a1160. :a1161 :a1161 :a1161. :a1162 :a1162 :a1162. :a1163 :a1163 :a1163. :a1164 :a1164 :a1164. :a1165 :a1165 :a1165. :a1166 :a1166 :a1166. :a1167 :a1167 :a1167. :a1168 :a1168 :a1168. :a1169 :a1169 :a1169. :a1170 :a1170 :a1170. :a1171 :a1171 :a1171. :a1172 :a1172 :a1172. :a1173 :a1173 :a1173. :a1174 :a1174 :a1174. :a1175 :a1175 :a1175. :a1176 :a1176 :a1176. :a1177 :a1177 :a1177. :a1178 :a1178 :a1178. :a1179 :a1179 :a1179. :a1180 :a1180 :a1180. :a1181 :a1181 :a1181. :a1182 :a1182 :a1182. :a1183 :a1183 :a1183. :a1184 :a1184 :a1184. :a1185 :a1185 :a1185. :a1186 :a1186 :a1186. :a1187 :a1187 :a1187. :a1188 :a1188 :a1188. :a1189 :a1189 :a1189. :a1190 :a1190 :a1190. :a1191 :a1191 :a1191. :a1192 :a1192 :a1192. :a1193 :a1193 :a1193. :a1194 :a1194 :a1194. :a1195 :a1195 :a1195. :a1196 :a1196 :a1196. :a1197 :a1197 :a1197. :a1198 :a1198 :a1198. :a1199 :a1199 :a1199. :a1200 :a1200 :a1200. :a1201 :a1201 :a1201. :a1202 :a1202 :a1202. :a1203 :a1203 :a1203. :a1204 :a1204 :a1204. :a1205 :a1205 :a1205. :a1206 :a1206 :a1206. :a1207 :a1207 :a1207. :a1208 :a1208 :a1208. :a1209 :a1209 :a1209. :a1210 :a1210 :a1210. :a1211 :a1211 :a1211. :a1212 :a1212 :a1212. :a1213 :a1213 :a1213. :a1214 :a1214 :a1214. :a1215 :a1215 :a1215. :a1216 :a1216 :a1216. :a1217 :a1217 :a1217. :a1218 :a1218 :a1218. :a1219 :a1219 :a1219. :a1220 :a1220 :a1220. :a1221 :a1221 :a1221. :a1222 :a1222 :a1222. :a1223 :a1223 :a1223. :a1224 :a1224 :a1224. :a1225 :a1225 :a1225. :a1226 :a1226 :a1226. :a1227 :a1227 :a1227. :a1228 :a1228 :a1228. :a1229 :a1229 :a1229. :a1230 :a1230 :a1230. :a1231 :a1231 :a1231. :a1232 :a1232 :a1232. :a1233 :a1233 :a1233. :a1234 :a1234 :a1234. :a1235 :a1235 :a1235. :a1236 :a1236 :a1236. :a1237 :a1237 :a1237. :a1238 :a1238 :a1238. :a1239 :a1239 :a1239. :a1240 :a1240 :a1240. :a1241 :a1241 :a1241. :a1242 :a1242 :a1242. :a1243 :a1243 :a1243. :a1244 :a1244 :a1244. :a1245 :a1245 :a1245. :a1246 :a1246 :a1246. :a1247 :a1247 :a1247. :a1248 :a1248 :a1248. :a1249 :a1249 :a1249. :a1250 :a1250 :a1250. :a1251 :a1251 :a1251. :a1252 :a1252 :a1252. :a1253 :a1253 :a1253. :a1254 :a1254 :a1254. :a1255 :a1255 :a1255. :a1256 :a1256 :a1256. :a1257 :a1257 :a1257. :a1258 :a1258 :a1258. :a1259 :a1259 :a1259. :a1260 :a1260 :a1260. :a1261 :a1261 :a1261. :a1262 :a1262 :a1262. :a1263 :a1263 :a1263. :a1264 :a1264 :a1264. :a1265 :a1265 :a1265. :a1266 :a1266 :a1266. :a1267 :a1267 :a1267. :a1268 :a1268 :a1268. :a1269 :a1269 :a1269. :a1270 :a1270 :a1270. :a1271 :a1271 :a1271. :a1272 :a1272 :a1272. :a1273 :a1273 :a1273. :a1274 :a1274 :a1274. :a1275 :a1275 :a1275. :a1276 :a1276 :a1276. :a1277 :a1277 :a1277. :a1278 :a1278 :a1278. :a1279 :a1279 :a1279. :a1280 :a1280 :a1280. :a1281 :a1281 :a1281. :a1282 :a1282 :a1282. :a1283 :a1283 :a1283. :a1284 :a1284 :a1284. :a1285 :a1285 :a1285. :a1286 :a1286 :a1286. :a1287 :a1287 :a1287. :a1288 :a1288 :a1288. :a1289 :a1289 :a1289. :a1290 :a1290 :a1290. :a1291 :a1291 :a1291. :a1292 :a1292 :a1292. :a1293 :a1293 :a1293. :a1294 :a1294 :a1294. :a1295 :a1295 :a1295. :a1296 :a1296 :a1296. :a1297 :a1297 :a1297. :a1298 :a1298 :a1298. :a1299 :a1299 :a1299. :a1300 :a1300 :a1300. :a1301 :a1301 :a1301. :a1302 :a1302 :a1302. :a1303 :a1303 :a1303. :a1304 :a1304 :a1304. :a1305 :a1305 :a1305. :a1306 :a1306 :a1306. :a1307 :a1307 :a1307. :a1308 :a1308 :a1308. :a1309 :a1309 :a1309. :a1310 :a1310 :a1310. :a1311 :a1311 :a1311. :a1312 :a1312 :a1312. :a1313 :a1313 :a1313. :a1314 :a1314 :a1314. :a1315 :a1315 :a1315. :a1316 :a1316 :a1316. :a1317 :a1317 :a1317. :a1318 :a1318 :a1318. :a1319 :a1319 :a1319. :a1320 :a1320 :a1320. :a1321 :a1321 :a1321. :a1322 :a1322 :a1322. :a1323 :a1323 :a1323. :a1324 :a1324 :a1324. :a1325 :a1325 :a1325. :a1326 :a1326 :a1326. :a1327 :a1327 :a1327. :a1328 :a1328 :a1328. :a1329 :a1329 :a1329. :a1330 :a1330 :a1330. :a1331 :a1331 :a1331. :a1332 :a1332 :a1332. :a1333 :a1333 :a1333. :a1334 :a1334 :a1334. :a1335 :a1335 :a1335. :a1336 :a1336 :a1336. :a1337 :a1337 :a1337. :a1338 :a1338 :a1338. :a1339 :a1339 :a1339. :a1340 :a1340 :a1340. :a1341 :a1341 :a1341. :a1342 :a1342 :a1342. :a1343 :a1343 :a1343. :a1344 :a1344 :a1344. :a1345 :a1345 :a1345. :a1346 :a1346 :a1346. :a1347 :a1347 :a1347. :a1348 :a1348 :a1348. :a1349 :a1349 :a1349. :a1350 :a1350 :a1350. :a1351 :a1351 :a1351. :a1352 :a1352 :a1352. :a1353 :a1353 :a1353. :a1354 :a1354 :a1354. :a1355 :a1355 :a1355. :a1356 :a1356 :a1356. :a1357 :a1357 :a1357. :a1358 :a1358 :a1358. :a1359 :a1359 :a1359. :a1360 :a1360 :a1360. :a1361 :a1361 :a1361. :a1362 :a1362 :a1362. :a1363 :a1363 :a1363. :a1364 :a1364 :a1364. :a1365 :a1365 :a1365. :a1366 :a1366 :a1366. :a1367 :a1367 :a1367. :a1368 :a1368 :a1368. :a1369 :a1369 :a1369. :a1370 :a1370 :a1370. :a1371 :a1371 :a1371. :a1372 :a1372 :a1372. :a1373 :a1373 :a1373. :a1374 :a1374 :a1374. :a1375 :a1375 :a1375. :a1376 :a1376 :a1376. :a1377 :a1377 :a1377. :a1378 :a1378 :a1378. :a1379 :a1379 :a1379. :a1380 :a1380 :a1380. :a1381 :a1381 :a1381. :a1382 :a1382 :a1382. :a1383 :a1383 :a1383. :a1384 :a1384 :a1384. :a1385 :a1385 :a1385. :a1386 :a1386 :a1386. :a1387 :a1387 :a1387. :a1388 :a1388 :a1388. :a1389 :a1389 :a1389. :a1390 :a1390 :a1390. :a1391 :a1391 :a1391. :a1392 :a1392 :a1392. :a1393 :a1393 :a1393. :a1394 :a1394 :a1394. :a1395 :a1395 :a1395. :a1396 :a1396 :a1396. :a1397 :a1397 :a1397. :a1398 :a1398 :a1398. :a1399 :a1399 :a1399. :a1400 :a1400 :a1400. :a1401 :a1401 :a1401. :a1402 :a1402 :a1402. :a1403 :a1403 :a1403. :a1404 :a1404 :a1404. :a1405 :a1405 :a1405. :a1406 :a1406 :a1406. :a1407 :a1407 :a1407. :a1408 :a1408 :a1408. :a1409 :a1409 :a1409. :a1410 :a1410 :a1410. :a1411 :a1411 :a1411. :a1412 :a1412 :a1412. :a1413 :a1413 :a1413. :a1414 :a1414 :a1414. :a1415 :a1415 :a1415. :a1416 :a1416 :a1416. :a1417 :a1417 :a1417. :a1418 :a1418 :a1418. :a1419 :a1419 :a1419. :a1420 :a1420 :a1420. :a1421 :a1421 :a1421. :a1422 :a1422 :a1422. :a1423 :a1423 :a1423. :a1424 :a1424 :a1424. :a1425 :a1425 :a1425. :a1426 :a1426 :a1426. :a1427 :a1427 :a1427. :a1428 :a1428 :a1428. :a1429 :a1429 :a1429. :a1430 :a1430 :a1430. :a1431 :a1431 :a1431. :a1432 :a1432 :a1432. :a1433 :a1433 :a1433. :a1434 :a1434 :a1434. :a1435 :a1435 :a1435. :a1436 :a1436 :a1436. :a1437 :a1437 :a1437. :a1438 :a1438 :a1438. :a1439 :a1439 :a1439. :a1440 :a1440 :a1440. :a1441 :a1441 :a1441. :a1442 :a1442 :a1442. :a1443 :a1443 :a1443. :a1444 :a1444 :a1444. :a1445 :a1445 :a1445. :a1446 :a1446 :a1446. :a1447 :a1447 :a1447. :a1448 :a1448 :a1448. :a1449 :a1449 :a1449. :a1450 :a1450 :a1450. :a1451 :a1451 :a1451. :a1452 :a1452 :a1452. :a1453 :a1453 :a1453. :a1454 :a1454 :a1454. :a1455 :a1455 :a1455. :a1456 :a1456 :a1456. :a1457 :a1457 :a1457. :a1458 :a1458 :a1458. :a1459 :a1459 :a1459. :a1460 :a1460 :a1460. :a1461 :a1461 :a1461. :a1462 :a1462 :a1462. :a1463 :a1463 :a1463. :a1464 :a1464 :a1464. :a1465 :a1465 :a1465. :a1466 :a1466 :a1466. :a1467 :a1467 :a1467. :a1468 :a1468 :a1468. :a1469 :a1469 :a1469. :a1470 :a1470 :a1470. :a1471 :a1471 :a1471. :a1472 :a1472 :a1472. :a1473 :a1473 :a1473. :a1474 :a1474 :a1474. :a1475 :a1475 :a1475. :a1476 :a1476 :a1476. :a1477 :a1477 :a1477. :a1478 :a1478 :a1478. :a1479 :a1479 :a1479. :a1480 :a1480 :a1480. :a1481 :a1481 :a1481. :a1482 :a1482 :a1482. :a1483 :a1483 :a1483. :a1484 :a1484 :a1484. :a1485 :a1485 :a1485. :a1486 :a1486 :a1486. :a1487 :a1487 :a1487. :a1488 :a1488 :a1488. :a1489 :a1489 :a1489. :a1490 :a1490 :a1490. :a1491 :a1491 :a1491. :a1492 :a1492 :a1492. :a1493 :a1493 :a1493. :a1494 :a1494 :a1494. :a1495 :a1495 :a1495. :a1496 :a1496 :a1496. :a1497 :a1497 :a1497. :a1498 :a1498 :a1498. :a1499 :a1499 :a1499. :a1500 :a1500 :a1500. :a1501 :a1501 :a1501. :a1502 :a1502 :a1502. :a1503 :a1503 :a1503. :a1504 :a1504 :a1504. :a1505 :a1505 :a1505. :a1506 :a1506 :a1506. :a1507 :a1507 :a1507. :a1508 :a1508 :a1508. :a1509 :a1509 :a1509. :a1510 :a1510 :a1510. :a1511 :a1511 :a1511. :a1512 :a1512 :a1512. :a1513 :a1513 :a1513. :a1514 :a1514 :a1514. :a1515 :a1515 :a1515. :a1516 :a1516 :a1516. :a1517 :a1517 :a1517. :a1518 :a1518 :a1518. :a1519 :a1519 :a1519. :a1520 :a1520 :a1520. :a1521 :a1521 :a1521. :a1522 :a1522 :a1522. :a1523 :a1523 :a1523. :a1524 :a1524 :a1524. :a1525 :a1525 :a1525. :a1526 :a1526 :a1526. :a1527 :a1527 :a1527. :a1528 :a1528 :a1528. :a1529 :a1529 :a1529. :a1530 :a1530 :a1530. :a1531 :a1531 :a1531. :a1532 :a1532 :a1532. :a1533 :a1533 :a1533. :a1534 :a1534 :a1534. :a1535 :a1535 :a1535. :a1536 :a1536 :a1536. :a1537 :a1537 :a1537. :a1538 :a1538 :a1538. :a1539 :a1539 :a1539. :a1540 :a1540 :a1540. :a1541 :a1541 :a1541. :a1542 :a1542 :a1542. :a1543 :a1543 :a1543. :a1544 :a1544 :a1544. :a1545 :a1545 :a1545. :a1546 :a1546 :a1546. :a1547 :a1547 :a1547. :a1548 :a1548 :a1548. :a1549 :a1549 :a1549. :a1550 :a1550 :a1550. :a1551 :a1551 :a1551. :a1552 :a1552 :a1552. :a1553 :a1553 :a1553. :a1554 :a1554 :a1554. :a1555 :a1555 :a1555. :a1556 :a1556 :a1556. :a1557 :a1557 :a1557. :a1558 :a1558 :a1558. :a1559 :a1559 :a1559. :a1560 :a1560 :a1560. :a1561 :a1561 :a1561. :a1562 :a1562 :a1562. :a1563 :a1563 :a1563. :a1564 :a1564 :a1564. :a1565 :a1565 :a1565. :a1566 :a1566 :a1566. :a1567 :a1567 :a1567. :a1568 :a1568 :a1568. :a1569 :a1569 :a1569. :a1570 :a1570 :a1570. :a1571 :a1571 :a1571. :a1572 :a1572 :a1572. :a1573 :a1573 :a1573. :a1574 :a1574 :a1574. :a1575 :a1575 :a1575. :a1576 :a1576 :a1576. :a1577 :a1577 :a1577. :a1578 :a1578 :a1578. :a1579 :a1579 :a1579. :a1580 :a1580 :a1580. :a1581 :a1581 :a1581. :a1582 :a1582 :a1582. :a1583 :a1583 :a1583. :a1584 :a1584 :a1584. :a1585 :a1585 :a1585. :a1586 :a1586 :a1586. :a1587 :a1587 :a1587. :a1588 :a1588 :a1588. :a1589 :a1589 :a1589. :a1590 :a1590 :a1590. :a1591 :a1591 :a1591. :a1592 :a1592 :a1592. :a1593 :a1593 :a1593. :a1594 :a1594 :a1594. :a1595 :a1595 :a1595. :a1596 :a1596 :a1596. :a1597 :a1597 :a1597. :a1598 :a1598 :a1598. :a1599 :a1599 :a1599. :a1600 :a1600 :a1600. :a1601 :a1601 :a1601. :a1602 :a1602 :a1602. :a1603 :a1603 :a1603. :a1604 :a1604 :a1604. :a1605 :a1605 :a1605. :a1606 :a1606 :a1606. :a1607 :a1607 :a1607. :a1608 :a1608 :a1608. :a1609 :a1609 :a1609. :a1610 :a1610 :a1610. :a1611 :a1611 :a1611. :a1612 :a1612 :a1612. :a1613 :a1613 :a1613. :a1614 :a1614 :a1614. :a1615 :a1615 :a1615. :a1616 :a1616 :a1616. :a1617 :a1617 :a1617. :a1618 :a1618 :a1618. :a1619 :a1619 :a1619. :a1620 :a1620 :a1620. :a1621 :a1621 :a1621. :a1622 :a1622 :a1622. :a1623 :a1623 :a1623. :a1624 :a1624 :a1624. :a1625 :a1625 :a1625. :a1626 :a1626 :a1626. :a1627 :a1627 :a1627. :a1628 :a1628 :a1628. :a1629 :a1629 :a1629. :a1630 :a1630 :a1630. :a1631 :a1631 :a1631. :a1632 :a1632 :a1632. :a1633 :a1633 :a1633. :a1634 :a1634 :a1634. :a1635 :a1635 :a1635. :a1636 :a1636 :a1636. :a1637 :a1637 :a1637. :a1638 :a1638 :a1638. :a1639 :a1639 :a1639. :a1640 :a1640 :a1640. :a1641 :a1641 :a1641. :a1642 :a1642 :a1642. :a1643 :a1643 :a1643. :a1644 :a1644 :a1644. :a1645 :a1645 :a1645. :a1646 :a1646 :a1646. :a1647 :a1647 :a1647. :a1648 :a1648 :a1648. :a1649 :a1649 :a1649. :a1650 :a1650 :a1650. :a1651 :a1651 :a1651. :a1652 :a1652 :a1652. :a1653 :a1653 :a1653. :a1654 :a1654 :a1654. :a1655 :a1655 :a1655. :a1656 :a1656 :a1656. :a1657 :a1657 :a1657. :a1658 :a1658 :a1658. :a1659 :a1659 :a1659. :a1660 :a1660 :a1660. :a1661 :a1661 :a1661. :a1662 :a1662 :a1662. :a1663 :a1663 :a1663. :a1664 :a1664 :a1664. :a1665 :a1665 :a1665. :a1666 :a1666 :a1666. :a1667 :a1667 :a1667. :a1668 :a1668 :a1668. :a1669 :a1669 :a1669. :a1670 :a1670 :a1670. :a1671 :a1671 :a1671. :a1672 :a1672 :a1672. :a1673 :a1673 :a1673. :a1674 :a1674 :a1674. :a1675 :a1675 :a1675. :a1676 :a1676 :a1676. :a1677 :a1677 :a1677. :a1678 :a1678 :a1678. :a1679 :a1679 :a1679. :a1680 :a1680 :a1680. :a1681 :a1681 :a1681. :a1682 :a1682 :a1682. :a1683 :a1683 :a1683. :a1684 :a1684 :a1684. :a1685 :a1685 :a1685. :a1686 :a1686 :a1686. :a1687 :a1687 :a1687. :a1688 :a1688 :a1688. :a1689 :a1689 :a1689. :a1690 :a1690 :a1690. :a1691 :a1691 :a1691. :a1692 :a1692 :a1692. :a1693 :a1693 :a1693. :a1694 :a1694 :a1694. :a1695 :a1695 :a1695. :a1696 :a1696 :a1696. :a1697 :a1697 :a1697. :a1698 :a1698 :a1698. :a1699 :a1699 :a1699. :a1700 :a1700 :a1700. :a1701 :a1701 :a1701. :a1702 :a1702 :a1702. :a1703 :a1703 :a1703. :a1704 :a1704 :a1704. :a1705 :a1705 :a1705. :a1706 :a1706 :a1706. :a1707 :a1707 :a1707. :a1708 :a1708 :a1708. :a1709 :a1709 :a1709. :a1710 :a1710 :a1710. :a1711 :a1711 :a1711. :a1712 :a1712 :a1712. :a1713 :a1713 :a1713. :a1714 :a1714 :a1714. :a1715 :a1715 :a1715. :a1716 :a1716 :a1716. :a1717 :a1717 :a1717. :a1718 :a1718 :a1718. :a1719 :a1719 :a1719. :a1720 :a1720 :a1720. :a1721 :a1721 :a1721. :a1722 :a1722 :a1722. :a1723 :a1723 :a1723. :a1724 :a1724 :a1724. :a1725 :a1725 :a1725. :a1726 :a1726 :a1726. :a1727 :a1727 :a1727. :a1728 :a1728 :a1728. :a1729 :a1729 :a1729. :a1730 :a1730 :a1730. :a1731 :a1731 :a1731. :a1732 :a1732 :a1732. :a1733 :a1733 :a1733. :a1734 :a1734 :a1734. :a1735 :a1735 :a1735. :a1736 :a1736 :a1736. :a1737 :a1737 :a1737. :a1738 :a1738 :a1738. :a1739 :a1739 :a1739. :a1740 :a1740 :a1740. :a1741 :a1741 :a1741. :a1742 :a1742 :a1742. :a1743 :a1743 :a1743. :a1744 :a1744 :a1744. :a1745 :a1745 :a1745. :a1746 :a1746 :a1746. :a1747 :a1747 :a1747. :a1748 :a1748 :a1748. :a1749 :a1749 :a1749. :a1750 :a1750 :a1750. :a1751 :a1751 :a1751. :a1752 :a1752 :a1752. :a1753 :a1753 :a1753. :a1754 :a1754 :a1754. :a1755 :a1755 :a1755. :a1756 :a1756 :a1756. :a1757 :a1757 :a1757. :a1758 :a1758 :a1758. :a1759 :a1759 :a1759. :a1760 :a1760 :a1760. :a1761 :a1761 :a1761. :a1762 :a1762 :a1762. :a1763 :a1763 :a1763. :a1764 :a1764 :a1764. :a1765 :a1765 :a1765. :a1766 :a1766 :a1766. :a1767 :a1767 :a1767. :a1768 :a1768 :a1768. :a1769 :a1769 :a1769. :a1770 :a1770 :a1770. :a1771 :a1771 :a1771. :a1772 :a1772 :a1772. :a1773 :a1773 :a1773. :a1774 :a1774 :a1774. :a1775 :a1775 :a1775. :a1776 :a1776 :a1776. :a1777 :a1777 :a1777. :a1778 :a1778 :a1778. :a1779 :a1779 :a1779. :a1780 :a1780 :a1780. :a1781 :a1781 :a1781. :a1782 :a1782 :a1782. :a1783 :a1783 :a1783. :a1784 :a1784 :a1784. :a1785 :a1785 :a1785. :a1786 :a1786 :a1786. :a1787 :a1787 :a1787. :a1788 :a1788 :a1788. :a1789 :a1789 :a1789. :a1790 :a1790 :a1790. :a1791 :a1791 :a1791. :a1792 :a1792 :a1792. :a1793 :a1793 :a1793. :a1794 :a1794 :a1794. :a1795 :a1795 :a1795. :a1796 :a1796 :a1796. :a1797 :a1797 :a1797. :a1798 :a1798 :a1798. :a1799 :a1799 :a1799. :a1800 :a1800 :a1800. :a1801 :a1801 :a1801. :a1802 :a1802 :a1802. :a1803 :a1803 :a1803. :a1804 :a1804 :a1804. :a1805 :a1805 :a1805. :a1806 :a1806 :a1806. :a1807 :a1807 :a1807. :a1808 :a1808 :a1808. :a1809 :a1809 :a1809. :a1810 :a1810 :a1810. :a1811 :a1811 :a1811. :a1812 :a1812 :a1812. :a1813 :a1813 :a1813. :a1814 :a1814 :a1814. :a1815 :a1815 :a1815. :a1816 :a1816 :a1816. :a1817 :a1817 :a1817. :a1818 :a1818 :a1818. :a1819 :a1819 :a1819. :a1820 :a1820 :a1820. :a1821 :a1821 :a1821. :a1822 :a1822 :a1822. :a1823 :a1823 :a1823. :a1824 :a1824 :a1824. :a1825 :a1825 :a1825. :a1826 :a1826 :a1826. :a1827 :a1827 :a1827. :a1828 :a1828 :a1828. :a1829 :a1829 :a1829. :a1830 :a1830 :a1830. :a1831 :a1831 :a1831. :a1832 :a1832 :a1832. :a1833 :a1833 :a1833. :a1834 :a1834 :a1834. :a1835 :a1835 :a1835. :a1836 :a1836 :a1836. :a1837 :a1837 :a1837. :a1838 :a1838 :a1838. :a1839 :a1839 :a1839. :a1840 :a1840 :a1840. :a1841 :a1841 :a1841. :a1842 :a1842 :a1842. :a1843 :a1843 :a1843. :a1844 :a1844 :a1844. :a1845 :a1845 :a1845. :a1846 :a1846 :a1846. :a1847 :a1847 :a1847. :a1848 :a1848 :a1848. :a1849 :a1849 :a1849. :a1850 :a1850 :a1850. :a1851 :a1851 :a1851. :a1852 :a1852 :a1852. :a1853 :a1853 :a1853. :a1854 :a1854 :a1854. :a1855 :a1855 :a1855. :a1856 :a1856 :a1856. :a1857 :a1857 :a1857. :a1858 :a1858 :a1858. :a1859 :a1859 :a1859. :a1860 :a1860 :a1860. :a1861 :a1861 :a1861. :a1862 :a1862 :a1862. :a1863 :a1863 :a1863. :a1864 :a1864 :a1864. :a1865 :a1865 :a1865. :a1866 :a1866 :a1866. :a1867 :a1867 :a1867. :a1868 :a1868 :a1868. :a1869 :a1869 :a1869. :a1870 :a1870 :a1870. :a1871 :a1871 :a1871. :a1872 :a1872 :a1872. :a1873 :a1873 :a1873. :a1874 :a1874 :a1874. :a1875 :a1875 :a1875. :a1876 :a1876 :a1876. :a1877 :a1877 :a1877. :a1878 :a1878 :a1878. :a1879 :a1879 :a1879. :a1880 :a1880 :a1880. :a1881 :a1881 :a1881. :a1882 :a1882 :a1882. :a1883 :a1883 :a1883. :a1884 :a1884 :a1884. :a1885 :a1885 :a1885. :a1886 :a1886 :a1886. :a1887 :a1887 :a1887. :a1888 :a1888 :a1888. :a1889 :a1889 :a1889. :a1890 :a1890 :a1890. :a1891 :a1891 :a1891. :a1892 :a1892 :a1892. :a1893 :a1893 :a1893. :a1894 :a1894 :a1894. :a1895 :a1895 :a1895. :a1896 :a1896 :a1896. :a1897 :a1897 :a1897. :a1898 :a1898 :a1898. :a1899 :a1899 :a1899. :a1900 :a1900 :a1900. :a1901 :a1901 :a1901. :a1902 :a1902 :a1902. :a1903 :a1903 :a1903. :a1904 :a1904 :a1904. :a1905 :a1905 :a1905. :a1906 :a1906 :a1906. :a1907 :a1907 :a1907. :a1908 :a1908 :a1908. :a1909 :a1909 :a1909. :a1910 :a1910 :a1910. :a1911 :a1911 :a1911. :a1912 :a1912 :a1912. :a1913 :a1913 :a1913. :a1914 :a1914 :a1914. :a1915 :a1915 :a1915. :a1916 :a1916 :a1916. :a1917 :a1917 :a1917. :a1918 :a1918 :a1918. :a1919 :a1919 :a1919. :a1920 :a1920 :a1920. :a1921 :a1921 :a1921. :a1922 :a1922 :a1922. :a1923 :a1923 :a1923. :a1924 :a1924 :a1924. :a1925 :a1925 :a1925. :a1926 :a1926 :a1926. :a1927 :a1927 :a1927. :a1928 :a1928 :a1928. :a1929 :a1929 :a1929. :a1930 :a1930 :a1930. :a1931 :a1931 :a1931. :a1932 :a1932 :a1932. :a1933 :a1933 :a1933. :a1934 :a1934 :a1934. :a1935 :a1935 :a1935. :a1936 :a1936 :a1936. :a1937 :a1937 :a1937. :a1938 :a1938 :a1938. :a1939 :a1939 :a1939. :a1940 :a1940 :a1940. :a1941 :a1941 :a1941. :a1942 :a1942 :a1942. :a1943 :a1943 :a1943. :a1944 :a1944 :a1944. :a1945 :a1945 :a1945. :a1946 :a1946 :a1946. :a1947 :a1947 :a1947. :a1948 :a1948 :a1948. :a1949 :a1949 :a1949. :a1950 :a1950 :a1950. :a1951 :a1951 :a1951. :a1952 :a1952 :a1952. :a1953 :a1953 :a1953. :a1954 :a1954 :a1954. :a1955 :a1955 :a1955. :a1956 :a1956 :a1956. :a1957 :a1957 :a1957. :a1958 :a1958 :a1958. :a1959 :a1959 :a1959. :a1960 :a1960 :a1960. :a1961 :a1961 :a1961. :a1962 :a1962 :a1962. :a1963 :a1963 :a1963. :a1964 :a1964 :a1964. :a1965 :a1965 :a1965. :a1966 :a1966 :a1966. :a1967 :a1967 :a1967. :a1968 :a1968 :a1968. :a1969 :a1969 :a1969. :a1970 :a1970 :a1970. :a1971 :a1971 :a1971. :a1972 :a1972 :a1972. :a1973 :a1973 :a1973. :a1974 :a1974 :a1974. :a1975 :a1975 :a1975. :a1976 :a1976 :a1976. :a1977 :a1977 :a1977. :a1978 :a1978 :a1978. :a1979 :a1979 :a1979. :a1980 :a1980 :a1980. :a1981 :a1981 :a1981. :a1982 :a1982 :a1982. :a1983 :a1983 :a1983. :a1984 :a1984 :a1984. :a1985 :a1985 :a1985. :a1986 :a1986 :a1986. :a1987 :a1987 :a1987. :a1988 :a1988 :a1988. :a1989 :a1989 :a1989. :a1990 :a1990 :a1990. :a1991 :a1991 :a1991. :a1992 :a1992 :a1992. :a1993 :a1993 :a1993. :a1994 :a1994 :a1994. :a1995 :a1995 :a1995. :a1996 :a1996 :a1996. :a1997 :a1997 :a1997. :a1998 :a1998 :a1998. :a1999 :a1999 :a1999. :a2000 :a2000 :a2000. :a2001 :a2001 :a2001. :a2002 :a2002 :a2002. :a2003 :a2003 :a2003. :a2004 :a2004 :a2004. :a2005 :a2005 :a2005. :a2006 :a2006 :a2006. :a2007 :a2007 :a2007. :a2008 :a2008 :a2008. :a2009 :a2009 :a2009. :a2010 :a2010 :a2010. :a2011 :a2011 :a2011. :a2012 :a2012 :a2012. :a2013 :a2013 :a2013. :a2014 :a2014 :a2014. :a2015 :a2015 :a2015. :a2016 :a2016 :a2016. :a2017 :a2017 :a2017. :a2018 :a2018 :a2018. :a2019 :a2019 :a2019. :a2020 :a2020 :a2020. :a2021 :a2021 :a2021. :a2022 :a2022 :a2022. :a2023 :a2023 :a2023. :a2024 :a2024 :a2024. :a2025 :a2025 :a2025. :a2026 :a2026 :a2026. :a2027 :a2027 :a2027. :a2028 :a2028 :a2028. :a2029 :a2029 :a2029. :a2030 :a2030 :a2030. :a2031 :a2031 :a2031. :a2032 :a2032 :a2032. :a2033 :a2033 :a2033. :a2034 :a2034 :a2034. :a2035 :a2035 :a2035. :a2036 :a2036 :a2036. :a2037 :a2037 :a2037. :a2038 :a2038 :a2038. :a2039 :a2039 :a2039. :a2040 :a2040 :a2040. :a2041 :a2041 :a2041. :a2042 :a2042 :a2042. :a2043 :a2043 :a2043. :a2044 :a2044 :a2044. :a2045 :a2045 :a2045. :a2046 :a2046 :a2046. :a2047 :a2047 :a2047. :a2048 :a2048 :a2048. :a2049 :a2049 :a2049. :a2050 :a2050 :a2050. :a2051 :a2051 :a2051. :a2052 :a2052 :a2052. :a2053 :a2053 :a2053. :a2054 :a2054 :a2054. :a2055 :a2055 :a2055. :a2056 :a2056 :a2056. :a2057 :a2057 :a2057. :a2058 :a2058 :a2058. :a2059 :a2059 :a2059. :a2060 :a2060 :a2060. :a2061 :a2061 :a2061. :a2062 :a2062 :a2062. :a2063 :a2063 :a2063. :a2064 :a2064 :a2064. :a2065 :a2065 :a2065. :a2066 :a2066 :a2066. :a2067 :a2067 :a2067. :a2068 :a2068 :a2068. :a2069 :a2069 :a2069. :a2070 :a2070 :a2070. :a2071 :a2071 :a2071. :a2072 :a2072 :a2072. :a2073 :a2073 :a2073. :a2074 :a2074 :a2074. :a2075 :a2075 :a2075. :a2076 :a2076 :a2076. :a2077 :a2077 :a2077. :a2078 :a2078 :a2078. :a2079 :a2079 :a2079. :a2080 :a2080 :a2080. :a2081 :a2081 :a2081. :a2082 :a2082 :a2082. :a2083 :a2083 :a2083. :a2084 :a2084 :a2084. :a2085 :a2085 :a2085. :a2086 :a2086 :a2086. :a2087 :a2087 :a2087. :a2088 :a2088 :a2088. :a2089 :a2089 :a2089. :a2090 :a2090 :a2090. :a2091 :a2091 :a2091. :a2092 :a2092 :a2092. :a2093 :a2093 :a2093. :a2094 :a2094 :a2094. :a2095 :a2095 :a2095. :a2096 :a2096 :a2096. :a2097 :a2097 :a2097. :a2098 :a2098 :a2098. :a2099 :a2099 :a2099. :a2100 :a2100 :a2100. :a2101 :a2101 :a2101. :a2102 :a2102 :a2102. :a2103 :a2103 :a2103. :a2104 :a2104 :a2104. :a2105 :a2105 :a2105. :a2106 :a2106 :a2106. :a2107 :a2107 :a2107. :a2108 :a2108 :a2108. :a2109 :a2109 :a2109. :a2110 :a2110 :a2110. :a2111 :a2111 :a2111. :a2112 :a2112 :a2112. :a2113 :a2113 :a2113. :a2114 :a2114 :a2114. :a2115 :a2115 :a2115. :a2116 :a2116 :a2116. :a2117 :a2117 :a2117. :a2118 :a2118 :a2118. :a2119 :a2119 :a2119. :a2120 :a2120 :a2120. :a2121 :a2121 :a2121. :a2122 :a2122 :a2122. :a2123 :a2123 :a2123. :a2124 :a2124 :a2124. :a2125 :a2125 :a2125. :a2126 :a2126 :a2126. :a2127 :a2127 :a2127. :a2128 :a2128 :a2128. :a2129 :a2129 :a2129. :a2130 :a2130 :a2130. :a2131 :a2131 :a2131. :a2132 :a2132 :a2132. :a2133 :a2133 :a2133. :a2134 :a2134 :a2134. :a2135 :a2135 :a2135. :a2136 :a2136 :a2136. :a2137 :a2137 :a2137. :a2138 :a2138 :a2138. :a2139 :a2139 :a2139. :a2140 :a2140 :a2140. :a2141 :a2141 :a2141. :a2142 :a2142 :a2142. :a2143 :a2143 :a2143. :a2144 :a2144 :a2144. :a2145 :a2145 :a2145. :a2146 :a2146 :a2146. :a2147 :a2147 :a2147. :a2148 :a2148 :a2148. :a2149 :a2149 :a2149. :a2150 :a2150 :a2150. :a2151 :a2151 :a2151. :a2152 :a2152 :a2152. :a2153 :a2153 :a2153. :a2154 :a2154 :a2154. :a2155 :a2155 :a2155. :a2156 :a2156 :a2156. :a2157 :a2157 :a2157. :a2158 :a2158 :a2158. :a2159 :a2159 :a2159. :a2160 :a2160 :a2160. :a2161 :a2161 :a2161. :a2162 :a2162 :a2162. :a2163 :a2163 :a2163. :a2164 :a2164 :a2164. :a2165 :a2165 :a2165. :a2166 :a2166 :a2166. :a2167 :a2167 :a2167. :a2168 :a2168 :a2168. :a2169 :a2169 :a2169. :a2170 :a2170 :a2170. :a2171 :a2171 :a2171. :a2172 :a2172 :a2172. :a2173 :a2173 :a2173. :a2174 :a2174 :a2174. :a2175 :a2175 :a2175. :a2176 :a2176 :a2176. :a2177 :a2177 :a2177. :a2178 :a2178 :a2178. :a2179 :a2179 :a2179. :a2180 :a2180 :a2180. :a2181 :a2181 :a2181. :a2182 :a2182 :a2182. :a2183 :a2183 :a2183. :a2184 :a2184 :a2184. :a2185 :a2185 :a2185. :a2186 :a2186 :a2186. :a2187 :a2187 :a2187. :a2188 :a2188 :a2188. :a2189 :a2189 :a2189. :a2190 :a2190 :a2190. :a2191 :a2191 :a2191. :a2192 :a2192 :a2192. :a2193 :a2193 :a2193. :a2194 :a2194 :a2194. :a2195 :a2195 :a2195. :a2196 :a2196 :a2196. :a2197 :a2197 :a2197. :a2198 :a2198 :a2198. :a2199 :a2199 :a2199. :a2200 :a2200 :a2200. :a2201 :a2201 :a2201. :a2202 :a2202 :a2202. :a2203 :a2203 :a2203. :a2204 :a2204 :a2204. :a2205 :a2205 :a2205. :a2206 :a2206 :a2206. :a2207 :a2207 :a2207. :a2208 :a2208 :a2208. :a2209 :a2209 :a2209. :a2210 :a2210 :a2210. :a2211 :a2211 :a2211. :a2212 :a2212 :a2212. :a2213 :a2213 :a2213. :a2214 :a2214 :a2214. :a2215 :a2215 :a2215. :a2216 :a2216 :a2216. :a2217 :a2217 :a2217. :a2218 :a2218 :a2218. :a2219 :a2219 :a2219. :a2220 :a2220 :a2220. :a2221 :a2221 :a2221. :a2222 :a2222 :a2222. :a2223 :a2223 :a2223. :a2224 :a2224 :a2224. :a2225 :a2225 :a2225. :a2226 :a2226 :a2226. :a2227 :a2227 :a2227. :a2228 :a2228 :a2228. :a2229 :a2229 :a2229. :a2230 :a2230 :a2230. :a2231 :a2231 :a2231. :a2232 :a2232 :a2232. :a2233 :a2233 :a2233. :a2234 :a2234 :a2234. :a2235 :a2235 :a2235. :a2236 :a2236 :a2236. :a2237 :a2237 :a2237. :a2238 :a2238 :a2238. :a2239 :a2239 :a2239. :a2240 :a2240 :a2240. :a2241 :a2241 :a2241. :a2242 :a2242 :a2242. :a2243 :a2243 :a2243. :a2244 :a2244 :a2244. :a2245 :a2245 :a2245. :a2246 :a2246 :a2246. :a2247 :a2247 :a2247. :a2248 :a2248 :a2248. :a2249 :a2249 :a2249. :a2250 :a2250 :a2250. :a2251 :a2251 :a2251. :a2252 :a2252 :a2252. :a2253 :a2253 :a2253. :a2254 :a2254 :a2254. :a2255 :a2255 :a2255. :a2256 :a2256 :a2256. :a2257 :a2257 :a2257. :a2258 :a2258 :a2258. :a2259 :a2259 :a2259. :a2260 :a2260 :a2260. :a2261 :a2261 :a2261. :a2262 :a2262 :a2262. :a2263 :a2263 :a2263. :a2264 :a2264 :a2264. :a2265 :a2265 :a2265. :a2266 :a2266 :a2266. :a2267 :a2267 :a2267. :a2268 :a2268 :a2268. :a2269 :a2269 :a2269. :a2270 :a2270 :a2270. :a2271 :a2271 :a2271. :a2272 :a2272 :a2272. :a2273 :a2273 :a2273. :a2274 :a2274 :a2274. :a2275 :a2275 :a2275. :a2276 :a2276 :a2276. :a2277 :a2277 :a2277. :a2278 :a2278 :a2278. :a2279 :a2279 :a2279. :a2280 :a2280 :a2280. :a2281 :a2281 :a2281. :a2282 :a2282 :a2282. :a2283 :a2283 :a2283. :a2284 :a2284 :a2284. :a2285 :a2285 :a2285. :a2286 :a2286 :a2286. :a2287 :a2287 :a2287. :a2288 :a2288 :a2288. :a2289 :a2289 :a2289. :a2290 :a2290 :a2290. :a2291 :a2291 :a2291. :a2292 :a2292 :a2292. :a2293 :a2293 :a2293. :a2294 :a2294 :a2294. :a2295 :a2295 :a2295. :a2296 :a2296 :a2296. :a2297 :a2297 :a2297. :a2298 :a2298 :a2298. :a2299 :a2299 :a2299. :a2300 :a2300 :a2300. :a2301 :a2301 :a2301. :a2302 :a2302 :a2302. :a2303 :a2303 :a2303. :a2304 :a2304 :a2304. :a2305 :a2305 :a2305. :a2306 :a2306 :a2306. :a2307 :a2307 :a2307. :a2308 :a2308 :a2308. :a2309 :a2309 :a2309. :a2310 :a2310 :a2310. :a2311 :a2311 :a2311. :a2312 :a2312 :a2312. :a2313 :a2313 :a2313. :a2314 :a2314 :a2314. :a2315 :a2315 :a2315. :a2316 :a2316 :a2316. :a2317 :a2317 :a2317. :a2318 :a2318 :a2318. :a2319 :a2319 :a2319. :a2320 :a2320 :a2320. :a2321 :a2321 :a2321. :a2322 :a2322 :a2322. :a2323 :a2323 :a2323. :a2324 :a2324 :a2324. :a2325 :a2325 :a2325. :a2326 :a2326 :a2326. :a2327 :a2327 :a2327. :a2328 :a2328 :a2328. :a2329 :a2329 :a2329. :a2330 :a2330 :a2330. :a2331 :a2331 :a2331. :a2332 :a2332 :a2332. :a2333 :a2333 :a2333. :a2334 :a2334 :a2334. :a2335 :a2335 :a2335. :a2336 :a2336 :a2336. :a2337 :a2337 :a2337. :a2338 :a2338 :a2338. :a2339 :a2339 :a2339. :a2340 :a2340 :a2340. :a2341 :a2341 :a2341. :a2342 :a2342 :a2342. :a2343 :a2343 :a2343. :a2344 :a2344 :a2344. :a2345 :a2345 :a2345. :a2346 :a2346 :a2346. :a2347 :a2347 :a2347. :a2348 :a2348 :a2348. :a2349 :a2349 :a2349. :a2350 :a2350 :a2350. :a2351 :a2351 :a2351. :a2352 :a2352 :a2352. :a2353 :a2353 :a2353. :a2354 :a2354 :a2354. :a2355 :a2355 :a2355. :a2356 :a2356 :a2356. :a2357 :a2357 :a2357. :a2358 :a2358 :a2358. :a2359 :a2359 :a2359. :a2360 :a2360 :a2360. :a2361 :a2361 :a2361. :a2362 :a2362 :a2362. :a2363 :a2363 :a2363. :a2364 :a2364 :a2364. :a2365 :a2365 :a2365. :a2366 :a2366 :a2366. :a2367 :a2367 :a2367. :a2368 :a2368 :a2368. :a2369 :a2369 :a2369. :a2370 :a2370 :a2370. :a2371 :a2371 :a2371. :a2372 :a2372 :a2372. :a2373 :a2373 :a2373. :a2374 :a2374 :a2374. :a2375 :a2375 :a2375. :a2376 :a2376 :a2376. :a2377 :a2377 :a2377. :a2378 :a2378 :a2378. :a2379 :a2379 :a2379. :a2380 :a2380 :a2380. :a2381 :a2381 :a2381. :a2382 :a2382 :a2382. :a2383 :a2383 :a2383. :a2384 :a2384 :a2384. :a2385 :a2385 :a2385. :a2386 :a2386 :a2386. :a2387 :a2387 :a2387. :a2388 :a2388 :a2388. :a2389 :a2389 :a2389. :a2390 :a2390 :a2390. :a2391 :a2391 :a2391. :a2392 :a2392 :a2392. :a2393 :a2393 :a2393. :a2394 :a2394 :a2394. :a2395 :a2395 :a2395. :a2396 :a2396 :a2396. :a2397 :a2397 :a2397. :a2398 :a2398 :a2398. :a2399 :a2399 :a2399. :a2400 :a2400 :a2400. :a2401 :a2401 :a2401. :a2402 :a2402 :a2402. :a2403 :a2403 :a2403. :a2404 :a2404 :a2404. :a2405 :a2405 :a2405. :a2406 :a2406 :a2406. :a2407 :a2407 :a2407. :a2408 :a2408 :a2408. :a2409 :a2409 :a2409. :a2410 :a2410 :a2410. :a2411 :a2411 :a2411. :a2412 :a2412 :a2412. :a2413 :a2413 :a2413. :a2414 :a2414 :a2414. :a2415 :a2415 :a2415. :a2416 :a2416 :a2416. :a2417 :a2417 :a2417. :a2418 :a2418 :a2418. :a2419 :a2419 :a2419. :a2420 :a2420 :a2420. :a2421 :a2421 :a2421. :a2422 :a2422 :a2422. :a2423 :a2423 :a2423. :a2424 :a2424 :a2424. :a2425 :a2425 :a2425. :a2426 :a2426 :a2426. :a2427 :a2427 :a2427. :a2428 :a2428 :a2428. :a2429 :a2429 :a2429. :a2430 :a2430 :a2430. :a2431 :a2431 :a2431. :a2432 :a2432 :a2432. :a2433 :a2433 :a2433. :a2434 :a2434 :a2434. :a2435 :a2435 :a2435. :a2436 :a2436 :a2436. :a2437 :a2437 :a2437. :a2438 :a2438 :a2438. :a2439 :a2439 :a2439. :a2440 :a2440 :a2440. :a2441 :a2441 :a2441. :a2442 :a2442 :a2442. :a2443 :a2443 :a2443. :a2444 :a2444 :a2444. :a2445 :a2445 :a2445. :a2446 :a2446 :a2446. :a2447 :a2447 :a2447. :a2448 :a2448 :a2448. :a2449 :a2449 :a2449. :a2450 :a2450 :a2450. :a2451 :a2451 :a2451. :a2452 :a2452 :a2452. :a2453 :a2453 :a2453. :a2454 :a2454 :a2454. :a2455 :a2455 :a2455. :a2456 :a2456 :a2456. :a2457 :a2457 :a2457. :a2458 :a2458 :a2458. :a2459 :a2459 :a2459. :a2460 :a2460 :a2460. :a2461 :a2461 :a2461. :a2462 :a2462 :a2462. :a2463 :a2463 :a2463. :a2464 :a2464 :a2464. :a2465 :a2465 :a2465. :a2466 :a2466 :a2466. :a2467 :a2467 :a2467. :a2468 :a2468 :a2468. :a2469 :a2469 :a2469. :a2470 :a2470 :a2470. :a2471 :a2471 :a2471. :a2472 :a2472 :a2472. :a2473 :a2473 :a2473. :a2474 :a2474 :a2474. :a2475 :a2475 :a2475. :a2476 :a2476 :a2476. :a2477 :a2477 :a2477. :a2478 :a2478 :a2478. :a2479 :a2479 :a2479. :a2480 :a2480 :a2480. :a2481 :a2481 :a2481. :a2482 :a2482 :a2482. :a2483 :a2483 :a2483. :a2484 :a2484 :a2484. :a2485 :a2485 :a2485. :a2486 :a2486 :a2486. :a2487 :a2487 :a2487. :a2488 :a2488 :a2488. :a2489 :a2489 :a2489. :a2490 :a2490 :a2490. :a2491 :a2491 :a2491. :a2492 :a2492 :a2492. :a2493 :a2493 :a2493. :a2494 :a2494 :a2494. :a2495 :a2495 :a2495. :a2496 :a2496 :a2496. :a2497 :a2497 :a2497. :a2498 :a2498 :a2498. :a2499 :a2499 :a2499. :a2500 :a2500 :a2500. :a2501 :a2501 :a2501. :a2502 :a2502 :a2502. :a2503 :a2503 :a2503. :a2504 :a2504 :a2504. :a2505 :a2505 :a2505. :a2506 :a2506 :a2506. :a2507 :a2507 :a2507. :a2508 :a2508 :a2508. :a2509 :a2509 :a2509. :a2510 :a2510 :a2510. :a2511 :a2511 :a2511. :a2512 :a2512 :a2512. :a2513 :a2513 :a2513. :a2514 :a2514 :a2514. :a2515 :a2515 :a2515. :a2516 :a2516 :a2516. :a2517 :a2517 :a2517. :a2518 :a2518 :a2518. :a2519 :a2519 :a2519. :a2520 :a2520 :a2520. :a2521 :a2521 :a2521. :a2522 :a2522 :a2522. :a2523 :a2523 :a2523. :a2524 :a2524 :a2524. :a2525 :a2525 :a2525. :a2526 :a2526 :a2526. :a2527 :a2527 :a2527. :a2528 :a2528 :a2528. :a2529 :a2529 :a2529. :a2530 :a2530 :a2530. :a2531 :a2531 :a2531. :a2532 :a2532 :a2532. :a2533 :a2533 :a2533. :a2534 :a2534 :a2534. :a2535 :a2535 :a2535. :a2536 :a2536 :a2536. :a2537 :a2537 :a2537. :a2538 :a2538 :a2538. :a2539 :a2539 :a2539. :a2540 :a2540 :a2540. :a2541 :a2541 :a2541. :a2542 :a2542 :a2542. :a2543 :a2543 :a2543. :a2544 :a2544 :a2544. :a2545 :a2545 :a2545. :a2546 :a2546 :a2546. :a2547 :a2547 :a2547. :a2548 :a2548 :a2548. :a2549 :a2549 :a2549. :a2550 :a2550 :a2550. :a2551 :a2551 :a2551. :a2552 :a2552 :a2552. :a2553 :a2553 :a2553. :a2554 :a2554 :a2554. :a2555 :a2555 :a2555. :a2556 :a2556 :a2556. :a2557 :a2557 :a2557. :a2558 :a2558 :a2558. :a2559 :a2559 :a2559. :a2560 :a2560 :a2560. :a2561 :a2561 :a2561. :a2562 :a2562 :a2562. :a2563 :a2563 :a2563. :a2564 :a2564 :a2564. :a2565 :a2565 :a2565. :a2566 :a2566 :a2566. :a2567 :a2567 :a2567. :a2568 :a2568 :a2568. :a2569 :a2569 :a2569. :a2570 :a2570 :a2570. :a2571 :a2571 :a2571. :a2572 :a2572 :a2572. :a2573 :a2573 :a2573. :a2574 :a2574 :a2574. :a2575 :a2575 :a2575. :a2576 :a2576 :a2576. :a2577 :a2577 :a2577. :a2578 :a2578 :a2578. :a2579 :a2579 :a2579. :a2580 :a2580 :a2580. :a2581 :a2581 :a2581. :a2582 :a2582 :a2582. :a2583 :a2583 :a2583. :a2584 :a2584 :a2584. :a2585 :a2585 :a2585. :a2586 :a2586 :a2586. :a2587 :a2587 :a2587. :a2588 :a2588 :a2588. :a2589 :a2589 :a2589. :a2590 :a2590 :a2590. :a2591 :a2591 :a2591. :a2592 :a2592 :a2592. :a2593 :a2593 :a2593. :a2594 :a2594 :a2594. :a2595 :a2595 :a2595. :a2596 :a2596 :a2596. :a2597 :a2597 :a2597. :a2598 :a2598 :a2598. :a2599 :a2599 :a2599. :a2600 :a2600 :a2600. :a2601 :a2601 :a2601. :a2602 :a2602 :a2602. :a2603 :a2603 :a2603. :a2604 :a2604 :a2604. :a2605 :a2605 :a2605. :a2606 :a2606 :a2606. :a2607 :a2607 :a2607. :a2608 :a2608 :a2608. :a2609 :a2609 :a2609. :a2610 :a2610 :a2610. :a2611 :a2611 :a2611. :a2612 :a2612 :a2612. :a2613 :a2613 :a2613. :a2614 :a2614 :a2614. :a2615 :a2615 :a2615. :a2616 :a2616 :a2616. :a2617 :a2617 :a2617. :a2618 :a2618 :a2618. :a2619 :a2619 :a2619. :a2620 :a2620 :a2620. :a2621 :a2621 :a2621. :a2622 :a2622 :a2622. :a2623 :a2623 :a2623. :a2624 :a2624 :a2624. :a2625 :a2625 :a2625. :a2626 :a2626 :a2626. :a2627 :a2627 :a2627. :a2628 :a2628 :a2628. :a2629 :a2629 :a2629. :a2630 :a2630 :a2630. :a2631 :a2631 :a2631. :a2632 :a2632 :a2632. :a2633 :a2633 :a2633. :a2634 :a2634 :a2634. :a2635 :a2635 :a2635. :a2636 :a2636 :a2636. :a2637 :a2637 :a2637. :a2638 :a2638 :a2638. :a2639 :a2639 :a2639. :a2640 :a2640 :a2640. :a2641 :a2641 :a2641. :a2642 :a2642 :a2642. :a2643 :a2643 :a2643. :a2644 :a2644 :a2644. :a2645 :a2645 :a2645. :a2646 :a2646 :a2646. :a2647 :a2647 :a2647. :a2648 :a2648 :a2648. :a2649 :a2649 :a2649. :a2650 :a2650 :a2650. :a2651 :a2651 :a2651. :a2652 :a2652 :a2652. :a2653 :a2653 :a2653. :a2654 :a2654 :a2654. :a2655 :a2655 :a2655. :a2656 :a2656 :a2656. :a2657 :a2657 :a2657. :a2658 :a2658 :a2658. :a2659 :a2659 :a2659. :a2660 :a2660 :a2660. :a2661 :a2661 :a2661. :a2662 :a2662 :a2662. :a2663 :a2663 :a2663. :a2664 :a2664 :a2664. :a2665 :a2665 :a2665. :a2666 :a2666 :a2666. :a2667 :a2667 :a2667. :a2668 :a2668 :a2668. :a2669 :a2669 :a2669. :a2670 :a2670 :a2670. :a2671 :a2671 :a2671. :a2672 :a2672 :a2672. :a2673 :a2673 :a2673. :a2674 :a2674 :a2674. :a2675 :a2675 :a2675. :a2676 :a2676 :a2676. :a2677 :a2677 :a2677. :a2678 :a2678 :a2678. :a2679 :a2679 :a2679. :a2680 :a2680 :a2680. :a2681 :a2681 :a2681. :a2682 :a2682 :a2682. :a2683 :a2683 :a2683. :a2684 :a2684 :a2684. :a2685 :a2685 :a2685. :a2686 :a2686 :a2686. :a2687 :a2687 :a2687. :a2688 :a2688 :a2688. :a2689 :a2689 :a2689. :a2690 :a2690 :a2690. :a2691 :a2691 :a2691. :a2692 :a2692 :a2692. :a2693 :a2693 :a2693. :a2694 :a2694 :a2694. :a2695 :a2695 :a2695. :a2696 :a2696 :a2696. :a2697 :a2697 :a2697. :a2698 :a2698 :a2698. :a2699 :a2699 :a2699. :a2700 :a2700 :a2700. :a2701 :a2701 :a2701. :a2702 :a2702 :a2702. :a2703 :a2703 :a2703. :a2704 :a2704 :a2704. :a2705 :a2705 :a2705. :a2706 :a2706 :a2706. :a2707 :a2707 :a2707. :a2708 :a2708 :a2708. :a2709 :a2709 :a2709. :a2710 :a2710 :a2710. :a2711 :a2711 :a2711. :a2712 :a2712 :a2712. :a2713 :a2713 :a2713. :a2714 :a2714 :a2714. :a2715 :a2715 :a2715. :a2716 :a2716 :a2716. :a2717 :a2717 :a2717. :a2718 :a2718 :a2718. :a2719 :a2719 :a2719. :a2720 :a2720 :a2720. :a2721 :a2721 :a2721. :a2722 :a2722 :a2722. :a2723 :a2723 :a2723. :a2724 :a2724 :a2724. :a2725 :a2725 :a2725. :a2726 :a2726 :a2726. :a2727 :a2727 :a2727. :a2728 :a2728 :a2728. :a2729 :a2729 :a2729. :a2730 :a2730 :a2730. :a2731 :a2731 :a2731. :a2732 :a2732 :a2732. :a2733 :a2733 :a2733. :a2734 :a2734 :a2734. :a2735 :a2735 :a2735. :a2736 :a2736 :a2736. :a2737 :a2737 :a2737. :a2738 :a2738 :a2738. :a2739 :a2739 :a2739. :a2740 :a2740 :a2740. :a2741 :a2741 :a2741. :a2742 :a2742 :a2742. :a2743 :a2743 :a2743. :a2744 :a2744 :a2744. :a2745 :a2745 :a2745. :a2746 :a2746 :a2746. :a2747 :a2747 :a2747. :a2748 :a2748 :a2748. :a2749 :a2749 :a2749. :a2750 :a2750 :a2750. :a2751 :a2751 :a2751. :a2752 :a2752 :a2752. :a2753 :a2753 :a2753. :a2754 :a2754 :a2754. :a2755 :a2755 :a2755. :a2756 :a2756 :a2756. :a2757 :a2757 :a2757. :a2758 :a2758 :a2758. :a2759 :a2759 :a2759. :a2760 :a2760 :a2760. :a2761 :a2761 :a2761. :a2762 :a2762 :a2762. :a2763 :a2763 :a2763. :a2764 :a2764 :a2764. :a2765 :a2765 :a2765. :a2766 :a2766 :a2766. :a2767 :a2767 :a2767. :a2768 :a2768 :a2768. :a2769 :a2769 :a2769. :a2770 :a2770 :a2770. :a2771 :a2771 :a2771. :a2772 :a2772 :a2772. :a2773 :a2773 :a2773. :a2774 :a2774 :a2774. :a2775 :a2775 :a2775. :a2776 :a2776 :a2776. :a2777 :a2777 :a2777. :a2778 :a2778 :a2778. :a2779 :a2779 :a2779. :a2780 :a2780 :a2780. :a2781 :a2781 :a2781. :a2782 :a2782 :a2782. :a2783 :a2783 :a2783. :a2784 :a2784 :a2784. :a2785 :a2785 :a2785. :a2786 :a2786 :a2786. :a2787 :a2787 :a2787. :a2788 :a2788 :a2788. :a2789 :a2789 :a2789. :a2790 :a2790 :a2790. :a2791 :a2791 :a2791. :a2792 :a2792 :a2792. :a2793 :a2793 :a2793. :a2794 :a2794 :a2794. :a2795 :a2795 :a2795. :a2796 :a2796 :a2796. :a2797 :a2797 :a2797. :a2798 :a2798 :a2798. :a2799 :a2799 :a2799. :a2800 :a2800 :a2800. :a2801 :a2801 :a2801. :a2802 :a2802 :a2802. :a2803 :a2803 :a2803. :a2804 :a2804 :a2804. :a2805 :a2805 :a2805. :a2806 :a2806 :a2806. :a2807 :a2807 :a2807. :a2808 :a2808 :a2808. :a2809 :a2809 :a2809. :a2810 :a2810 :a2810. :a2811 :a2811 :a2811. :a2812 :a2812 :a2812. :a2813 :a2813 :a2813. :a2814 :a2814 :a2814. :a2815 :a2815 :a2815. :a2816 :a2816 :a2816. :a2817 :a2817 :a2817. :a2818 :a2818 :a2818. :a2819 :a2819 :a2819. :a2820 :a2820 :a2820. :a2821 :a2821 :a2821. :a2822 :a2822 :a2822. :a2823 :a2823 :a2823. :a2824 :a2824 :a2824. :a2825 :a2825 :a2825. :a2826 :a2826 :a2826. :a2827 :a2827 :a2827. :a2828 :a2828 :a2828. :a2829 :a2829 :a2829. :a2830 :a2830 :a2830. :a2831 :a2831 :a2831. :a2832 :a2832 :a2832. :a2833 :a2833 :a2833. :a2834 :a2834 :a2834. :a2835 :a2835 :a2835. :a2836 :a2836 :a2836. :a2837 :a2837 :a2837. :a2838 :a2838 :a2838. :a2839 :a2839 :a2839. :a2840 :a2840 :a2840. :a2841 :a2841 :a2841. :a2842 :a2842 :a2842. :a2843 :a2843 :a2843. :a2844 :a2844 :a2844. :a2845 :a2845 :a2845. :a2846 :a2846 :a2846. :a2847 :a2847 :a2847. :a2848 :a2848 :a2848. :a2849 :a2849 :a2849. :a2850 :a2850 :a2850. :a2851 :a2851 :a2851. :a2852 :a2852 :a2852. :a2853 :a2853 :a2853. :a2854 :a2854 :a2854. :a2855 :a2855 :a2855. :a2856 :a2856 :a2856. :a2857 :a2857 :a2857. :a2858 :a2858 :a2858. :a2859 :a2859 :a2859. :a2860 :a2860 :a2860. :a2861 :a2861 :a2861. :a2862 :a2862 :a2862. :a2863 :a2863 :a2863. :a2864 :a2864 :a2864. :a2865 :a2865 :a2865. :a2866 :a2866 :a2866. :a2867 :a2867 :a2867. :a2868 :a2868 :a2868. :a2869 :a2869 :a2869. :a2870 :a2870 :a2870. :a2871 :a2871 :a2871. :a2872 :a2872 :a2872. :a2873 :a2873 :a2873. :a2874 :a2874 :a2874. :a2875 :a2875 :a2875. :a2876 :a2876 :a2876. :a2877 :a2877 :a2877. :a2878 :a2878 :a2878. :a2879 :a2879 :a2879. :a2880 :a2880 :a2880. :a2881 :a2881 :a2881. :a2882 :a2882 :a2882. :a2883 :a2883 :a2883. :a2884 :a2884 :a2884. :a2885 :a2885 :a2885. :a2886 :a2886 :a2886. :a2887 :a2887 :a2887. :a2888 :a2888 :a2888. :a2889 :a2889 :a2889. :a2890 :a2890 :a2890. :a2891 :a2891 :a2891. :a2892 :a2892 :a2892. :a2893 :a2893 :a2893. :a2894 :a2894 :a2894. :a2895 :a2895 :a2895. :a2896 :a2896 :a2896. :a2897 :a2897 :a2897. :a2898 :a2898 :a2898. :a2899 :a2899 :a2899. :a2900 :a2900 :a2900. :a2901 :a2901 :a2901. :a2902 :a2902 :a2902. :a2903 :a2903 :a2903. :a2904 :a2904 :a2904. :a2905 :a2905 :a2905. :a2906 :a2906 :a2906. :a2907 :a2907 :a2907. :a2908 :a2908 :a2908. :a2909 :a2909 :a2909. :a2910 :a2910 :a2910. :a2911 :a2911 :a2911. :a2912 :a2912 :a2912. :a2913 :a2913 :a2913. :a2914 :a2914 :a2914. :a2915 :a2915 :a2915. :a2916 :a2916 :a2916. :a2917 :a2917 :a2917. :a2918 :a2918 :a2918. :a2919 :a2919 :a2919. :a2920 :a2920 :a2920. :a2921 :a2921 :a2921. :a2922 :a2922 :a2922. :a2923 :a2923 :a2923. :a2924 :a2924 :a2924. :a2925 :a2925 :a2925. :a2926 :a2926 :a2926. :a2927 :a2927 :a2927. :a2928 :a2928 :a2928. :a2929 :a2929 :a2929. :a2930 :a2930 :a2930. :a2931 :a2931 :a2931. :a2932 :a2932 :a2932. :a2933 :a2933 :a2933. :a2934 :a2934 :a2934. :a2935 :a2935 :a2935. :a2936 :a2936 :a2936. :a2937 :a2937 :a2937. :a2938 :a2938 :a2938. :a2939 :a2939 :a2939. :a2940 :a2940 :a2940. :a2941 :a2941 :a2941. :a2942 :a2942 :a2942. :a2943 :a2943 :a2943. :a2944 :a2944 :a2944. :a2945 :a2945 :a2945. :a2946 :a2946 :a2946. :a2947 :a2947 :a2947. :a2948 :a2948 :a2948. :a2949 :a2949 :a2949. :a2950 :a2950 :a2950. :a2951 :a2951 :a2951. :a2952 :a2952 :a2952. :a2953 :a2953 :a2953. :a2954 :a2954 :a2954. :a2955 :a2955 :a2955. :a2956 :a2956 :a2956. :a2957 :a2957 :a2957. :a2958 :a2958 :a2958. :a2959 :a2959 :a2959. :a2960 :a2960 :a2960. :a2961 :a2961 :a2961. :a2962 :a2962 :a2962. :a2963 :a2963 :a2963. :a2964 :a2964 :a2964. :a2965 :a2965 :a2965. :a2966 :a2966 :a2966. :a2967 :a2967 :a2967. :a2968 :a2968 :a2968. :a2969 :a2969 :a2969. :a2970 :a2970 :a2970. :a2971 :a2971 :a2971. :a2972 :a2972 :a2972. :a2973 :a2973 :a2973. :a2974 :a2974 :a2974. :a2975 :a2975 :a2975. :a2976 :a2976 :a2976. :a2977 :a2977 :a2977. :a2978 :a2978 :a2978. :a2979 :a2979 :a2979. :a2980 :a2980 :a2980. :a2981 :a2981 :a2981. :a2982 :a2982 :a2982. :a2983 :a2983 :a2983. :a2984 :a2984 :a2984. :a2985 :a2985 :a2985. :a2986 :a2986 :a2986. :a2987 :a2987 :a2987. :a2988 :a2988 :a2988. :a2989 :a2989 :a2989. :a2990 :a2990 :a2990. :a2991 :a2991 :a2991. :a2992 :a2992 :a2992. :a2993 :a2993 :a2993. :a2994 :a2994 :a2994. :a2995 :a2995 :a2995. :a2996 :a2996 :a2996. :a2997 :a2997 :a2997. :a2998 :a2998 :a2998. :a2999 :a2999 :a2999. :a3000 :a3000 :a3000. :a3001 :a3001 :a3001. :a3002 :a3002 :a3002. :a3003 :a3003 :a3003. :a3004 :a3004 :a3004. :a3005 :a3005 :a3005. :a3006 :a3006 :a3006. :a3007 :a3007 :a3007. :a3008 :a3008 :a3008. :a3009 :a3009 :a3009. :a3010 :a3010 :a3010. :a3011 :a3011 :a3011. :a3012 :a3012 :a3012. :a3013 :a3013 :a3013. :a3014 :a3014 :a3014. :a3015 :a3015 :a3015. :a3016 :a3016 :a3016. :a3017 :a3017 :a3017. :a3018 :a3018 :a3018. :a3019 :a3019 :a3019. :a3020 :a3020 :a3020. :a3021 :a3021 :a3021. :a3022 :a3022 :a3022. :a3023 :a3023 :a3023. :a3024 :a3024 :a3024. :a3025 :a3025 :a3025. :a3026 :a3026 :a3026. :a3027 :a3027 :a3027. :a3028 :a3028 :a3028. :a3029 :a3029 :a3029. :a3030 :a3030 :a3030. :a3031 :a3031 :a3031. :a3032 :a3032 :a3032. :a3033 :a3033 :a3033. :a3034 :a3034 :a3034. :a3035 :a3035 :a3035. :a3036 :a3036 :a3036. :a3037 :a3037 :a3037. :a3038 :a3038 :a3038. :a3039 :a3039 :a3039. :a3040 :a3040 :a3040. :a3041 :a3041 :a3041. :a3042 :a3042 :a3042. :a3043 :a3043 :a3043. :a3044 :a3044 :a3044. :a3045 :a3045 :a3045. :a3046 :a3046 :a3046. :a3047 :a3047 :a3047. :a3048 :a3048 :a3048. :a3049 :a3049 :a3049. :a3050 :a3050 :a3050. :a3051 :a3051 :a3051. :a3052 :a3052 :a3052. :a3053 :a3053 :a3053. :a3054 :a3054 :a3054. :a3055 :a3055 :a3055. :a3056 :a3056 :a3056. :a3057 :a3057 :a3057. :a3058 :a3058 :a3058. :a3059 :a3059 :a3059. :a3060 :a3060 :a3060. :a3061 :a3061 :a3061. :a3062 :a3062 :a3062. :a3063 :a3063 :a3063. :a3064 :a3064 :a3064. :a3065 :a3065 :a3065. :a3066 :a3066 :a3066. :a3067 :a3067 :a3067. :a3068 :a3068 :a3068. :a3069 :a3069 :a3069. :a3070 :a3070 :a3070. :a3071 :a3071 :a3071. :a3072 :a3072 :a3072. :a3073 :a3073 :a3073. :a3074 :a3074 :a3074. :a3075 :a3075 :a3075. :a3076 :a3076 :a3076. :a3077 :a3077 :a3077. :a3078 :a3078 :a3078. :a3079 :a3079 :a3079. :a3080 :a3080 :a3080. :a3081 :a3081 :a3081. :a3082 :a3082 :a3082. :a3083 :a3083 :a3083. :a3084 :a3084 :a3084. :a3085 :a3085 :a3085. :a3086 :a3086 :a3086. :a3087 :a3087 :a3087. :a3088 :a3088 :a3088. :a3089 :a3089 :a3089. :a3090 :a3090 :a3090. :a3091 :a3091 :a3091. :a3092 :a3092 :a3092. :a3093 :a3093 :a3093. :a3094 :a3094 :a3094. :a3095 :a3095 :a3095. :a3096 :a3096 :a3096. :a3097 :a3097 :a3097. :a3098 :a3098 :a3098. :a3099 :a3099 :a3099. :a3100 :a3100 :a3100. :a3101 :a3101 :a3101. :a3102 :a3102 :a3102. :a3103 :a3103 :a3103. :a3104 :a3104 :a3104. :a3105 :a3105 :a3105. :a3106 :a3106 :a3106. :a3107 :a3107 :a3107. :a3108 :a3108 :a3108. :a3109 :a3109 :a3109. :a3110 :a3110 :a3110. :a3111 :a3111 :a3111. :a3112 :a3112 :a3112. :a3113 :a3113 :a3113. :a3114 :a3114 :a3114. :a3115 :a3115 :a3115. :a3116 :a3116 :a3116. :a3117 :a3117 :a3117. :a3118 :a3118 :a3118. :a3119 :a3119 :a3119. :a3120 :a3120 :a3120. :a3121 :a3121 :a3121. :a3122 :a3122 :a3122. :a3123 :a3123 :a3123. :a3124 :a3124 :a3124. :a3125 :a3125 :a3125. :a3126 :a3126 :a3126. :a3127 :a3127 :a3127. :a3128 :a3128 :a3128. :a3129 :a3129 :a3129. :a3130 :a3130 :a3130. :a3131 :a3131 :a3131. :a3132 :a3132 :a3132. :a3133 :a3133 :a3133. :a3134 :a3134 :a3134. :a3135 :a3135 :a3135. :a3136 :a3136 :a3136. :a3137 :a3137 :a3137. :a3138 :a3138 :a3138. :a3139 :a3139 :a3139. :a3140 :a3140 :a3140. :a3141 :a3141 :a3141. :a3142 :a3142 :a3142. :a3143 :a3143 :a3143. :a3144 :a3144 :a3144. :a3145 :a3145 :a3145. :a3146 :a3146 :a3146. :a3147 :a3147 :a3147. :a3148 :a3148 :a3148. :a3149 :a3149 :a3149. :a3150 :a3150 :a3150. :a3151 :a3151 :a3151. :a3152 :a3152 :a3152. :a3153 :a3153 :a3153. :a3154 :a3154 :a3154. :a3155 :a3155 :a3155. :a3156 :a3156 :a3156. :a3157 :a3157 :a3157. :a3158 :a3158 :a3158. :a3159 :a3159 :a3159. :a3160 :a3160 :a3160. :a3161 :a3161 :a3161. :a3162 :a3162 :a3162. :a3163 :a3163 :a3163. :a3164 :a3164 :a3164. :a3165 :a3165 :a3165. :a3166 :a3166 :a3166. :a3167 :a3167 :a3167. :a3168 :a3168 :a3168. :a3169 :a3169 :a3169. :a3170 :a3170 :a3170. :a3171 :a3171 :a3171. :a3172 :a3172 :a3172. :a3173 :a3173 :a3173. :a3174 :a3174 :a3174. :a3175 :a3175 :a3175. :a3176 :a3176 :a3176. :a3177 :a3177 :a3177. :a3178 :a3178 :a3178. :a3179 :a3179 :a3179. :a3180 :a3180 :a3180. :a3181 :a3181 :a3181. :a3182 :a3182 :a3182. :a3183 :a3183 :a3183. :a3184 :a3184 :a3184. :a3185 :a3185 :a3185. :a3186 :a3186 :a3186. :a3187 :a3187 :a3187. :a3188 :a3188 :a3188. :a3189 :a3189 :a3189. :a3190 :a3190 :a3190. :a3191 :a3191 :a3191. :a3192 :a3192 :a3192. :a3193 :a3193 :a3193. :a3194 :a3194 :a3194. :a3195 :a3195 :a3195. :a3196 :a3196 :a3196. :a3197 :a3197 :a3197. :a3198 :a3198 :a3198. :a3199 :a3199 :a3199. :a3200 :a3200 :a3200. :a3201 :a3201 :a3201. :a3202 :a3202 :a3202. :a3203 :a3203 :a3203. :a3204 :a3204 :a3204. :a3205 :a3205 :a3205. :a3206 :a3206 :a3206. :a3207 :a3207 :a3207. :a3208 :a3208 :a3208. :a3209 :a3209 :a3209. :a3210 :a3210 :a3210. :a3211 :a3211 :a3211. :a3212 :a3212 :a3212. :a3213 :a3213 :a3213. :a3214 :a3214 :a3214. :a3215 :a3215 :a3215. :a3216 :a3216 :a3216. :a3217 :a3217 :a3217. :a3218 :a3218 :a3218. :a3219 :a3219 :a3219. :a3220 :a3220 :a3220. :a3221 :a3221 :a3221. :a3222 :a3222 :a3222. :a3223 :a3223 :a3223. :a3224 :a3224 :a3224. :a3225 :a3225 :a3225. :a3226 :a3226 :a3226. :a3227 :a3227 :a3227. :a3228 :a3228 :a3228. :a3229 :a3229 :a3229. :a3230 :a3230 :a3230. :a3231 :a3231 :a3231. :a3232 :a3232 :a3232. :a3233 :a3233 :a3233. :a3234 :a3234 :a3234. :a3235 :a3235 :a3235. :a3236 :a3236 :a3236. :a3237 :a3237 :a3237. :a3238 :a3238 :a3238. :a3239 :a3239 :a3239. :a3240 :a3240 :a3240. :a3241 :a3241 :a3241. :a3242 :a3242 :a3242. :a3243 :a3243 :a3243. :a3244 :a3244 :a3244. :a3245 :a3245 :a3245. :a3246 :a3246 :a3246. :a3247 :a3247 :a3247. :a3248 :a3248 :a3248. :a3249 :a3249 :a3249. :a3250 :a3250 :a3250. :a3251 :a3251 :a3251. :a3252 :a3252 :a3252. :a3253 :a3253 :a3253. :a3254 :a3254 :a3254. :a3255 :a3255 :a3255. :a3256 :a3256 :a3256. :a3257 :a3257 :a3257. :a3258 :a3258 :a3258. :a3259 :a3259 :a3259. :a3260 :a3260 :a3260. :a3261 :a3261 :a3261. :a3262 :a3262 :a3262. :a3263 :a3263 :a3263. :a3264 :a3264 :a3264. :a3265 :a3265 :a3265. :a3266 :a3266 :a3266. :a3267 :a3267 :a3267. :a3268 :a3268 :a3268. :a3269 :a3269 :a3269. :a3270 :a3270 :a3270. :a3271 :a3271 :a3271. :a3272 :a3272 :a3272. :a3273 :a3273 :a3273. :a3274 :a3274 :a3274. :a3275 :a3275 :a3275. :a3276 :a3276 :a3276. :a3277 :a3277 :a3277. :a3278 :a3278 :a3278. :a3279 :a3279 :a3279. :a3280 :a3280 :a3280. :a3281 :a3281 :a3281. :a3282 :a3282 :a3282. :a3283 :a3283 :a3283. :a3284 :a3284 :a3284. :a3285 :a3285 :a3285. :a3286 :a3286 :a3286. :a3287 :a3287 :a3287. :a3288 :a3288 :a3288. :a3289 :a3289 :a3289. :a3290 :a3290 :a3290. :a3291 :a3291 :a3291. :a3292 :a3292 :a3292. :a3293 :a3293 :a3293. :a3294 :a3294 :a3294. :a3295 :a3295 :a3295. :a3296 :a3296 :a3296. :a3297 :a3297 :a3297. :a3298 :a3298 :a3298. :a3299 :a3299 :a3299. :a3300 :a3300 :a3300. :a3301 :a3301 :a3301. :a3302 :a3302 :a3302. :a3303 :a3303 :a3303. :a3304 :a3304 :a3304. :a3305 :a3305 :a3305. :a3306 :a3306 :a3306. :a3307 :a3307 :a3307. :a3308 :a3308 :a3308. :a3309 :a3309 :a3309. :a3310 :a3310 :a3310. :a3311 :a3311 :a3311. :a3312 :a3312 :a3312. :a3313 :a3313 :a3313. :a3314 :a3314 :a3314. :a3315 :a3315 :a3315. :a3316 :a3316 :a3316. :a3317 :a3317 :a3317. :a3318 :a3318 :a3318. :a3319 :a3319 :a3319. :a3320 :a3320 :a3320. :a3321 :a3321 :a3321. :a3322 :a3322 :a3322. :a3323 :a3323 :a3323. :a3324 :a3324 :a3324. :a3325 :a3325 :a3325. :a3326 :a3326 :a3326. :a3327 :a3327 :a3327. :a3328 :a3328 :a3328. :a3329 :a3329 :a3329. :a3330 :a3330 :a3330. :a3331 :a3331 :a3331. :a3332 :a3332 :a3332. :a3333 :a3333 :a3333. :a3334 :a3334 :a3334. :a3335 :a3335 :a3335. :a3336 :a3336 :a3336. :a3337 :a3337 :a3337. :a3338 :a3338 :a3338. :a3339 :a3339 :a3339. :a3340 :a3340 :a3340. :a3341 :a3341 :a3341. :a3342 :a3342 :a3342. :a3343 :a3343 :a3343. :a3344 :a3344 :a3344. :a3345 :a3345 :a3345. :a3346 :a3346 :a3346. :a3347 :a3347 :a3347. :a3348 :a3348 :a3348. :a3349 :a3349 :a3349. :a3350 :a3350 :a3350. :a3351 :a3351 :a3351. :a3352 :a3352 :a3352. :a3353 :a3353 :a3353. :a3354 :a3354 :a3354. :a3355 :a3355 :a3355. :a3356 :a3356 :a3356. :a3357 :a3357 :a3357. :a3358 :a3358 :a3358. :a3359 :a3359 :a3359. :a3360 :a3360 :a3360. :a3361 :a3361 :a3361. :a3362 :a3362 :a3362. :a3363 :a3363 :a3363. :a3364 :a3364 :a3364. :a3365 :a3365 :a3365. :a3366 :a3366 :a3366. :a3367 :a3367 :a3367. :a3368 :a3368 :a3368. :a3369 :a3369 :a3369. :a3370 :a3370 :a3370. :a3371 :a3371 :a3371. :a3372 :a3372 :a3372. :a3373 :a3373 :a3373. :a3374 :a3374 :a3374. :a3375 :a3375 :a3375. :a3376 :a3376 :a3376. :a3377 :a3377 :a3377. :a3378 :a3378 :a3378. :a3379 :a3379 :a3379. :a3380 :a3380 :a3380. :a3381 :a3381 :a3381. :a3382 :a3382 :a3382. :a3383 :a3383 :a3383. :a3384 :a3384 :a3384. :a3385 :a3385 :a3385. :a3386 :a3386 :a3386. :a3387 :a3387 :a3387. :a3388 :a3388 :a3388. :a3389 :a3389 :a3389. :a3390 :a3390 :a3390. :a3391 :a3391 :a3391. :a3392 :a3392 :a3392. :a3393 :a3393 :a3393. :a3394 :a3394 :a3394. :a3395 :a3395 :a3395. :a3396 :a3396 :a3396. :a3397 :a3397 :a3397. :a3398 :a3398 :a3398. :a3399 :a3399 :a3399. :a3400 :a3400 :a3400. :a3401 :a3401 :a3401. :a3402 :a3402 :a3402. :a3403 :a3403 :a3403. :a3404 :a3404 :a3404. :a3405 :a3405 :a3405. :a3406 :a3406 :a3406. :a3407 :a3407 :a3407. :a3408 :a3408 :a3408. :a3409 :a3409 :a3409. :a3410 :a3410 :a3410. :a3411 :a3411 :a3411. :a3412 :a3412 :a3412. :a3413 :a3413 :a3413. :a3414 :a3414 :a3414. :a3415 :a3415 :a3415. :a3416 :a3416 :a3416. :a3417 :a3417 :a3417. :a3418 :a3418 :a3418. :a3419 :a3419 :a3419. :a3420 :a3420 :a3420. :a3421 :a3421 :a3421. :a3422 :a3422 :a3422. :a3423 :a3423 :a3423. :a3424 :a3424 :a3424. :a3425 :a3425 :a3425. :a3426 :a3426 :a3426. :a3427 :a3427 :a3427. :a3428 :a3428 :a3428. :a3429 :a3429 :a3429. :a3430 :a3430 :a3430. :a3431 :a3431 :a3431. :a3432 :a3432 :a3432. :a3433 :a3433 :a3433. :a3434 :a3434 :a3434. :a3435 :a3435 :a3435. :a3436 :a3436 :a3436. :a3437 :a3437 :a3437. :a3438 :a3438 :a3438. :a3439 :a3439 :a3439. :a3440 :a3440 :a3440. :a3441 :a3441 :a3441. :a3442 :a3442 :a3442. :a3443 :a3443 :a3443. :a3444 :a3444 :a3444. :a3445 :a3445 :a3445. :a3446 :a3446 :a3446. :a3447 :a3447 :a3447. :a3448 :a3448 :a3448. :a3449 :a3449 :a3449. :a3450 :a3450 :a3450. :a3451 :a3451 :a3451. :a3452 :a3452 :a3452. :a3453 :a3453 :a3453. :a3454 :a3454 :a3454. :a3455 :a3455 :a3455. :a3456 :a3456 :a3456. :a3457 :a3457 :a3457. :a3458 :a3458 :a3458. :a3459 :a3459 :a3459. :a3460 :a3460 :a3460. :a3461 :a3461 :a3461. :a3462 :a3462 :a3462. :a3463 :a3463 :a3463. :a3464 :a3464 :a3464. :a3465 :a3465 :a3465. :a3466 :a3466 :a3466. :a3467 :a3467 :a3467. :a3468 :a3468 :a3468. :a3469 :a3469 :a3469. :a3470 :a3470 :a3470. :a3471 :a3471 :a3471. :a3472 :a3472 :a3472. :a3473 :a3473 :a3473. :a3474 :a3474 :a3474. :a3475 :a3475 :a3475. :a3476 :a3476 :a3476. :a3477 :a3477 :a3477. :a3478 :a3478 :a3478. :a3479 :a3479 :a3479. :a3480 :a3480 :a3480. :a3481 :a3481 :a3481. :a3482 :a3482 :a3482. :a3483 :a3483 :a3483. :a3484 :a3484 :a3484. :a3485 :a3485 :a3485. :a3486 :a3486 :a3486. :a3487 :a3487 :a3487. :a3488 :a3488 :a3488. :a3489 :a3489 :a3489. :a3490 :a3490 :a3490. :a3491 :a3491 :a3491. :a3492 :a3492 :a3492. :a3493 :a3493 :a3493. :a3494 :a3494 :a3494. :a3495 :a3495 :a3495. :a3496 :a3496 :a3496. :a3497 :a3497 :a3497. :a3498 :a3498 :a3498. :a3499 :a3499 :a3499. :a3500 :a3500 :a3500. :a3501 :a3501 :a3501. :a3502 :a3502 :a3502. :a3503 :a3503 :a3503. :a3504 :a3504 :a3504. :a3505 :a3505 :a3505. :a3506 :a3506 :a3506. :a3507 :a3507 :a3507. :a3508 :a3508 :a3508. :a3509 :a3509 :a3509. :a3510 :a3510 :a3510. :a3511 :a3511 :a3511. :a3512 :a3512 :a3512. :a3513 :a3513 :a3513. :a3514 :a3514 :a3514. :a3515 :a3515 :a3515. :a3516 :a3516 :a3516. :a3517 :a3517 :a3517. :a3518 :a3518 :a3518. :a3519 :a3519 :a3519. :a3520 :a3520 :a3520. :a3521 :a3521 :a3521. :a3522 :a3522 :a3522. :a3523 :a3523 :a3523. :a3524 :a3524 :a3524. :a3525 :a3525 :a3525. :a3526 :a3526 :a3526. :a3527 :a3527 :a3527. :a3528 :a3528 :a3528. :a3529 :a3529 :a3529. :a3530 :a3530 :a3530. :a3531 :a3531 :a3531. :a3532 :a3532 :a3532. :a3533 :a3533 :a3533. :a3534 :a3534 :a3534. :a3535 :a3535 :a3535. :a3536 :a3536 :a3536. :a3537 :a3537 :a3537. :a3538 :a3538 :a3538. :a3539 :a3539 :a3539. :a3540 :a3540 :a3540. :a3541 :a3541 :a3541. :a3542 :a3542 :a3542. :a3543 :a3543 :a3543. :a3544 :a3544 :a3544. :a3545 :a3545 :a3545. :a3546 :a3546 :a3546. :a3547 :a3547 :a3547. :a3548 :a3548 :a3548. :a3549 :a3549 :a3549. :a3550 :a3550 :a3550. :a3551 :a3551 :a3551. :a3552 :a3552 :a3552. :a3553 :a3553 :a3553. :a3554 :a3554 :a3554. :a3555 :a3555 :a3555. :a3556 :a3556 :a3556. :a3557 :a3557 :a3557. :a3558 :a3558 :a3558. :a3559 :a3559 :a3559. :a3560 :a3560 :a3560. :a3561 :a3561 :a3561. :a3562 :a3562 :a3562. :a3563 :a3563 :a3563. :a3564 :a3564 :a3564. :a3565 :a3565 :a3565. :a3566 :a3566 :a3566. :a3567 :a3567 :a3567. :a3568 :a3568 :a3568. :a3569 :a3569 :a3569. :a3570 :a3570 :a3570. :a3571 :a3571 :a3571. :a3572 :a3572 :a3572. :a3573 :a3573 :a3573. :a3574 :a3574 :a3574. :a3575 :a3575 :a3575. :a3576 :a3576 :a3576. :a3577 :a3577 :a3577. :a3578 :a3578 :a3578. :a3579 :a3579 :a3579. :a3580 :a3580 :a3580. :a3581 :a3581 :a3581. :a3582 :a3582 :a3582. :a3583 :a3583 :a3583. :a3584 :a3584 :a3584. :a3585 :a3585 :a3585. :a3586 :a3586 :a3586. :a3587 :a3587 :a3587. :a3588 :a3588 :a3588. :a3589 :a3589 :a3589. :a3590 :a3590 :a3590. :a3591 :a3591 :a3591. :a3592 :a3592 :a3592. :a3593 :a3593 :a3593. :a3594 :a3594 :a3594. :a3595 :a3595 :a3595. :a3596 :a3596 :a3596. :a3597 :a3597 :a3597. :a3598 :a3598 :a3598. :a3599 :a3599 :a3599. :a3600 :a3600 :a3600. :a3601 :a3601 :a3601. :a3602 :a3602 :a3602. :a3603 :a3603 :a3603. :a3604 :a3604 :a3604. :a3605 :a3605 :a3605. :a3606 :a3606 :a3606. :a3607 :a3607 :a3607. :a3608 :a3608 :a3608. :a3609 :a3609 :a3609. :a3610 :a3610 :a3610. :a3611 :a3611 :a3611. :a3612 :a3612 :a3612. :a3613 :a3613 :a3613. :a3614 :a3614 :a3614. :a3615 :a3615 :a3615. :a3616 :a3616 :a3616. :a3617 :a3617 :a3617. :a3618 :a3618 :a3618. :a3619 :a3619 :a3619. :a3620 :a3620 :a3620. :a3621 :a3621 :a3621. :a3622 :a3622 :a3622. :a3623 :a3623 :a3623. :a3624 :a3624 :a3624. :a3625 :a3625 :a3625. :a3626 :a3626 :a3626. :a3627 :a3627 :a3627. :a3628 :a3628 :a3628. :a3629 :a3629 :a3629. :a3630 :a3630 :a3630. :a3631 :a3631 :a3631. :a3632 :a3632 :a3632. :a3633 :a3633 :a3633. :a3634 :a3634 :a3634. :a3635 :a3635 :a3635. :a3636 :a3636 :a3636. :a3637 :a3637 :a3637. :a3638 :a3638 :a3638. :a3639 :a3639 :a3639. :a3640 :a3640 :a3640. :a3641 :a3641 :a3641. :a3642 :a3642 :a3642. :a3643 :a3643 :a3643. :a3644 :a3644 :a3644. :a3645 :a3645 :a3645. :a3646 :a3646 :a3646. :a3647 :a3647 :a3647. :a3648 :a3648 :a3648. :a3649 :a3649 :a3649. :a3650 :a3650 :a3650. :a3651 :a3651 :a3651. :a3652 :a3652 :a3652. :a3653 :a3653 :a3653. :a3654 :a3654 :a3654. :a3655 :a3655 :a3655. :a3656 :a3656 :a3656. :a3657 :a3657 :a3657. :a3658 :a3658 :a3658. :a3659 :a3659 :a3659. :a3660 :a3660 :a3660. :a3661 :a3661 :a3661. :a3662 :a3662 :a3662. :a3663 :a3663 :a3663. :a3664 :a3664 :a3664. :a3665 :a3665 :a3665. :a3666 :a3666 :a3666. :a3667 :a3667 :a3667. :a3668 :a3668 :a3668. :a3669 :a3669 :a3669. :a3670 :a3670 :a3670. :a3671 :a3671 :a3671. :a3672 :a3672 :a3672. :a3673 :a3673 :a3673. :a3674 :a3674 :a3674. :a3675 :a3675 :a3675. :a3676 :a3676 :a3676. :a3677 :a3677 :a3677. :a3678 :a3678 :a3678. :a3679 :a3679 :a3679. :a3680 :a3680 :a3680. :a3681 :a3681 :a3681. :a3682 :a3682 :a3682. :a3683 :a3683 :a3683. :a3684 :a3684 :a3684. :a3685 :a3685 :a3685. :a3686 :a3686 :a3686. :a3687 :a3687 :a3687. :a3688 :a3688 :a3688. :a3689 :a3689 :a3689. :a3690 :a3690 :a3690. :a3691 :a3691 :a3691. :a3692 :a3692 :a3692. :a3693 :a3693 :a3693. :a3694 :a3694 :a3694. :a3695 :a3695 :a3695. :a3696 :a3696 :a3696. :a3697 :a3697 :a3697. :a3698 :a3698 :a3698. :a3699 :a3699 :a3699. :a3700 :a3700 :a3700. :a3701 :a3701 :a3701. :a3702 :a3702 :a3702. :a3703 :a3703 :a3703. :a3704 :a3704 :a3704. :a3705 :a3705 :a3705. :a3706 :a3706 :a3706. :a3707 :a3707 :a3707. :a3708 :a3708 :a3708. :a3709 :a3709 :a3709. :a3710 :a3710 :a3710. :a3711 :a3711 :a3711. :a3712 :a3712 :a3712. :a3713 :a3713 :a3713. :a3714 :a3714 :a3714. :a3715 :a3715 :a3715. :a3716 :a3716 :a3716. :a3717 :a3717 :a3717. :a3718 :a3718 :a3718. :a3719 :a3719 :a3719. :a3720 :a3720 :a3720. :a3721 :a3721 :a3721. :a3722 :a3722 :a3722. :a3723 :a3723 :a3723. :a3724 :a3724 :a3724. :a3725 :a3725 :a3725. :a3726 :a3726 :a3726. :a3727 :a3727 :a3727. :a3728 :a3728 :a3728. :a3729 :a3729 :a3729. :a3730 :a3730 :a3730. :a3731 :a3731 :a3731. :a3732 :a3732 :a3732. :a3733 :a3733 :a3733. :a3734 :a3734 :a3734. :a3735 :a3735 :a3735. :a3736 :a3736 :a3736. :a3737 :a3737 :a3737. :a3738 :a3738 :a3738. :a3739 :a3739 :a3739. :a3740 :a3740 :a3740. :a3741 :a3741 :a3741. :a3742 :a3742 :a3742. :a3743 :a3743 :a3743. :a3744 :a3744 :a3744. :a3745 :a3745 :a3745. :a3746 :a3746 :a3746. :a3747 :a3747 :a3747. :a3748 :a3748 :a3748. :a3749 :a3749 :a3749. :a3750 :a3750 :a3750. :a3751 :a3751 :a3751. :a3752 :a3752 :a3752. :a3753 :a3753 :a3753. :a3754 :a3754 :a3754. :a3755 :a3755 :a3755. :a3756 :a3756 :a3756. :a3757 :a3757 :a3757. :a3758 :a3758 :a3758. :a3759 :a3759 :a3759. :a3760 :a3760 :a3760. :a3761 :a3761 :a3761. :a3762 :a3762 :a3762. :a3763 :a3763 :a3763. :a3764 :a3764 :a3764. :a3765 :a3765 :a3765. :a3766 :a3766 :a3766. :a3767 :a3767 :a3767. :a3768 :a3768 :a3768. :a3769 :a3769 :a3769. :a3770 :a3770 :a3770. :a3771 :a3771 :a3771. :a3772 :a3772 :a3772. :a3773 :a3773 :a3773. :a3774 :a3774 :a3774. :a3775 :a3775 :a3775. :a3776 :a3776 :a3776. :a3777 :a3777 :a3777. :a3778 :a3778 :a3778. :a3779 :a3779 :a3779. :a3780 :a3780 :a3780. :a3781 :a3781 :a3781. :a3782 :a3782 :a3782. :a3783 :a3783 :a3783. :a3784 :a3784 :a3784. :a3785 :a3785 :a3785. :a3786 :a3786 :a3786. :a3787 :a3787 :a3787. :a3788 :a3788 :a3788. :a3789 :a3789 :a3789. :a3790 :a3790 :a3790. :a3791 :a3791 :a3791. :a3792 :a3792 :a3792. :a3793 :a3793 :a3793. :a3794 :a3794 :a3794. :a3795 :a3795 :a3795. :a3796 :a3796 :a3796. :a3797 :a3797 :a3797. :a3798 :a3798 :a3798. :a3799 :a3799 :a3799. :a3800 :a3800 :a3800. :a3801 :a3801 :a3801. :a3802 :a3802 :a3802. :a3803 :a3803 :a3803. :a3804 :a3804 :a3804. :a3805 :a3805 :a3805. :a3806 :a3806 :a3806. :a3807 :a3807 :a3807. :a3808 :a3808 :a3808. :a3809 :a3809 :a3809. :a3810 :a3810 :a3810. :a3811 :a3811 :a3811. :a3812 :a3812 :a3812. :a3813 :a3813 :a3813. :a3814 :a3814 :a3814. :a3815 :a3815 :a3815. :a3816 :a3816 :a3816. :a3817 :a3817 :a3817. :a3818 :a3818 :a3818. :a3819 :a3819 :a3819. :a3820 :a3820 :a3820. :a3821 :a3821 :a3821. :a3822 :a3822 :a3822. :a3823 :a3823 :a3823. :a3824 :a3824 :a3824. :a3825 :a3825 :a3825. :a3826 :a3826 :a3826. :a3827 :a3827 :a3827. :a3828 :a3828 :a3828. :a3829 :a3829 :a3829. :a3830 :a3830 :a3830. :a3831 :a3831 :a3831. :a3832 :a3832 :a3832. :a3833 :a3833 :a3833. :a3834 :a3834 :a3834. :a3835 :a3835 :a3835. :a3836 :a3836 :a3836. :a3837 :a3837 :a3837. :a3838 :a3838 :a3838. :a3839 :a3839 :a3839. :a3840 :a3840 :a3840. :a3841 :a3841 :a3841. :a3842 :a3842 :a3842. :a3843 :a3843 :a3843. :a3844 :a3844 :a3844. :a3845 :a3845 :a3845. :a3846 :a3846 :a3846. :a3847 :a3847 :a3847. :a3848 :a3848 :a3848. :a3849 :a3849 :a3849. :a3850 :a3850 :a3850. :a3851 :a3851 :a3851. :a3852 :a3852 :a3852. :a3853 :a3853 :a3853. :a3854 :a3854 :a3854. :a3855 :a3855 :a3855. :a3856 :a3856 :a3856. :a3857 :a3857 :a3857. :a3858 :a3858 :a3858. :a3859 :a3859 :a3859. :a3860 :a3860 :a3860. :a3861 :a3861 :a3861. :a3862 :a3862 :a3862. :a3863 :a3863 :a3863. :a3864 :a3864 :a3864. :a3865 :a3865 :a3865. :a3866 :a3866 :a3866. :a3867 :a3867 :a3867. :a3868 :a3868 :a3868. :a3869 :a3869 :a3869. :a3870 :a3870 :a3870. :a3871 :a3871 :a3871. :a3872 :a3872 :a3872. :a3873 :a3873 :a3873. :a3874 :a3874 :a3874. :a3875 :a3875 :a3875. :a3876 :a3876 :a3876. :a3877 :a3877 :a3877. :a3878 :a3878 :a3878. :a3879 :a3879 :a3879. :a3880 :a3880 :a3880. :a3881 :a3881 :a3881. :a3882 :a3882 :a3882. :a3883 :a3883 :a3883. :a3884 :a3884 :a3884. :a3885 :a3885 :a3885. :a3886 :a3886 :a3886. :a3887 :a3887 :a3887. :a3888 :a3888 :a3888. :a3889 :a3889 :a3889. :a3890 :a3890 :a3890. :a3891 :a3891 :a3891. :a3892 :a3892 :a3892. :a3893 :a3893 :a3893. :a3894 :a3894 :a3894. :a3895 :a3895 :a3895. :a3896 :a3896 :a3896. :a3897 :a3897 :a3897. :a3898 :a3898 :a3898. :a3899 :a3899 :a3899. :a3900 :a3900 :a3900. :a3901 :a3901 :a3901. :a3902 :a3902 :a3902. :a3903 :a3903 :a3903. :a3904 :a3904 :a3904. :a3905 :a3905 :a3905. :a3906 :a3906 :a3906. :a3907 :a3907 :a3907. :a3908 :a3908 :a3908. :a3909 :a3909 :a3909. :a3910 :a3910 :a3910. :a3911 :a3911 :a3911. :a3912 :a3912 :a3912. :a3913 :a3913 :a3913. :a3914 :a3914 :a3914. :a3915 :a3915 :a3915. :a3916 :a3916 :a3916. :a3917 :a3917 :a3917. :a3918 :a3918 :a3918. :a3919 :a3919 :a3919. :a3920 :a3920 :a3920. :a3921 :a3921 :a3921. :a3922 :a3922 :a3922. :a3923 :a3923 :a3923. :a3924 :a3924 :a3924. :a3925 :a3925 :a3925. :a3926 :a3926 :a3926. :a3927 :a3927 :a3927. :a3928 :a3928 :a3928. :a3929 :a3929 :a3929. :a3930 :a3930 :a3930. :a3931 :a3931 :a3931. :a3932 :a3932 :a3932. :a3933 :a3933 :a3933. :a3934 :a3934 :a3934. :a3935 :a3935 :a3935. :a3936 :a3936 :a3936. :a3937 :a3937 :a3937. :a3938 :a3938 :a3938. :a3939 :a3939 :a3939. :a3940 :a3940 :a3940. :a3941 :a3941 :a3941. :a3942 :a3942 :a3942. :a3943 :a3943 :a3943. :a3944 :a3944 :a3944. :a3945 :a3945 :a3945. :a3946 :a3946 :a3946. :a3947 :a3947 :a3947. :a3948 :a3948 :a3948. :a3949 :a3949 :a3949. :a3950 :a3950 :a3950. :a3951 :a3951 :a3951. :a3952 :a3952 :a3952. :a3953 :a3953 :a3953. :a3954 :a3954 :a3954. :a3955 :a3955 :a3955. :a3956 :a3956 :a3956. :a3957 :a3957 :a3957. :a3958 :a3958 :a3958. :a3959 :a3959 :a3959. :a3960 :a3960 :a3960. :a3961 :a3961 :a3961. :a3962 :a3962 :a3962. :a3963 :a3963 :a3963. :a3964 :a3964 :a3964. :a3965 :a3965 :a3965. :a3966 :a3966 :a3966. :a3967 :a3967 :a3967. :a3968 :a3968 :a3968. :a3969 :a3969 :a3969. :a3970 :a3970 :a3970. :a3971 :a3971 :a3971. :a3972 :a3972 :a3972. :a3973 :a3973 :a3973. :a3974 :a3974 :a3974. :a3975 :a3975 :a3975. :a3976 :a3976 :a3976. :a3977 :a3977 :a3977. :a3978 :a3978 :a3978. :a3979 :a3979 :a3979. :a3980 :a3980 :a3980. :a3981 :a3981 :a3981. :a3982 :a3982 :a3982. :a3983 :a3983 :a3983. :a3984 :a3984 :a3984. :a3985 :a3985 :a3985. :a3986 :a3986 :a3986. :a3987 :a3987 :a3987. :a3988 :a3988 :a3988. :a3989 :a3989 :a3989. :a3990 :a3990 :a3990. :a3991 :a3991 :a3991. :a3992 :a3992 :a3992. :a3993 :a3993 :a3993. :a3994 :a3994 :a3994. :a3995 :a3995 :a3995. :a3996 :a3996 :a3996. :a3997 :a3997 :a3997. :a3998 :a3998 :a3998. :a3999 :a3999 :a3999. :a4000 :a4000 :a4000. :a4001 :a4001 :a4001. :a4002 :a4002 :a4002. :a4003 :a4003 :a4003. :a4004 :a4004 :a4004. :a4005 :a4005 :a4005. :a4006 :a4006 :a4006. :a4007 :a4007 :a4007. :a4008 :a4008 :a4008. :a4009 :a4009 :a4009. :a4010 :a4010 :a4010. :a4011 :a4011 :a4011. :a4012 :a4012 :a4012. :a4013 :a4013 :a4013. :a4014 :a4014 :a4014. :a4015 :a4015 :a4015. :a4016 :a4016 :a4016. :a4017 :a4017 :a4017. :a4018 :a4018 :a4018. :a4019 :a4019 :a4019. :a4020 :a4020 :a4020. :a4021 :a4021 :a4021. :a4022 :a4022 :a4022. :a4023 :a4023 :a4023. :a4024 :a4024 :a4024. :a4025 :a4025 :a4025. :a4026 :a4026 :a4026. :a4027 :a4027 :a4027. :a4028 :a4028 :a4028. :a4029 :a4029 :a4029. :a4030 :a4030 :a4030. :a4031 :a4031 :a4031. :a4032 :a4032 :a4032. :a4033 :a4033 :a4033. :a4034 :a4034 :a4034. :a4035 :a4035 :a4035. :a4036 :a4036 :a4036. :a4037 :a4037 :a4037. :a4038 :a4038 :a4038. :a4039 :a4039 :a4039. :a4040 :a4040 :a4040. :a4041 :a4041 :a4041. :a4042 :a4042 :a4042. :a4043 :a4043 :a4043. :a4044 :a4044 :a4044. :a4045 :a4045 :a4045. :a4046 :a4046 :a4046. :a4047 :a4047 :a4047. :a4048 :a4048 :a4048. :a4049 :a4049 :a4049. :a4050 :a4050 :a4050. :a4051 :a4051 :a4051. :a4052 :a4052 :a4052. :a4053 :a4053 :a4053. :a4054 :a4054 :a4054. :a4055 :a4055 :a4055. :a4056 :a4056 :a4056. :a4057 :a4057 :a4057. :a4058 :a4058 :a4058. :a4059 :a4059 :a4059. :a4060 :a4060 :a4060. :a4061 :a4061 :a4061. :a4062 :a4062 :a4062. :a4063 :a4063 :a4063. :a4064 :a4064 :a4064. :a4065 :a4065 :a4065. :a4066 :a4066 :a4066. :a4067 :a4067 :a4067. :a4068 :a4068 :a4068. :a4069 :a4069 :a4069. :a4070 :a4070 :a4070. :a4071 :a4071 :a4071. :a4072 :a4072 :a4072. :a4073 :a4073 :a4073. :a4074 :a4074 :a4074. :a4075 :a4075 :a4075. :a4076 :a4076 :a4076. :a4077 :a4077 :a4077. :a4078 :a4078 :a4078. :a4079 :a4079 :a4079. :a4080 :a4080 :a4080. :a4081 :a4081 :a4081. :a4082 :a4082 :a4082. :a4083 :a4083 :a4083. :a4084 :a4084 :a4084. :a4085 :a4085 :a4085. :a4086 :a4086 :a4086. :a4087 :a4087 :a4087. :a4088 :a4088 :a4088. :a4089 :a4089 :a4089. :a4090 :a4090 :a4090. :a4091 :a4091 :a4091. :a4092 :a4092 :a4092. :a4093 :a4093 :a4093. :a4094 :a4094 :a4094. :a4095 :a4095 :a4095. :a4096 :a4096 :a4096. :a4097 :a4097 :a4097. :a4098 :a4098 :a4098. :a4099 :a4099 :a4099. :a4100 :a4100 :a4100. :a4101 :a4101 :a4101. :a4102 :a4102 :a4102. :a4103 :a4103 :a4103. :a4104 :a4104 :a4104. :a4105 :a4105 :a4105. :a4106 :a4106 :a4106. :a4107 :a4107 :a4107. :a4108 :a4108 :a4108. :a4109 :a4109 :a4109. :a4110 :a4110 :a4110. :a4111 :a4111 :a4111. :a4112 :a4112 :a4112. :a4113 :a4113 :a4113. :a4114 :a4114 :a4114. :a4115 :a4115 :a4115. :a4116 :a4116 :a4116. :a4117 :a4117 :a4117. :a4118 :a4118 :a4118. :a4119 :a4119 :a4119. :a4120 :a4120 :a4120. :a4121 :a4121 :a4121. :a4122 :a4122 :a4122. :a4123 :a4123 :a4123. :a4124 :a4124 :a4124. :a4125 :a4125 :a4125. :a4126 :a4126 :a4126. :a4127 :a4127 :a4127. :a4128 :a4128 :a4128. :a4129 :a4129 :a4129. :a4130 :a4130 :a4130. :a4131 :a4131 :a4131. :a4132 :a4132 :a4132. :a4133 :a4133 :a4133. :a4134 :a4134 :a4134. :a4135 :a4135 :a4135. :a4136 :a4136 :a4136. :a4137 :a4137 :a4137. :a4138 :a4138 :a4138. :a4139 :a4139 :a4139. :a4140 :a4140 :a4140. :a4141 :a4141 :a4141. :a4142 :a4142 :a4142. :a4143 :a4143 :a4143. :a4144 :a4144 :a4144. :a4145 :a4145 :a4145. :a4146 :a4146 :a4146. :a4147 :a4147 :a4147. :a4148 :a4148 :a4148. :a4149 :a4149 :a4149. :a4150 :a4150 :a4150. :a4151 :a4151 :a4151. :a4152 :a4152 :a4152. :a4153 :a4153 :a4153. :a4154 :a4154 :a4154. :a4155 :a4155 :a4155. :a4156 :a4156 :a4156. :a4157 :a4157 :a4157. :a4158 :a4158 :a4158. :a4159 :a4159 :a4159. :a4160 :a4160 :a4160. :a4161 :a4161 :a4161. :a4162 :a4162 :a4162. :a4163 :a4163 :a4163. :a4164 :a4164 :a4164. :a4165 :a4165 :a4165. :a4166 :a4166 :a4166. :a4167 :a4167 :a4167. :a4168 :a4168 :a4168. :a4169 :a4169 :a4169. :a4170 :a4170 :a4170. :a4171 :a4171 :a4171. :a4172 :a4172 :a4172. :a4173 :a4173 :a4173. :a4174 :a4174 :a4174. :a4175 :a4175 :a4175. :a4176 :a4176 :a4176. :a4177 :a4177 :a4177. :a4178 :a4178 :a4178. :a4179 :a4179 :a4179. :a4180 :a4180 :a4180. :a4181 :a4181 :a4181. :a4182 :a4182 :a4182. :a4183 :a4183 :a4183. :a4184 :a4184 :a4184. :a4185 :a4185 :a4185. :a4186 :a4186 :a4186. :a4187 :a4187 :a4187. :a4188 :a4188 :a4188. :a4189 :a4189 :a4189. :a4190 :a4190 :a4190. :a4191 :a4191 :a4191. :a4192 :a4192 :a4192. :a4193 :a4193 :a4193. :a4194 :a4194 :a4194. :a4195 :a4195 :a4195. :a4196 :a4196 :a4196. :a4197 :a4197 :a4197. :a4198 :a4198 :a4198. :a4199 :a4199 :a4199. :a4200 :a4200 :a4200. :a4201 :a4201 :a4201. :a4202 :a4202 :a4202. :a4203 :a4203 :a4203. :a4204 :a4204 :a4204. :a4205 :a4205 :a4205. :a4206 :a4206 :a4206. :a4207 :a4207 :a4207. :a4208 :a4208 :a4208. :a4209 :a4209 :a4209. :a4210 :a4210 :a4210. :a4211 :a4211 :a4211. :a4212 :a4212 :a4212. :a4213 :a4213 :a4213. :a4214 :a4214 :a4214. :a4215 :a4215 :a4215. :a4216 :a4216 :a4216. :a4217 :a4217 :a4217. :a4218 :a4218 :a4218. :a4219 :a4219 :a4219. :a4220 :a4220 :a4220. :a4221 :a4221 :a4221. :a4222 :a4222 :a4222. :a4223 :a4223 :a4223. :a4224 :a4224 :a4224. :a4225 :a4225 :a4225. :a4226 :a4226 :a4226. :a4227 :a4227 :a4227. :a4228 :a4228 :a4228. :a4229 :a4229 :a4229. :a4230 :a4230 :a4230. :a4231 :a4231 :a4231. :a4232 :a4232 :a4232. :a4233 :a4233 :a4233. :a4234 :a4234 :a4234. :a4235 :a4235 :a4235. :a4236 :a4236 :a4236. :a4237 :a4237 :a4237. :a4238 :a4238 :a4238. :a4239 :a4239 :a4239. :a4240 :a4240 :a4240. :a4241 :a4241 :a4241. :a4242 :a4242 :a4242. :a4243 :a4243 :a4243. :a4244 :a4244 :a4244. :a4245 :a4245 :a4245. :a4246 :a4246 :a4246. :a4247 :a4247 :a4247. :a4248 :a4248 :a4248. :a4249 :a4249 :a4249. :a4250 :a4250 :a4250. :a4251 :a4251 :a4251. :a4252 :a4252 :a4252. :a4253 :a4253 :a4253. :a4254 :a4254 :a4254. :a4255 :a4255 :a4255. :a4256 :a4256 :a4256. :a4257 :a4257 :a4257. :a4258 :a4258 :a4258. :a4259 :a4259 :a4259. :a4260 :a4260 :a4260. :a4261 :a4261 :a4261. :a4262 :a4262 :a4262. :a4263 :a4263 :a4263. :a4264 :a4264 :a4264. :a4265 :a4265 :a4265. :a4266 :a4266 :a4266. :a4267 :a4267 :a4267. :a4268 :a4268 :a4268. :a4269 :a4269 :a4269. :a4270 :a4270 :a4270. :a4271 :a4271 :a4271. :a4272 :a4272 :a4272. :a4273 :a4273 :a4273. :a4274 :a4274 :a4274. :a4275 :a4275 :a4275. :a4276 :a4276 :a4276. :a4277 :a4277 :a4277. :a4278 :a4278 :a4278. :a4279 :a4279 :a4279. :a4280 :a4280 :a4280. :a4281 :a4281 :a4281. :a4282 :a4282 :a4282. :a4283 :a4283 :a4283. :a4284 :a4284 :a4284. :a4285 :a4285 :a4285. :a4286 :a4286 :a4286. :a4287 :a4287 :a4287. :a4288 :a4288 :a4288. :a4289 :a4289 :a4289. :a4290 :a4290 :a4290. :a4291 :a4291 :a4291. :a4292 :a4292 :a4292. :a4293 :a4293 :a4293. :a4294 :a4294 :a4294. :a4295 :a4295 :a4295. :a4296 :a4296 :a4296. :a4297 :a4297 :a4297. :a4298 :a4298 :a4298. :a4299 :a4299 :a4299. :a4300 :a4300 :a4300. :a4301 :a4301 :a4301. :a4302 :a4302 :a4302. :a4303 :a4303 :a4303. :a4304 :a4304 :a4304. :a4305 :a4305 :a4305. :a4306 :a4306 :a4306. :a4307 :a4307 :a4307. :a4308 :a4308 :a4308. :a4309 :a4309 :a4309. :a4310 :a4310 :a4310. :a4311 :a4311 :a4311. :a4312 :a4312 :a4312. :a4313 :a4313 :a4313. :a4314 :a4314 :a4314. :a4315 :a4315 :a4315. :a4316 :a4316 :a4316. :a4317 :a4317 :a4317. :a4318 :a4318 :a4318. :a4319 :a4319 :a4319. :a4320 :a4320 :a4320. :a4321 :a4321 :a4321. :a4322 :a4322 :a4322. :a4323 :a4323 :a4323. :a4324 :a4324 :a4324. :a4325 :a4325 :a4325. :a4326 :a4326 :a4326. :a4327 :a4327 :a4327. :a4328 :a4328 :a4328. :a4329 :a4329 :a4329. :a4330 :a4330 :a4330. :a4331 :a4331 :a4331. :a4332 :a4332 :a4332. :a4333 :a4333 :a4333. :a4334 :a4334 :a4334. :a4335 :a4335 :a4335. :a4336 :a4336 :a4336. :a4337 :a4337 :a4337. :a4338 :a4338 :a4338. :a4339 :a4339 :a4339. :a4340 :a4340 :a4340. :a4341 :a4341 :a4341. :a4342 :a4342 :a4342. :a4343 :a4343 :a4343. :a4344 :a4344 :a4344. :a4345 :a4345 :a4345. :a4346 :a4346 :a4346. :a4347 :a4347 :a4347. :a4348 :a4348 :a4348. :a4349 :a4349 :a4349. :a4350 :a4350 :a4350. :a4351 :a4351 :a4351. :a4352 :a4352 :a4352. :a4353 :a4353 :a4353. :a4354 :a4354 :a4354. :a4355 :a4355 :a4355. :a4356 :a4356 :a4356. :a4357 :a4357 :a4357. :a4358 :a4358 :a4358. :a4359 :a4359 :a4359. :a4360 :a4360 :a4360. :a4361 :a4361 :a4361. :a4362 :a4362 :a4362. :a4363 :a4363 :a4363. :a4364 :a4364 :a4364. :a4365 :a4365 :a4365. :a4366 :a4366 :a4366. :a4367 :a4367 :a4367. :a4368 :a4368 :a4368. :a4369 :a4369 :a4369. :a4370 :a4370 :a4370. :a4371 :a4371 :a4371. :a4372 :a4372 :a4372. :a4373 :a4373 :a4373. :a4374 :a4374 :a4374. :a4375 :a4375 :a4375. :a4376 :a4376 :a4376. :a4377 :a4377 :a4377. :a4378 :a4378 :a4378. :a4379 :a4379 :a4379. :a4380 :a4380 :a4380. :a4381 :a4381 :a4381. :a4382 :a4382 :a4382. :a4383 :a4383 :a4383. :a4384 :a4384 :a4384. :a4385 :a4385 :a4385. :a4386 :a4386 :a4386. :a4387 :a4387 :a4387. :a4388 :a4388 :a4388. :a4389 :a4389 :a4389. :a4390 :a4390 :a4390. :a4391 :a4391 :a4391. :a4392 :a4392 :a4392. :a4393 :a4393 :a4393. :a4394 :a4394 :a4394. :a4395 :a4395 :a4395. :a4396 :a4396 :a4396. :a4397 :a4397 :a4397. :a4398 :a4398 :a4398. :a4399 :a4399 :a4399. :a4400 :a4400 :a4400. :a4401 :a4401 :a4401. :a4402 :a4402 :a4402. :a4403 :a4403 :a4403. :a4404 :a4404 :a4404. :a4405 :a4405 :a4405. :a4406 :a4406 :a4406. :a4407 :a4407 :a4407. :a4408 :a4408 :a4408. :a4409 :a4409 :a4409. :a4410 :a4410 :a4410. :a4411 :a4411 :a4411. :a4412 :a4412 :a4412. :a4413 :a4413 :a4413. :a4414 :a4414 :a4414. :a4415 :a4415 :a4415. :a4416 :a4416 :a4416. :a4417 :a4417 :a4417. :a4418 :a4418 :a4418. :a4419 :a4419 :a4419. :a4420 :a4420 :a4420. :a4421 :a4421 :a4421. :a4422 :a4422 :a4422. :a4423 :a4423 :a4423. :a4424 :a4424 :a4424. :a4425 :a4425 :a4425. :a4426 :a4426 :a4426. :a4427 :a4427 :a4427. :a4428 :a4428 :a4428. :a4429 :a4429 :a4429. :a4430 :a4430 :a4430. :a4431 :a4431 :a4431. :a4432 :a4432 :a4432. :a4433 :a4433 :a4433. :a4434 :a4434 :a4434. :a4435 :a4435 :a4435. :a4436 :a4436 :a4436. :a4437 :a4437 :a4437. :a4438 :a4438 :a4438. :a4439 :a4439 :a4439. :a4440 :a4440 :a4440. :a4441 :a4441 :a4441. :a4442 :a4442 :a4442. :a4443 :a4443 :a4443. :a4444 :a4444 :a4444. :a4445 :a4445 :a4445. :a4446 :a4446 :a4446. :a4447 :a4447 :a4447. :a4448 :a4448 :a4448. :a4449 :a4449 :a4449. :a4450 :a4450 :a4450. :a4451 :a4451 :a4451. :a4452 :a4452 :a4452. :a4453 :a4453 :a4453. :a4454 :a4454 :a4454. :a4455 :a4455 :a4455. :a4456 :a4456 :a4456. :a4457 :a4457 :a4457. :a4458 :a4458 :a4458. :a4459 :a4459 :a4459. :a4460 :a4460 :a4460. :a4461 :a4461 :a4461. :a4462 :a4462 :a4462. :a4463 :a4463 :a4463. :a4464 :a4464 :a4464. :a4465 :a4465 :a4465. :a4466 :a4466 :a4466. :a4467 :a4467 :a4467. :a4468 :a4468 :a4468. :a4469 :a4469 :a4469. :a4470 :a4470 :a4470. :a4471 :a4471 :a4471. :a4472 :a4472 :a4472. :a4473 :a4473 :a4473. :a4474 :a4474 :a4474. :a4475 :a4475 :a4475. :a4476 :a4476 :a4476. :a4477 :a4477 :a4477. :a4478 :a4478 :a4478. :a4479 :a4479 :a4479. :a4480 :a4480 :a4480. :a4481 :a4481 :a4481. :a4482 :a4482 :a4482. :a4483 :a4483 :a4483. :a4484 :a4484 :a4484. :a4485 :a4485 :a4485. :a4486 :a4486 :a4486. :a4487 :a4487 :a4487. :a4488 :a4488 :a4488. :a4489 :a4489 :a4489. :a4490 :a4490 :a4490. :a4491 :a4491 :a4491. :a4492 :a4492 :a4492. :a4493 :a4493 :a4493. :a4494 :a4494 :a4494. :a4495 :a4495 :a4495. :a4496 :a4496 :a4496. :a4497 :a4497 :a4497. :a4498 :a4498 :a4498. :a4499 :a4499 :a4499. :a4500 :a4500 :a4500. :a4501 :a4501 :a4501. :a4502 :a4502 :a4502. :a4503 :a4503 :a4503. :a4504 :a4504 :a4504. :a4505 :a4505 :a4505. :a4506 :a4506 :a4506. :a4507 :a4507 :a4507. :a4508 :a4508 :a4508. :a4509 :a4509 :a4509. :a4510 :a4510 :a4510. :a4511 :a4511 :a4511. :a4512 :a4512 :a4512. :a4513 :a4513 :a4513. :a4514 :a4514 :a4514. :a4515 :a4515 :a4515. :a4516 :a4516 :a4516. :a4517 :a4517 :a4517. :a4518 :a4518 :a4518. :a4519 :a4519 :a4519. :a4520 :a4520 :a4520. :a4521 :a4521 :a4521. :a4522 :a4522 :a4522. :a4523 :a4523 :a4523. :a4524 :a4524 :a4524. :a4525 :a4525 :a4525. :a4526 :a4526 :a4526. :a4527 :a4527 :a4527. :a4528 :a4528 :a4528. :a4529 :a4529 :a4529. :a4530 :a4530 :a4530. :a4531 :a4531 :a4531. :a4532 :a4532 :a4532. :a4533 :a4533 :a4533. :a4534 :a4534 :a4534. :a4535 :a4535 :a4535. :a4536 :a4536 :a4536. :a4537 :a4537 :a4537. :a4538 :a4538 :a4538. :a4539 :a4539 :a4539. :a4540 :a4540 :a4540. :a4541 :a4541 :a4541. :a4542 :a4542 :a4542. :a4543 :a4543 :a4543. :a4544 :a4544 :a4544. :a4545 :a4545 :a4545. :a4546 :a4546 :a4546. :a4547 :a4547 :a4547. :a4548 :a4548 :a4548. :a4549 :a4549 :a4549. :a4550 :a4550 :a4550. :a4551 :a4551 :a4551. :a4552 :a4552 :a4552. :a4553 :a4553 :a4553. :a4554 :a4554 :a4554. :a4555 :a4555 :a4555. :a4556 :a4556 :a4556. :a4557 :a4557 :a4557. :a4558 :a4558 :a4558. :a4559 :a4559 :a4559. :a4560 :a4560 :a4560. :a4561 :a4561 :a4561. :a4562 :a4562 :a4562. :a4563 :a4563 :a4563. :a4564 :a4564 :a4564. :a4565 :a4565 :a4565. :a4566 :a4566 :a4566. :a4567 :a4567 :a4567. :a4568 :a4568 :a4568. :a4569 :a4569 :a4569. :a4570 :a4570 :a4570. :a4571 :a4571 :a4571. :a4572 :a4572 :a4572. :a4573 :a4573 :a4573. :a4574 :a4574 :a4574. :a4575 :a4575 :a4575. :a4576 :a4576 :a4576. :a4577 :a4577 :a4577. :a4578 :a4578 :a4578. :a4579 :a4579 :a4579. :a4580 :a4580 :a4580. :a4581 :a4581 :a4581. :a4582 :a4582 :a4582. :a4583 :a4583 :a4583. :a4584 :a4584 :a4584. :a4585 :a4585 :a4585. :a4586 :a4586 :a4586. :a4587 :a4587 :a4587. :a4588 :a4588 :a4588. :a4589 :a4589 :a4589. :a4590 :a4590 :a4590. :a4591 :a4591 :a4591. :a4592 :a4592 :a4592. :a4593 :a4593 :a4593. :a4594 :a4594 :a4594. :a4595 :a4595 :a4595. :a4596 :a4596 :a4596. :a4597 :a4597 :a4597. :a4598 :a4598 :a4598. :a4599 :a4599 :a4599. :a4600 :a4600 :a4600. :a4601 :a4601 :a4601. :a4602 :a4602 :a4602. :a4603 :a4603 :a4603. :a4604 :a4604 :a4604. :a4605 :a4605 :a4605. :a4606 :a4606 :a4606. :a4607 :a4607 :a4607. :a4608 :a4608 :a4608. :a4609 :a4609 :a4609. :a4610 :a4610 :a4610. :a4611 :a4611 :a4611. :a4612 :a4612 :a4612. :a4613 :a4613 :a4613. :a4614 :a4614 :a4614. :a4615 :a4615 :a4615. :a4616 :a4616 :a4616. :a4617 :a4617 :a4617. :a4618 :a4618 :a4618. :a4619 :a4619 :a4619. :a4620 :a4620 :a4620. :a4621 :a4621 :a4621. :a4622 :a4622 :a4622. :a4623 :a4623 :a4623. :a4624 :a4624 :a4624. :a4625 :a4625 :a4625. :a4626 :a4626 :a4626. :a4627 :a4627 :a4627. :a4628 :a4628 :a4628. :a4629 :a4629 :a4629. :a4630 :a4630 :a4630. :a4631 :a4631 :a4631. :a4632 :a4632 :a4632. :a4633 :a4633 :a4633. :a4634 :a4634 :a4634. :a4635 :a4635 :a4635. :a4636 :a4636 :a4636. :a4637 :a4637 :a4637. :a4638 :a4638 :a4638. :a4639 :a4639 :a4639. :a4640 :a4640 :a4640. :a4641 :a4641 :a4641. :a4642 :a4642 :a4642. :a4643 :a4643 :a4643. :a4644 :a4644 :a4644. :a4645 :a4645 :a4645. :a4646 :a4646 :a4646. :a4647 :a4647 :a4647. :a4648 :a4648 :a4648. :a4649 :a4649 :a4649. :a4650 :a4650 :a4650. :a4651 :a4651 :a4651. :a4652 :a4652 :a4652. :a4653 :a4653 :a4653. :a4654 :a4654 :a4654. :a4655 :a4655 :a4655. :a4656 :a4656 :a4656. :a4657 :a4657 :a4657. :a4658 :a4658 :a4658. :a4659 :a4659 :a4659. :a4660 :a4660 :a4660. :a4661 :a4661 :a4661. :a4662 :a4662 :a4662. :a4663 :a4663 :a4663. :a4664 :a4664 :a4664. :a4665 :a4665 :a4665. :a4666 :a4666 :a4666. :a4667 :a4667 :a4667. :a4668 :a4668 :a4668. :a4669 :a4669 :a4669. :a4670 :a4670 :a4670. :a4671 :a4671 :a4671. :a4672 :a4672 :a4672. :a4673 :a4673 :a4673. :a4674 :a4674 :a4674. :a4675 :a4675 :a4675. :a4676 :a4676 :a4676. :a4677 :a4677 :a4677. :a4678 :a4678 :a4678. :a4679 :a4679 :a4679. :a4680 :a4680 :a4680. :a4681 :a4681 :a4681. :a4682 :a4682 :a4682. :a4683 :a4683 :a4683. :a4684 :a4684 :a4684. :a4685 :a4685 :a4685. :a4686 :a4686 :a4686. :a4687 :a4687 :a4687. :a4688 :a4688 :a4688. :a4689 :a4689 :a4689. :a4690 :a4690 :a4690. :a4691 :a4691 :a4691. :a4692 :a4692 :a4692. :a4693 :a4693 :a4693. :a4694 :a4694 :a4694. :a4695 :a4695 :a4695. :a4696 :a4696 :a4696. :a4697 :a4697 :a4697. :a4698 :a4698 :a4698. :a4699 :a4699 :a4699. :a4700 :a4700 :a4700. :a4701 :a4701 :a4701. :a4702 :a4702 :a4702. :a4703 :a4703 :a4703. :a4704 :a4704 :a4704. :a4705 :a4705 :a4705. :a4706 :a4706 :a4706. :a4707 :a4707 :a4707. :a4708 :a4708 :a4708. :a4709 :a4709 :a4709. :a4710 :a4710 :a4710. :a4711 :a4711 :a4711. :a4712 :a4712 :a4712. :a4713 :a4713 :a4713. :a4714 :a4714 :a4714. :a4715 :a4715 :a4715. :a4716 :a4716 :a4716. :a4717 :a4717 :a4717. :a4718 :a4718 :a4718. :a4719 :a4719 :a4719. :a4720 :a4720 :a4720. :a4721 :a4721 :a4721. :a4722 :a4722 :a4722. :a4723 :a4723 :a4723. :a4724 :a4724 :a4724. :a4725 :a4725 :a4725. :a4726 :a4726 :a4726. :a4727 :a4727 :a4727. :a4728 :a4728 :a4728. :a4729 :a4729 :a4729. :a4730 :a4730 :a4730. :a4731 :a4731 :a4731. :a4732 :a4732 :a4732. :a4733 :a4733 :a4733. :a4734 :a4734 :a4734. :a4735 :a4735 :a4735. :a4736 :a4736 :a4736. :a4737 :a4737 :a4737. :a4738 :a4738 :a4738. :a4739 :a4739 :a4739. :a4740 :a4740 :a4740. :a4741 :a4741 :a4741. :a4742 :a4742 :a4742. :a4743 :a4743 :a4743. :a4744 :a4744 :a4744. :a4745 :a4745 :a4745. :a4746 :a4746 :a4746. :a4747 :a4747 :a4747. :a4748 :a4748 :a4748. :a4749 :a4749 :a4749. :a4750 :a4750 :a4750. :a4751 :a4751 :a4751. :a4752 :a4752 :a4752. :a4753 :a4753 :a4753. :a4754 :a4754 :a4754. :a4755 :a4755 :a4755. :a4756 :a4756 :a4756. :a4757 :a4757 :a4757. :a4758 :a4758 :a4758. :a4759 :a4759 :a4759. :a4760 :a4760 :a4760. :a4761 :a4761 :a4761. :a4762 :a4762 :a4762. :a4763 :a4763 :a4763. :a4764 :a4764 :a4764. :a4765 :a4765 :a4765. :a4766 :a4766 :a4766. :a4767 :a4767 :a4767. :a4768 :a4768 :a4768. :a4769 :a4769 :a4769. :a4770 :a4770 :a4770. :a4771 :a4771 :a4771. :a4772 :a4772 :a4772. :a4773 :a4773 :a4773. :a4774 :a4774 :a4774. :a4775 :a4775 :a4775. :a4776 :a4776 :a4776. :a4777 :a4777 :a4777. :a4778 :a4778 :a4778. :a4779 :a4779 :a4779. :a4780 :a4780 :a4780. :a4781 :a4781 :a4781. :a4782 :a4782 :a4782. :a4783 :a4783 :a4783. :a4784 :a4784 :a4784. :a4785 :a4785 :a4785. :a4786 :a4786 :a4786. :a4787 :a4787 :a4787. :a4788 :a4788 :a4788. :a4789 :a4789 :a4789. :a4790 :a4790 :a4790. :a4791 :a4791 :a4791. :a4792 :a4792 :a4792. :a4793 :a4793 :a4793. :a4794 :a4794 :a4794. :a4795 :a4795 :a4795. :a4796 :a4796 :a4796. :a4797 :a4797 :a4797. :a4798 :a4798 :a4798. :a4799 :a4799 :a4799. :a4800 :a4800 :a4800. :a4801 :a4801 :a4801. :a4802 :a4802 :a4802. :a4803 :a4803 :a4803. :a4804 :a4804 :a4804. :a4805 :a4805 :a4805. :a4806 :a4806 :a4806. :a4807 :a4807 :a4807. :a4808 :a4808 :a4808. :a4809 :a4809 :a4809. :a4810 :a4810 :a4810. :a4811 :a4811 :a4811. :a4812 :a4812 :a4812. :a4813 :a4813 :a4813. :a4814 :a4814 :a4814. :a4815 :a4815 :a4815. :a4816 :a4816 :a4816. :a4817 :a4817 :a4817. :a4818 :a4818 :a4818. :a4819 :a4819 :a4819. :a4820 :a4820 :a4820. :a4821 :a4821 :a4821. :a4822 :a4822 :a4822. :a4823 :a4823 :a4823. :a4824 :a4824 :a4824. :a4825 :a4825 :a4825. :a4826 :a4826 :a4826. :a4827 :a4827 :a4827. :a4828 :a4828 :a4828. :a4829 :a4829 :a4829. :a4830 :a4830 :a4830. :a4831 :a4831 :a4831. :a4832 :a4832 :a4832. :a4833 :a4833 :a4833. :a4834 :a4834 :a4834. :a4835 :a4835 :a4835. :a4836 :a4836 :a4836. :a4837 :a4837 :a4837. :a4838 :a4838 :a4838. :a4839 :a4839 :a4839. :a4840 :a4840 :a4840. :a4841 :a4841 :a4841. :a4842 :a4842 :a4842. :a4843 :a4843 :a4843. :a4844 :a4844 :a4844. :a4845 :a4845 :a4845. :a4846 :a4846 :a4846. :a4847 :a4847 :a4847. :a4848 :a4848 :a4848. :a4849 :a4849 :a4849. :a4850 :a4850 :a4850. :a4851 :a4851 :a4851. :a4852 :a4852 :a4852. :a4853 :a4853 :a4853. :a4854 :a4854 :a4854. :a4855 :a4855 :a4855. :a4856 :a4856 :a4856. :a4857 :a4857 :a4857. :a4858 :a4858 :a4858. :a4859 :a4859 :a4859. :a4860 :a4860 :a4860. :a4861 :a4861 :a4861. :a4862 :a4862 :a4862. :a4863 :a4863 :a4863. :a4864 :a4864 :a4864. :a4865 :a4865 :a4865. :a4866 :a4866 :a4866. :a4867 :a4867 :a4867. :a4868 :a4868 :a4868. :a4869 :a4869 :a4869. :a4870 :a4870 :a4870. :a4871 :a4871 :a4871. :a4872 :a4872 :a4872. :a4873 :a4873 :a4873. :a4874 :a4874 :a4874. :a4875 :a4875 :a4875. :a4876 :a4876 :a4876. :a4877 :a4877 :a4877. :a4878 :a4878 :a4878. :a4879 :a4879 :a4879. :a4880 :a4880 :a4880. :a4881 :a4881 :a4881. :a4882 :a4882 :a4882. :a4883 :a4883 :a4883. :a4884 :a4884 :a4884. :a4885 :a4885 :a4885. :a4886 :a4886 :a4886. :a4887 :a4887 :a4887. :a4888 :a4888 :a4888. :a4889 :a4889 :a4889. :a4890 :a4890 :a4890. :a4891 :a4891 :a4891. :a4892 :a4892 :a4892. :a4893 :a4893 :a4893. :a4894 :a4894 :a4894. :a4895 :a4895 :a4895. :a4896 :a4896 :a4896. :a4897 :a4897 :a4897. :a4898 :a4898 :a4898. :a4899 :a4899 :a4899. :a4900 :a4900 :a4900. :a4901 :a4901 :a4901. :a4902 :a4902 :a4902. :a4903 :a4903 :a4903. :a4904 :a4904 :a4904. :a4905 :a4905 :a4905. :a4906 :a4906 :a4906. :a4907 :a4907 :a4907. :a4908 :a4908 :a4908. :a4909 :a4909 :a4909. :a4910 :a4910 :a4910. :a4911 :a4911 :a4911. :a4912 :a4912 :a4912. :a4913 :a4913 :a4913. :a4914 :a4914 :a4914. :a4915 :a4915 :a4915. :a4916 :a4916 :a4916. :a4917 :a4917 :a4917. :a4918 :a4918 :a4918. :a4919 :a4919 :a4919. :a4920 :a4920 :a4920. :a4921 :a4921 :a4921. :a4922 :a4922 :a4922. :a4923 :a4923 :a4923. :a4924 :a4924 :a4924. :a4925 :a4925 :a4925. :a4926 :a4926 :a4926. :a4927 :a4927 :a4927. :a4928 :a4928 :a4928. :a4929 :a4929 :a4929. :a4930 :a4930 :a4930. :a4931 :a4931 :a4931. :a4932 :a4932 :a4932. :a4933 :a4933 :a4933. :a4934 :a4934 :a4934. :a4935 :a4935 :a4935. :a4936 :a4936 :a4936. :a4937 :a4937 :a4937. :a4938 :a4938 :a4938. :a4939 :a4939 :a4939. :a4940 :a4940 :a4940. :a4941 :a4941 :a4941. :a4942 :a4942 :a4942. :a4943 :a4943 :a4943. :a4944 :a4944 :a4944. :a4945 :a4945 :a4945. :a4946 :a4946 :a4946. :a4947 :a4947 :a4947. :a4948 :a4948 :a4948. :a4949 :a4949 :a4949. :a4950 :a4950 :a4950. :a4951 :a4951 :a4951. :a4952 :a4952 :a4952. :a4953 :a4953 :a4953. :a4954 :a4954 :a4954. :a4955 :a4955 :a4955. :a4956 :a4956 :a4956. :a4957 :a4957 :a4957. :a4958 :a4958 :a4958. :a4959 :a4959 :a4959. :a4960 :a4960 :a4960. :a4961 :a4961 :a4961. :a4962 :a4962 :a4962. :a4963 :a4963 :a4963. :a4964 :a4964 :a4964. :a4965 :a4965 :a4965. :a4966 :a4966 :a4966. :a4967 :a4967 :a4967. :a4968 :a4968 :a4968. :a4969 :a4969 :a4969. :a4970 :a4970 :a4970. :a4971 :a4971 :a4971. :a4972 :a4972 :a4972. :a4973 :a4973 :a4973. :a4974 :a4974 :a4974. :a4975 :a4975 :a4975. :a4976 :a4976 :a4976. :a4977 :a4977 :a4977. :a4978 :a4978 :a4978. :a4979 :a4979 :a4979. :a4980 :a4980 :a4980. :a4981 :a4981 :a4981. :a4982 :a4982 :a4982. :a4983 :a4983 :a4983. :a4984 :a4984 :a4984. :a4985 :a4985 :a4985. :a4986 :a4986 :a4986. :a4987 :a4987 :a4987. :a4988 :a4988 :a4988. :a4989 :a4989 :a4989. :a4990 :a4990 :a4990. :a4991 :a4991 :a4991. :a4992 :a4992 :a4992. :a4993 :a4993 :a4993. :a4994 :a4994 :a4994. :a4995 :a4995 :a4995. :a4996 :a4996 :a4996. :a4997 :a4997 :a4997. :a4998 :a4998 :a4998. :a4999 :a4999 :a4999. :a5000 :a5000 :a5000. :a5001 :a5001 :a5001. :a5002 :a5002 :a5002. :a5003 :a5003 :a5003. :a5004 :a5004 :a5004. :a5005 :a5005 :a5005. :a5006 :a5006 :a5006. :a5007 :a5007 :a5007. :a5008 :a5008 :a5008. :a5009 :a5009 :a5009. :a5010 :a5010 :a5010. :a5011 :a5011 :a5011. :a5012 :a5012 :a5012. :a5013 :a5013 :a5013. :a5014 :a5014 :a5014. :a5015 :a5015 :a5015. :a5016 :a5016 :a5016. :a5017 :a5017 :a5017. :a5018 :a5018 :a5018. :a5019 :a5019 :a5019. :a5020 :a5020 :a5020. :a5021 :a5021 :a5021. :a5022 :a5022 :a5022. :a5023 :a5023 :a5023. :a5024 :a5024 :a5024. :a5025 :a5025 :a5025. :a5026 :a5026 :a5026. :a5027 :a5027 :a5027. :a5028 :a5028 :a5028. :a5029 :a5029 :a5029. :a5030 :a5030 :a5030. :a5031 :a5031 :a5031. :a5032 :a5032 :a5032. :a5033 :a5033 :a5033. :a5034 :a5034 :a5034. :a5035 :a5035 :a5035. :a5036 :a5036 :a5036. :a5037 :a5037 :a5037. :a5038 :a5038 :a5038. :a5039 :a5039 :a5039. :a5040 :a5040 :a5040. :a5041 :a5041 :a5041. :a5042 :a5042 :a5042. :a5043 :a5043 :a5043. :a5044 :a5044 :a5044. :a5045 :a5045 :a5045. :a5046 :a5046 :a5046. :a5047 :a5047 :a5047. :a5048 :a5048 :a5048. :a5049 :a5049 :a5049. :a5050 :a5050 :a5050. :a5051 :a5051 :a5051. :a5052 :a5052 :a5052. :a5053 :a5053 :a5053. :a5054 :a5054 :a5054. :a5055 :a5055 :a5055. :a5056 :a5056 :a5056. :a5057 :a5057 :a5057. :a5058 :a5058 :a5058. :a5059 :a5059 :a5059. :a5060 :a5060 :a5060. :a5061 :a5061 :a5061. :a5062 :a5062 :a5062. :a5063 :a5063 :a5063. :a5064 :a5064 :a5064. :a5065 :a5065 :a5065. :a5066 :a5066 :a5066. :a5067 :a5067 :a5067. :a5068 :a5068 :a5068. :a5069 :a5069 :a5069. :a5070 :a5070 :a5070. :a5071 :a5071 :a5071. :a5072 :a5072 :a5072. :a5073 :a5073 :a5073. :a5074 :a5074 :a5074. :a5075 :a5075 :a5075. :a5076 :a5076 :a5076. :a5077 :a5077 :a5077. :a5078 :a5078 :a5078. :a5079 :a5079 :a5079. :a5080 :a5080 :a5080. :a5081 :a5081 :a5081. :a5082 :a5082 :a5082. :a5083 :a5083 :a5083. :a5084 :a5084 :a5084. :a5085 :a5085 :a5085. :a5086 :a5086 :a5086. :a5087 :a5087 :a5087. :a5088 :a5088 :a5088. :a5089 :a5089 :a5089. :a5090 :a5090 :a5090. :a5091 :a5091 :a5091. :a5092 :a5092 :a5092. :a5093 :a5093 :a5093. :a5094 :a5094 :a5094. :a5095 :a5095 :a5095. :a5096 :a5096 :a5096. :a5097 :a5097 :a5097. :a5098 :a5098 :a5098. :a5099 :a5099 :a5099. :a5100 :a5100 :a5100. :a5101 :a5101 :a5101. :a5102 :a5102 :a5102. :a5103 :a5103 :a5103. :a5104 :a5104 :a5104. :a5105 :a5105 :a5105. :a5106 :a5106 :a5106. :a5107 :a5107 :a5107. :a5108 :a5108 :a5108. :a5109 :a5109 :a5109. :a5110 :a5110 :a5110. :a5111 :a5111 :a5111. :a5112 :a5112 :a5112. :a5113 :a5113 :a5113. :a5114 :a5114 :a5114. :a5115 :a5115 :a5115. :a5116 :a5116 :a5116. :a5117 :a5117 :a5117. :a5118 :a5118 :a5118. :a5119 :a5119 :a5119. :a5120 :a5120 :a5120. :a5121 :a5121 :a5121. :a5122 :a5122 :a5122. :a5123 :a5123 :a5123. :a5124 :a5124 :a5124. :a5125 :a5125 :a5125. :a5126 :a5126 :a5126. :a5127 :a5127 :a5127. :a5128 :a5128 :a5128. :a5129 :a5129 :a5129. :a5130 :a5130 :a5130. :a5131 :a5131 :a5131. :a5132 :a5132 :a5132. :a5133 :a5133 :a5133. :a5134 :a5134 :a5134. :a5135 :a5135 :a5135. :a5136 :a5136 :a5136. :a5137 :a5137 :a5137. :a5138 :a5138 :a5138. :a5139 :a5139 :a5139. :a5140 :a5140 :a5140. :a5141 :a5141 :a5141. :a5142 :a5142 :a5142. :a5143 :a5143 :a5143. :a5144 :a5144 :a5144. :a5145 :a5145 :a5145. :a5146 :a5146 :a5146. :a5147 :a5147 :a5147. :a5148 :a5148 :a5148. :a5149 :a5149 :a5149. :a5150 :a5150 :a5150. :a5151 :a5151 :a5151. :a5152 :a5152 :a5152. :a5153 :a5153 :a5153. :a5154 :a5154 :a5154. :a5155 :a5155 :a5155. :a5156 :a5156 :a5156. :a5157 :a5157 :a5157. :a5158 :a5158 :a5158. :a5159 :a5159 :a5159. :a5160 :a5160 :a5160. :a5161 :a5161 :a5161. :a5162 :a5162 :a5162. :a5163 :a5163 :a5163. :a5164 :a5164 :a5164. :a5165 :a5165 :a5165. :a5166 :a5166 :a5166. :a5167 :a5167 :a5167. :a5168 :a5168 :a5168. :a5169 :a5169 :a5169. :a5170 :a5170 :a5170. :a5171 :a5171 :a5171. :a5172 :a5172 :a5172. :a5173 :a5173 :a5173. :a5174 :a5174 :a5174. :a5175 :a5175 :a5175. :a5176 :a5176 :a5176. :a5177 :a5177 :a5177. :a5178 :a5178 :a5178. :a5179 :a5179 :a5179. :a5180 :a5180 :a5180. :a5181 :a5181 :a5181. :a5182 :a5182 :a5182. :a5183 :a5183 :a5183. :a5184 :a5184 :a5184. :a5185 :a5185 :a5185. :a5186 :a5186 :a5186. :a5187 :a5187 :a5187. :a5188 :a5188 :a5188. :a5189 :a5189 :a5189. :a5190 :a5190 :a5190. :a5191 :a5191 :a5191. :a5192 :a5192 :a5192. :a5193 :a5193 :a5193. :a5194 :a5194 :a5194. :a5195 :a5195 :a5195. :a5196 :a5196 :a5196. :a5197 :a5197 :a5197. :a5198 :a5198 :a5198. :a5199 :a5199 :a5199. :a5200 :a5200 :a5200. :a5201 :a5201 :a5201. :a5202 :a5202 :a5202. :a5203 :a5203 :a5203. :a5204 :a5204 :a5204. :a5205 :a5205 :a5205. :a5206 :a5206 :a5206. :a5207 :a5207 :a5207. :a5208 :a5208 :a5208. :a5209 :a5209 :a5209. :a5210 :a5210 :a5210. :a5211 :a5211 :a5211. :a5212 :a5212 :a5212. :a5213 :a5213 :a5213. :a5214 :a5214 :a5214. :a5215 :a5215 :a5215. :a5216 :a5216 :a5216. :a5217 :a5217 :a5217. :a5218 :a5218 :a5218. :a5219 :a5219 :a5219. :a5220 :a5220 :a5220. :a5221 :a5221 :a5221. :a5222 :a5222 :a5222. :a5223 :a5223 :a5223. :a5224 :a5224 :a5224. :a5225 :a5225 :a5225. :a5226 :a5226 :a5226. :a5227 :a5227 :a5227. :a5228 :a5228 :a5228. :a5229 :a5229 :a5229. :a5230 :a5230 :a5230. :a5231 :a5231 :a5231. :a5232 :a5232 :a5232. :a5233 :a5233 :a5233. :a5234 :a5234 :a5234. :a5235 :a5235 :a5235. :a5236 :a5236 :a5236. :a5237 :a5237 :a5237. :a5238 :a5238 :a5238. :a5239 :a5239 :a5239. :a5240 :a5240 :a5240. :a5241 :a5241 :a5241. :a5242 :a5242 :a5242. :a5243 :a5243 :a5243. :a5244 :a5244 :a5244. :a5245 :a5245 :a5245. :a5246 :a5246 :a5246. :a5247 :a5247 :a5247. :a5248 :a5248 :a5248. :a5249 :a5249 :a5249. :a5250 :a5250 :a5250. :a5251 :a5251 :a5251. :a5252 :a5252 :a5252. :a5253 :a5253 :a5253. :a5254 :a5254 :a5254. :a5255 :a5255 :a5255. :a5256 :a5256 :a5256. :a5257 :a5257 :a5257. :a5258 :a5258 :a5258. :a5259 :a5259 :a5259. :a5260 :a5260 :a5260. :a5261 :a5261 :a5261. :a5262 :a5262 :a5262. :a5263 :a5263 :a5263. :a5264 :a5264 :a5264. :a5265 :a5265 :a5265. :a5266 :a5266 :a5266. :a5267 :a5267 :a5267. :a5268 :a5268 :a5268. :a5269 :a5269 :a5269. :a5270 :a5270 :a5270. :a5271 :a5271 :a5271. :a5272 :a5272 :a5272. :a5273 :a5273 :a5273. :a5274 :a5274 :a5274. :a5275 :a5275 :a5275. :a5276 :a5276 :a5276. :a5277 :a5277 :a5277. :a5278 :a5278 :a5278. :a5279 :a5279 :a5279. :a5280 :a5280 :a5280. :a5281 :a5281 :a5281. :a5282 :a5282 :a5282. :a5283 :a5283 :a5283. :a5284 :a5284 :a5284. :a5285 :a5285 :a5285. :a5286 :a5286 :a5286. :a5287 :a5287 :a5287. :a5288 :a5288 :a5288. :a5289 :a5289 :a5289. :a5290 :a5290 :a5290. :a5291 :a5291 :a5291. :a5292 :a5292 :a5292. :a5293 :a5293 :a5293. :a5294 :a5294 :a5294. :a5295 :a5295 :a5295. :a5296 :a5296 :a5296. :a5297 :a5297 :a5297. :a5298 :a5298 :a5298. :a5299 :a5299 :a5299. :a5300 :a5300 :a5300. :a5301 :a5301 :a5301. :a5302 :a5302 :a5302. :a5303 :a5303 :a5303. :a5304 :a5304 :a5304. :a5305 :a5305 :a5305. :a5306 :a5306 :a5306. :a5307 :a5307 :a5307. :a5308 :a5308 :a5308. :a5309 :a5309 :a5309. :a5310 :a5310 :a5310. :a5311 :a5311 :a5311. :a5312 :a5312 :a5312. :a5313 :a5313 :a5313. :a5314 :a5314 :a5314. :a5315 :a5315 :a5315. :a5316 :a5316 :a5316. :a5317 :a5317 :a5317. :a5318 :a5318 :a5318. :a5319 :a5319 :a5319. :a5320 :a5320 :a5320. :a5321 :a5321 :a5321. :a5322 :a5322 :a5322. :a5323 :a5323 :a5323. :a5324 :a5324 :a5324. :a5325 :a5325 :a5325. :a5326 :a5326 :a5326. :a5327 :a5327 :a5327. :a5328 :a5328 :a5328. :a5329 :a5329 :a5329. :a5330 :a5330 :a5330. :a5331 :a5331 :a5331. :a5332 :a5332 :a5332. :a5333 :a5333 :a5333. :a5334 :a5334 :a5334. :a5335 :a5335 :a5335. :a5336 :a5336 :a5336. :a5337 :a5337 :a5337. :a5338 :a5338 :a5338. :a5339 :a5339 :a5339. :a5340 :a5340 :a5340. :a5341 :a5341 :a5341. :a5342 :a5342 :a5342. :a5343 :a5343 :a5343. :a5344 :a5344 :a5344. :a5345 :a5345 :a5345. :a5346 :a5346 :a5346. :a5347 :a5347 :a5347. :a5348 :a5348 :a5348. :a5349 :a5349 :a5349. :a5350 :a5350 :a5350. :a5351 :a5351 :a5351. :a5352 :a5352 :a5352. :a5353 :a5353 :a5353. :a5354 :a5354 :a5354. :a5355 :a5355 :a5355. :a5356 :a5356 :a5356. :a5357 :a5357 :a5357. :a5358 :a5358 :a5358. :a5359 :a5359 :a5359. :a5360 :a5360 :a5360. :a5361 :a5361 :a5361. :a5362 :a5362 :a5362. :a5363 :a5363 :a5363. :a5364 :a5364 :a5364. :a5365 :a5365 :a5365. :a5366 :a5366 :a5366. :a5367 :a5367 :a5367. :a5368 :a5368 :a5368. :a5369 :a5369 :a5369. :a5370 :a5370 :a5370. :a5371 :a5371 :a5371. :a5372 :a5372 :a5372. :a5373 :a5373 :a5373. :a5374 :a5374 :a5374. :a5375 :a5375 :a5375. :a5376 :a5376 :a5376. :a5377 :a5377 :a5377. :a5378 :a5378 :a5378. :a5379 :a5379 :a5379. :a5380 :a5380 :a5380. :a5381 :a5381 :a5381. :a5382 :a5382 :a5382. :a5383 :a5383 :a5383. :a5384 :a5384 :a5384. :a5385 :a5385 :a5385. :a5386 :a5386 :a5386. :a5387 :a5387 :a5387. :a5388 :a5388 :a5388. :a5389 :a5389 :a5389. :a5390 :a5390 :a5390. :a5391 :a5391 :a5391. :a5392 :a5392 :a5392. :a5393 :a5393 :a5393. :a5394 :a5394 :a5394. :a5395 :a5395 :a5395. :a5396 :a5396 :a5396. :a5397 :a5397 :a5397. :a5398 :a5398 :a5398. :a5399 :a5399 :a5399. :a5400 :a5400 :a5400. :a5401 :a5401 :a5401. :a5402 :a5402 :a5402. :a5403 :a5403 :a5403. :a5404 :a5404 :a5404. :a5405 :a5405 :a5405. :a5406 :a5406 :a5406. :a5407 :a5407 :a5407. :a5408 :a5408 :a5408. :a5409 :a5409 :a5409. :a5410 :a5410 :a5410. :a5411 :a5411 :a5411. :a5412 :a5412 :a5412. :a5413 :a5413 :a5413. :a5414 :a5414 :a5414. :a5415 :a5415 :a5415. :a5416 :a5416 :a5416. :a5417 :a5417 :a5417. :a5418 :a5418 :a5418. :a5419 :a5419 :a5419. :a5420 :a5420 :a5420. :a5421 :a5421 :a5421. :a5422 :a5422 :a5422. :a5423 :a5423 :a5423. :a5424 :a5424 :a5424. :a5425 :a5425 :a5425. :a5426 :a5426 :a5426. :a5427 :a5427 :a5427. :a5428 :a5428 :a5428. :a5429 :a5429 :a5429. :a5430 :a5430 :a5430. :a5431 :a5431 :a5431. :a5432 :a5432 :a5432. :a5433 :a5433 :a5433. :a5434 :a5434 :a5434. :a5435 :a5435 :a5435. :a5436 :a5436 :a5436. :a5437 :a5437 :a5437. :a5438 :a5438 :a5438. :a5439 :a5439 :a5439. :a5440 :a5440 :a5440. :a5441 :a5441 :a5441. :a5442 :a5442 :a5442. :a5443 :a5443 :a5443. :a5444 :a5444 :a5444. :a5445 :a5445 :a5445. :a5446 :a5446 :a5446. :a5447 :a5447 :a5447. :a5448 :a5448 :a5448. :a5449 :a5449 :a5449. :a5450 :a5450 :a5450. :a5451 :a5451 :a5451. :a5452 :a5452 :a5452. :a5453 :a5453 :a5453. :a5454 :a5454 :a5454. :a5455 :a5455 :a5455. :a5456 :a5456 :a5456. :a5457 :a5457 :a5457. :a5458 :a5458 :a5458. :a5459 :a5459 :a5459. :a5460 :a5460 :a5460. :a5461 :a5461 :a5461. :a5462 :a5462 :a5462. :a5463 :a5463 :a5463. :a5464 :a5464 :a5464. :a5465 :a5465 :a5465. :a5466 :a5466 :a5466. :a5467 :a5467 :a5467. :a5468 :a5468 :a5468. :a5469 :a5469 :a5469. :a5470 :a5470 :a5470. :a5471 :a5471 :a5471. :a5472 :a5472 :a5472. :a5473 :a5473 :a5473. :a5474 :a5474 :a5474. :a5475 :a5475 :a5475. :a5476 :a5476 :a5476. :a5477 :a5477 :a5477. :a5478 :a5478 :a5478. :a5479 :a5479 :a5479. :a5480 :a5480 :a5480. :a5481 :a5481 :a5481. :a5482 :a5482 :a5482. :a5483 :a5483 :a5483. :a5484 :a5484 :a5484. :a5485 :a5485 :a5485. :a5486 :a5486 :a5486. :a5487 :a5487 :a5487. :a5488 :a5488 :a5488. :a5489 :a5489 :a5489. :a5490 :a5490 :a5490. :a5491 :a5491 :a5491. :a5492 :a5492 :a5492. :a5493 :a5493 :a5493. :a5494 :a5494 :a5494. :a5495 :a5495 :a5495. :a5496 :a5496 :a5496. :a5497 :a5497 :a5497. :a5498 :a5498 :a5498. :a5499 :a5499 :a5499. :a5500 :a5500 :a5500. :a5501 :a5501 :a5501. :a5502 :a5502 :a5502. :a5503 :a5503 :a5503. :a5504 :a5504 :a5504. :a5505 :a5505 :a5505. :a5506 :a5506 :a5506. :a5507 :a5507 :a5507. :a5508 :a5508 :a5508. :a5509 :a5509 :a5509. :a5510 :a5510 :a5510. :a5511 :a5511 :a5511. :a5512 :a5512 :a5512. :a5513 :a5513 :a5513. :a5514 :a5514 :a5514. :a5515 :a5515 :a5515. :a5516 :a5516 :a5516. :a5517 :a5517 :a5517. :a5518 :a5518 :a5518. :a5519 :a5519 :a5519. :a5520 :a5520 :a5520. :a5521 :a5521 :a5521. :a5522 :a5522 :a5522. :a5523 :a5523 :a5523. :a5524 :a5524 :a5524. :a5525 :a5525 :a5525. :a5526 :a5526 :a5526. :a5527 :a5527 :a5527. :a5528 :a5528 :a5528. :a5529 :a5529 :a5529. :a5530 :a5530 :a5530. :a5531 :a5531 :a5531. :a5532 :a5532 :a5532. :a5533 :a5533 :a5533. :a5534 :a5534 :a5534. :a5535 :a5535 :a5535. :a5536 :a5536 :a5536. :a5537 :a5537 :a5537. :a5538 :a5538 :a5538. :a5539 :a5539 :a5539. :a5540 :a5540 :a5540. :a5541 :a5541 :a5541. :a5542 :a5542 :a5542. :a5543 :a5543 :a5543. :a5544 :a5544 :a5544. :a5545 :a5545 :a5545. :a5546 :a5546 :a5546. :a5547 :a5547 :a5547. :a5548 :a5548 :a5548. :a5549 :a5549 :a5549. :a5550 :a5550 :a5550. :a5551 :a5551 :a5551. :a5552 :a5552 :a5552. :a5553 :a5553 :a5553. :a5554 :a5554 :a5554. :a5555 :a5555 :a5555. :a5556 :a5556 :a5556. :a5557 :a5557 :a5557. :a5558 :a5558 :a5558. :a5559 :a5559 :a5559. :a5560 :a5560 :a5560. :a5561 :a5561 :a5561. :a5562 :a5562 :a5562. :a5563 :a5563 :a5563. :a5564 :a5564 :a5564. :a5565 :a5565 :a5565. :a5566 :a5566 :a5566. :a5567 :a5567 :a5567. :a5568 :a5568 :a5568. :a5569 :a5569 :a5569. :a5570 :a5570 :a5570. :a5571 :a5571 :a5571. :a5572 :a5572 :a5572. :a5573 :a5573 :a5573. :a5574 :a5574 :a5574. :a5575 :a5575 :a5575. :a5576 :a5576 :a5576. :a5577 :a5577 :a5577. :a5578 :a5578 :a5578. :a5579 :a5579 :a5579. :a5580 :a5580 :a5580. :a5581 :a5581 :a5581. :a5582 :a5582 :a5582. :a5583 :a5583 :a5583. :a5584 :a5584 :a5584. :a5585 :a5585 :a5585. :a5586 :a5586 :a5586. :a5587 :a5587 :a5587. :a5588 :a5588 :a5588. :a5589 :a5589 :a5589. :a5590 :a5590 :a5590. :a5591 :a5591 :a5591. :a5592 :a5592 :a5592. :a5593 :a5593 :a5593. :a5594 :a5594 :a5594. :a5595 :a5595 :a5595. :a5596 :a5596 :a5596. :a5597 :a5597 :a5597. :a5598 :a5598 :a5598. :a5599 :a5599 :a5599. :a5600 :a5600 :a5600. :a5601 :a5601 :a5601. :a5602 :a5602 :a5602. :a5603 :a5603 :a5603. :a5604 :a5604 :a5604. :a5605 :a5605 :a5605. :a5606 :a5606 :a5606. :a5607 :a5607 :a5607. :a5608 :a5608 :a5608. :a5609 :a5609 :a5609. :a5610 :a5610 :a5610. :a5611 :a5611 :a5611. :a5612 :a5612 :a5612. :a5613 :a5613 :a5613. :a5614 :a5614 :a5614. :a5615 :a5615 :a5615. :a5616 :a5616 :a5616. :a5617 :a5617 :a5617. :a5618 :a5618 :a5618. :a5619 :a5619 :a5619. :a5620 :a5620 :a5620. :a5621 :a5621 :a5621. :a5622 :a5622 :a5622. :a5623 :a5623 :a5623. :a5624 :a5624 :a5624. :a5625 :a5625 :a5625. :a5626 :a5626 :a5626. :a5627 :a5627 :a5627. :a5628 :a5628 :a5628. :a5629 :a5629 :a5629. :a5630 :a5630 :a5630. :a5631 :a5631 :a5631. :a5632 :a5632 :a5632. :a5633 :a5633 :a5633. :a5634 :a5634 :a5634. :a5635 :a5635 :a5635. :a5636 :a5636 :a5636. :a5637 :a5637 :a5637. :a5638 :a5638 :a5638. :a5639 :a5639 :a5639. :a5640 :a5640 :a5640. :a5641 :a5641 :a5641. :a5642 :a5642 :a5642. :a5643 :a5643 :a5643. :a5644 :a5644 :a5644. :a5645 :a5645 :a5645. :a5646 :a5646 :a5646. :a5647 :a5647 :a5647. :a5648 :a5648 :a5648. :a5649 :a5649 :a5649. :a5650 :a5650 :a5650. :a5651 :a5651 :a5651. :a5652 :a5652 :a5652. :a5653 :a5653 :a5653. :a5654 :a5654 :a5654. :a5655 :a5655 :a5655. :a5656 :a5656 :a5656. :a5657 :a5657 :a5657. :a5658 :a5658 :a5658. :a5659 :a5659 :a5659. :a5660 :a5660 :a5660. :a5661 :a5661 :a5661. :a5662 :a5662 :a5662. :a5663 :a5663 :a5663. :a5664 :a5664 :a5664. :a5665 :a5665 :a5665. :a5666 :a5666 :a5666. :a5667 :a5667 :a5667. :a5668 :a5668 :a5668. :a5669 :a5669 :a5669. :a5670 :a5670 :a5670. :a5671 :a5671 :a5671. :a5672 :a5672 :a5672. :a5673 :a5673 :a5673. :a5674 :a5674 :a5674. :a5675 :a5675 :a5675. :a5676 :a5676 :a5676. :a5677 :a5677 :a5677. :a5678 :a5678 :a5678. :a5679 :a5679 :a5679. :a5680 :a5680 :a5680. :a5681 :a5681 :a5681. :a5682 :a5682 :a5682. :a5683 :a5683 :a5683. :a5684 :a5684 :a5684. :a5685 :a5685 :a5685. :a5686 :a5686 :a5686. :a5687 :a5687 :a5687. :a5688 :a5688 :a5688. :a5689 :a5689 :a5689. :a5690 :a5690 :a5690. :a5691 :a5691 :a5691. :a5692 :a5692 :a5692. :a5693 :a5693 :a5693. :a5694 :a5694 :a5694. :a5695 :a5695 :a5695. :a5696 :a5696 :a5696. :a5697 :a5697 :a5697. :a5698 :a5698 :a5698. :a5699 :a5699 :a5699. :a5700 :a5700 :a5700. :a5701 :a5701 :a5701. :a5702 :a5702 :a5702. :a5703 :a5703 :a5703. :a5704 :a5704 :a5704. :a5705 :a5705 :a5705. :a5706 :a5706 :a5706. :a5707 :a5707 :a5707. :a5708 :a5708 :a5708. :a5709 :a5709 :a5709. :a5710 :a5710 :a5710. :a5711 :a5711 :a5711. :a5712 :a5712 :a5712. :a5713 :a5713 :a5713. :a5714 :a5714 :a5714. :a5715 :a5715 :a5715. :a5716 :a5716 :a5716. :a5717 :a5717 :a5717. :a5718 :a5718 :a5718. :a5719 :a5719 :a5719. :a5720 :a5720 :a5720. :a5721 :a5721 :a5721. :a5722 :a5722 :a5722. :a5723 :a5723 :a5723. :a5724 :a5724 :a5724. :a5725 :a5725 :a5725. :a5726 :a5726 :a5726. :a5727 :a5727 :a5727. :a5728 :a5728 :a5728. :a5729 :a5729 :a5729. :a5730 :a5730 :a5730. :a5731 :a5731 :a5731. :a5732 :a5732 :a5732. :a5733 :a5733 :a5733. :a5734 :a5734 :a5734. :a5735 :a5735 :a5735. :a5736 :a5736 :a5736. :a5737 :a5737 :a5737. :a5738 :a5738 :a5738. :a5739 :a5739 :a5739. :a5740 :a5740 :a5740. :a5741 :a5741 :a5741. :a5742 :a5742 :a5742. :a5743 :a5743 :a5743. :a5744 :a5744 :a5744. :a5745 :a5745 :a5745. :a5746 :a5746 :a5746. :a5747 :a5747 :a5747. :a5748 :a5748 :a5748. :a5749 :a5749 :a5749. :a5750 :a5750 :a5750. :a5751 :a5751 :a5751. :a5752 :a5752 :a5752. :a5753 :a5753 :a5753. :a5754 :a5754 :a5754. :a5755 :a5755 :a5755. :a5756 :a5756 :a5756. :a5757 :a5757 :a5757. :a5758 :a5758 :a5758. :a5759 :a5759 :a5759. :a5760 :a5760 :a5760. :a5761 :a5761 :a5761. :a5762 :a5762 :a5762. :a5763 :a5763 :a5763. :a5764 :a5764 :a5764. :a5765 :a5765 :a5765. :a5766 :a5766 :a5766. :a5767 :a5767 :a5767. :a5768 :a5768 :a5768. :a5769 :a5769 :a5769. :a5770 :a5770 :a5770. :a5771 :a5771 :a5771. :a5772 :a5772 :a5772. :a5773 :a5773 :a5773. :a5774 :a5774 :a5774. :a5775 :a5775 :a5775. :a5776 :a5776 :a5776. :a5777 :a5777 :a5777. :a5778 :a5778 :a5778. :a5779 :a5779 :a5779. :a5780 :a5780 :a5780. :a5781 :a5781 :a5781. :a5782 :a5782 :a5782. :a5783 :a5783 :a5783. :a5784 :a5784 :a5784. :a5785 :a5785 :a5785. :a5786 :a5786 :a5786. :a5787 :a5787 :a5787. :a5788 :a5788 :a5788. :a5789 :a5789 :a5789. :a5790 :a5790 :a5790. :a5791 :a5791 :a5791. :a5792 :a5792 :a5792. :a5793 :a5793 :a5793. :a5794 :a5794 :a5794. :a5795 :a5795 :a5795. :a5796 :a5796 :a5796. :a5797 :a5797 :a5797. :a5798 :a5798 :a5798. :a5799 :a5799 :a5799. :a5800 :a5800 :a5800. :a5801 :a5801 :a5801. :a5802 :a5802 :a5802. :a5803 :a5803 :a5803. :a5804 :a5804 :a5804. :a5805 :a5805 :a5805. :a5806 :a5806 :a5806. :a5807 :a5807 :a5807. :a5808 :a5808 :a5808. :a5809 :a5809 :a5809. :a5810 :a5810 :a5810. :a5811 :a5811 :a5811. :a5812 :a5812 :a5812. :a5813 :a5813 :a5813. :a5814 :a5814 :a5814. :a5815 :a5815 :a5815. :a5816 :a5816 :a5816. :a5817 :a5817 :a5817. :a5818 :a5818 :a5818. :a5819 :a5819 :a5819. :a5820 :a5820 :a5820. :a5821 :a5821 :a5821. :a5822 :a5822 :a5822. :a5823 :a5823 :a5823. :a5824 :a5824 :a5824. :a5825 :a5825 :a5825. :a5826 :a5826 :a5826. :a5827 :a5827 :a5827. :a5828 :a5828 :a5828. :a5829 :a5829 :a5829. :a5830 :a5830 :a5830. :a5831 :a5831 :a5831. :a5832 :a5832 :a5832. :a5833 :a5833 :a5833. :a5834 :a5834 :a5834. :a5835 :a5835 :a5835. :a5836 :a5836 :a5836. :a5837 :a5837 :a5837. :a5838 :a5838 :a5838. :a5839 :a5839 :a5839. :a5840 :a5840 :a5840. :a5841 :a5841 :a5841. :a5842 :a5842 :a5842. :a5843 :a5843 :a5843. :a5844 :a5844 :a5844. :a5845 :a5845 :a5845. :a5846 :a5846 :a5846. :a5847 :a5847 :a5847. :a5848 :a5848 :a5848. :a5849 :a5849 :a5849. :a5850 :a5850 :a5850. :a5851 :a5851 :a5851. :a5852 :a5852 :a5852. :a5853 :a5853 :a5853. :a5854 :a5854 :a5854. :a5855 :a5855 :a5855. :a5856 :a5856 :a5856. :a5857 :a5857 :a5857. :a5858 :a5858 :a5858. :a5859 :a5859 :a5859. :a5860 :a5860 :a5860. :a5861 :a5861 :a5861. :a5862 :a5862 :a5862. :a5863 :a5863 :a5863. :a5864 :a5864 :a5864. :a5865 :a5865 :a5865. :a5866 :a5866 :a5866. :a5867 :a5867 :a5867. :a5868 :a5868 :a5868. :a5869 :a5869 :a5869. :a5870 :a5870 :a5870. :a5871 :a5871 :a5871. :a5872 :a5872 :a5872. :a5873 :a5873 :a5873. :a5874 :a5874 :a5874. :a5875 :a5875 :a5875. :a5876 :a5876 :a5876. :a5877 :a5877 :a5877. :a5878 :a5878 :a5878. :a5879 :a5879 :a5879. :a5880 :a5880 :a5880. :a5881 :a5881 :a5881. :a5882 :a5882 :a5882. :a5883 :a5883 :a5883. :a5884 :a5884 :a5884. :a5885 :a5885 :a5885. :a5886 :a5886 :a5886. :a5887 :a5887 :a5887. :a5888 :a5888 :a5888. :a5889 :a5889 :a5889. :a5890 :a5890 :a5890. :a5891 :a5891 :a5891. :a5892 :a5892 :a5892. :a5893 :a5893 :a5893. :a5894 :a5894 :a5894. :a5895 :a5895 :a5895. :a5896 :a5896 :a5896. :a5897 :a5897 :a5897. :a5898 :a5898 :a5898. :a5899 :a5899 :a5899. :a5900 :a5900 :a5900. :a5901 :a5901 :a5901. :a5902 :a5902 :a5902. :a5903 :a5903 :a5903. :a5904 :a5904 :a5904. :a5905 :a5905 :a5905. :a5906 :a5906 :a5906. :a5907 :a5907 :a5907. :a5908 :a5908 :a5908. :a5909 :a5909 :a5909. :a5910 :a5910 :a5910. :a5911 :a5911 :a5911. :a5912 :a5912 :a5912. :a5913 :a5913 :a5913. :a5914 :a5914 :a5914. :a5915 :a5915 :a5915. :a5916 :a5916 :a5916. :a5917 :a5917 :a5917. :a5918 :a5918 :a5918. :a5919 :a5919 :a5919. :a5920 :a5920 :a5920. :a5921 :a5921 :a5921. :a5922 :a5922 :a5922. :a5923 :a5923 :a5923. :a5924 :a5924 :a5924. :a5925 :a5925 :a5925. :a5926 :a5926 :a5926. :a5927 :a5927 :a5927. :a5928 :a5928 :a5928. :a5929 :a5929 :a5929. :a5930 :a5930 :a5930. :a5931 :a5931 :a5931. :a5932 :a5932 :a5932. :a5933 :a5933 :a5933. :a5934 :a5934 :a5934. :a5935 :a5935 :a5935. :a5936 :a5936 :a5936. :a5937 :a5937 :a5937. :a5938 :a5938 :a5938. :a5939 :a5939 :a5939. :a5940 :a5940 :a5940. :a5941 :a5941 :a5941. :a5942 :a5942 :a5942. :a5943 :a5943 :a5943. :a5944 :a5944 :a5944. :a5945 :a5945 :a5945. :a5946 :a5946 :a5946. :a5947 :a5947 :a5947. :a5948 :a5948 :a5948. :a5949 :a5949 :a5949. :a5950 :a5950 :a5950. :a5951 :a5951 :a5951. :a5952 :a5952 :a5952. :a5953 :a5953 :a5953. :a5954 :a5954 :a5954. :a5955 :a5955 :a5955. :a5956 :a5956 :a5956. :a5957 :a5957 :a5957. :a5958 :a5958 :a5958. :a5959 :a5959 :a5959. :a5960 :a5960 :a5960. :a5961 :a5961 :a5961. :a5962 :a5962 :a5962. :a5963 :a5963 :a5963. :a5964 :a5964 :a5964. :a5965 :a5965 :a5965. :a5966 :a5966 :a5966. :a5967 :a5967 :a5967. :a5968 :a5968 :a5968. :a5969 :a5969 :a5969. :a5970 :a5970 :a5970. :a5971 :a5971 :a5971. :a5972 :a5972 :a5972. :a5973 :a5973 :a5973. :a5974 :a5974 :a5974. :a5975 :a5975 :a5975. :a5976 :a5976 :a5976. :a5977 :a5977 :a5977. :a5978 :a5978 :a5978. :a5979 :a5979 :a5979. :a5980 :a5980 :a5980. :a5981 :a5981 :a5981. :a5982 :a5982 :a5982. :a5983 :a5983 :a5983. :a5984 :a5984 :a5984. :a5985 :a5985 :a5985. :a5986 :a5986 :a5986. :a5987 :a5987 :a5987. :a5988 :a5988 :a5988. :a5989 :a5989 :a5989. :a5990 :a5990 :a5990. :a5991 :a5991 :a5991. :a5992 :a5992 :a5992. :a5993 :a5993 :a5993. :a5994 :a5994 :a5994. :a5995 :a5995 :a5995. :a5996 :a5996 :a5996. :a5997 :a5997 :a5997. :a5998 :a5998 :a5998. :a5999 :a5999 :a5999. :a6000 :a6000 :a6000. :a6001 :a6001 :a6001. :a6002 :a6002 :a6002. :a6003 :a6003 :a6003. :a6004 :a6004 :a6004. :a6005 :a6005 :a6005. :a6006 :a6006 :a6006. :a6007 :a6007 :a6007. :a6008 :a6008 :a6008. :a6009 :a6009 :a6009. :a6010 :a6010 :a6010. :a6011 :a6011 :a6011. :a6012 :a6012 :a6012. :a6013 :a6013 :a6013. :a6014 :a6014 :a6014. :a6015 :a6015 :a6015. :a6016 :a6016 :a6016. :a6017 :a6017 :a6017. :a6018 :a6018 :a6018. :a6019 :a6019 :a6019. :a6020 :a6020 :a6020. :a6021 :a6021 :a6021. :a6022 :a6022 :a6022. :a6023 :a6023 :a6023. :a6024 :a6024 :a6024. :a6025 :a6025 :a6025. :a6026 :a6026 :a6026. :a6027 :a6027 :a6027. :a6028 :a6028 :a6028. :a6029 :a6029 :a6029. :a6030 :a6030 :a6030. :a6031 :a6031 :a6031. :a6032 :a6032 :a6032. :a6033 :a6033 :a6033. :a6034 :a6034 :a6034. :a6035 :a6035 :a6035. :a6036 :a6036 :a6036. :a6037 :a6037 :a6037. :a6038 :a6038 :a6038. :a6039 :a6039 :a6039. :a6040 :a6040 :a6040. :a6041 :a6041 :a6041. :a6042 :a6042 :a6042. :a6043 :a6043 :a6043. :a6044 :a6044 :a6044. :a6045 :a6045 :a6045. :a6046 :a6046 :a6046. :a6047 :a6047 :a6047. :a6048 :a6048 :a6048. :a6049 :a6049 :a6049. :a6050 :a6050 :a6050. :a6051 :a6051 :a6051. :a6052 :a6052 :a6052. :a6053 :a6053 :a6053. :a6054 :a6054 :a6054. :a6055 :a6055 :a6055. :a6056 :a6056 :a6056. :a6057 :a6057 :a6057. :a6058 :a6058 :a6058. :a6059 :a6059 :a6059. :a6060 :a6060 :a6060. :a6061 :a6061 :a6061. :a6062 :a6062 :a6062. :a6063 :a6063 :a6063. :a6064 :a6064 :a6064. :a6065 :a6065 :a6065. :a6066 :a6066 :a6066. :a6067 :a6067 :a6067. :a6068 :a6068 :a6068. :a6069 :a6069 :a6069. :a6070 :a6070 :a6070. :a6071 :a6071 :a6071. :a6072 :a6072 :a6072. :a6073 :a6073 :a6073. :a6074 :a6074 :a6074. :a6075 :a6075 :a6075. :a6076 :a6076 :a6076. :a6077 :a6077 :a6077. :a6078 :a6078 :a6078. :a6079 :a6079 :a6079. :a6080 :a6080 :a6080. :a6081 :a6081 :a6081. :a6082 :a6082 :a6082. :a6083 :a6083 :a6083. :a6084 :a6084 :a6084. :a6085 :a6085 :a6085. :a6086 :a6086 :a6086. :a6087 :a6087 :a6087. :a6088 :a6088 :a6088. :a6089 :a6089 :a6089. :a6090 :a6090 :a6090. :a6091 :a6091 :a6091. :a6092 :a6092 :a6092. :a6093 :a6093 :a6093. :a6094 :a6094 :a6094. :a6095 :a6095 :a6095. :a6096 :a6096 :a6096. :a6097 :a6097 :a6097. :a6098 :a6098 :a6098. :a6099 :a6099 :a6099. :a6100 :a6100 :a6100. :a6101 :a6101 :a6101. :a6102 :a6102 :a6102. :a6103 :a6103 :a6103. :a6104 :a6104 :a6104. :a6105 :a6105 :a6105. :a6106 :a6106 :a6106. :a6107 :a6107 :a6107. :a6108 :a6108 :a6108. :a6109 :a6109 :a6109. :a6110 :a6110 :a6110. :a6111 :a6111 :a6111. :a6112 :a6112 :a6112. :a6113 :a6113 :a6113. :a6114 :a6114 :a6114. :a6115 :a6115 :a6115. :a6116 :a6116 :a6116. :a6117 :a6117 :a6117. :a6118 :a6118 :a6118. :a6119 :a6119 :a6119. :a6120 :a6120 :a6120. :a6121 :a6121 :a6121. :a6122 :a6122 :a6122. :a6123 :a6123 :a6123. :a6124 :a6124 :a6124. :a6125 :a6125 :a6125. :a6126 :a6126 :a6126. :a6127 :a6127 :a6127. :a6128 :a6128 :a6128. :a6129 :a6129 :a6129. :a6130 :a6130 :a6130. :a6131 :a6131 :a6131. :a6132 :a6132 :a6132. :a6133 :a6133 :a6133. :a6134 :a6134 :a6134. :a6135 :a6135 :a6135. :a6136 :a6136 :a6136. :a6137 :a6137 :a6137. :a6138 :a6138 :a6138. :a6139 :a6139 :a6139. :a6140 :a6140 :a6140. :a6141 :a6141 :a6141. :a6142 :a6142 :a6142. :a6143 :a6143 :a6143. :a6144 :a6144 :a6144. :a6145 :a6145 :a6145. :a6146 :a6146 :a6146. :a6147 :a6147 :a6147. :a6148 :a6148 :a6148. :a6149 :a6149 :a6149. :a6150 :a6150 :a6150. :a6151 :a6151 :a6151. :a6152 :a6152 :a6152. :a6153 :a6153 :a6153. :a6154 :a6154 :a6154. :a6155 :a6155 :a6155. :a6156 :a6156 :a6156. :a6157 :a6157 :a6157. :a6158 :a6158 :a6158. :a6159 :a6159 :a6159. :a6160 :a6160 :a6160. :a6161 :a6161 :a6161. :a6162 :a6162 :a6162. :a6163 :a6163 :a6163. :a6164 :a6164 :a6164. :a6165 :a6165 :a6165. :a6166 :a6166 :a6166. :a6167 :a6167 :a6167. :a6168 :a6168 :a6168. :a6169 :a6169 :a6169. :a6170 :a6170 :a6170. :a6171 :a6171 :a6171. :a6172 :a6172 :a6172. :a6173 :a6173 :a6173. :a6174 :a6174 :a6174. :a6175 :a6175 :a6175. :a6176 :a6176 :a6176. :a6177 :a6177 :a6177. :a6178 :a6178 :a6178. :a6179 :a6179 :a6179. :a6180 :a6180 :a6180. :a6181 :a6181 :a6181. :a6182 :a6182 :a6182. :a6183 :a6183 :a6183. :a6184 :a6184 :a6184. :a6185 :a6185 :a6185. :a6186 :a6186 :a6186. :a6187 :a6187 :a6187. :a6188 :a6188 :a6188. :a6189 :a6189 :a6189. :a6190 :a6190 :a6190. :a6191 :a6191 :a6191. :a6192 :a6192 :a6192. :a6193 :a6193 :a6193. :a6194 :a6194 :a6194. :a6195 :a6195 :a6195. :a6196 :a6196 :a6196. :a6197 :a6197 :a6197. :a6198 :a6198 :a6198. :a6199 :a6199 :a6199. :a6200 :a6200 :a6200. :a6201 :a6201 :a6201. :a6202 :a6202 :a6202. :a6203 :a6203 :a6203. :a6204 :a6204 :a6204. :a6205 :a6205 :a6205. :a6206 :a6206 :a6206. :a6207 :a6207 :a6207. :a6208 :a6208 :a6208. :a6209 :a6209 :a6209. :a6210 :a6210 :a6210. :a6211 :a6211 :a6211. :a6212 :a6212 :a6212. :a6213 :a6213 :a6213. :a6214 :a6214 :a6214. :a6215 :a6215 :a6215. :a6216 :a6216 :a6216. :a6217 :a6217 :a6217. :a6218 :a6218 :a6218. :a6219 :a6219 :a6219. :a6220 :a6220 :a6220. :a6221 :a6221 :a6221. :a6222 :a6222 :a6222. :a6223 :a6223 :a6223. :a6224 :a6224 :a6224. :a6225 :a6225 :a6225. :a6226 :a6226 :a6226. :a6227 :a6227 :a6227. :a6228 :a6228 :a6228. :a6229 :a6229 :a6229. :a6230 :a6230 :a6230. :a6231 :a6231 :a6231. :a6232 :a6232 :a6232. :a6233 :a6233 :a6233. :a6234 :a6234 :a6234. :a6235 :a6235 :a6235. :a6236 :a6236 :a6236. :a6237 :a6237 :a6237. :a6238 :a6238 :a6238. :a6239 :a6239 :a6239. :a6240 :a6240 :a6240. :a6241 :a6241 :a6241. :a6242 :a6242 :a6242. :a6243 :a6243 :a6243. :a6244 :a6244 :a6244. :a6245 :a6245 :a6245. :a6246 :a6246 :a6246. :a6247 :a6247 :a6247. :a6248 :a6248 :a6248. :a6249 :a6249 :a6249. :a6250 :a6250 :a6250. :a6251 :a6251 :a6251. :a6252 :a6252 :a6252. :a6253 :a6253 :a6253. :a6254 :a6254 :a6254. :a6255 :a6255 :a6255. :a6256 :a6256 :a6256. :a6257 :a6257 :a6257. :a6258 :a6258 :a6258. :a6259 :a6259 :a6259. :a6260 :a6260 :a6260. :a6261 :a6261 :a6261. :a6262 :a6262 :a6262. :a6263 :a6263 :a6263. :a6264 :a6264 :a6264. :a6265 :a6265 :a6265. :a6266 :a6266 :a6266. :a6267 :a6267 :a6267. :a6268 :a6268 :a6268. :a6269 :a6269 :a6269. :a6270 :a6270 :a6270. :a6271 :a6271 :a6271. :a6272 :a6272 :a6272. :a6273 :a6273 :a6273. :a6274 :a6274 :a6274. :a6275 :a6275 :a6275. :a6276 :a6276 :a6276. :a6277 :a6277 :a6277. :a6278 :a6278 :a6278. :a6279 :a6279 :a6279. :a6280 :a6280 :a6280. :a6281 :a6281 :a6281. :a6282 :a6282 :a6282. :a6283 :a6283 :a6283. :a6284 :a6284 :a6284. :a6285 :a6285 :a6285. :a6286 :a6286 :a6286. :a6287 :a6287 :a6287. :a6288 :a6288 :a6288. :a6289 :a6289 :a6289. :a6290 :a6290 :a6290. :a6291 :a6291 :a6291. :a6292 :a6292 :a6292. :a6293 :a6293 :a6293. :a6294 :a6294 :a6294. :a6295 :a6295 :a6295. :a6296 :a6296 :a6296. :a6297 :a6297 :a6297. :a6298 :a6298 :a6298. :a6299 :a6299 :a6299. :a6300 :a6300 :a6300. :a6301 :a6301 :a6301. :a6302 :a6302 :a6302. :a6303 :a6303 :a6303. :a6304 :a6304 :a6304. :a6305 :a6305 :a6305. :a6306 :a6306 :a6306. :a6307 :a6307 :a6307. :a6308 :a6308 :a6308. :a6309 :a6309 :a6309. :a6310 :a6310 :a6310. :a6311 :a6311 :a6311. :a6312 :a6312 :a6312. :a6313 :a6313 :a6313. :a6314 :a6314 :a6314. :a6315 :a6315 :a6315. :a6316 :a6316 :a6316. :a6317 :a6317 :a6317. :a6318 :a6318 :a6318. :a6319 :a6319 :a6319. :a6320 :a6320 :a6320. :a6321 :a6321 :a6321. :a6322 :a6322 :a6322. :a6323 :a6323 :a6323. :a6324 :a6324 :a6324. :a6325 :a6325 :a6325. :a6326 :a6326 :a6326. :a6327 :a6327 :a6327. :a6328 :a6328 :a6328. :a6329 :a6329 :a6329. :a6330 :a6330 :a6330. :a6331 :a6331 :a6331. :a6332 :a6332 :a6332. :a6333 :a6333 :a6333. :a6334 :a6334 :a6334. :a6335 :a6335 :a6335. :a6336 :a6336 :a6336. :a6337 :a6337 :a6337. :a6338 :a6338 :a6338. :a6339 :a6339 :a6339. :a6340 :a6340 :a6340. :a6341 :a6341 :a6341. :a6342 :a6342 :a6342. :a6343 :a6343 :a6343. :a6344 :a6344 :a6344. :a6345 :a6345 :a6345. :a6346 :a6346 :a6346. :a6347 :a6347 :a6347. :a6348 :a6348 :a6348. :a6349 :a6349 :a6349. :a6350 :a6350 :a6350. :a6351 :a6351 :a6351. :a6352 :a6352 :a6352. :a6353 :a6353 :a6353. :a6354 :a6354 :a6354. :a6355 :a6355 :a6355. :a6356 :a6356 :a6356. :a6357 :a6357 :a6357. :a6358 :a6358 :a6358. :a6359 :a6359 :a6359. :a6360 :a6360 :a6360. :a6361 :a6361 :a6361. :a6362 :a6362 :a6362. :a6363 :a6363 :a6363. :a6364 :a6364 :a6364. :a6365 :a6365 :a6365. :a6366 :a6366 :a6366. :a6367 :a6367 :a6367. :a6368 :a6368 :a6368. :a6369 :a6369 :a6369. :a6370 :a6370 :a6370. :a6371 :a6371 :a6371. :a6372 :a6372 :a6372. :a6373 :a6373 :a6373. :a6374 :a6374 :a6374. :a6375 :a6375 :a6375. :a6376 :a6376 :a6376. :a6377 :a6377 :a6377. :a6378 :a6378 :a6378. :a6379 :a6379 :a6379. :a6380 :a6380 :a6380. :a6381 :a6381 :a6381. :a6382 :a6382 :a6382. :a6383 :a6383 :a6383. :a6384 :a6384 :a6384. :a6385 :a6385 :a6385. :a6386 :a6386 :a6386. :a6387 :a6387 :a6387. :a6388 :a6388 :a6388. :a6389 :a6389 :a6389. :a6390 :a6390 :a6390. :a6391 :a6391 :a6391. :a6392 :a6392 :a6392. :a6393 :a6393 :a6393. :a6394 :a6394 :a6394. :a6395 :a6395 :a6395. :a6396 :a6396 :a6396. :a6397 :a6397 :a6397. :a6398 :a6398 :a6398. :a6399 :a6399 :a6399. :a6400 :a6400 :a6400. :a6401 :a6401 :a6401. :a6402 :a6402 :a6402. :a6403 :a6403 :a6403. :a6404 :a6404 :a6404. :a6405 :a6405 :a6405. :a6406 :a6406 :a6406. :a6407 :a6407 :a6407. :a6408 :a6408 :a6408. :a6409 :a6409 :a6409. :a6410 :a6410 :a6410. :a6411 :a6411 :a6411. :a6412 :a6412 :a6412. :a6413 :a6413 :a6413. :a6414 :a6414 :a6414. :a6415 :a6415 :a6415. :a6416 :a6416 :a6416. :a6417 :a6417 :a6417. :a6418 :a6418 :a6418. :a6419 :a6419 :a6419. :a6420 :a6420 :a6420. :a6421 :a6421 :a6421. :a6422 :a6422 :a6422. :a6423 :a6423 :a6423. :a6424 :a6424 :a6424. :a6425 :a6425 :a6425. :a6426 :a6426 :a6426. :a6427 :a6427 :a6427. :a6428 :a6428 :a6428. :a6429 :a6429 :a6429. :a6430 :a6430 :a6430. :a6431 :a6431 :a6431. :a6432 :a6432 :a6432. :a6433 :a6433 :a6433. :a6434 :a6434 :a6434. :a6435 :a6435 :a6435. :a6436 :a6436 :a6436. :a6437 :a6437 :a6437. :a6438 :a6438 :a6438. :a6439 :a6439 :a6439. :a6440 :a6440 :a6440. :a6441 :a6441 :a6441. :a6442 :a6442 :a6442. :a6443 :a6443 :a6443. :a6444 :a6444 :a6444. :a6445 :a6445 :a6445. :a6446 :a6446 :a6446. :a6447 :a6447 :a6447. :a6448 :a6448 :a6448. :a6449 :a6449 :a6449. :a6450 :a6450 :a6450. :a6451 :a6451 :a6451. :a6452 :a6452 :a6452. :a6453 :a6453 :a6453. :a6454 :a6454 :a6454. :a6455 :a6455 :a6455. :a6456 :a6456 :a6456. :a6457 :a6457 :a6457. :a6458 :a6458 :a6458. :a6459 :a6459 :a6459. :a6460 :a6460 :a6460. :a6461 :a6461 :a6461. :a6462 :a6462 :a6462. :a6463 :a6463 :a6463. :a6464 :a6464 :a6464. :a6465 :a6465 :a6465. :a6466 :a6466 :a6466. :a6467 :a6467 :a6467. :a6468 :a6468 :a6468. :a6469 :a6469 :a6469. :a6470 :a6470 :a6470. :a6471 :a6471 :a6471. :a6472 :a6472 :a6472. :a6473 :a6473 :a6473. :a6474 :a6474 :a6474. :a6475 :a6475 :a6475. :a6476 :a6476 :a6476. :a6477 :a6477 :a6477. :a6478 :a6478 :a6478. :a6479 :a6479 :a6479. :a6480 :a6480 :a6480. :a6481 :a6481 :a6481. :a6482 :a6482 :a6482. :a6483 :a6483 :a6483. :a6484 :a6484 :a6484. :a6485 :a6485 :a6485. :a6486 :a6486 :a6486. :a6487 :a6487 :a6487. :a6488 :a6488 :a6488. :a6489 :a6489 :a6489. :a6490 :a6490 :a6490. :a6491 :a6491 :a6491. :a6492 :a6492 :a6492. :a6493 :a6493 :a6493. :a6494 :a6494 :a6494. :a6495 :a6495 :a6495. :a6496 :a6496 :a6496. :a6497 :a6497 :a6497. :a6498 :a6498 :a6498. :a6499 :a6499 :a6499. :a6500 :a6500 :a6500. :a6501 :a6501 :a6501. :a6502 :a6502 :a6502. :a6503 :a6503 :a6503. :a6504 :a6504 :a6504. :a6505 :a6505 :a6505. :a6506 :a6506 :a6506. :a6507 :a6507 :a6507. :a6508 :a6508 :a6508. :a6509 :a6509 :a6509. :a6510 :a6510 :a6510. :a6511 :a6511 :a6511. :a6512 :a6512 :a6512. :a6513 :a6513 :a6513. :a6514 :a6514 :a6514. :a6515 :a6515 :a6515. :a6516 :a6516 :a6516. :a6517 :a6517 :a6517. :a6518 :a6518 :a6518. :a6519 :a6519 :a6519. :a6520 :a6520 :a6520. :a6521 :a6521 :a6521. :a6522 :a6522 :a6522. :a6523 :a6523 :a6523. :a6524 :a6524 :a6524. :a6525 :a6525 :a6525. :a6526 :a6526 :a6526. :a6527 :a6527 :a6527. :a6528 :a6528 :a6528. :a6529 :a6529 :a6529. :a6530 :a6530 :a6530. :a6531 :a6531 :a6531. :a6532 :a6532 :a6532. :a6533 :a6533 :a6533. :a6534 :a6534 :a6534. :a6535 :a6535 :a6535. :a6536 :a6536 :a6536. :a6537 :a6537 :a6537. :a6538 :a6538 :a6538. :a6539 :a6539 :a6539. :a6540 :a6540 :a6540. :a6541 :a6541 :a6541. :a6542 :a6542 :a6542. :a6543 :a6543 :a6543. :a6544 :a6544 :a6544. :a6545 :a6545 :a6545. :a6546 :a6546 :a6546. :a6547 :a6547 :a6547. :a6548 :a6548 :a6548. :a6549 :a6549 :a6549. :a6550 :a6550 :a6550. :a6551 :a6551 :a6551. :a6552 :a6552 :a6552. :a6553 :a6553 :a6553. :a6554 :a6554 :a6554. :a6555 :a6555 :a6555. :a6556 :a6556 :a6556. :a6557 :a6557 :a6557. :a6558 :a6558 :a6558. :a6559 :a6559 :a6559. :a6560 :a6560 :a6560. :a6561 :a6561 :a6561. :a6562 :a6562 :a6562. :a6563 :a6563 :a6563. :a6564 :a6564 :a6564. :a6565 :a6565 :a6565. :a6566 :a6566 :a6566. :a6567 :a6567 :a6567. :a6568 :a6568 :a6568. :a6569 :a6569 :a6569. :a6570 :a6570 :a6570. :a6571 :a6571 :a6571. :a6572 :a6572 :a6572. :a6573 :a6573 :a6573. :a6574 :a6574 :a6574. :a6575 :a6575 :a6575. :a6576 :a6576 :a6576. :a6577 :a6577 :a6577. :a6578 :a6578 :a6578. :a6579 :a6579 :a6579. :a6580 :a6580 :a6580. :a6581 :a6581 :a6581. :a6582 :a6582 :a6582. :a6583 :a6583 :a6583. :a6584 :a6584 :a6584. :a6585 :a6585 :a6585. :a6586 :a6586 :a6586. :a6587 :a6587 :a6587. :a6588 :a6588 :a6588. :a6589 :a6589 :a6589. :a6590 :a6590 :a6590. :a6591 :a6591 :a6591. :a6592 :a6592 :a6592. :a6593 :a6593 :a6593. :a6594 :a6594 :a6594. :a6595 :a6595 :a6595. :a6596 :a6596 :a6596. :a6597 :a6597 :a6597. :a6598 :a6598 :a6598. :a6599 :a6599 :a6599. :a6600 :a6600 :a6600. :a6601 :a6601 :a6601. :a6602 :a6602 :a6602. :a6603 :a6603 :a6603. :a6604 :a6604 :a6604. :a6605 :a6605 :a6605. :a6606 :a6606 :a6606. :a6607 :a6607 :a6607. :a6608 :a6608 :a6608. :a6609 :a6609 :a6609. :a6610 :a6610 :a6610. :a6611 :a6611 :a6611. :a6612 :a6612 :a6612. :a6613 :a6613 :a6613. :a6614 :a6614 :a6614. :a6615 :a6615 :a6615. :a6616 :a6616 :a6616. :a6617 :a6617 :a6617. :a6618 :a6618 :a6618. :a6619 :a6619 :a6619. :a6620 :a6620 :a6620. :a6621 :a6621 :a6621. :a6622 :a6622 :a6622. :a6623 :a6623 :a6623. :a6624 :a6624 :a6624. :a6625 :a6625 :a6625. :a6626 :a6626 :a6626. :a6627 :a6627 :a6627. :a6628 :a6628 :a6628. :a6629 :a6629 :a6629. :a6630 :a6630 :a6630. :a6631 :a6631 :a6631. :a6632 :a6632 :a6632. :a6633 :a6633 :a6633. :a6634 :a6634 :a6634. :a6635 :a6635 :a6635. :a6636 :a6636 :a6636. :a6637 :a6637 :a6637. :a6638 :a6638 :a6638. :a6639 :a6639 :a6639. :a6640 :a6640 :a6640. :a6641 :a6641 :a6641. :a6642 :a6642 :a6642. :a6643 :a6643 :a6643. :a6644 :a6644 :a6644. :a6645 :a6645 :a6645. :a6646 :a6646 :a6646. :a6647 :a6647 :a6647. :a6648 :a6648 :a6648. :a6649 :a6649 :a6649. :a6650 :a6650 :a6650. :a6651 :a6651 :a6651. :a6652 :a6652 :a6652. :a6653 :a6653 :a6653. :a6654 :a6654 :a6654. :a6655 :a6655 :a6655. :a6656 :a6656 :a6656. :a6657 :a6657 :a6657. :a6658 :a6658 :a6658. :a6659 :a6659 :a6659. :a6660 :a6660 :a6660. :a6661 :a6661 :a6661. :a6662 :a6662 :a6662. :a6663 :a6663 :a6663. :a6664 :a6664 :a6664. :a6665 :a6665 :a6665. :a6666 :a6666 :a6666. :a6667 :a6667 :a6667. :a6668 :a6668 :a6668. :a6669 :a6669 :a6669. :a6670 :a6670 :a6670. :a6671 :a6671 :a6671. :a6672 :a6672 :a6672. :a6673 :a6673 :a6673. :a6674 :a6674 :a6674. :a6675 :a6675 :a6675. :a6676 :a6676 :a6676. :a6677 :a6677 :a6677. :a6678 :a6678 :a6678. :a6679 :a6679 :a6679. :a6680 :a6680 :a6680. :a6681 :a6681 :a6681. :a6682 :a6682 :a6682. :a6683 :a6683 :a6683. :a6684 :a6684 :a6684. :a6685 :a6685 :a6685. :a6686 :a6686 :a6686. :a6687 :a6687 :a6687. :a6688 :a6688 :a6688. :a6689 :a6689 :a6689. :a6690 :a6690 :a6690. :a6691 :a6691 :a6691. :a6692 :a6692 :a6692. :a6693 :a6693 :a6693. :a6694 :a6694 :a6694. :a6695 :a6695 :a6695. :a6696 :a6696 :a6696. :a6697 :a6697 :a6697. :a6698 :a6698 :a6698. :a6699 :a6699 :a6699. :a6700 :a6700 :a6700. :a6701 :a6701 :a6701. :a6702 :a6702 :a6702. :a6703 :a6703 :a6703. :a6704 :a6704 :a6704. :a6705 :a6705 :a6705. :a6706 :a6706 :a6706. :a6707 :a6707 :a6707. :a6708 :a6708 :a6708. :a6709 :a6709 :a6709. :a6710 :a6710 :a6710. :a6711 :a6711 :a6711. :a6712 :a6712 :a6712. :a6713 :a6713 :a6713. :a6714 :a6714 :a6714. :a6715 :a6715 :a6715. :a6716 :a6716 :a6716. :a6717 :a6717 :a6717. :a6718 :a6718 :a6718. :a6719 :a6719 :a6719. :a6720 :a6720 :a6720. :a6721 :a6721 :a6721. :a6722 :a6722 :a6722. :a6723 :a6723 :a6723. :a6724 :a6724 :a6724. :a6725 :a6725 :a6725. :a6726 :a6726 :a6726. :a6727 :a6727 :a6727. :a6728 :a6728 :a6728. :a6729 :a6729 :a6729. :a6730 :a6730 :a6730. :a6731 :a6731 :a6731. :a6732 :a6732 :a6732. :a6733 :a6733 :a6733. :a6734 :a6734 :a6734. :a6735 :a6735 :a6735. :a6736 :a6736 :a6736. :a6737 :a6737 :a6737. :a6738 :a6738 :a6738. :a6739 :a6739 :a6739. :a6740 :a6740 :a6740. :a6741 :a6741 :a6741. :a6742 :a6742 :a6742. :a6743 :a6743 :a6743. :a6744 :a6744 :a6744. :a6745 :a6745 :a6745. :a6746 :a6746 :a6746. :a6747 :a6747 :a6747. :a6748 :a6748 :a6748. :a6749 :a6749 :a6749. :a6750 :a6750 :a6750. :a6751 :a6751 :a6751. :a6752 :a6752 :a6752. :a6753 :a6753 :a6753. :a6754 :a6754 :a6754. :a6755 :a6755 :a6755. :a6756 :a6756 :a6756. :a6757 :a6757 :a6757. :a6758 :a6758 :a6758. :a6759 :a6759 :a6759. :a6760 :a6760 :a6760. :a6761 :a6761 :a6761. :a6762 :a6762 :a6762. :a6763 :a6763 :a6763. :a6764 :a6764 :a6764. :a6765 :a6765 :a6765. :a6766 :a6766 :a6766. :a6767 :a6767 :a6767. :a6768 :a6768 :a6768. :a6769 :a6769 :a6769. :a6770 :a6770 :a6770. :a6771 :a6771 :a6771. :a6772 :a6772 :a6772. :a6773 :a6773 :a6773. :a6774 :a6774 :a6774. :a6775 :a6775 :a6775. :a6776 :a6776 :a6776. :a6777 :a6777 :a6777. :a6778 :a6778 :a6778. :a6779 :a6779 :a6779. :a6780 :a6780 :a6780. :a6781 :a6781 :a6781. :a6782 :a6782 :a6782. :a6783 :a6783 :a6783. :a6784 :a6784 :a6784. :a6785 :a6785 :a6785. :a6786 :a6786 :a6786. :a6787 :a6787 :a6787. :a6788 :a6788 :a6788. :a6789 :a6789 :a6789. :a6790 :a6790 :a6790. :a6791 :a6791 :a6791. :a6792 :a6792 :a6792. :a6793 :a6793 :a6793. :a6794 :a6794 :a6794. :a6795 :a6795 :a6795. :a6796 :a6796 :a6796. :a6797 :a6797 :a6797. :a6798 :a6798 :a6798. :a6799 :a6799 :a6799. :a6800 :a6800 :a6800. :a6801 :a6801 :a6801. :a6802 :a6802 :a6802. :a6803 :a6803 :a6803. :a6804 :a6804 :a6804. :a6805 :a6805 :a6805. :a6806 :a6806 :a6806. :a6807 :a6807 :a6807. :a6808 :a6808 :a6808. :a6809 :a6809 :a6809. :a6810 :a6810 :a6810. :a6811 :a6811 :a6811. :a6812 :a6812 :a6812. :a6813 :a6813 :a6813. :a6814 :a6814 :a6814. :a6815 :a6815 :a6815. :a6816 :a6816 :a6816. :a6817 :a6817 :a6817. :a6818 :a6818 :a6818. :a6819 :a6819 :a6819. :a6820 :a6820 :a6820. :a6821 :a6821 :a6821. :a6822 :a6822 :a6822. :a6823 :a6823 :a6823. :a6824 :a6824 :a6824. :a6825 :a6825 :a6825. :a6826 :a6826 :a6826. :a6827 :a6827 :a6827. :a6828 :a6828 :a6828. :a6829 :a6829 :a6829. :a6830 :a6830 :a6830. :a6831 :a6831 :a6831. :a6832 :a6832 :a6832. :a6833 :a6833 :a6833. :a6834 :a6834 :a6834. :a6835 :a6835 :a6835. :a6836 :a6836 :a6836. :a6837 :a6837 :a6837. :a6838 :a6838 :a6838. :a6839 :a6839 :a6839. :a6840 :a6840 :a6840. :a6841 :a6841 :a6841. :a6842 :a6842 :a6842. :a6843 :a6843 :a6843. :a6844 :a6844 :a6844. :a6845 :a6845 :a6845. :a6846 :a6846 :a6846. :a6847 :a6847 :a6847. :a6848 :a6848 :a6848. :a6849 :a6849 :a6849. :a6850 :a6850 :a6850. :a6851 :a6851 :a6851. :a6852 :a6852 :a6852. :a6853 :a6853 :a6853. :a6854 :a6854 :a6854. :a6855 :a6855 :a6855. :a6856 :a6856 :a6856. :a6857 :a6857 :a6857. :a6858 :a6858 :a6858. :a6859 :a6859 :a6859. :a6860 :a6860 :a6860. :a6861 :a6861 :a6861. :a6862 :a6862 :a6862. :a6863 :a6863 :a6863. :a6864 :a6864 :a6864. :a6865 :a6865 :a6865. :a6866 :a6866 :a6866. :a6867 :a6867 :a6867. :a6868 :a6868 :a6868. :a6869 :a6869 :a6869. :a6870 :a6870 :a6870. :a6871 :a6871 :a6871. :a6872 :a6872 :a6872. :a6873 :a6873 :a6873. :a6874 :a6874 :a6874. :a6875 :a6875 :a6875. :a6876 :a6876 :a6876. :a6877 :a6877 :a6877. :a6878 :a6878 :a6878. :a6879 :a6879 :a6879. :a6880 :a6880 :a6880. :a6881 :a6881 :a6881. :a6882 :a6882 :a6882. :a6883 :a6883 :a6883. :a6884 :a6884 :a6884. :a6885 :a6885 :a6885. :a6886 :a6886 :a6886. :a6887 :a6887 :a6887. :a6888 :a6888 :a6888. :a6889 :a6889 :a6889. :a6890 :a6890 :a6890. :a6891 :a6891 :a6891. :a6892 :a6892 :a6892. :a6893 :a6893 :a6893. :a6894 :a6894 :a6894. :a6895 :a6895 :a6895. :a6896 :a6896 :a6896. :a6897 :a6897 :a6897. :a6898 :a6898 :a6898. :a6899 :a6899 :a6899. :a6900 :a6900 :a6900. :a6901 :a6901 :a6901. :a6902 :a6902 :a6902. :a6903 :a6903 :a6903. :a6904 :a6904 :a6904. :a6905 :a6905 :a6905. :a6906 :a6906 :a6906. :a6907 :a6907 :a6907. :a6908 :a6908 :a6908. :a6909 :a6909 :a6909. :a6910 :a6910 :a6910. :a6911 :a6911 :a6911. :a6912 :a6912 :a6912. :a6913 :a6913 :a6913. :a6914 :a6914 :a6914. :a6915 :a6915 :a6915. :a6916 :a6916 :a6916. :a6917 :a6917 :a6917. :a6918 :a6918 :a6918. :a6919 :a6919 :a6919. :a6920 :a6920 :a6920. :a6921 :a6921 :a6921. :a6922 :a6922 :a6922. :a6923 :a6923 :a6923. :a6924 :a6924 :a6924. :a6925 :a6925 :a6925. :a6926 :a6926 :a6926. :a6927 :a6927 :a6927. :a6928 :a6928 :a6928. :a6929 :a6929 :a6929. :a6930 :a6930 :a6930. :a6931 :a6931 :a6931. :a6932 :a6932 :a6932. :a6933 :a6933 :a6933. :a6934 :a6934 :a6934. :a6935 :a6935 :a6935. :a6936 :a6936 :a6936. :a6937 :a6937 :a6937. :a6938 :a6938 :a6938. :a6939 :a6939 :a6939. :a6940 :a6940 :a6940. :a6941 :a6941 :a6941. :a6942 :a6942 :a6942. :a6943 :a6943 :a6943. :a6944 :a6944 :a6944. :a6945 :a6945 :a6945. :a6946 :a6946 :a6946. :a6947 :a6947 :a6947. :a6948 :a6948 :a6948. :a6949 :a6949 :a6949. :a6950 :a6950 :a6950. :a6951 :a6951 :a6951. :a6952 :a6952 :a6952. :a6953 :a6953 :a6953. :a6954 :a6954 :a6954. :a6955 :a6955 :a6955. :a6956 :a6956 :a6956. :a6957 :a6957 :a6957. :a6958 :a6958 :a6958. :a6959 :a6959 :a6959. :a6960 :a6960 :a6960. :a6961 :a6961 :a6961. :a6962 :a6962 :a6962. :a6963 :a6963 :a6963. :a6964 :a6964 :a6964. :a6965 :a6965 :a6965. :a6966 :a6966 :a6966. :a6967 :a6967 :a6967. :a6968 :a6968 :a6968. :a6969 :a6969 :a6969. :a6970 :a6970 :a6970. :a6971 :a6971 :a6971. :a6972 :a6972 :a6972. :a6973 :a6973 :a6973. :a6974 :a6974 :a6974. :a6975 :a6975 :a6975. :a6976 :a6976 :a6976. :a6977 :a6977 :a6977. :a6978 :a6978 :a6978. :a6979 :a6979 :a6979. :a6980 :a6980 :a6980. :a6981 :a6981 :a6981. :a6982 :a6982 :a6982. :a6983 :a6983 :a6983. :a6984 :a6984 :a6984. :a6985 :a6985 :a6985. :a6986 :a6986 :a6986. :a6987 :a6987 :a6987. :a6988 :a6988 :a6988. :a6989 :a6989 :a6989. :a6990 :a6990 :a6990. :a6991 :a6991 :a6991. :a6992 :a6992 :a6992. :a6993 :a6993 :a6993. :a6994 :a6994 :a6994. :a6995 :a6995 :a6995. :a6996 :a6996 :a6996. :a6997 :a6997 :a6997. :a6998 :a6998 :a6998. :a6999 :a6999 :a6999. :a7000 :a7000 :a7000. :a7001 :a7001 :a7001. :a7002 :a7002 :a7002. :a7003 :a7003 :a7003. :a7004 :a7004 :a7004. :a7005 :a7005 :a7005. :a7006 :a7006 :a7006. :a7007 :a7007 :a7007. :a7008 :a7008 :a7008. :a7009 :a7009 :a7009. :a7010 :a7010 :a7010. :a7011 :a7011 :a7011. :a7012 :a7012 :a7012. :a7013 :a7013 :a7013. :a7014 :a7014 :a7014. :a7015 :a7015 :a7015. :a7016 :a7016 :a7016. :a7017 :a7017 :a7017. :a7018 :a7018 :a7018. :a7019 :a7019 :a7019. :a7020 :a7020 :a7020. :a7021 :a7021 :a7021. :a7022 :a7022 :a7022. :a7023 :a7023 :a7023. :a7024 :a7024 :a7024. :a7025 :a7025 :a7025. :a7026 :a7026 :a7026. :a7027 :a7027 :a7027. :a7028 :a7028 :a7028. :a7029 :a7029 :a7029. :a7030 :a7030 :a7030. :a7031 :a7031 :a7031. :a7032 :a7032 :a7032. :a7033 :a7033 :a7033. :a7034 :a7034 :a7034. :a7035 :a7035 :a7035. :a7036 :a7036 :a7036. :a7037 :a7037 :a7037. :a7038 :a7038 :a7038. :a7039 :a7039 :a7039. :a7040 :a7040 :a7040. :a7041 :a7041 :a7041. :a7042 :a7042 :a7042. :a7043 :a7043 :a7043. :a7044 :a7044 :a7044. :a7045 :a7045 :a7045. :a7046 :a7046 :a7046. :a7047 :a7047 :a7047. :a7048 :a7048 :a7048. :a7049 :a7049 :a7049. :a7050 :a7050 :a7050. :a7051 :a7051 :a7051. :a7052 :a7052 :a7052. :a7053 :a7053 :a7053. :a7054 :a7054 :a7054. :a7055 :a7055 :a7055. :a7056 :a7056 :a7056. :a7057 :a7057 :a7057. :a7058 :a7058 :a7058. :a7059 :a7059 :a7059. :a7060 :a7060 :a7060. :a7061 :a7061 :a7061. :a7062 :a7062 :a7062. :a7063 :a7063 :a7063. :a7064 :a7064 :a7064. :a7065 :a7065 :a7065. :a7066 :a7066 :a7066. :a7067 :a7067 :a7067. :a7068 :a7068 :a7068. :a7069 :a7069 :a7069. :a7070 :a7070 :a7070. :a7071 :a7071 :a7071. :a7072 :a7072 :a7072. :a7073 :a7073 :a7073. :a7074 :a7074 :a7074. :a7075 :a7075 :a7075. :a7076 :a7076 :a7076. :a7077 :a7077 :a7077. :a7078 :a7078 :a7078. :a7079 :a7079 :a7079. :a7080 :a7080 :a7080. :a7081 :a7081 :a7081. :a7082 :a7082 :a7082. :a7083 :a7083 :a7083. :a7084 :a7084 :a7084. :a7085 :a7085 :a7085. :a7086 :a7086 :a7086. :a7087 :a7087 :a7087. :a7088 :a7088 :a7088. :a7089 :a7089 :a7089. :a7090 :a7090 :a7090. :a7091 :a7091 :a7091. :a7092 :a7092 :a7092. :a7093 :a7093 :a7093. :a7094 :a7094 :a7094. :a7095 :a7095 :a7095. :a7096 :a7096 :a7096. :a7097 :a7097 :a7097. :a7098 :a7098 :a7098. :a7099 :a7099 :a7099. :a7100 :a7100 :a7100. :a7101 :a7101 :a7101. :a7102 :a7102 :a7102. :a7103 :a7103 :a7103. :a7104 :a7104 :a7104. :a7105 :a7105 :a7105. :a7106 :a7106 :a7106. :a7107 :a7107 :a7107. :a7108 :a7108 :a7108. :a7109 :a7109 :a7109. :a7110 :a7110 :a7110. :a7111 :a7111 :a7111. :a7112 :a7112 :a7112. :a7113 :a7113 :a7113. :a7114 :a7114 :a7114. :a7115 :a7115 :a7115. :a7116 :a7116 :a7116. :a7117 :a7117 :a7117. :a7118 :a7118 :a7118. :a7119 :a7119 :a7119. :a7120 :a7120 :a7120. :a7121 :a7121 :a7121. :a7122 :a7122 :a7122. :a7123 :a7123 :a7123. :a7124 :a7124 :a7124. :a7125 :a7125 :a7125. :a7126 :a7126 :a7126. :a7127 :a7127 :a7127. :a7128 :a7128 :a7128. :a7129 :a7129 :a7129. :a7130 :a7130 :a7130. :a7131 :a7131 :a7131. :a7132 :a7132 :a7132. :a7133 :a7133 :a7133. :a7134 :a7134 :a7134. :a7135 :a7135 :a7135. :a7136 :a7136 :a7136. :a7137 :a7137 :a7137. :a7138 :a7138 :a7138. :a7139 :a7139 :a7139. :a7140 :a7140 :a7140. :a7141 :a7141 :a7141. :a7142 :a7142 :a7142. :a7143 :a7143 :a7143. :a7144 :a7144 :a7144. :a7145 :a7145 :a7145. :a7146 :a7146 :a7146. :a7147 :a7147 :a7147. :a7148 :a7148 :a7148. :a7149 :a7149 :a7149. :a7150 :a7150 :a7150. :a7151 :a7151 :a7151. :a7152 :a7152 :a7152. :a7153 :a7153 :a7153. :a7154 :a7154 :a7154. :a7155 :a7155 :a7155. :a7156 :a7156 :a7156. :a7157 :a7157 :a7157. :a7158 :a7158 :a7158. :a7159 :a7159 :a7159. :a7160 :a7160 :a7160. :a7161 :a7161 :a7161. :a7162 :a7162 :a7162. :a7163 :a7163 :a7163. :a7164 :a7164 :a7164. :a7165 :a7165 :a7165. :a7166 :a7166 :a7166. :a7167 :a7167 :a7167. :a7168 :a7168 :a7168. :a7169 :a7169 :a7169. :a7170 :a7170 :a7170. :a7171 :a7171 :a7171. :a7172 :a7172 :a7172. :a7173 :a7173 :a7173. :a7174 :a7174 :a7174. :a7175 :a7175 :a7175. :a7176 :a7176 :a7176. :a7177 :a7177 :a7177. :a7178 :a7178 :a7178. :a7179 :a7179 :a7179. :a7180 :a7180 :a7180. :a7181 :a7181 :a7181. :a7182 :a7182 :a7182. :a7183 :a7183 :a7183. :a7184 :a7184 :a7184. :a7185 :a7185 :a7185. :a7186 :a7186 :a7186. :a7187 :a7187 :a7187. :a7188 :a7188 :a7188. :a7189 :a7189 :a7189. :a7190 :a7190 :a7190. :a7191 :a7191 :a7191. :a7192 :a7192 :a7192. :a7193 :a7193 :a7193. :a7194 :a7194 :a7194. :a7195 :a7195 :a7195. :a7196 :a7196 :a7196. :a7197 :a7197 :a7197. :a7198 :a7198 :a7198. :a7199 :a7199 :a7199. :a7200 :a7200 :a7200. :a7201 :a7201 :a7201. :a7202 :a7202 :a7202. :a7203 :a7203 :a7203. :a7204 :a7204 :a7204. :a7205 :a7205 :a7205. :a7206 :a7206 :a7206. :a7207 :a7207 :a7207. :a7208 :a7208 :a7208. :a7209 :a7209 :a7209. :a7210 :a7210 :a7210. :a7211 :a7211 :a7211. :a7212 :a7212 :a7212. :a7213 :a7213 :a7213. :a7214 :a7214 :a7214. :a7215 :a7215 :a7215. :a7216 :a7216 :a7216. :a7217 :a7217 :a7217. :a7218 :a7218 :a7218. :a7219 :a7219 :a7219. :a7220 :a7220 :a7220. :a7221 :a7221 :a7221. :a7222 :a7222 :a7222. :a7223 :a7223 :a7223. :a7224 :a7224 :a7224. :a7225 :a7225 :a7225. :a7226 :a7226 :a7226. :a7227 :a7227 :a7227. :a7228 :a7228 :a7228. :a7229 :a7229 :a7229. :a7230 :a7230 :a7230. :a7231 :a7231 :a7231. :a7232 :a7232 :a7232. :a7233 :a7233 :a7233. :a7234 :a7234 :a7234. :a7235 :a7235 :a7235. :a7236 :a7236 :a7236. :a7237 :a7237 :a7237. :a7238 :a7238 :a7238. :a7239 :a7239 :a7239. :a7240 :a7240 :a7240. :a7241 :a7241 :a7241. :a7242 :a7242 :a7242. :a7243 :a7243 :a7243. :a7244 :a7244 :a7244. :a7245 :a7245 :a7245. :a7246 :a7246 :a7246. :a7247 :a7247 :a7247. :a7248 :a7248 :a7248. :a7249 :a7249 :a7249. :a7250 :a7250 :a7250. :a7251 :a7251 :a7251. :a7252 :a7252 :a7252. :a7253 :a7253 :a7253. :a7254 :a7254 :a7254. :a7255 :a7255 :a7255. :a7256 :a7256 :a7256. :a7257 :a7257 :a7257. :a7258 :a7258 :a7258. :a7259 :a7259 :a7259. :a7260 :a7260 :a7260. :a7261 :a7261 :a7261. :a7262 :a7262 :a7262. :a7263 :a7263 :a7263. :a7264 :a7264 :a7264. :a7265 :a7265 :a7265. :a7266 :a7266 :a7266. :a7267 :a7267 :a7267. :a7268 :a7268 :a7268. :a7269 :a7269 :a7269. :a7270 :a7270 :a7270. :a7271 :a7271 :a7271. :a7272 :a7272 :a7272. :a7273 :a7273 :a7273. :a7274 :a7274 :a7274. :a7275 :a7275 :a7275. :a7276 :a7276 :a7276. :a7277 :a7277 :a7277. :a7278 :a7278 :a7278. :a7279 :a7279 :a7279. :a7280 :a7280 :a7280. :a7281 :a7281 :a7281. :a7282 :a7282 :a7282. :a7283 :a7283 :a7283. :a7284 :a7284 :a7284. :a7285 :a7285 :a7285. :a7286 :a7286 :a7286. :a7287 :a7287 :a7287. :a7288 :a7288 :a7288. :a7289 :a7289 :a7289. :a7290 :a7290 :a7290. :a7291 :a7291 :a7291. :a7292 :a7292 :a7292. :a7293 :a7293 :a7293. :a7294 :a7294 :a7294. :a7295 :a7295 :a7295. :a7296 :a7296 :a7296. :a7297 :a7297 :a7297. :a7298 :a7298 :a7298. :a7299 :a7299 :a7299. :a7300 :a7300 :a7300. :a7301 :a7301 :a7301. :a7302 :a7302 :a7302. :a7303 :a7303 :a7303. :a7304 :a7304 :a7304. :a7305 :a7305 :a7305. :a7306 :a7306 :a7306. :a7307 :a7307 :a7307. :a7308 :a7308 :a7308. :a7309 :a7309 :a7309. :a7310 :a7310 :a7310. :a7311 :a7311 :a7311. :a7312 :a7312 :a7312. :a7313 :a7313 :a7313. :a7314 :a7314 :a7314. :a7315 :a7315 :a7315. :a7316 :a7316 :a7316. :a7317 :a7317 :a7317. :a7318 :a7318 :a7318. :a7319 :a7319 :a7319. :a7320 :a7320 :a7320. :a7321 :a7321 :a7321. :a7322 :a7322 :a7322. :a7323 :a7323 :a7323. :a7324 :a7324 :a7324. :a7325 :a7325 :a7325. :a7326 :a7326 :a7326. :a7327 :a7327 :a7327. :a7328 :a7328 :a7328. :a7329 :a7329 :a7329. :a7330 :a7330 :a7330. :a7331 :a7331 :a7331. :a7332 :a7332 :a7332. :a7333 :a7333 :a7333. :a7334 :a7334 :a7334. :a7335 :a7335 :a7335. :a7336 :a7336 :a7336. :a7337 :a7337 :a7337. :a7338 :a7338 :a7338. :a7339 :a7339 :a7339. :a7340 :a7340 :a7340. :a7341 :a7341 :a7341. :a7342 :a7342 :a7342. :a7343 :a7343 :a7343. :a7344 :a7344 :a7344. :a7345 :a7345 :a7345. :a7346 :a7346 :a7346. :a7347 :a7347 :a7347. :a7348 :a7348 :a7348. :a7349 :a7349 :a7349. :a7350 :a7350 :a7350. :a7351 :a7351 :a7351. :a7352 :a7352 :a7352. :a7353 :a7353 :a7353. :a7354 :a7354 :a7354. :a7355 :a7355 :a7355. :a7356 :a7356 :a7356. :a7357 :a7357 :a7357. :a7358 :a7358 :a7358. :a7359 :a7359 :a7359. :a7360 :a7360 :a7360. :a7361 :a7361 :a7361. :a7362 :a7362 :a7362. :a7363 :a7363 :a7363. :a7364 :a7364 :a7364. :a7365 :a7365 :a7365. :a7366 :a7366 :a7366. :a7367 :a7367 :a7367. :a7368 :a7368 :a7368. :a7369 :a7369 :a7369. :a7370 :a7370 :a7370. :a7371 :a7371 :a7371. :a7372 :a7372 :a7372. :a7373 :a7373 :a7373. :a7374 :a7374 :a7374. :a7375 :a7375 :a7375. :a7376 :a7376 :a7376. :a7377 :a7377 :a7377. :a7378 :a7378 :a7378. :a7379 :a7379 :a7379. :a7380 :a7380 :a7380. :a7381 :a7381 :a7381. :a7382 :a7382 :a7382. :a7383 :a7383 :a7383. :a7384 :a7384 :a7384. :a7385 :a7385 :a7385. :a7386 :a7386 :a7386. :a7387 :a7387 :a7387. :a7388 :a7388 :a7388. :a7389 :a7389 :a7389. :a7390 :a7390 :a7390. :a7391 :a7391 :a7391. :a7392 :a7392 :a7392. :a7393 :a7393 :a7393. :a7394 :a7394 :a7394. :a7395 :a7395 :a7395. :a7396 :a7396 :a7396. :a7397 :a7397 :a7397. :a7398 :a7398 :a7398. :a7399 :a7399 :a7399. :a7400 :a7400 :a7400. :a7401 :a7401 :a7401. :a7402 :a7402 :a7402. :a7403 :a7403 :a7403. :a7404 :a7404 :a7404. :a7405 :a7405 :a7405. :a7406 :a7406 :a7406. :a7407 :a7407 :a7407. :a7408 :a7408 :a7408. :a7409 :a7409 :a7409. :a7410 :a7410 :a7410. :a7411 :a7411 :a7411. :a7412 :a7412 :a7412. :a7413 :a7413 :a7413. :a7414 :a7414 :a7414. :a7415 :a7415 :a7415. :a7416 :a7416 :a7416. :a7417 :a7417 :a7417. :a7418 :a7418 :a7418. :a7419 :a7419 :a7419. :a7420 :a7420 :a7420. :a7421 :a7421 :a7421. :a7422 :a7422 :a7422. :a7423 :a7423 :a7423. :a7424 :a7424 :a7424. :a7425 :a7425 :a7425. :a7426 :a7426 :a7426. :a7427 :a7427 :a7427. :a7428 :a7428 :a7428. :a7429 :a7429 :a7429. :a7430 :a7430 :a7430. :a7431 :a7431 :a7431. :a7432 :a7432 :a7432. :a7433 :a7433 :a7433. :a7434 :a7434 :a7434. :a7435 :a7435 :a7435. :a7436 :a7436 :a7436. :a7437 :a7437 :a7437. :a7438 :a7438 :a7438. :a7439 :a7439 :a7439. :a7440 :a7440 :a7440. :a7441 :a7441 :a7441. :a7442 :a7442 :a7442. :a7443 :a7443 :a7443. :a7444 :a7444 :a7444. :a7445 :a7445 :a7445. :a7446 :a7446 :a7446. :a7447 :a7447 :a7447. :a7448 :a7448 :a7448. :a7449 :a7449 :a7449. :a7450 :a7450 :a7450. :a7451 :a7451 :a7451. :a7452 :a7452 :a7452. :a7453 :a7453 :a7453. :a7454 :a7454 :a7454. :a7455 :a7455 :a7455. :a7456 :a7456 :a7456. :a7457 :a7457 :a7457. :a7458 :a7458 :a7458. :a7459 :a7459 :a7459. :a7460 :a7460 :a7460. :a7461 :a7461 :a7461. :a7462 :a7462 :a7462. :a7463 :a7463 :a7463. :a7464 :a7464 :a7464. :a7465 :a7465 :a7465. :a7466 :a7466 :a7466. :a7467 :a7467 :a7467. :a7468 :a7468 :a7468. :a7469 :a7469 :a7469. :a7470 :a7470 :a7470. :a7471 :a7471 :a7471. :a7472 :a7472 :a7472. :a7473 :a7473 :a7473. :a7474 :a7474 :a7474. :a7475 :a7475 :a7475. :a7476 :a7476 :a7476. :a7477 :a7477 :a7477. :a7478 :a7478 :a7478. :a7479 :a7479 :a7479. :a7480 :a7480 :a7480. :a7481 :a7481 :a7481. :a7482 :a7482 :a7482. :a7483 :a7483 :a7483. :a7484 :a7484 :a7484. :a7485 :a7485 :a7485. :a7486 :a7486 :a7486. :a7487 :a7487 :a7487. :a7488 :a7488 :a7488. :a7489 :a7489 :a7489. :a7490 :a7490 :a7490. :a7491 :a7491 :a7491. :a7492 :a7492 :a7492. :a7493 :a7493 :a7493. :a7494 :a7494 :a7494. :a7495 :a7495 :a7495. :a7496 :a7496 :a7496. :a7497 :a7497 :a7497. :a7498 :a7498 :a7498. :a7499 :a7499 :a7499. :a7500 :a7500 :a7500. :a7501 :a7501 :a7501. :a7502 :a7502 :a7502. :a7503 :a7503 :a7503. :a7504 :a7504 :a7504. :a7505 :a7505 :a7505. :a7506 :a7506 :a7506. :a7507 :a7507 :a7507. :a7508 :a7508 :a7508. :a7509 :a7509 :a7509. :a7510 :a7510 :a7510. :a7511 :a7511 :a7511. :a7512 :a7512 :a7512. :a7513 :a7513 :a7513. :a7514 :a7514 :a7514. :a7515 :a7515 :a7515. :a7516 :a7516 :a7516. :a7517 :a7517 :a7517. :a7518 :a7518 :a7518. :a7519 :a7519 :a7519. :a7520 :a7520 :a7520. :a7521 :a7521 :a7521. :a7522 :a7522 :a7522. :a7523 :a7523 :a7523. :a7524 :a7524 :a7524. :a7525 :a7525 :a7525. :a7526 :a7526 :a7526. :a7527 :a7527 :a7527. :a7528 :a7528 :a7528. :a7529 :a7529 :a7529. :a7530 :a7530 :a7530. :a7531 :a7531 :a7531. :a7532 :a7532 :a7532. :a7533 :a7533 :a7533. :a7534 :a7534 :a7534. :a7535 :a7535 :a7535. :a7536 :a7536 :a7536. :a7537 :a7537 :a7537. :a7538 :a7538 :a7538. :a7539 :a7539 :a7539. :a7540 :a7540 :a7540. :a7541 :a7541 :a7541. :a7542 :a7542 :a7542. :a7543 :a7543 :a7543. :a7544 :a7544 :a7544. :a7545 :a7545 :a7545. :a7546 :a7546 :a7546. :a7547 :a7547 :a7547. :a7548 :a7548 :a7548. :a7549 :a7549 :a7549. :a7550 :a7550 :a7550. :a7551 :a7551 :a7551. :a7552 :a7552 :a7552. :a7553 :a7553 :a7553. :a7554 :a7554 :a7554. :a7555 :a7555 :a7555. :a7556 :a7556 :a7556. :a7557 :a7557 :a7557. :a7558 :a7558 :a7558. :a7559 :a7559 :a7559. :a7560 :a7560 :a7560. :a7561 :a7561 :a7561. :a7562 :a7562 :a7562. :a7563 :a7563 :a7563. :a7564 :a7564 :a7564. :a7565 :a7565 :a7565. :a7566 :a7566 :a7566. :a7567 :a7567 :a7567. :a7568 :a7568 :a7568. :a7569 :a7569 :a7569. :a7570 :a7570 :a7570. :a7571 :a7571 :a7571. :a7572 :a7572 :a7572. :a7573 :a7573 :a7573. :a7574 :a7574 :a7574. :a7575 :a7575 :a7575. :a7576 :a7576 :a7576. :a7577 :a7577 :a7577. :a7578 :a7578 :a7578. :a7579 :a7579 :a7579. :a7580 :a7580 :a7580. :a7581 :a7581 :a7581. :a7582 :a7582 :a7582. :a7583 :a7583 :a7583. :a7584 :a7584 :a7584. :a7585 :a7585 :a7585. :a7586 :a7586 :a7586. :a7587 :a7587 :a7587. :a7588 :a7588 :a7588. :a7589 :a7589 :a7589. :a7590 :a7590 :a7590. :a7591 :a7591 :a7591. :a7592 :a7592 :a7592. :a7593 :a7593 :a7593. :a7594 :a7594 :a7594. :a7595 :a7595 :a7595. :a7596 :a7596 :a7596. :a7597 :a7597 :a7597. :a7598 :a7598 :a7598. :a7599 :a7599 :a7599. :a7600 :a7600 :a7600. :a7601 :a7601 :a7601. :a7602 :a7602 :a7602. :a7603 :a7603 :a7603. :a7604 :a7604 :a7604. :a7605 :a7605 :a7605. :a7606 :a7606 :a7606. :a7607 :a7607 :a7607. :a7608 :a7608 :a7608. :a7609 :a7609 :a7609. :a7610 :a7610 :a7610. :a7611 :a7611 :a7611. :a7612 :a7612 :a7612. :a7613 :a7613 :a7613. :a7614 :a7614 :a7614. :a7615 :a7615 :a7615. :a7616 :a7616 :a7616. :a7617 :a7617 :a7617. :a7618 :a7618 :a7618. :a7619 :a7619 :a7619. :a7620 :a7620 :a7620. :a7621 :a7621 :a7621. :a7622 :a7622 :a7622. :a7623 :a7623 :a7623. :a7624 :a7624 :a7624. :a7625 :a7625 :a7625. :a7626 :a7626 :a7626. :a7627 :a7627 :a7627. :a7628 :a7628 :a7628. :a7629 :a7629 :a7629. :a7630 :a7630 :a7630. :a7631 :a7631 :a7631. :a7632 :a7632 :a7632. :a7633 :a7633 :a7633. :a7634 :a7634 :a7634. :a7635 :a7635 :a7635. :a7636 :a7636 :a7636. :a7637 :a7637 :a7637. :a7638 :a7638 :a7638. :a7639 :a7639 :a7639. :a7640 :a7640 :a7640. :a7641 :a7641 :a7641. :a7642 :a7642 :a7642. :a7643 :a7643 :a7643. :a7644 :a7644 :a7644. :a7645 :a7645 :a7645. :a7646 :a7646 :a7646. :a7647 :a7647 :a7647. :a7648 :a7648 :a7648. :a7649 :a7649 :a7649. :a7650 :a7650 :a7650. :a7651 :a7651 :a7651. :a7652 :a7652 :a7652. :a7653 :a7653 :a7653. :a7654 :a7654 :a7654. :a7655 :a7655 :a7655. :a7656 :a7656 :a7656. :a7657 :a7657 :a7657. :a7658 :a7658 :a7658. :a7659 :a7659 :a7659. :a7660 :a7660 :a7660. :a7661 :a7661 :a7661. :a7662 :a7662 :a7662. :a7663 :a7663 :a7663. :a7664 :a7664 :a7664. :a7665 :a7665 :a7665. :a7666 :a7666 :a7666. :a7667 :a7667 :a7667. :a7668 :a7668 :a7668. :a7669 :a7669 :a7669. :a7670 :a7670 :a7670. :a7671 :a7671 :a7671. :a7672 :a7672 :a7672. :a7673 :a7673 :a7673. :a7674 :a7674 :a7674. :a7675 :a7675 :a7675. :a7676 :a7676 :a7676. :a7677 :a7677 :a7677. :a7678 :a7678 :a7678. :a7679 :a7679 :a7679. :a7680 :a7680 :a7680. :a7681 :a7681 :a7681. :a7682 :a7682 :a7682. :a7683 :a7683 :a7683. :a7684 :a7684 :a7684. :a7685 :a7685 :a7685. :a7686 :a7686 :a7686. :a7687 :a7687 :a7687. :a7688 :a7688 :a7688. :a7689 :a7689 :a7689. :a7690 :a7690 :a7690. :a7691 :a7691 :a7691. :a7692 :a7692 :a7692. :a7693 :a7693 :a7693. :a7694 :a7694 :a7694. :a7695 :a7695 :a7695. :a7696 :a7696 :a7696. :a7697 :a7697 :a7697. :a7698 :a7698 :a7698. :a7699 :a7699 :a7699. :a7700 :a7700 :a7700. :a7701 :a7701 :a7701. :a7702 :a7702 :a7702. :a7703 :a7703 :a7703. :a7704 :a7704 :a7704. :a7705 :a7705 :a7705. :a7706 :a7706 :a7706. :a7707 :a7707 :a7707. :a7708 :a7708 :a7708. :a7709 :a7709 :a7709. :a7710 :a7710 :a7710. :a7711 :a7711 :a7711. :a7712 :a7712 :a7712. :a7713 :a7713 :a7713. :a7714 :a7714 :a7714. :a7715 :a7715 :a7715. :a7716 :a7716 :a7716. :a7717 :a7717 :a7717. :a7718 :a7718 :a7718. :a7719 :a7719 :a7719. :a7720 :a7720 :a7720. :a7721 :a7721 :a7721. :a7722 :a7722 :a7722. :a7723 :a7723 :a7723. :a7724 :a7724 :a7724. :a7725 :a7725 :a7725. :a7726 :a7726 :a7726. :a7727 :a7727 :a7727. :a7728 :a7728 :a7728. :a7729 :a7729 :a7729. :a7730 :a7730 :a7730. :a7731 :a7731 :a7731. :a7732 :a7732 :a7732. :a7733 :a7733 :a7733. :a7734 :a7734 :a7734. :a7735 :a7735 :a7735. :a7736 :a7736 :a7736. :a7737 :a7737 :a7737. :a7738 :a7738 :a7738. :a7739 :a7739 :a7739. :a7740 :a7740 :a7740. :a7741 :a7741 :a7741. :a7742 :a7742 :a7742. :a7743 :a7743 :a7743. :a7744 :a7744 :a7744. :a7745 :a7745 :a7745. :a7746 :a7746 :a7746. :a7747 :a7747 :a7747. :a7748 :a7748 :a7748. :a7749 :a7749 :a7749. :a7750 :a7750 :a7750. :a7751 :a7751 :a7751. :a7752 :a7752 :a7752. :a7753 :a7753 :a7753. :a7754 :a7754 :a7754. :a7755 :a7755 :a7755. :a7756 :a7756 :a7756. :a7757 :a7757 :a7757. :a7758 :a7758 :a7758. :a7759 :a7759 :a7759. :a7760 :a7760 :a7760. :a7761 :a7761 :a7761. :a7762 :a7762 :a7762. :a7763 :a7763 :a7763. :a7764 :a7764 :a7764. :a7765 :a7765 :a7765. :a7766 :a7766 :a7766. :a7767 :a7767 :a7767. :a7768 :a7768 :a7768. :a7769 :a7769 :a7769. :a7770 :a7770 :a7770. :a7771 :a7771 :a7771. :a7772 :a7772 :a7772. :a7773 :a7773 :a7773. :a7774 :a7774 :a7774. :a7775 :a7775 :a7775. :a7776 :a7776 :a7776. :a7777 :a7777 :a7777. :a7778 :a7778 :a7778. :a7779 :a7779 :a7779. :a7780 :a7780 :a7780. :a7781 :a7781 :a7781. :a7782 :a7782 :a7782. :a7783 :a7783 :a7783. :a7784 :a7784 :a7784. :a7785 :a7785 :a7785. :a7786 :a7786 :a7786. :a7787 :a7787 :a7787. :a7788 :a7788 :a7788. :a7789 :a7789 :a7789. :a7790 :a7790 :a7790. :a7791 :a7791 :a7791. :a7792 :a7792 :a7792. :a7793 :a7793 :a7793. :a7794 :a7794 :a7794. :a7795 :a7795 :a7795. :a7796 :a7796 :a7796. :a7797 :a7797 :a7797. :a7798 :a7798 :a7798. :a7799 :a7799 :a7799. :a7800 :a7800 :a7800. :a7801 :a7801 :a7801. :a7802 :a7802 :a7802. :a7803 :a7803 :a7803. :a7804 :a7804 :a7804. :a7805 :a7805 :a7805. :a7806 :a7806 :a7806. :a7807 :a7807 :a7807. :a7808 :a7808 :a7808. :a7809 :a7809 :a7809. :a7810 :a7810 :a7810. :a7811 :a7811 :a7811. :a7812 :a7812 :a7812. :a7813 :a7813 :a7813. :a7814 :a7814 :a7814. :a7815 :a7815 :a7815. :a7816 :a7816 :a7816. :a7817 :a7817 :a7817. :a7818 :a7818 :a7818. :a7819 :a7819 :a7819. :a7820 :a7820 :a7820. :a7821 :a7821 :a7821. :a7822 :a7822 :a7822. :a7823 :a7823 :a7823. :a7824 :a7824 :a7824. :a7825 :a7825 :a7825. :a7826 :a7826 :a7826. :a7827 :a7827 :a7827. :a7828 :a7828 :a7828. :a7829 :a7829 :a7829. :a7830 :a7830 :a7830. :a7831 :a7831 :a7831. :a7832 :a7832 :a7832. :a7833 :a7833 :a7833. :a7834 :a7834 :a7834. :a7835 :a7835 :a7835. :a7836 :a7836 :a7836. :a7837 :a7837 :a7837. :a7838 :a7838 :a7838. :a7839 :a7839 :a7839. :a7840 :a7840 :a7840. :a7841 :a7841 :a7841. :a7842 :a7842 :a7842. :a7843 :a7843 :a7843. :a7844 :a7844 :a7844. :a7845 :a7845 :a7845. :a7846 :a7846 :a7846. :a7847 :a7847 :a7847. :a7848 :a7848 :a7848. :a7849 :a7849 :a7849. :a7850 :a7850 :a7850. :a7851 :a7851 :a7851. :a7852 :a7852 :a7852. :a7853 :a7853 :a7853. :a7854 :a7854 :a7854. :a7855 :a7855 :a7855. :a7856 :a7856 :a7856. :a7857 :a7857 :a7857. :a7858 :a7858 :a7858. :a7859 :a7859 :a7859. :a7860 :a7860 :a7860. :a7861 :a7861 :a7861. :a7862 :a7862 :a7862. :a7863 :a7863 :a7863. :a7864 :a7864 :a7864. :a7865 :a7865 :a7865. :a7866 :a7866 :a7866. :a7867 :a7867 :a7867. :a7868 :a7868 :a7868. :a7869 :a7869 :a7869. :a7870 :a7870 :a7870. :a7871 :a7871 :a7871. :a7872 :a7872 :a7872. :a7873 :a7873 :a7873. :a7874 :a7874 :a7874. :a7875 :a7875 :a7875. :a7876 :a7876 :a7876. :a7877 :a7877 :a7877. :a7878 :a7878 :a7878. :a7879 :a7879 :a7879. :a7880 :a7880 :a7880. :a7881 :a7881 :a7881. :a7882 :a7882 :a7882. :a7883 :a7883 :a7883. :a7884 :a7884 :a7884. :a7885 :a7885 :a7885. :a7886 :a7886 :a7886. :a7887 :a7887 :a7887. :a7888 :a7888 :a7888. :a7889 :a7889 :a7889. :a7890 :a7890 :a7890. :a7891 :a7891 :a7891. :a7892 :a7892 :a7892. :a7893 :a7893 :a7893. :a7894 :a7894 :a7894. :a7895 :a7895 :a7895. :a7896 :a7896 :a7896. :a7897 :a7897 :a7897. :a7898 :a7898 :a7898. :a7899 :a7899 :a7899. :a7900 :a7900 :a7900. :a7901 :a7901 :a7901. :a7902 :a7902 :a7902. :a7903 :a7903 :a7903. :a7904 :a7904 :a7904. :a7905 :a7905 :a7905. :a7906 :a7906 :a7906. :a7907 :a7907 :a7907. :a7908 :a7908 :a7908. :a7909 :a7909 :a7909. :a7910 :a7910 :a7910. :a7911 :a7911 :a7911. :a7912 :a7912 :a7912. :a7913 :a7913 :a7913. :a7914 :a7914 :a7914. :a7915 :a7915 :a7915. :a7916 :a7916 :a7916. :a7917 :a7917 :a7917. :a7918 :a7918 :a7918. :a7919 :a7919 :a7919. :a7920 :a7920 :a7920. :a7921 :a7921 :a7921. :a7922 :a7922 :a7922. :a7923 :a7923 :a7923. :a7924 :a7924 :a7924. :a7925 :a7925 :a7925. :a7926 :a7926 :a7926. :a7927 :a7927 :a7927. :a7928 :a7928 :a7928. :a7929 :a7929 :a7929. :a7930 :a7930 :a7930. :a7931 :a7931 :a7931. :a7932 :a7932 :a7932. :a7933 :a7933 :a7933. :a7934 :a7934 :a7934. :a7935 :a7935 :a7935. :a7936 :a7936 :a7936. :a7937 :a7937 :a7937. :a7938 :a7938 :a7938. :a7939 :a7939 :a7939. :a7940 :a7940 :a7940. :a7941 :a7941 :a7941. :a7942 :a7942 :a7942. :a7943 :a7943 :a7943. :a7944 :a7944 :a7944. :a7945 :a7945 :a7945. :a7946 :a7946 :a7946. :a7947 :a7947 :a7947. :a7948 :a7948 :a7948. :a7949 :a7949 :a7949. :a7950 :a7950 :a7950. :a7951 :a7951 :a7951. :a7952 :a7952 :a7952. :a7953 :a7953 :a7953. :a7954 :a7954 :a7954. :a7955 :a7955 :a7955. :a7956 :a7956 :a7956. :a7957 :a7957 :a7957. :a7958 :a7958 :a7958. :a7959 :a7959 :a7959. :a7960 :a7960 :a7960. :a7961 :a7961 :a7961. :a7962 :a7962 :a7962. :a7963 :a7963 :a7963. :a7964 :a7964 :a7964. :a7965 :a7965 :a7965. :a7966 :a7966 :a7966. :a7967 :a7967 :a7967. :a7968 :a7968 :a7968. :a7969 :a7969 :a7969. :a7970 :a7970 :a7970. :a7971 :a7971 :a7971. :a7972 :a7972 :a7972. :a7973 :a7973 :a7973. :a7974 :a7974 :a7974. :a7975 :a7975 :a7975. :a7976 :a7976 :a7976. :a7977 :a7977 :a7977. :a7978 :a7978 :a7978. :a7979 :a7979 :a7979. :a7980 :a7980 :a7980. :a7981 :a7981 :a7981. :a7982 :a7982 :a7982. :a7983 :a7983 :a7983. :a7984 :a7984 :a7984. :a7985 :a7985 :a7985. :a7986 :a7986 :a7986. :a7987 :a7987 :a7987. :a7988 :a7988 :a7988. :a7989 :a7989 :a7989. :a7990 :a7990 :a7990. :a7991 :a7991 :a7991. :a7992 :a7992 :a7992. :a7993 :a7993 :a7993. :a7994 :a7994 :a7994. :a7995 :a7995 :a7995. :a7996 :a7996 :a7996. :a7997 :a7997 :a7997. :a7998 :a7998 :a7998. :a7999 :a7999 :a7999. :a8000 :a8000 :a8000. :a8001 :a8001 :a8001. :a8002 :a8002 :a8002. :a8003 :a8003 :a8003. :a8004 :a8004 :a8004. :a8005 :a8005 :a8005. :a8006 :a8006 :a8006. :a8007 :a8007 :a8007. :a8008 :a8008 :a8008. :a8009 :a8009 :a8009. :a8010 :a8010 :a8010. :a8011 :a8011 :a8011. :a8012 :a8012 :a8012. :a8013 :a8013 :a8013. :a8014 :a8014 :a8014. :a8015 :a8015 :a8015. :a8016 :a8016 :a8016. :a8017 :a8017 :a8017. :a8018 :a8018 :a8018. :a8019 :a8019 :a8019. :a8020 :a8020 :a8020. :a8021 :a8021 :a8021. :a8022 :a8022 :a8022. :a8023 :a8023 :a8023. :a8024 :a8024 :a8024. :a8025 :a8025 :a8025. :a8026 :a8026 :a8026. :a8027 :a8027 :a8027. :a8028 :a8028 :a8028. :a8029 :a8029 :a8029. :a8030 :a8030 :a8030. :a8031 :a8031 :a8031. :a8032 :a8032 :a8032. :a8033 :a8033 :a8033. :a8034 :a8034 :a8034. :a8035 :a8035 :a8035. :a8036 :a8036 :a8036. :a8037 :a8037 :a8037. :a8038 :a8038 :a8038. :a8039 :a8039 :a8039. :a8040 :a8040 :a8040. :a8041 :a8041 :a8041. :a8042 :a8042 :a8042. :a8043 :a8043 :a8043. :a8044 :a8044 :a8044. :a8045 :a8045 :a8045. :a8046 :a8046 :a8046. :a8047 :a8047 :a8047. :a8048 :a8048 :a8048. :a8049 :a8049 :a8049. :a8050 :a8050 :a8050. :a8051 :a8051 :a8051. :a8052 :a8052 :a8052. :a8053 :a8053 :a8053. :a8054 :a8054 :a8054. :a8055 :a8055 :a8055. :a8056 :a8056 :a8056. :a8057 :a8057 :a8057. :a8058 :a8058 :a8058. :a8059 :a8059 :a8059. :a8060 :a8060 :a8060. :a8061 :a8061 :a8061. :a8062 :a8062 :a8062. :a8063 :a8063 :a8063. :a8064 :a8064 :a8064. :a8065 :a8065 :a8065. :a8066 :a8066 :a8066. :a8067 :a8067 :a8067. :a8068 :a8068 :a8068. :a8069 :a8069 :a8069. :a8070 :a8070 :a8070. :a8071 :a8071 :a8071. :a8072 :a8072 :a8072. :a8073 :a8073 :a8073. :a8074 :a8074 :a8074. :a8075 :a8075 :a8075. :a8076 :a8076 :a8076. :a8077 :a8077 :a8077. :a8078 :a8078 :a8078. :a8079 :a8079 :a8079. :a8080 :a8080 :a8080. :a8081 :a8081 :a8081. :a8082 :a8082 :a8082. :a8083 :a8083 :a8083. :a8084 :a8084 :a8084. :a8085 :a8085 :a8085. :a8086 :a8086 :a8086. :a8087 :a8087 :a8087. :a8088 :a8088 :a8088. :a8089 :a8089 :a8089. :a8090 :a8090 :a8090. :a8091 :a8091 :a8091. :a8092 :a8092 :a8092. :a8093 :a8093 :a8093. :a8094 :a8094 :a8094. :a8095 :a8095 :a8095. :a8096 :a8096 :a8096. :a8097 :a8097 :a8097. :a8098 :a8098 :a8098. :a8099 :a8099 :a8099. :a8100 :a8100 :a8100. :a8101 :a8101 :a8101. :a8102 :a8102 :a8102. :a8103 :a8103 :a8103. :a8104 :a8104 :a8104. :a8105 :a8105 :a8105. :a8106 :a8106 :a8106. :a8107 :a8107 :a8107. :a8108 :a8108 :a8108. :a8109 :a8109 :a8109. :a8110 :a8110 :a8110. :a8111 :a8111 :a8111. :a8112 :a8112 :a8112. :a8113 :a8113 :a8113. :a8114 :a8114 :a8114. :a8115 :a8115 :a8115. :a8116 :a8116 :a8116. :a8117 :a8117 :a8117. :a8118 :a8118 :a8118. :a8119 :a8119 :a8119. :a8120 :a8120 :a8120. :a8121 :a8121 :a8121. :a8122 :a8122 :a8122. :a8123 :a8123 :a8123. :a8124 :a8124 :a8124. :a8125 :a8125 :a8125. :a8126 :a8126 :a8126. :a8127 :a8127 :a8127. :a8128 :a8128 :a8128. :a8129 :a8129 :a8129. :a8130 :a8130 :a8130. :a8131 :a8131 :a8131. :a8132 :a8132 :a8132. :a8133 :a8133 :a8133. :a8134 :a8134 :a8134. :a8135 :a8135 :a8135. :a8136 :a8136 :a8136. :a8137 :a8137 :a8137. :a8138 :a8138 :a8138. :a8139 :a8139 :a8139. :a8140 :a8140 :a8140. :a8141 :a8141 :a8141. :a8142 :a8142 :a8142. :a8143 :a8143 :a8143. :a8144 :a8144 :a8144. :a8145 :a8145 :a8145. :a8146 :a8146 :a8146. :a8147 :a8147 :a8147. :a8148 :a8148 :a8148. :a8149 :a8149 :a8149. :a8150 :a8150 :a8150. :a8151 :a8151 :a8151. :a8152 :a8152 :a8152. :a8153 :a8153 :a8153. :a8154 :a8154 :a8154. :a8155 :a8155 :a8155. :a8156 :a8156 :a8156. :a8157 :a8157 :a8157. :a8158 :a8158 :a8158. :a8159 :a8159 :a8159. :a8160 :a8160 :a8160. :a8161 :a8161 :a8161. :a8162 :a8162 :a8162. :a8163 :a8163 :a8163. :a8164 :a8164 :a8164. :a8165 :a8165 :a8165. :a8166 :a8166 :a8166. :a8167 :a8167 :a8167. :a8168 :a8168 :a8168. :a8169 :a8169 :a8169. :a8170 :a8170 :a8170. :a8171 :a8171 :a8171. :a8172 :a8172 :a8172. :a8173 :a8173 :a8173. :a8174 :a8174 :a8174. :a8175 :a8175 :a8175. :a8176 :a8176 :a8176. :a8177 :a8177 :a8177. :a8178 :a8178 :a8178. :a8179 :a8179 :a8179. :a8180 :a8180 :a8180. :a8181 :a8181 :a8181. :a8182 :a8182 :a8182. :a8183 :a8183 :a8183. :a8184 :a8184 :a8184. :a8185 :a8185 :a8185. :a8186 :a8186 :a8186. :a8187 :a8187 :a8187. :a8188 :a8188 :a8188. :a8189 :a8189 :a8189. :a8190 :a8190 :a8190. :a8191 :a8191 :a8191. :a8192 :a8192 :a8192. :a8193 :a8193 :a8193. :a8194 :a8194 :a8194. :a8195 :a8195 :a8195. :a8196 :a8196 :a8196. :a8197 :a8197 :a8197. :a8198 :a8198 :a8198. :a8199 :a8199 :a8199. :a8200 :a8200 :a8200. :a8201 :a8201 :a8201. :a8202 :a8202 :a8202. :a8203 :a8203 :a8203. :a8204 :a8204 :a8204. :a8205 :a8205 :a8205. :a8206 :a8206 :a8206. :a8207 :a8207 :a8207. :a8208 :a8208 :a8208. :a8209 :a8209 :a8209. :a8210 :a8210 :a8210. :a8211 :a8211 :a8211. :a8212 :a8212 :a8212. :a8213 :a8213 :a8213. :a8214 :a8214 :a8214. :a8215 :a8215 :a8215. :a8216 :a8216 :a8216. :a8217 :a8217 :a8217. :a8218 :a8218 :a8218. :a8219 :a8219 :a8219. :a8220 :a8220 :a8220. :a8221 :a8221 :a8221. :a8222 :a8222 :a8222. :a8223 :a8223 :a8223. :a8224 :a8224 :a8224. :a8225 :a8225 :a8225. :a8226 :a8226 :a8226. :a8227 :a8227 :a8227. :a8228 :a8228 :a8228. :a8229 :a8229 :a8229. :a8230 :a8230 :a8230. :a8231 :a8231 :a8231. :a8232 :a8232 :a8232. :a8233 :a8233 :a8233. :a8234 :a8234 :a8234. :a8235 :a8235 :a8235. :a8236 :a8236 :a8236. :a8237 :a8237 :a8237. :a8238 :a8238 :a8238. :a8239 :a8239 :a8239. :a8240 :a8240 :a8240. :a8241 :a8241 :a8241. :a8242 :a8242 :a8242. :a8243 :a8243 :a8243. :a8244 :a8244 :a8244. :a8245 :a8245 :a8245. :a8246 :a8246 :a8246. :a8247 :a8247 :a8247. :a8248 :a8248 :a8248. :a8249 :a8249 :a8249. :a8250 :a8250 :a8250. :a8251 :a8251 :a8251. :a8252 :a8252 :a8252. :a8253 :a8253 :a8253. :a8254 :a8254 :a8254. :a8255 :a8255 :a8255. :a8256 :a8256 :a8256. :a8257 :a8257 :a8257. :a8258 :a8258 :a8258. :a8259 :a8259 :a8259. :a8260 :a8260 :a8260. :a8261 :a8261 :a8261. :a8262 :a8262 :a8262. :a8263 :a8263 :a8263. :a8264 :a8264 :a8264. :a8265 :a8265 :a8265. :a8266 :a8266 :a8266. :a8267 :a8267 :a8267. :a8268 :a8268 :a8268. :a8269 :a8269 :a8269. :a8270 :a8270 :a8270. :a8271 :a8271 :a8271. :a8272 :a8272 :a8272. :a8273 :a8273 :a8273. :a8274 :a8274 :a8274. :a8275 :a8275 :a8275. :a8276 :a8276 :a8276. :a8277 :a8277 :a8277. :a8278 :a8278 :a8278. :a8279 :a8279 :a8279. :a8280 :a8280 :a8280. :a8281 :a8281 :a8281. :a8282 :a8282 :a8282. :a8283 :a8283 :a8283. :a8284 :a8284 :a8284. :a8285 :a8285 :a8285. :a8286 :a8286 :a8286. :a8287 :a8287 :a8287. :a8288 :a8288 :a8288. :a8289 :a8289 :a8289. :a8290 :a8290 :a8290. :a8291 :a8291 :a8291. :a8292 :a8292 :a8292. :a8293 :a8293 :a8293. :a8294 :a8294 :a8294. :a8295 :a8295 :a8295. :a8296 :a8296 :a8296. :a8297 :a8297 :a8297. :a8298 :a8298 :a8298. :a8299 :a8299 :a8299. :a8300 :a8300 :a8300. :a8301 :a8301 :a8301. :a8302 :a8302 :a8302. :a8303 :a8303 :a8303. :a8304 :a8304 :a8304. :a8305 :a8305 :a8305. :a8306 :a8306 :a8306. :a8307 :a8307 :a8307. :a8308 :a8308 :a8308. :a8309 :a8309 :a8309. :a8310 :a8310 :a8310. :a8311 :a8311 :a8311. :a8312 :a8312 :a8312. :a8313 :a8313 :a8313. :a8314 :a8314 :a8314. :a8315 :a8315 :a8315. :a8316 :a8316 :a8316. :a8317 :a8317 :a8317. :a8318 :a8318 :a8318. :a8319 :a8319 :a8319. :a8320 :a8320 :a8320. :a8321 :a8321 :a8321. :a8322 :a8322 :a8322. :a8323 :a8323 :a8323. :a8324 :a8324 :a8324. :a8325 :a8325 :a8325. :a8326 :a8326 :a8326. :a8327 :a8327 :a8327. :a8328 :a8328 :a8328. :a8329 :a8329 :a8329. :a8330 :a8330 :a8330. :a8331 :a8331 :a8331. :a8332 :a8332 :a8332. :a8333 :a8333 :a8333. :a8334 :a8334 :a8334. :a8335 :a8335 :a8335. :a8336 :a8336 :a8336. :a8337 :a8337 :a8337. :a8338 :a8338 :a8338. :a8339 :a8339 :a8339. :a8340 :a8340 :a8340. :a8341 :a8341 :a8341. :a8342 :a8342 :a8342. :a8343 :a8343 :a8343. :a8344 :a8344 :a8344. :a8345 :a8345 :a8345. :a8346 :a8346 :a8346. :a8347 :a8347 :a8347. :a8348 :a8348 :a8348. :a8349 :a8349 :a8349. :a8350 :a8350 :a8350. :a8351 :a8351 :a8351. :a8352 :a8352 :a8352. :a8353 :a8353 :a8353. :a8354 :a8354 :a8354. :a8355 :a8355 :a8355. :a8356 :a8356 :a8356. :a8357 :a8357 :a8357. :a8358 :a8358 :a8358. :a8359 :a8359 :a8359. :a8360 :a8360 :a8360. :a8361 :a8361 :a8361. :a8362 :a8362 :a8362. :a8363 :a8363 :a8363. :a8364 :a8364 :a8364. :a8365 :a8365 :a8365. :a8366 :a8366 :a8366. :a8367 :a8367 :a8367. :a8368 :a8368 :a8368. :a8369 :a8369 :a8369. :a8370 :a8370 :a8370. :a8371 :a8371 :a8371. :a8372 :a8372 :a8372. :a8373 :a8373 :a8373. :a8374 :a8374 :a8374. :a8375 :a8375 :a8375. :a8376 :a8376 :a8376. :a8377 :a8377 :a8377. :a8378 :a8378 :a8378. :a8379 :a8379 :a8379. :a8380 :a8380 :a8380. :a8381 :a8381 :a8381. :a8382 :a8382 :a8382. :a8383 :a8383 :a8383. :a8384 :a8384 :a8384. :a8385 :a8385 :a8385. :a8386 :a8386 :a8386. :a8387 :a8387 :a8387. :a8388 :a8388 :a8388. :a8389 :a8389 :a8389. :a8390 :a8390 :a8390. :a8391 :a8391 :a8391. :a8392 :a8392 :a8392. :a8393 :a8393 :a8393. :a8394 :a8394 :a8394. :a8395 :a8395 :a8395. :a8396 :a8396 :a8396. :a8397 :a8397 :a8397. :a8398 :a8398 :a8398. :a8399 :a8399 :a8399. :a8400 :a8400 :a8400. :a8401 :a8401 :a8401. :a8402 :a8402 :a8402. :a8403 :a8403 :a8403. :a8404 :a8404 :a8404. :a8405 :a8405 :a8405. :a8406 :a8406 :a8406. :a8407 :a8407 :a8407. :a8408 :a8408 :a8408. :a8409 :a8409 :a8409. :a8410 :a8410 :a8410. :a8411 :a8411 :a8411. :a8412 :a8412 :a8412. :a8413 :a8413 :a8413. :a8414 :a8414 :a8414. :a8415 :a8415 :a8415. :a8416 :a8416 :a8416. :a8417 :a8417 :a8417. :a8418 :a8418 :a8418. :a8419 :a8419 :a8419. :a8420 :a8420 :a8420. :a8421 :a8421 :a8421. :a8422 :a8422 :a8422. :a8423 :a8423 :a8423. :a8424 :a8424 :a8424. :a8425 :a8425 :a8425. :a8426 :a8426 :a8426. :a8427 :a8427 :a8427. :a8428 :a8428 :a8428. :a8429 :a8429 :a8429. :a8430 :a8430 :a8430. :a8431 :a8431 :a8431. :a8432 :a8432 :a8432. :a8433 :a8433 :a8433. :a8434 :a8434 :a8434. :a8435 :a8435 :a8435. :a8436 :a8436 :a8436. :a8437 :a8437 :a8437. :a8438 :a8438 :a8438. :a8439 :a8439 :a8439. :a8440 :a8440 :a8440. :a8441 :a8441 :a8441. :a8442 :a8442 :a8442. :a8443 :a8443 :a8443. :a8444 :a8444 :a8444. :a8445 :a8445 :a8445. :a8446 :a8446 :a8446. :a8447 :a8447 :a8447. :a8448 :a8448 :a8448. :a8449 :a8449 :a8449. :a8450 :a8450 :a8450. :a8451 :a8451 :a8451. :a8452 :a8452 :a8452. :a8453 :a8453 :a8453. :a8454 :a8454 :a8454. :a8455 :a8455 :a8455. :a8456 :a8456 :a8456. :a8457 :a8457 :a8457. :a8458 :a8458 :a8458. :a8459 :a8459 :a8459. :a8460 :a8460 :a8460. :a8461 :a8461 :a8461. :a8462 :a8462 :a8462. :a8463 :a8463 :a8463. :a8464 :a8464 :a8464. :a8465 :a8465 :a8465. :a8466 :a8466 :a8466. :a8467 :a8467 :a8467. :a8468 :a8468 :a8468. :a8469 :a8469 :a8469. :a8470 :a8470 :a8470. :a8471 :a8471 :a8471. :a8472 :a8472 :a8472. :a8473 :a8473 :a8473. :a8474 :a8474 :a8474. :a8475 :a8475 :a8475. :a8476 :a8476 :a8476. :a8477 :a8477 :a8477. :a8478 :a8478 :a8478. :a8479 :a8479 :a8479. :a8480 :a8480 :a8480. :a8481 :a8481 :a8481. :a8482 :a8482 :a8482. :a8483 :a8483 :a8483. :a8484 :a8484 :a8484. :a8485 :a8485 :a8485. :a8486 :a8486 :a8486. :a8487 :a8487 :a8487. :a8488 :a8488 :a8488. :a8489 :a8489 :a8489. :a8490 :a8490 :a8490. :a8491 :a8491 :a8491. :a8492 :a8492 :a8492. :a8493 :a8493 :a8493. :a8494 :a8494 :a8494. :a8495 :a8495 :a8495. :a8496 :a8496 :a8496. :a8497 :a8497 :a8497. :a8498 :a8498 :a8498. :a8499 :a8499 :a8499. :a8500 :a8500 :a8500. :a8501 :a8501 :a8501. :a8502 :a8502 :a8502. :a8503 :a8503 :a8503. :a8504 :a8504 :a8504. :a8505 :a8505 :a8505. :a8506 :a8506 :a8506. :a8507 :a8507 :a8507. :a8508 :a8508 :a8508. :a8509 :a8509 :a8509. :a8510 :a8510 :a8510. :a8511 :a8511 :a8511. :a8512 :a8512 :a8512. :a8513 :a8513 :a8513. :a8514 :a8514 :a8514. :a8515 :a8515 :a8515. :a8516 :a8516 :a8516. :a8517 :a8517 :a8517. :a8518 :a8518 :a8518. :a8519 :a8519 :a8519. :a8520 :a8520 :a8520. :a8521 :a8521 :a8521. :a8522 :a8522 :a8522. :a8523 :a8523 :a8523. :a8524 :a8524 :a8524. :a8525 :a8525 :a8525. :a8526 :a8526 :a8526. :a8527 :a8527 :a8527. :a8528 :a8528 :a8528. :a8529 :a8529 :a8529. :a8530 :a8530 :a8530. :a8531 :a8531 :a8531. :a8532 :a8532 :a8532. :a8533 :a8533 :a8533. :a8534 :a8534 :a8534. :a8535 :a8535 :a8535. :a8536 :a8536 :a8536. :a8537 :a8537 :a8537. :a8538 :a8538 :a8538. :a8539 :a8539 :a8539. :a8540 :a8540 :a8540. :a8541 :a8541 :a8541. :a8542 :a8542 :a8542. :a8543 :a8543 :a8543. :a8544 :a8544 :a8544. :a8545 :a8545 :a8545. :a8546 :a8546 :a8546. :a8547 :a8547 :a8547. :a8548 :a8548 :a8548. :a8549 :a8549 :a8549. :a8550 :a8550 :a8550. :a8551 :a8551 :a8551. :a8552 :a8552 :a8552. :a8553 :a8553 :a8553. :a8554 :a8554 :a8554. :a8555 :a8555 :a8555. :a8556 :a8556 :a8556. :a8557 :a8557 :a8557. :a8558 :a8558 :a8558. :a8559 :a8559 :a8559. :a8560 :a8560 :a8560. :a8561 :a8561 :a8561. :a8562 :a8562 :a8562. :a8563 :a8563 :a8563. :a8564 :a8564 :a8564. :a8565 :a8565 :a8565. :a8566 :a8566 :a8566. :a8567 :a8567 :a8567. :a8568 :a8568 :a8568. :a8569 :a8569 :a8569. :a8570 :a8570 :a8570. :a8571 :a8571 :a8571. :a8572 :a8572 :a8572. :a8573 :a8573 :a8573. :a8574 :a8574 :a8574. :a8575 :a8575 :a8575. :a8576 :a8576 :a8576. :a8577 :a8577 :a8577. :a8578 :a8578 :a8578. :a8579 :a8579 :a8579. :a8580 :a8580 :a8580. :a8581 :a8581 :a8581. :a8582 :a8582 :a8582. :a8583 :a8583 :a8583. :a8584 :a8584 :a8584. :a8585 :a8585 :a8585. :a8586 :a8586 :a8586. :a8587 :a8587 :a8587. :a8588 :a8588 :a8588. :a8589 :a8589 :a8589. :a8590 :a8590 :a8590. :a8591 :a8591 :a8591. :a8592 :a8592 :a8592. :a8593 :a8593 :a8593. :a8594 :a8594 :a8594. :a8595 :a8595 :a8595. :a8596 :a8596 :a8596. :a8597 :a8597 :a8597. :a8598 :a8598 :a8598. :a8599 :a8599 :a8599. :a8600 :a8600 :a8600. :a8601 :a8601 :a8601. :a8602 :a8602 :a8602. :a8603 :a8603 :a8603. :a8604 :a8604 :a8604. :a8605 :a8605 :a8605. :a8606 :a8606 :a8606. :a8607 :a8607 :a8607. :a8608 :a8608 :a8608. :a8609 :a8609 :a8609. :a8610 :a8610 :a8610. :a8611 :a8611 :a8611. :a8612 :a8612 :a8612. :a8613 :a8613 :a8613. :a8614 :a8614 :a8614. :a8615 :a8615 :a8615. :a8616 :a8616 :a8616. :a8617 :a8617 :a8617. :a8618 :a8618 :a8618. :a8619 :a8619 :a8619. :a8620 :a8620 :a8620. :a8621 :a8621 :a8621. :a8622 :a8622 :a8622. :a8623 :a8623 :a8623. :a8624 :a8624 :a8624. :a8625 :a8625 :a8625. :a8626 :a8626 :a8626. :a8627 :a8627 :a8627. :a8628 :a8628 :a8628. :a8629 :a8629 :a8629. :a8630 :a8630 :a8630. :a8631 :a8631 :a8631. :a8632 :a8632 :a8632. :a8633 :a8633 :a8633. :a8634 :a8634 :a8634. :a8635 :a8635 :a8635. :a8636 :a8636 :a8636. :a8637 :a8637 :a8637. :a8638 :a8638 :a8638. :a8639 :a8639 :a8639. :a8640 :a8640 :a8640. :a8641 :a8641 :a8641. :a8642 :a8642 :a8642. :a8643 :a8643 :a8643. :a8644 :a8644 :a8644. :a8645 :a8645 :a8645. :a8646 :a8646 :a8646. :a8647 :a8647 :a8647. :a8648 :a8648 :a8648. :a8649 :a8649 :a8649. :a8650 :a8650 :a8650. :a8651 :a8651 :a8651. :a8652 :a8652 :a8652. :a8653 :a8653 :a8653. :a8654 :a8654 :a8654. :a8655 :a8655 :a8655. :a8656 :a8656 :a8656. :a8657 :a8657 :a8657. :a8658 :a8658 :a8658. :a8659 :a8659 :a8659. :a8660 :a8660 :a8660. :a8661 :a8661 :a8661. :a8662 :a8662 :a8662. :a8663 :a8663 :a8663. :a8664 :a8664 :a8664. :a8665 :a8665 :a8665. :a8666 :a8666 :a8666. :a8667 :a8667 :a8667. :a8668 :a8668 :a8668. :a8669 :a8669 :a8669. :a8670 :a8670 :a8670. :a8671 :a8671 :a8671. :a8672 :a8672 :a8672. :a8673 :a8673 :a8673. :a8674 :a8674 :a8674. :a8675 :a8675 :a8675. :a8676 :a8676 :a8676. :a8677 :a8677 :a8677. :a8678 :a8678 :a8678. :a8679 :a8679 :a8679. :a8680 :a8680 :a8680. :a8681 :a8681 :a8681. :a8682 :a8682 :a8682. :a8683 :a8683 :a8683. :a8684 :a8684 :a8684. :a8685 :a8685 :a8685. :a8686 :a8686 :a8686. :a8687 :a8687 :a8687. :a8688 :a8688 :a8688. :a8689 :a8689 :a8689. :a8690 :a8690 :a8690. :a8691 :a8691 :a8691. :a8692 :a8692 :a8692. :a8693 :a8693 :a8693. :a8694 :a8694 :a8694. :a8695 :a8695 :a8695. :a8696 :a8696 :a8696. :a8697 :a8697 :a8697. :a8698 :a8698 :a8698. :a8699 :a8699 :a8699. :a8700 :a8700 :a8700. :a8701 :a8701 :a8701. :a8702 :a8702 :a8702. :a8703 :a8703 :a8703. :a8704 :a8704 :a8704. :a8705 :a8705 :a8705. :a8706 :a8706 :a8706. :a8707 :a8707 :a8707. :a8708 :a8708 :a8708. :a8709 :a8709 :a8709. :a8710 :a8710 :a8710. :a8711 :a8711 :a8711. :a8712 :a8712 :a8712. :a8713 :a8713 :a8713. :a8714 :a8714 :a8714. :a8715 :a8715 :a8715. :a8716 :a8716 :a8716. :a8717 :a8717 :a8717. :a8718 :a8718 :a8718. :a8719 :a8719 :a8719. :a8720 :a8720 :a8720. :a8721 :a8721 :a8721. :a8722 :a8722 :a8722. :a8723 :a8723 :a8723. :a8724 :a8724 :a8724. :a8725 :a8725 :a8725. :a8726 :a8726 :a8726. :a8727 :a8727 :a8727. :a8728 :a8728 :a8728. :a8729 :a8729 :a8729. :a8730 :a8730 :a8730. :a8731 :a8731 :a8731. :a8732 :a8732 :a8732. :a8733 :a8733 :a8733. :a8734 :a8734 :a8734. :a8735 :a8735 :a8735. :a8736 :a8736 :a8736. :a8737 :a8737 :a8737. :a8738 :a8738 :a8738. :a8739 :a8739 :a8739. :a8740 :a8740 :a8740. :a8741 :a8741 :a8741. :a8742 :a8742 :a8742. :a8743 :a8743 :a8743. :a8744 :a8744 :a8744. :a8745 :a8745 :a8745. :a8746 :a8746 :a8746. :a8747 :a8747 :a8747. :a8748 :a8748 :a8748. :a8749 :a8749 :a8749. :a8750 :a8750 :a8750. :a8751 :a8751 :a8751. :a8752 :a8752 :a8752. :a8753 :a8753 :a8753. :a8754 :a8754 :a8754. :a8755 :a8755 :a8755. :a8756 :a8756 :a8756. :a8757 :a8757 :a8757. :a8758 :a8758 :a8758. :a8759 :a8759 :a8759. :a8760 :a8760 :a8760. :a8761 :a8761 :a8761. :a8762 :a8762 :a8762. :a8763 :a8763 :a8763. :a8764 :a8764 :a8764. :a8765 :a8765 :a8765. :a8766 :a8766 :a8766. :a8767 :a8767 :a8767. :a8768 :a8768 :a8768. :a8769 :a8769 :a8769. :a8770 :a8770 :a8770. :a8771 :a8771 :a8771. :a8772 :a8772 :a8772. :a8773 :a8773 :a8773. :a8774 :a8774 :a8774. :a8775 :a8775 :a8775. :a8776 :a8776 :a8776. :a8777 :a8777 :a8777. :a8778 :a8778 :a8778. :a8779 :a8779 :a8779. :a8780 :a8780 :a8780. :a8781 :a8781 :a8781. :a8782 :a8782 :a8782. :a8783 :a8783 :a8783. :a8784 :a8784 :a8784. :a8785 :a8785 :a8785. :a8786 :a8786 :a8786. :a8787 :a8787 :a8787. :a8788 :a8788 :a8788. :a8789 :a8789 :a8789. :a8790 :a8790 :a8790. :a8791 :a8791 :a8791. :a8792 :a8792 :a8792. :a8793 :a8793 :a8793. :a8794 :a8794 :a8794. :a8795 :a8795 :a8795. :a8796 :a8796 :a8796. :a8797 :a8797 :a8797. :a8798 :a8798 :a8798. :a8799 :a8799 :a8799. :a8800 :a8800 :a8800. :a8801 :a8801 :a8801. :a8802 :a8802 :a8802. :a8803 :a8803 :a8803. :a8804 :a8804 :a8804. :a8805 :a8805 :a8805. :a8806 :a8806 :a8806. :a8807 :a8807 :a8807. :a8808 :a8808 :a8808. :a8809 :a8809 :a8809. :a8810 :a8810 :a8810. :a8811 :a8811 :a8811. :a8812 :a8812 :a8812. :a8813 :a8813 :a8813. :a8814 :a8814 :a8814. :a8815 :a8815 :a8815. :a8816 :a8816 :a8816. :a8817 :a8817 :a8817. :a8818 :a8818 :a8818. :a8819 :a8819 :a8819. :a8820 :a8820 :a8820. :a8821 :a8821 :a8821. :a8822 :a8822 :a8822. :a8823 :a8823 :a8823. :a8824 :a8824 :a8824. :a8825 :a8825 :a8825. :a8826 :a8826 :a8826. :a8827 :a8827 :a8827. :a8828 :a8828 :a8828. :a8829 :a8829 :a8829. :a8830 :a8830 :a8830. :a8831 :a8831 :a8831. :a8832 :a8832 :a8832. :a8833 :a8833 :a8833. :a8834 :a8834 :a8834. :a8835 :a8835 :a8835. :a8836 :a8836 :a8836. :a8837 :a8837 :a8837. :a8838 :a8838 :a8838. :a8839 :a8839 :a8839. :a8840 :a8840 :a8840. :a8841 :a8841 :a8841. :a8842 :a8842 :a8842. :a8843 :a8843 :a8843. :a8844 :a8844 :a8844. :a8845 :a8845 :a8845. :a8846 :a8846 :a8846. :a8847 :a8847 :a8847. :a8848 :a8848 :a8848. :a8849 :a8849 :a8849. :a8850 :a8850 :a8850. :a8851 :a8851 :a8851. :a8852 :a8852 :a8852. :a8853 :a8853 :a8853. :a8854 :a8854 :a8854. :a8855 :a8855 :a8855. :a8856 :a8856 :a8856. :a8857 :a8857 :a8857. :a8858 :a8858 :a8858. :a8859 :a8859 :a8859. :a8860 :a8860 :a8860. :a8861 :a8861 :a8861. :a8862 :a8862 :a8862. :a8863 :a8863 :a8863. :a8864 :a8864 :a8864. :a8865 :a8865 :a8865. :a8866 :a8866 :a8866. :a8867 :a8867 :a8867. :a8868 :a8868 :a8868. :a8869 :a8869 :a8869. :a8870 :a8870 :a8870. :a8871 :a8871 :a8871. :a8872 :a8872 :a8872. :a8873 :a8873 :a8873. :a8874 :a8874 :a8874. :a8875 :a8875 :a8875. :a8876 :a8876 :a8876. :a8877 :a8877 :a8877. :a8878 :a8878 :a8878. :a8879 :a8879 :a8879. :a8880 :a8880 :a8880. :a8881 :a8881 :a8881. :a8882 :a8882 :a8882. :a8883 :a8883 :a8883. :a8884 :a8884 :a8884. :a8885 :a8885 :a8885. :a8886 :a8886 :a8886. :a8887 :a8887 :a8887. :a8888 :a8888 :a8888. :a8889 :a8889 :a8889. :a8890 :a8890 :a8890. :a8891 :a8891 :a8891. :a8892 :a8892 :a8892. :a8893 :a8893 :a8893. :a8894 :a8894 :a8894. :a8895 :a8895 :a8895. :a8896 :a8896 :a8896. :a8897 :a8897 :a8897. :a8898 :a8898 :a8898. :a8899 :a8899 :a8899. :a8900 :a8900 :a8900. :a8901 :a8901 :a8901. :a8902 :a8902 :a8902. :a8903 :a8903 :a8903. :a8904 :a8904 :a8904. :a8905 :a8905 :a8905. :a8906 :a8906 :a8906. :a8907 :a8907 :a8907. :a8908 :a8908 :a8908. :a8909 :a8909 :a8909. :a8910 :a8910 :a8910. :a8911 :a8911 :a8911. :a8912 :a8912 :a8912. :a8913 :a8913 :a8913. :a8914 :a8914 :a8914. :a8915 :a8915 :a8915. :a8916 :a8916 :a8916. :a8917 :a8917 :a8917. :a8918 :a8918 :a8918. :a8919 :a8919 :a8919. :a8920 :a8920 :a8920. :a8921 :a8921 :a8921. :a8922 :a8922 :a8922. :a8923 :a8923 :a8923. :a8924 :a8924 :a8924. :a8925 :a8925 :a8925. :a8926 :a8926 :a8926. :a8927 :a8927 :a8927. :a8928 :a8928 :a8928. :a8929 :a8929 :a8929. :a8930 :a8930 :a8930. :a8931 :a8931 :a8931. :a8932 :a8932 :a8932. :a8933 :a8933 :a8933. :a8934 :a8934 :a8934. :a8935 :a8935 :a8935. :a8936 :a8936 :a8936. :a8937 :a8937 :a8937. :a8938 :a8938 :a8938. :a8939 :a8939 :a8939. :a8940 :a8940 :a8940. :a8941 :a8941 :a8941. :a8942 :a8942 :a8942. :a8943 :a8943 :a8943. :a8944 :a8944 :a8944. :a8945 :a8945 :a8945. :a8946 :a8946 :a8946. :a8947 :a8947 :a8947. :a8948 :a8948 :a8948. :a8949 :a8949 :a8949. :a8950 :a8950 :a8950. :a8951 :a8951 :a8951. :a8952 :a8952 :a8952. :a8953 :a8953 :a8953. :a8954 :a8954 :a8954. :a8955 :a8955 :a8955. :a8956 :a8956 :a8956. :a8957 :a8957 :a8957. :a8958 :a8958 :a8958. :a8959 :a8959 :a8959. :a8960 :a8960 :a8960. :a8961 :a8961 :a8961. :a8962 :a8962 :a8962. :a8963 :a8963 :a8963. :a8964 :a8964 :a8964. :a8965 :a8965 :a8965. :a8966 :a8966 :a8966. :a8967 :a8967 :a8967. :a8968 :a8968 :a8968. :a8969 :a8969 :a8969. :a8970 :a8970 :a8970. :a8971 :a8971 :a8971. :a8972 :a8972 :a8972. :a8973 :a8973 :a8973. :a8974 :a8974 :a8974. :a8975 :a8975 :a8975. :a8976 :a8976 :a8976. :a8977 :a8977 :a8977. :a8978 :a8978 :a8978. :a8979 :a8979 :a8979. :a8980 :a8980 :a8980. :a8981 :a8981 :a8981. :a8982 :a8982 :a8982. :a8983 :a8983 :a8983. :a8984 :a8984 :a8984. :a8985 :a8985 :a8985. :a8986 :a8986 :a8986. :a8987 :a8987 :a8987. :a8988 :a8988 :a8988. :a8989 :a8989 :a8989. :a8990 :a8990 :a8990. :a8991 :a8991 :a8991. :a8992 :a8992 :a8992. :a8993 :a8993 :a8993. :a8994 :a8994 :a8994. :a8995 :a8995 :a8995. :a8996 :a8996 :a8996. :a8997 :a8997 :a8997. :a8998 :a8998 :a8998. :a8999 :a8999 :a8999. :a9000 :a9000 :a9000. :a9001 :a9001 :a9001. :a9002 :a9002 :a9002. :a9003 :a9003 :a9003. :a9004 :a9004 :a9004. :a9005 :a9005 :a9005. :a9006 :a9006 :a9006. :a9007 :a9007 :a9007. :a9008 :a9008 :a9008. :a9009 :a9009 :a9009. :a9010 :a9010 :a9010. :a9011 :a9011 :a9011. :a9012 :a9012 :a9012. :a9013 :a9013 :a9013. :a9014 :a9014 :a9014. :a9015 :a9015 :a9015. :a9016 :a9016 :a9016. :a9017 :a9017 :a9017. :a9018 :a9018 :a9018. :a9019 :a9019 :a9019. :a9020 :a9020 :a9020. :a9021 :a9021 :a9021. :a9022 :a9022 :a9022. :a9023 :a9023 :a9023. :a9024 :a9024 :a9024. :a9025 :a9025 :a9025. :a9026 :a9026 :a9026. :a9027 :a9027 :a9027. :a9028 :a9028 :a9028. :a9029 :a9029 :a9029. :a9030 :a9030 :a9030. :a9031 :a9031 :a9031. :a9032 :a9032 :a9032. :a9033 :a9033 :a9033. :a9034 :a9034 :a9034. :a9035 :a9035 :a9035. :a9036 :a9036 :a9036. :a9037 :a9037 :a9037. :a9038 :a9038 :a9038. :a9039 :a9039 :a9039. :a9040 :a9040 :a9040. :a9041 :a9041 :a9041. :a9042 :a9042 :a9042. :a9043 :a9043 :a9043. :a9044 :a9044 :a9044. :a9045 :a9045 :a9045. :a9046 :a9046 :a9046. :a9047 :a9047 :a9047. :a9048 :a9048 :a9048. :a9049 :a9049 :a9049. :a9050 :a9050 :a9050. :a9051 :a9051 :a9051. :a9052 :a9052 :a9052. :a9053 :a9053 :a9053. :a9054 :a9054 :a9054. :a9055 :a9055 :a9055. :a9056 :a9056 :a9056. :a9057 :a9057 :a9057. :a9058 :a9058 :a9058. :a9059 :a9059 :a9059. :a9060 :a9060 :a9060. :a9061 :a9061 :a9061. :a9062 :a9062 :a9062. :a9063 :a9063 :a9063. :a9064 :a9064 :a9064. :a9065 :a9065 :a9065. :a9066 :a9066 :a9066. :a9067 :a9067 :a9067. :a9068 :a9068 :a9068. :a9069 :a9069 :a9069. :a9070 :a9070 :a9070. :a9071 :a9071 :a9071. :a9072 :a9072 :a9072. :a9073 :a9073 :a9073. :a9074 :a9074 :a9074. :a9075 :a9075 :a9075. :a9076 :a9076 :a9076. :a9077 :a9077 :a9077. :a9078 :a9078 :a9078. :a9079 :a9079 :a9079. :a9080 :a9080 :a9080. :a9081 :a9081 :a9081. :a9082 :a9082 :a9082. :a9083 :a9083 :a9083. :a9084 :a9084 :a9084. :a9085 :a9085 :a9085. :a9086 :a9086 :a9086. :a9087 :a9087 :a9087. :a9088 :a9088 :a9088. :a9089 :a9089 :a9089. :a9090 :a9090 :a9090. :a9091 :a9091 :a9091. :a9092 :a9092 :a9092. :a9093 :a9093 :a9093. :a9094 :a9094 :a9094. :a9095 :a9095 :a9095. :a9096 :a9096 :a9096. :a9097 :a9097 :a9097. :a9098 :a9098 :a9098. :a9099 :a9099 :a9099. :a9100 :a9100 :a9100. :a9101 :a9101 :a9101. :a9102 :a9102 :a9102. :a9103 :a9103 :a9103. :a9104 :a9104 :a9104. :a9105 :a9105 :a9105. :a9106 :a9106 :a9106. :a9107 :a9107 :a9107. :a9108 :a9108 :a9108. :a9109 :a9109 :a9109. :a9110 :a9110 :a9110. :a9111 :a9111 :a9111. :a9112 :a9112 :a9112. :a9113 :a9113 :a9113. :a9114 :a9114 :a9114. :a9115 :a9115 :a9115. :a9116 :a9116 :a9116. :a9117 :a9117 :a9117. :a9118 :a9118 :a9118. :a9119 :a9119 :a9119. :a9120 :a9120 :a9120. :a9121 :a9121 :a9121. :a9122 :a9122 :a9122. :a9123 :a9123 :a9123. :a9124 :a9124 :a9124. :a9125 :a9125 :a9125. :a9126 :a9126 :a9126. :a9127 :a9127 :a9127. :a9128 :a9128 :a9128. :a9129 :a9129 :a9129. :a9130 :a9130 :a9130. :a9131 :a9131 :a9131. :a9132 :a9132 :a9132. :a9133 :a9133 :a9133. :a9134 :a9134 :a9134. :a9135 :a9135 :a9135. :a9136 :a9136 :a9136. :a9137 :a9137 :a9137. :a9138 :a9138 :a9138. :a9139 :a9139 :a9139. :a9140 :a9140 :a9140. :a9141 :a9141 :a9141. :a9142 :a9142 :a9142. :a9143 :a9143 :a9143. :a9144 :a9144 :a9144. :a9145 :a9145 :a9145. :a9146 :a9146 :a9146. :a9147 :a9147 :a9147. :a9148 :a9148 :a9148. :a9149 :a9149 :a9149. :a9150 :a9150 :a9150. :a9151 :a9151 :a9151. :a9152 :a9152 :a9152. :a9153 :a9153 :a9153. :a9154 :a9154 :a9154. :a9155 :a9155 :a9155. :a9156 :a9156 :a9156. :a9157 :a9157 :a9157. :a9158 :a9158 :a9158. :a9159 :a9159 :a9159. :a9160 :a9160 :a9160. :a9161 :a9161 :a9161. :a9162 :a9162 :a9162. :a9163 :a9163 :a9163. :a9164 :a9164 :a9164. :a9165 :a9165 :a9165. :a9166 :a9166 :a9166. :a9167 :a9167 :a9167. :a9168 :a9168 :a9168. :a9169 :a9169 :a9169. :a9170 :a9170 :a9170. :a9171 :a9171 :a9171. :a9172 :a9172 :a9172. :a9173 :a9173 :a9173. :a9174 :a9174 :a9174. :a9175 :a9175 :a9175. :a9176 :a9176 :a9176. :a9177 :a9177 :a9177. :a9178 :a9178 :a9178. :a9179 :a9179 :a9179. :a9180 :a9180 :a9180. :a9181 :a9181 :a9181. :a9182 :a9182 :a9182. :a9183 :a9183 :a9183. :a9184 :a9184 :a9184. :a9185 :a9185 :a9185. :a9186 :a9186 :a9186. :a9187 :a9187 :a9187. :a9188 :a9188 :a9188. :a9189 :a9189 :a9189. :a9190 :a9190 :a9190. :a9191 :a9191 :a9191. :a9192 :a9192 :a9192. :a9193 :a9193 :a9193. :a9194 :a9194 :a9194. :a9195 :a9195 :a9195. :a9196 :a9196 :a9196. :a9197 :a9197 :a9197. :a9198 :a9198 :a9198. :a9199 :a9199 :a9199. :a9200 :a9200 :a9200. :a9201 :a9201 :a9201. :a9202 :a9202 :a9202. :a9203 :a9203 :a9203. :a9204 :a9204 :a9204. :a9205 :a9205 :a9205. :a9206 :a9206 :a9206. :a9207 :a9207 :a9207. :a9208 :a9208 :a9208. :a9209 :a9209 :a9209. :a9210 :a9210 :a9210. :a9211 :a9211 :a9211. :a9212 :a9212 :a9212. :a9213 :a9213 :a9213. :a9214 :a9214 :a9214. :a9215 :a9215 :a9215. :a9216 :a9216 :a9216. :a9217 :a9217 :a9217. :a9218 :a9218 :a9218. :a9219 :a9219 :a9219. :a9220 :a9220 :a9220. :a9221 :a9221 :a9221. :a9222 :a9222 :a9222. :a9223 :a9223 :a9223. :a9224 :a9224 :a9224. :a9225 :a9225 :a9225. :a9226 :a9226 :a9226. :a9227 :a9227 :a9227. :a9228 :a9228 :a9228. :a9229 :a9229 :a9229. :a9230 :a9230 :a9230. :a9231 :a9231 :a9231. :a9232 :a9232 :a9232. :a9233 :a9233 :a9233. :a9234 :a9234 :a9234. :a9235 :a9235 :a9235. :a9236 :a9236 :a9236. :a9237 :a9237 :a9237. :a9238 :a9238 :a9238. :a9239 :a9239 :a9239. :a9240 :a9240 :a9240. :a9241 :a9241 :a9241. :a9242 :a9242 :a9242. :a9243 :a9243 :a9243. :a9244 :a9244 :a9244. :a9245 :a9245 :a9245. :a9246 :a9246 :a9246. :a9247 :a9247 :a9247. :a9248 :a9248 :a9248. :a9249 :a9249 :a9249. :a9250 :a9250 :a9250. :a9251 :a9251 :a9251. :a9252 :a9252 :a9252. :a9253 :a9253 :a9253. :a9254 :a9254 :a9254. :a9255 :a9255 :a9255. :a9256 :a9256 :a9256. :a9257 :a9257 :a9257. :a9258 :a9258 :a9258. :a9259 :a9259 :a9259. :a9260 :a9260 :a9260. :a9261 :a9261 :a9261. :a9262 :a9262 :a9262. :a9263 :a9263 :a9263. :a9264 :a9264 :a9264. :a9265 :a9265 :a9265. :a9266 :a9266 :a9266. :a9267 :a9267 :a9267. :a9268 :a9268 :a9268. :a9269 :a9269 :a9269. :a9270 :a9270 :a9270. :a9271 :a9271 :a9271. :a9272 :a9272 :a9272. :a9273 :a9273 :a9273. :a9274 :a9274 :a9274. :a9275 :a9275 :a9275. :a9276 :a9276 :a9276. :a9277 :a9277 :a9277. :a9278 :a9278 :a9278. :a9279 :a9279 :a9279. :a9280 :a9280 :a9280. :a9281 :a9281 :a9281. :a9282 :a9282 :a9282. :a9283 :a9283 :a9283. :a9284 :a9284 :a9284. :a9285 :a9285 :a9285. :a9286 :a9286 :a9286. :a9287 :a9287 :a9287. :a9288 :a9288 :a9288. :a9289 :a9289 :a9289. :a9290 :a9290 :a9290. :a9291 :a9291 :a9291. :a9292 :a9292 :a9292. :a9293 :a9293 :a9293. :a9294 :a9294 :a9294. :a9295 :a9295 :a9295. :a9296 :a9296 :a9296. :a9297 :a9297 :a9297. :a9298 :a9298 :a9298. :a9299 :a9299 :a9299. :a9300 :a9300 :a9300. :a9301 :a9301 :a9301. :a9302 :a9302 :a9302. :a9303 :a9303 :a9303. :a9304 :a9304 :a9304. :a9305 :a9305 :a9305. :a9306 :a9306 :a9306. :a9307 :a9307 :a9307. :a9308 :a9308 :a9308. :a9309 :a9309 :a9309. :a9310 :a9310 :a9310. :a9311 :a9311 :a9311. :a9312 :a9312 :a9312. :a9313 :a9313 :a9313. :a9314 :a9314 :a9314. :a9315 :a9315 :a9315. :a9316 :a9316 :a9316. :a9317 :a9317 :a9317. :a9318 :a9318 :a9318. :a9319 :a9319 :a9319. :a9320 :a9320 :a9320. :a9321 :a9321 :a9321. :a9322 :a9322 :a9322. :a9323 :a9323 :a9323. :a9324 :a9324 :a9324. :a9325 :a9325 :a9325. :a9326 :a9326 :a9326. :a9327 :a9327 :a9327. :a9328 :a9328 :a9328. :a9329 :a9329 :a9329. :a9330 :a9330 :a9330. :a9331 :a9331 :a9331. :a9332 :a9332 :a9332. :a9333 :a9333 :a9333. :a9334 :a9334 :a9334. :a9335 :a9335 :a9335. :a9336 :a9336 :a9336. :a9337 :a9337 :a9337. :a9338 :a9338 :a9338. :a9339 :a9339 :a9339. :a9340 :a9340 :a9340. :a9341 :a9341 :a9341. :a9342 :a9342 :a9342. :a9343 :a9343 :a9343. :a9344 :a9344 :a9344. :a9345 :a9345 :a9345. :a9346 :a9346 :a9346. :a9347 :a9347 :a9347. :a9348 :a9348 :a9348. :a9349 :a9349 :a9349. :a9350 :a9350 :a9350. :a9351 :a9351 :a9351. :a9352 :a9352 :a9352. :a9353 :a9353 :a9353. :a9354 :a9354 :a9354. :a9355 :a9355 :a9355. :a9356 :a9356 :a9356. :a9357 :a9357 :a9357. :a9358 :a9358 :a9358. :a9359 :a9359 :a9359. :a9360 :a9360 :a9360. :a9361 :a9361 :a9361. :a9362 :a9362 :a9362. :a9363 :a9363 :a9363. :a9364 :a9364 :a9364. :a9365 :a9365 :a9365. :a9366 :a9366 :a9366. :a9367 :a9367 :a9367. :a9368 :a9368 :a9368. :a9369 :a9369 :a9369. :a9370 :a9370 :a9370. :a9371 :a9371 :a9371. :a9372 :a9372 :a9372. :a9373 :a9373 :a9373. :a9374 :a9374 :a9374. :a9375 :a9375 :a9375. :a9376 :a9376 :a9376. :a9377 :a9377 :a9377. :a9378 :a9378 :a9378. :a9379 :a9379 :a9379. :a9380 :a9380 :a9380. :a9381 :a9381 :a9381. :a9382 :a9382 :a9382. :a9383 :a9383 :a9383. :a9384 :a9384 :a9384. :a9385 :a9385 :a9385. :a9386 :a9386 :a9386. :a9387 :a9387 :a9387. :a9388 :a9388 :a9388. :a9389 :a9389 :a9389. :a9390 :a9390 :a9390. :a9391 :a9391 :a9391. :a9392 :a9392 :a9392. :a9393 :a9393 :a9393. :a9394 :a9394 :a9394. :a9395 :a9395 :a9395. :a9396 :a9396 :a9396. :a9397 :a9397 :a9397. :a9398 :a9398 :a9398. :a9399 :a9399 :a9399. :a9400 :a9400 :a9400. :a9401 :a9401 :a9401. :a9402 :a9402 :a9402. :a9403 :a9403 :a9403. :a9404 :a9404 :a9404. :a9405 :a9405 :a9405. :a9406 :a9406 :a9406. :a9407 :a9407 :a9407. :a9408 :a9408 :a9408. :a9409 :a9409 :a9409. :a9410 :a9410 :a9410. :a9411 :a9411 :a9411. :a9412 :a9412 :a9412. :a9413 :a9413 :a9413. :a9414 :a9414 :a9414. :a9415 :a9415 :a9415. :a9416 :a9416 :a9416. :a9417 :a9417 :a9417. :a9418 :a9418 :a9418. :a9419 :a9419 :a9419. :a9420 :a9420 :a9420. :a9421 :a9421 :a9421. :a9422 :a9422 :a9422. :a9423 :a9423 :a9423. :a9424 :a9424 :a9424. :a9425 :a9425 :a9425. :a9426 :a9426 :a9426. :a9427 :a9427 :a9427. :a9428 :a9428 :a9428. :a9429 :a9429 :a9429. :a9430 :a9430 :a9430. :a9431 :a9431 :a9431. :a9432 :a9432 :a9432. :a9433 :a9433 :a9433. :a9434 :a9434 :a9434. :a9435 :a9435 :a9435. :a9436 :a9436 :a9436. :a9437 :a9437 :a9437. :a9438 :a9438 :a9438. :a9439 :a9439 :a9439. :a9440 :a9440 :a9440. :a9441 :a9441 :a9441. :a9442 :a9442 :a9442. :a9443 :a9443 :a9443. :a9444 :a9444 :a9444. :a9445 :a9445 :a9445. :a9446 :a9446 :a9446. :a9447 :a9447 :a9447. :a9448 :a9448 :a9448. :a9449 :a9449 :a9449. :a9450 :a9450 :a9450. :a9451 :a9451 :a9451. :a9452 :a9452 :a9452. :a9453 :a9453 :a9453. :a9454 :a9454 :a9454. :a9455 :a9455 :a9455. :a9456 :a9456 :a9456. :a9457 :a9457 :a9457. :a9458 :a9458 :a9458. :a9459 :a9459 :a9459. :a9460 :a9460 :a9460. :a9461 :a9461 :a9461. :a9462 :a9462 :a9462. :a9463 :a9463 :a9463. :a9464 :a9464 :a9464. :a9465 :a9465 :a9465. :a9466 :a9466 :a9466. :a9467 :a9467 :a9467. :a9468 :a9468 :a9468. :a9469 :a9469 :a9469. :a9470 :a9470 :a9470. :a9471 :a9471 :a9471. :a9472 :a9472 :a9472. :a9473 :a9473 :a9473. :a9474 :a9474 :a9474. :a9475 :a9475 :a9475. :a9476 :a9476 :a9476. :a9477 :a9477 :a9477. :a9478 :a9478 :a9478. :a9479 :a9479 :a9479. :a9480 :a9480 :a9480. :a9481 :a9481 :a9481. :a9482 :a9482 :a9482. :a9483 :a9483 :a9483. :a9484 :a9484 :a9484. :a9485 :a9485 :a9485. :a9486 :a9486 :a9486. :a9487 :a9487 :a9487. :a9488 :a9488 :a9488. :a9489 :a9489 :a9489. :a9490 :a9490 :a9490. :a9491 :a9491 :a9491. :a9492 :a9492 :a9492. :a9493 :a9493 :a9493. :a9494 :a9494 :a9494. :a9495 :a9495 :a9495. :a9496 :a9496 :a9496. :a9497 :a9497 :a9497. :a9498 :a9498 :a9498. :a9499 :a9499 :a9499. :a9500 :a9500 :a9500. :a9501 :a9501 :a9501. :a9502 :a9502 :a9502. :a9503 :a9503 :a9503. :a9504 :a9504 :a9504. :a9505 :a9505 :a9505. :a9506 :a9506 :a9506. :a9507 :a9507 :a9507. :a9508 :a9508 :a9508. :a9509 :a9509 :a9509. :a9510 :a9510 :a9510. :a9511 :a9511 :a9511. :a9512 :a9512 :a9512. :a9513 :a9513 :a9513. :a9514 :a9514 :a9514. :a9515 :a9515 :a9515. :a9516 :a9516 :a9516. :a9517 :a9517 :a9517. :a9518 :a9518 :a9518. :a9519 :a9519 :a9519. :a9520 :a9520 :a9520. :a9521 :a9521 :a9521. :a9522 :a9522 :a9522. :a9523 :a9523 :a9523. :a9524 :a9524 :a9524. :a9525 :a9525 :a9525. :a9526 :a9526 :a9526. :a9527 :a9527 :a9527. :a9528 :a9528 :a9528. :a9529 :a9529 :a9529. :a9530 :a9530 :a9530. :a9531 :a9531 :a9531. :a9532 :a9532 :a9532. :a9533 :a9533 :a9533. :a9534 :a9534 :a9534. :a9535 :a9535 :a9535. :a9536 :a9536 :a9536. :a9537 :a9537 :a9537. :a9538 :a9538 :a9538. :a9539 :a9539 :a9539. :a9540 :a9540 :a9540. :a9541 :a9541 :a9541. :a9542 :a9542 :a9542. :a9543 :a9543 :a9543. :a9544 :a9544 :a9544. :a9545 :a9545 :a9545. :a9546 :a9546 :a9546. :a9547 :a9547 :a9547. :a9548 :a9548 :a9548. :a9549 :a9549 :a9549. :a9550 :a9550 :a9550. :a9551 :a9551 :a9551. :a9552 :a9552 :a9552. :a9553 :a9553 :a9553. :a9554 :a9554 :a9554. :a9555 :a9555 :a9555. :a9556 :a9556 :a9556. :a9557 :a9557 :a9557. :a9558 :a9558 :a9558. :a9559 :a9559 :a9559. :a9560 :a9560 :a9560. :a9561 :a9561 :a9561. :a9562 :a9562 :a9562. :a9563 :a9563 :a9563. :a9564 :a9564 :a9564. :a9565 :a9565 :a9565. :a9566 :a9566 :a9566. :a9567 :a9567 :a9567. :a9568 :a9568 :a9568. :a9569 :a9569 :a9569. :a9570 :a9570 :a9570. :a9571 :a9571 :a9571. :a9572 :a9572 :a9572. :a9573 :a9573 :a9573. :a9574 :a9574 :a9574. :a9575 :a9575 :a9575. :a9576 :a9576 :a9576. :a9577 :a9577 :a9577. :a9578 :a9578 :a9578. :a9579 :a9579 :a9579. :a9580 :a9580 :a9580. :a9581 :a9581 :a9581. :a9582 :a9582 :a9582. :a9583 :a9583 :a9583. :a9584 :a9584 :a9584. :a9585 :a9585 :a9585. :a9586 :a9586 :a9586. :a9587 :a9587 :a9587. :a9588 :a9588 :a9588. :a9589 :a9589 :a9589. :a9590 :a9590 :a9590. :a9591 :a9591 :a9591. :a9592 :a9592 :a9592. :a9593 :a9593 :a9593. :a9594 :a9594 :a9594. :a9595 :a9595 :a9595. :a9596 :a9596 :a9596. :a9597 :a9597 :a9597. :a9598 :a9598 :a9598. :a9599 :a9599 :a9599. :a9600 :a9600 :a9600. :a9601 :a9601 :a9601. :a9602 :a9602 :a9602. :a9603 :a9603 :a9603. :a9604 :a9604 :a9604. :a9605 :a9605 :a9605. :a9606 :a9606 :a9606. :a9607 :a9607 :a9607. :a9608 :a9608 :a9608. :a9609 :a9609 :a9609. :a9610 :a9610 :a9610. :a9611 :a9611 :a9611. :a9612 :a9612 :a9612. :a9613 :a9613 :a9613. :a9614 :a9614 :a9614. :a9615 :a9615 :a9615. :a9616 :a9616 :a9616. :a9617 :a9617 :a9617. :a9618 :a9618 :a9618. :a9619 :a9619 :a9619. :a9620 :a9620 :a9620. :a9621 :a9621 :a9621. :a9622 :a9622 :a9622. :a9623 :a9623 :a9623. :a9624 :a9624 :a9624. :a9625 :a9625 :a9625. :a9626 :a9626 :a9626. :a9627 :a9627 :a9627. :a9628 :a9628 :a9628. :a9629 :a9629 :a9629. :a9630 :a9630 :a9630. :a9631 :a9631 :a9631. :a9632 :a9632 :a9632. :a9633 :a9633 :a9633. :a9634 :a9634 :a9634. :a9635 :a9635 :a9635. :a9636 :a9636 :a9636. :a9637 :a9637 :a9637. :a9638 :a9638 :a9638. :a9639 :a9639 :a9639. :a9640 :a9640 :a9640. :a9641 :a9641 :a9641. :a9642 :a9642 :a9642. :a9643 :a9643 :a9643. :a9644 :a9644 :a9644. :a9645 :a9645 :a9645. :a9646 :a9646 :a9646. :a9647 :a9647 :a9647. :a9648 :a9648 :a9648. :a9649 :a9649 :a9649. :a9650 :a9650 :a9650. :a9651 :a9651 :a9651. :a9652 :a9652 :a9652. :a9653 :a9653 :a9653. :a9654 :a9654 :a9654. :a9655 :a9655 :a9655. :a9656 :a9656 :a9656. :a9657 :a9657 :a9657. :a9658 :a9658 :a9658. :a9659 :a9659 :a9659. :a9660 :a9660 :a9660. :a9661 :a9661 :a9661. :a9662 :a9662 :a9662. :a9663 :a9663 :a9663. :a9664 :a9664 :a9664. :a9665 :a9665 :a9665. :a9666 :a9666 :a9666. :a9667 :a9667 :a9667. :a9668 :a9668 :a9668. :a9669 :a9669 :a9669. :a9670 :a9670 :a9670. :a9671 :a9671 :a9671. :a9672 :a9672 :a9672. :a9673 :a9673 :a9673. :a9674 :a9674 :a9674. :a9675 :a9675 :a9675. :a9676 :a9676 :a9676. :a9677 :a9677 :a9677. :a9678 :a9678 :a9678. :a9679 :a9679 :a9679. :a9680 :a9680 :a9680. :a9681 :a9681 :a9681. :a9682 :a9682 :a9682. :a9683 :a9683 :a9683. :a9684 :a9684 :a9684. :a9685 :a9685 :a9685. :a9686 :a9686 :a9686. :a9687 :a9687 :a9687. :a9688 :a9688 :a9688. :a9689 :a9689 :a9689. :a9690 :a9690 :a9690. :a9691 :a9691 :a9691. :a9692 :a9692 :a9692. :a9693 :a9693 :a9693. :a9694 :a9694 :a9694. :a9695 :a9695 :a9695. :a9696 :a9696 :a9696. :a9697 :a9697 :a9697. :a9698 :a9698 :a9698. :a9699 :a9699 :a9699. :a9700 :a9700 :a9700. :a9701 :a9701 :a9701. :a9702 :a9702 :a9702. :a9703 :a9703 :a9703. :a9704 :a9704 :a9704. :a9705 :a9705 :a9705. :a9706 :a9706 :a9706. :a9707 :a9707 :a9707. :a9708 :a9708 :a9708. :a9709 :a9709 :a9709. :a9710 :a9710 :a9710. :a9711 :a9711 :a9711. :a9712 :a9712 :a9712. :a9713 :a9713 :a9713. :a9714 :a9714 :a9714. :a9715 :a9715 :a9715. :a9716 :a9716 :a9716. :a9717 :a9717 :a9717. :a9718 :a9718 :a9718. :a9719 :a9719 :a9719. :a9720 :a9720 :a9720. :a9721 :a9721 :a9721. :a9722 :a9722 :a9722. :a9723 :a9723 :a9723. :a9724 :a9724 :a9724. :a9725 :a9725 :a9725. :a9726 :a9726 :a9726. :a9727 :a9727 :a9727. :a9728 :a9728 :a9728. :a9729 :a9729 :a9729. :a9730 :a9730 :a9730. :a9731 :a9731 :a9731. :a9732 :a9732 :a9732. :a9733 :a9733 :a9733. :a9734 :a9734 :a9734. :a9735 :a9735 :a9735. :a9736 :a9736 :a9736. :a9737 :a9737 :a9737. :a9738 :a9738 :a9738. :a9739 :a9739 :a9739. :a9740 :a9740 :a9740. :a9741 :a9741 :a9741. :a9742 :a9742 :a9742. :a9743 :a9743 :a9743. :a9744 :a9744 :a9744. :a9745 :a9745 :a9745. :a9746 :a9746 :a9746. :a9747 :a9747 :a9747. :a9748 :a9748 :a9748. :a9749 :a9749 :a9749. :a9750 :a9750 :a9750. :a9751 :a9751 :a9751. :a9752 :a9752 :a9752. :a9753 :a9753 :a9753. :a9754 :a9754 :a9754. :a9755 :a9755 :a9755. :a9756 :a9756 :a9756. :a9757 :a9757 :a9757. :a9758 :a9758 :a9758. :a9759 :a9759 :a9759. :a9760 :a9760 :a9760. :a9761 :a9761 :a9761. :a9762 :a9762 :a9762. :a9763 :a9763 :a9763. :a9764 :a9764 :a9764. :a9765 :a9765 :a9765. :a9766 :a9766 :a9766. :a9767 :a9767 :a9767. :a9768 :a9768 :a9768. :a9769 :a9769 :a9769. :a9770 :a9770 :a9770. :a9771 :a9771 :a9771. :a9772 :a9772 :a9772. :a9773 :a9773 :a9773. :a9774 :a9774 :a9774. :a9775 :a9775 :a9775. :a9776 :a9776 :a9776. :a9777 :a9777 :a9777. :a9778 :a9778 :a9778. :a9779 :a9779 :a9779. :a9780 :a9780 :a9780. :a9781 :a9781 :a9781. :a9782 :a9782 :a9782. :a9783 :a9783 :a9783. :a9784 :a9784 :a9784. :a9785 :a9785 :a9785. :a9786 :a9786 :a9786. :a9787 :a9787 :a9787. :a9788 :a9788 :a9788. :a9789 :a9789 :a9789. :a9790 :a9790 :a9790. :a9791 :a9791 :a9791. :a9792 :a9792 :a9792. :a9793 :a9793 :a9793. :a9794 :a9794 :a9794. :a9795 :a9795 :a9795. :a9796 :a9796 :a9796. :a9797 :a9797 :a9797. :a9798 :a9798 :a9798. :a9799 :a9799 :a9799. :a9800 :a9800 :a9800. :a9801 :a9801 :a9801. :a9802 :a9802 :a9802. :a9803 :a9803 :a9803. :a9804 :a9804 :a9804. :a9805 :a9805 :a9805. :a9806 :a9806 :a9806. :a9807 :a9807 :a9807. :a9808 :a9808 :a9808. :a9809 :a9809 :a9809. :a9810 :a9810 :a9810. :a9811 :a9811 :a9811. :a9812 :a9812 :a9812. :a9813 :a9813 :a9813. :a9814 :a9814 :a9814. :a9815 :a9815 :a9815. :a9816 :a9816 :a9816. :a9817 :a9817 :a9817. :a9818 :a9818 :a9818. :a9819 :a9819 :a9819. :a9820 :a9820 :a9820. :a9821 :a9821 :a9821. :a9822 :a9822 :a9822. :a9823 :a9823 :a9823. :a9824 :a9824 :a9824. :a9825 :a9825 :a9825. :a9826 :a9826 :a9826. :a9827 :a9827 :a9827. :a9828 :a9828 :a9828. :a9829 :a9829 :a9829. :a9830 :a9830 :a9830. :a9831 :a9831 :a9831. :a9832 :a9832 :a9832. :a9833 :a9833 :a9833. :a9834 :a9834 :a9834. :a9835 :a9835 :a9835. :a9836 :a9836 :a9836. :a9837 :a9837 :a9837. :a9838 :a9838 :a9838. :a9839 :a9839 :a9839. :a9840 :a9840 :a9840. :a9841 :a9841 :a9841. :a9842 :a9842 :a9842. :a9843 :a9843 :a9843. :a9844 :a9844 :a9844. :a9845 :a9845 :a9845. :a9846 :a9846 :a9846. :a9847 :a9847 :a9847. :a9848 :a9848 :a9848. :a9849 :a9849 :a9849. :a9850 :a9850 :a9850. :a9851 :a9851 :a9851. :a9852 :a9852 :a9852. :a9853 :a9853 :a9853. :a9854 :a9854 :a9854. :a9855 :a9855 :a9855. :a9856 :a9856 :a9856. :a9857 :a9857 :a9857. :a9858 :a9858 :a9858. :a9859 :a9859 :a9859. :a9860 :a9860 :a9860. :a9861 :a9861 :a9861. :a9862 :a9862 :a9862. :a9863 :a9863 :a9863. :a9864 :a9864 :a9864. :a9865 :a9865 :a9865. :a9866 :a9866 :a9866. :a9867 :a9867 :a9867. :a9868 :a9868 :a9868. :a9869 :a9869 :a9869. :a9870 :a9870 :a9870. :a9871 :a9871 :a9871. :a9872 :a9872 :a9872. :a9873 :a9873 :a9873. :a9874 :a9874 :a9874. :a9875 :a9875 :a9875. :a9876 :a9876 :a9876. :a9877 :a9877 :a9877. :a9878 :a9878 :a9878. :a9879 :a9879 :a9879. :a9880 :a9880 :a9880. :a9881 :a9881 :a9881. :a9882 :a9882 :a9882. :a9883 :a9883 :a9883. :a9884 :a9884 :a9884. :a9885 :a9885 :a9885. :a9886 :a9886 :a9886. :a9887 :a9887 :a9887. :a9888 :a9888 :a9888. :a9889 :a9889 :a9889. :a9890 :a9890 :a9890. :a9891 :a9891 :a9891. :a9892 :a9892 :a9892. :a9893 :a9893 :a9893. :a9894 :a9894 :a9894. :a9895 :a9895 :a9895. :a9896 :a9896 :a9896. :a9897 :a9897 :a9897. :a9898 :a9898 :a9898. :a9899 :a9899 :a9899. :a9900 :a9900 :a9900. :a9901 :a9901 :a9901. :a9902 :a9902 :a9902. :a9903 :a9903 :a9903. :a9904 :a9904 :a9904. :a9905 :a9905 :a9905. :a9906 :a9906 :a9906. :a9907 :a9907 :a9907. :a9908 :a9908 :a9908. :a9909 :a9909 :a9909. :a9910 :a9910 :a9910. :a9911 :a9911 :a9911. :a9912 :a9912 :a9912. :a9913 :a9913 :a9913. :a9914 :a9914 :a9914. :a9915 :a9915 :a9915. :a9916 :a9916 :a9916. :a9917 :a9917 :a9917. :a9918 :a9918 :a9918. :a9919 :a9919 :a9919. :a9920 :a9920 :a9920. :a9921 :a9921 :a9921. :a9922 :a9922 :a9922. :a9923 :a9923 :a9923. :a9924 :a9924 :a9924. :a9925 :a9925 :a9925. :a9926 :a9926 :a9926. :a9927 :a9927 :a9927. :a9928 :a9928 :a9928. :a9929 :a9929 :a9929. :a9930 :a9930 :a9930. :a9931 :a9931 :a9931. :a9932 :a9932 :a9932. :a9933 :a9933 :a9933. :a9934 :a9934 :a9934. :a9935 :a9935 :a9935. :a9936 :a9936 :a9936. :a9937 :a9937 :a9937. :a9938 :a9938 :a9938. :a9939 :a9939 :a9939. :a9940 :a9940 :a9940. :a9941 :a9941 :a9941. :a9942 :a9942 :a9942. :a9943 :a9943 :a9943. :a9944 :a9944 :a9944. :a9945 :a9945 :a9945. :a9946 :a9946 :a9946. :a9947 :a9947 :a9947. :a9948 :a9948 :a9948. :a9949 :a9949 :a9949. :a9950 :a9950 :a9950. :a9951 :a9951 :a9951. :a9952 :a9952 :a9952. :a9953 :a9953 :a9953. :a9954 :a9954 :a9954. :a9955 :a9955 :a9955. :a9956 :a9956 :a9956. :a9957 :a9957 :a9957. :a9958 :a9958 :a9958. :a9959 :a9959 :a9959. :a9960 :a9960 :a9960. :a9961 :a9961 :a9961. :a9962 :a9962 :a9962. :a9963 :a9963 :a9963. :a9964 :a9964 :a9964. :a9965 :a9965 :a9965. :a9966 :a9966 :a9966. :a9967 :a9967 :a9967. :a9968 :a9968 :a9968. :a9969 :a9969 :a9969. :a9970 :a9970 :a9970. :a9971 :a9971 :a9971. :a9972 :a9972 :a9972. :a9973 :a9973 :a9973. :a9974 :a9974 :a9974. :a9975 :a9975 :a9975. :a9976 :a9976 :a9976. :a9977 :a9977 :a9977. :a9978 :a9978 :a9978. :a9979 :a9979 :a9979. :a9980 :a9980 :a9980. :a9981 :a9981 :a9981. :a9982 :a9982 :a9982. :a9983 :a9983 :a9983. :a9984 :a9984 :a9984. :a9985 :a9985 :a9985. :a9986 :a9986 :a9986. :a9987 :a9987 :a9987. :a9988 :a9988 :a9988. :a9989 :a9989 :a9989. :a9990 :a9990 :a9990. :a9991 :a9991 :a9991. :a9992 :a9992 :a9992. :a9993 :a9993 :a9993. :a9994 :a9994 :a9994. :a9995 :a9995 :a9995. :a9996 :a9996 :a9996. :a9997 :a9997 :a9997. :a9998 :a9998 :a9998. :a9999 :a9999 :a9999. :a10000 :a10000 :a10000. rio-0.8.5/testsuite/serd-tests/good/test-15.nt000066400000000000000000031463561466265456300212030ustar00rootroot00000000000000 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . rio-0.8.5/testsuite/serd-tests/good/test-15.ttl000066400000000000000000002322501466265456300213470ustar00rootroot00000000000000# 10000 triple objects (10000 triples) more than the default Bison stack size @prefix : . :a :b :c1, :c2, :c3, :c4, :c5, :c6, :c7, :c8, :c9, :c10, :c11, :c12, :c13, :c14, :c15, :c16, :c17, :c18, :c19, :c20, :c21, :c22, :c23, :c24, :c25, :c26, :c27, :c28, :c29, :c30, :c31, :c32, :c33, :c34, :c35, :c36, :c37, :c38, :c39, :c40, :c41, :c42, :c43, :c44, :c45, :c46, :c47, :c48, :c49, :c50, :c51, :c52, :c53, :c54, :c55, :c56, :c57, :c58, :c59, :c60, :c61, :c62, :c63, :c64, :c65, :c66, :c67, :c68, :c69, :c70, :c71, :c72, :c73, :c74, :c75, :c76, :c77, :c78, :c79, :c80, :c81, :c82, :c83, :c84, :c85, :c86, :c87, :c88, :c89, :c90, :c91, :c92, :c93, :c94, :c95, :c96, :c97, :c98, :c99, :c100, :c101, :c102, :c103, :c104, :c105, :c106, :c107, :c108, :c109, :c110, :c111, :c112, :c113, :c114, :c115, :c116, :c117, :c118, :c119, :c120, :c121, :c122, :c123, :c124, :c125, :c126, :c127, :c128, :c129, :c130, :c131, :c132, :c133, :c134, :c135, :c136, :c137, :c138, :c139, :c140, :c141, :c142, :c143, :c144, :c145, :c146, :c147, :c148, :c149, :c150, :c151, :c152, :c153, :c154, :c155, :c156, :c157, :c158, :c159, :c160, :c161, :c162, :c163, :c164, :c165, :c166, :c167, :c168, :c169, :c170, :c171, :c172, :c173, :c174, :c175, :c176, :c177, :c178, :c179, :c180, :c181, :c182, :c183, :c184, :c185, :c186, :c187, :c188, :c189, :c190, :c191, :c192, :c193, :c194, :c195, :c196, :c197, :c198, :c199, :c200, :c201, :c202, :c203, :c204, :c205, :c206, :c207, :c208, :c209, :c210, :c211, :c212, :c213, :c214, :c215, :c216, :c217, :c218, :c219, :c220, :c221, :c222, :c223, :c224, :c225, :c226, :c227, :c228, :c229, :c230, :c231, :c232, :c233, :c234, :c235, :c236, :c237, :c238, :c239, :c240, :c241, :c242, :c243, :c244, :c245, :c246, :c247, :c248, :c249, :c250, :c251, :c252, :c253, :c254, :c255, :c256, :c257, :c258, :c259, :c260, :c261, :c262, :c263, :c264, :c265, :c266, :c267, :c268, :c269, :c270, :c271, :c272, :c273, :c274, :c275, :c276, :c277, :c278, :c279, :c280, :c281, :c282, :c283, :c284, :c285, :c286, :c287, :c288, :c289, :c290, :c291, :c292, :c293, :c294, :c295, :c296, :c297, :c298, :c299, :c300, :c301, :c302, :c303, :c304, :c305, :c306, :c307, :c308, :c309, :c310, :c311, :c312, :c313, :c314, :c315, :c316, :c317, :c318, :c319, :c320, :c321, :c322, :c323, :c324, :c325, :c326, :c327, :c328, :c329, :c330, :c331, :c332, :c333, :c334, :c335, :c336, :c337, :c338, :c339, :c340, :c341, :c342, :c343, :c344, :c345, :c346, :c347, :c348, :c349, :c350, :c351, :c352, :c353, :c354, :c355, :c356, :c357, :c358, :c359, :c360, :c361, :c362, :c363, :c364, :c365, :c366, :c367, :c368, :c369, :c370, :c371, :c372, :c373, :c374, :c375, :c376, :c377, :c378, :c379, :c380, :c381, :c382, :c383, :c384, :c385, :c386, :c387, :c388, :c389, :c390, :c391, :c392, :c393, :c394, :c395, :c396, :c397, :c398, :c399, :c400, :c401, :c402, :c403, :c404, :c405, :c406, :c407, :c408, :c409, :c410, :c411, :c412, :c413, :c414, :c415, :c416, :c417, :c418, :c419, :c420, :c421, :c422, :c423, :c424, :c425, :c426, :c427, :c428, :c429, :c430, :c431, :c432, :c433, :c434, :c435, :c436, :c437, :c438, :c439, :c440, :c441, :c442, :c443, :c444, :c445, :c446, :c447, :c448, :c449, :c450, :c451, :c452, :c453, :c454, :c455, :c456, :c457, :c458, :c459, :c460, :c461, :c462, :c463, :c464, :c465, :c466, :c467, :c468, :c469, :c470, :c471, :c472, :c473, :c474, :c475, :c476, :c477, :c478, :c479, :c480, :c481, :c482, :c483, :c484, :c485, :c486, :c487, :c488, :c489, :c490, :c491, :c492, :c493, :c494, :c495, :c496, :c497, :c498, :c499, :c500, :c501, :c502, :c503, :c504, :c505, :c506, :c507, :c508, :c509, :c510, :c511, :c512, :c513, :c514, :c515, :c516, :c517, :c518, :c519, :c520, :c521, :c522, :c523, :c524, :c525, :c526, :c527, :c528, :c529, :c530, :c531, :c532, :c533, :c534, :c535, :c536, :c537, :c538, :c539, :c540, :c541, :c542, :c543, :c544, :c545, :c546, :c547, :c548, :c549, :c550, :c551, :c552, :c553, :c554, :c555, :c556, :c557, :c558, :c559, :c560, :c561, :c562, :c563, :c564, :c565, :c566, :c567, :c568, :c569, :c570, :c571, :c572, :c573, :c574, :c575, :c576, :c577, :c578, :c579, :c580, :c581, :c582, :c583, :c584, :c585, :c586, :c587, :c588, :c589, :c590, :c591, :c592, :c593, :c594, :c595, :c596, :c597, :c598, :c599, :c600, :c601, :c602, :c603, :c604, :c605, :c606, :c607, :c608, :c609, :c610, :c611, :c612, :c613, :c614, :c615, :c616, :c617, :c618, :c619, :c620, :c621, :c622, :c623, :c624, :c625, :c626, :c627, :c628, :c629, :c630, :c631, :c632, :c633, :c634, :c635, :c636, :c637, :c638, :c639, :c640, :c641, :c642, :c643, :c644, :c645, :c646, :c647, :c648, :c649, :c650, :c651, :c652, :c653, :c654, :c655, :c656, :c657, :c658, :c659, :c660, :c661, :c662, :c663, :c664, :c665, :c666, :c667, :c668, :c669, :c670, :c671, :c672, :c673, :c674, :c675, :c676, :c677, :c678, :c679, :c680, :c681, :c682, :c683, :c684, :c685, :c686, :c687, :c688, :c689, :c690, :c691, :c692, :c693, :c694, :c695, :c696, :c697, :c698, :c699, :c700, :c701, :c702, :c703, :c704, :c705, :c706, :c707, :c708, :c709, :c710, :c711, :c712, :c713, :c714, :c715, :c716, :c717, :c718, :c719, :c720, :c721, :c722, :c723, :c724, :c725, :c726, :c727, :c728, :c729, :c730, :c731, :c732, :c733, :c734, :c735, :c736, :c737, :c738, :c739, :c740, :c741, :c742, :c743, :c744, :c745, :c746, :c747, :c748, :c749, :c750, :c751, :c752, :c753, :c754, :c755, :c756, :c757, :c758, :c759, :c760, :c761, :c762, :c763, :c764, :c765, :c766, :c767, :c768, :c769, :c770, :c771, :c772, :c773, :c774, :c775, :c776, :c777, :c778, :c779, :c780, :c781, :c782, :c783, :c784, :c785, :c786, :c787, :c788, :c789, :c790, :c791, :c792, :c793, :c794, :c795, :c796, :c797, :c798, :c799, :c800, :c801, :c802, :c803, :c804, :c805, :c806, :c807, :c808, :c809, :c810, :c811, :c812, :c813, :c814, :c815, :c816, :c817, :c818, :c819, :c820, :c821, :c822, :c823, :c824, :c825, :c826, :c827, :c828, :c829, :c830, :c831, :c832, :c833, :c834, :c835, :c836, :c837, :c838, :c839, :c840, :c841, :c842, :c843, :c844, :c845, :c846, :c847, :c848, :c849, :c850, :c851, :c852, :c853, :c854, :c855, :c856, :c857, :c858, :c859, :c860, :c861, :c862, :c863, :c864, :c865, :c866, :c867, :c868, :c869, :c870, :c871, :c872, :c873, :c874, :c875, :c876, :c877, :c878, :c879, :c880, :c881, :c882, :c883, :c884, :c885, :c886, :c887, :c888, :c889, :c890, :c891, :c892, :c893, :c894, :c895, :c896, :c897, :c898, :c899, :c900, :c901, :c902, :c903, :c904, :c905, :c906, :c907, :c908, :c909, :c910, :c911, :c912, :c913, :c914, :c915, :c916, :c917, :c918, :c919, :c920, :c921, :c922, :c923, :c924, :c925, :c926, :c927, :c928, :c929, :c930, :c931, :c932, :c933, :c934, :c935, :c936, :c937, :c938, :c939, :c940, :c941, :c942, :c943, :c944, :c945, :c946, :c947, :c948, :c949, :c950, :c951, :c952, :c953, :c954, :c955, :c956, :c957, :c958, :c959, :c960, :c961, :c962, :c963, :c964, :c965, :c966, :c967, :c968, :c969, :c970, :c971, :c972, :c973, :c974, :c975, :c976, :c977, :c978, :c979, :c980, :c981, :c982, :c983, :c984, :c985, :c986, :c987, :c988, :c989, :c990, :c991, :c992, :c993, :c994, :c995, :c996, :c997, :c998, :c999, :c1000, :c1001, :c1002, :c1003, :c1004, :c1005, :c1006, :c1007, :c1008, :c1009, :c1010, :c1011, :c1012, :c1013, :c1014, :c1015, :c1016, :c1017, :c1018, :c1019, :c1020, :c1021, :c1022, :c1023, :c1024, :c1025, :c1026, :c1027, :c1028, :c1029, :c1030, :c1031, :c1032, :c1033, :c1034, :c1035, :c1036, :c1037, :c1038, :c1039, :c1040, :c1041, :c1042, :c1043, :c1044, :c1045, :c1046, :c1047, :c1048, :c1049, :c1050, :c1051, :c1052, :c1053, :c1054, :c1055, :c1056, :c1057, :c1058, :c1059, :c1060, :c1061, :c1062, :c1063, :c1064, :c1065, :c1066, :c1067, :c1068, :c1069, :c1070, :c1071, :c1072, :c1073, :c1074, :c1075, :c1076, :c1077, :c1078, :c1079, :c1080, :c1081, :c1082, :c1083, :c1084, :c1085, :c1086, :c1087, :c1088, :c1089, :c1090, :c1091, :c1092, :c1093, :c1094, :c1095, :c1096, :c1097, :c1098, :c1099, :c1100, :c1101, :c1102, :c1103, :c1104, :c1105, :c1106, :c1107, :c1108, :c1109, :c1110, :c1111, :c1112, :c1113, :c1114, :c1115, :c1116, :c1117, :c1118, :c1119, :c1120, :c1121, :c1122, :c1123, :c1124, :c1125, :c1126, :c1127, :c1128, :c1129, :c1130, :c1131, :c1132, :c1133, :c1134, :c1135, :c1136, :c1137, :c1138, :c1139, :c1140, :c1141, :c1142, :c1143, :c1144, :c1145, :c1146, :c1147, :c1148, :c1149, :c1150, :c1151, :c1152, :c1153, :c1154, :c1155, :c1156, :c1157, :c1158, :c1159, :c1160, :c1161, :c1162, :c1163, :c1164, :c1165, :c1166, :c1167, :c1168, :c1169, :c1170, :c1171, :c1172, :c1173, :c1174, :c1175, :c1176, :c1177, :c1178, :c1179, :c1180, :c1181, :c1182, :c1183, :c1184, :c1185, :c1186, :c1187, :c1188, :c1189, :c1190, :c1191, :c1192, :c1193, :c1194, :c1195, :c1196, :c1197, :c1198, :c1199, :c1200, :c1201, :c1202, :c1203, :c1204, :c1205, :c1206, :c1207, :c1208, :c1209, :c1210, :c1211, :c1212, :c1213, :c1214, :c1215, :c1216, :c1217, :c1218, :c1219, :c1220, :c1221, :c1222, :c1223, :c1224, :c1225, :c1226, :c1227, :c1228, :c1229, :c1230, :c1231, :c1232, :c1233, :c1234, :c1235, :c1236, :c1237, :c1238, :c1239, :c1240, :c1241, :c1242, :c1243, :c1244, :c1245, :c1246, :c1247, :c1248, :c1249, :c1250, :c1251, :c1252, :c1253, :c1254, :c1255, :c1256, :c1257, :c1258, :c1259, :c1260, :c1261, :c1262, :c1263, :c1264, :c1265, :c1266, :c1267, :c1268, :c1269, :c1270, :c1271, :c1272, :c1273, :c1274, :c1275, :c1276, :c1277, :c1278, :c1279, :c1280, :c1281, :c1282, :c1283, :c1284, :c1285, :c1286, :c1287, :c1288, :c1289, :c1290, :c1291, :c1292, :c1293, :c1294, :c1295, :c1296, :c1297, :c1298, :c1299, :c1300, :c1301, :c1302, :c1303, :c1304, :c1305, :c1306, :c1307, :c1308, :c1309, :c1310, :c1311, :c1312, :c1313, :c1314, :c1315, :c1316, :c1317, :c1318, :c1319, :c1320, :c1321, :c1322, :c1323, :c1324, :c1325, :c1326, :c1327, :c1328, :c1329, :c1330, :c1331, :c1332, :c1333, :c1334, :c1335, :c1336, :c1337, :c1338, :c1339, :c1340, :c1341, :c1342, :c1343, :c1344, :c1345, :c1346, :c1347, :c1348, :c1349, :c1350, :c1351, :c1352, :c1353, :c1354, :c1355, :c1356, :c1357, :c1358, :c1359, :c1360, :c1361, :c1362, :c1363, :c1364, :c1365, :c1366, :c1367, :c1368, :c1369, :c1370, :c1371, :c1372, :c1373, :c1374, :c1375, :c1376, :c1377, :c1378, :c1379, :c1380, :c1381, :c1382, :c1383, :c1384, :c1385, :c1386, :c1387, :c1388, :c1389, :c1390, :c1391, :c1392, :c1393, :c1394, :c1395, :c1396, :c1397, :c1398, :c1399, :c1400, :c1401, :c1402, :c1403, :c1404, :c1405, :c1406, :c1407, :c1408, :c1409, :c1410, :c1411, :c1412, :c1413, :c1414, :c1415, :c1416, :c1417, :c1418, :c1419, :c1420, :c1421, :c1422, :c1423, :c1424, :c1425, :c1426, :c1427, :c1428, :c1429, :c1430, :c1431, :c1432, :c1433, :c1434, :c1435, :c1436, :c1437, :c1438, :c1439, :c1440, :c1441, :c1442, :c1443, :c1444, :c1445, :c1446, :c1447, :c1448, :c1449, :c1450, :c1451, :c1452, :c1453, :c1454, :c1455, :c1456, :c1457, :c1458, :c1459, :c1460, :c1461, :c1462, :c1463, :c1464, :c1465, :c1466, :c1467, :c1468, :c1469, :c1470, :c1471, :c1472, :c1473, :c1474, :c1475, :c1476, :c1477, :c1478, :c1479, :c1480, :c1481, :c1482, :c1483, :c1484, :c1485, :c1486, :c1487, :c1488, :c1489, :c1490, :c1491, :c1492, :c1493, :c1494, :c1495, :c1496, :c1497, :c1498, :c1499, :c1500, :c1501, :c1502, :c1503, :c1504, :c1505, :c1506, :c1507, :c1508, :c1509, :c1510, :c1511, :c1512, :c1513, :c1514, :c1515, :c1516, :c1517, :c1518, :c1519, :c1520, :c1521, :c1522, :c1523, :c1524, :c1525, :c1526, :c1527, :c1528, :c1529, :c1530, :c1531, :c1532, :c1533, :c1534, :c1535, :c1536, :c1537, :c1538, :c1539, :c1540, :c1541, :c1542, :c1543, :c1544, :c1545, :c1546, :c1547, :c1548, :c1549, :c1550, :c1551, :c1552, :c1553, :c1554, :c1555, :c1556, :c1557, :c1558, :c1559, :c1560, :c1561, :c1562, :c1563, :c1564, :c1565, :c1566, :c1567, :c1568, :c1569, :c1570, :c1571, :c1572, :c1573, :c1574, :c1575, :c1576, :c1577, :c1578, :c1579, :c1580, :c1581, :c1582, :c1583, :c1584, :c1585, :c1586, :c1587, :c1588, :c1589, :c1590, :c1591, :c1592, :c1593, :c1594, :c1595, :c1596, :c1597, :c1598, :c1599, :c1600, :c1601, :c1602, :c1603, :c1604, :c1605, :c1606, :c1607, :c1608, :c1609, :c1610, :c1611, :c1612, :c1613, :c1614, :c1615, :c1616, :c1617, :c1618, :c1619, :c1620, :c1621, :c1622, :c1623, :c1624, :c1625, :c1626, :c1627, :c1628, :c1629, :c1630, :c1631, :c1632, :c1633, :c1634, :c1635, :c1636, :c1637, :c1638, :c1639, :c1640, :c1641, :c1642, :c1643, :c1644, :c1645, :c1646, :c1647, :c1648, :c1649, :c1650, :c1651, :c1652, :c1653, :c1654, :c1655, :c1656, :c1657, :c1658, :c1659, :c1660, :c1661, :c1662, :c1663, :c1664, :c1665, :c1666, :c1667, :c1668, :c1669, :c1670, :c1671, :c1672, :c1673, :c1674, :c1675, :c1676, :c1677, :c1678, :c1679, :c1680, :c1681, :c1682, :c1683, :c1684, :c1685, :c1686, :c1687, :c1688, :c1689, :c1690, :c1691, :c1692, :c1693, :c1694, :c1695, :c1696, :c1697, :c1698, :c1699, :c1700, :c1701, :c1702, :c1703, :c1704, :c1705, :c1706, :c1707, :c1708, :c1709, :c1710, :c1711, :c1712, :c1713, :c1714, :c1715, :c1716, :c1717, :c1718, :c1719, :c1720, :c1721, :c1722, :c1723, :c1724, :c1725, :c1726, :c1727, :c1728, :c1729, :c1730, :c1731, :c1732, :c1733, :c1734, :c1735, :c1736, :c1737, :c1738, :c1739, :c1740, :c1741, :c1742, :c1743, :c1744, :c1745, :c1746, :c1747, :c1748, :c1749, :c1750, :c1751, :c1752, :c1753, :c1754, :c1755, :c1756, :c1757, :c1758, :c1759, :c1760, :c1761, :c1762, :c1763, :c1764, :c1765, :c1766, :c1767, :c1768, :c1769, :c1770, :c1771, :c1772, :c1773, :c1774, :c1775, :c1776, :c1777, :c1778, :c1779, :c1780, :c1781, :c1782, :c1783, :c1784, :c1785, :c1786, :c1787, :c1788, :c1789, :c1790, :c1791, :c1792, :c1793, :c1794, :c1795, :c1796, :c1797, :c1798, :c1799, :c1800, :c1801, :c1802, :c1803, :c1804, :c1805, :c1806, :c1807, :c1808, :c1809, :c1810, :c1811, :c1812, :c1813, :c1814, :c1815, :c1816, :c1817, :c1818, :c1819, :c1820, :c1821, :c1822, :c1823, :c1824, :c1825, :c1826, :c1827, :c1828, :c1829, :c1830, :c1831, :c1832, :c1833, :c1834, :c1835, :c1836, :c1837, :c1838, :c1839, :c1840, :c1841, :c1842, :c1843, :c1844, :c1845, :c1846, :c1847, :c1848, :c1849, :c1850, :c1851, :c1852, :c1853, :c1854, :c1855, :c1856, :c1857, :c1858, :c1859, :c1860, :c1861, :c1862, :c1863, :c1864, :c1865, :c1866, :c1867, :c1868, :c1869, :c1870, :c1871, :c1872, :c1873, :c1874, :c1875, :c1876, :c1877, :c1878, :c1879, :c1880, :c1881, :c1882, :c1883, :c1884, :c1885, :c1886, :c1887, :c1888, :c1889, :c1890, :c1891, :c1892, :c1893, :c1894, :c1895, :c1896, :c1897, :c1898, :c1899, :c1900, :c1901, :c1902, :c1903, :c1904, :c1905, :c1906, :c1907, :c1908, :c1909, :c1910, :c1911, :c1912, :c1913, :c1914, :c1915, :c1916, :c1917, :c1918, :c1919, :c1920, :c1921, :c1922, :c1923, :c1924, :c1925, :c1926, :c1927, :c1928, :c1929, :c1930, :c1931, :c1932, :c1933, :c1934, :c1935, :c1936, :c1937, :c1938, :c1939, :c1940, :c1941, :c1942, :c1943, :c1944, :c1945, :c1946, :c1947, :c1948, :c1949, :c1950, :c1951, :c1952, :c1953, :c1954, :c1955, :c1956, :c1957, :c1958, :c1959, :c1960, :c1961, :c1962, :c1963, :c1964, :c1965, :c1966, :c1967, :c1968, :c1969, :c1970, :c1971, :c1972, :c1973, :c1974, :c1975, :c1976, :c1977, :c1978, :c1979, :c1980, :c1981, :c1982, :c1983, :c1984, :c1985, :c1986, :c1987, :c1988, :c1989, :c1990, :c1991, :c1992, :c1993, :c1994, :c1995, :c1996, :c1997, :c1998, :c1999, :c2000, :c2001, :c2002, :c2003, :c2004, :c2005, :c2006, :c2007, :c2008, :c2009, :c2010, :c2011, :c2012, :c2013, :c2014, :c2015, :c2016, :c2017, :c2018, :c2019, :c2020, :c2021, :c2022, :c2023, :c2024, :c2025, :c2026, :c2027, :c2028, :c2029, :c2030, :c2031, :c2032, :c2033, :c2034, :c2035, :c2036, :c2037, :c2038, :c2039, :c2040, :c2041, :c2042, :c2043, :c2044, :c2045, :c2046, :c2047, :c2048, :c2049, :c2050, :c2051, :c2052, :c2053, :c2054, :c2055, :c2056, :c2057, :c2058, :c2059, :c2060, :c2061, :c2062, :c2063, :c2064, :c2065, :c2066, :c2067, :c2068, :c2069, :c2070, :c2071, :c2072, :c2073, :c2074, :c2075, :c2076, :c2077, :c2078, :c2079, :c2080, :c2081, :c2082, :c2083, :c2084, :c2085, :c2086, :c2087, :c2088, :c2089, :c2090, :c2091, :c2092, :c2093, :c2094, :c2095, :c2096, :c2097, :c2098, :c2099, :c2100, :c2101, :c2102, :c2103, :c2104, :c2105, :c2106, :c2107, :c2108, :c2109, :c2110, :c2111, :c2112, :c2113, :c2114, :c2115, :c2116, :c2117, :c2118, :c2119, :c2120, :c2121, :c2122, :c2123, :c2124, :c2125, :c2126, :c2127, :c2128, :c2129, :c2130, :c2131, :c2132, :c2133, :c2134, :c2135, :c2136, :c2137, :c2138, :c2139, :c2140, :c2141, :c2142, :c2143, :c2144, :c2145, :c2146, :c2147, :c2148, :c2149, :c2150, :c2151, :c2152, :c2153, :c2154, :c2155, :c2156, :c2157, :c2158, :c2159, :c2160, :c2161, :c2162, :c2163, :c2164, :c2165, :c2166, :c2167, :c2168, :c2169, :c2170, :c2171, :c2172, :c2173, :c2174, :c2175, :c2176, :c2177, :c2178, :c2179, :c2180, :c2181, :c2182, :c2183, :c2184, :c2185, :c2186, :c2187, :c2188, :c2189, :c2190, :c2191, :c2192, :c2193, :c2194, :c2195, :c2196, :c2197, :c2198, :c2199, :c2200, :c2201, :c2202, :c2203, :c2204, :c2205, :c2206, :c2207, :c2208, :c2209, :c2210, :c2211, :c2212, :c2213, :c2214, :c2215, :c2216, :c2217, :c2218, :c2219, :c2220, :c2221, :c2222, :c2223, :c2224, :c2225, :c2226, :c2227, :c2228, :c2229, :c2230, :c2231, :c2232, :c2233, :c2234, :c2235, :c2236, :c2237, :c2238, :c2239, :c2240, :c2241, :c2242, :c2243, :c2244, :c2245, :c2246, :c2247, :c2248, :c2249, :c2250, :c2251, :c2252, :c2253, :c2254, :c2255, :c2256, :c2257, :c2258, :c2259, :c2260, :c2261, :c2262, :c2263, :c2264, :c2265, :c2266, :c2267, :c2268, :c2269, :c2270, :c2271, :c2272, :c2273, :c2274, :c2275, :c2276, :c2277, :c2278, :c2279, :c2280, :c2281, :c2282, :c2283, :c2284, :c2285, :c2286, :c2287, :c2288, :c2289, :c2290, :c2291, :c2292, :c2293, :c2294, :c2295, :c2296, :c2297, :c2298, :c2299, :c2300, :c2301, :c2302, :c2303, :c2304, :c2305, :c2306, :c2307, :c2308, :c2309, :c2310, :c2311, :c2312, :c2313, :c2314, :c2315, :c2316, :c2317, :c2318, :c2319, :c2320, :c2321, :c2322, :c2323, :c2324, :c2325, :c2326, :c2327, :c2328, :c2329, :c2330, :c2331, :c2332, :c2333, :c2334, :c2335, :c2336, :c2337, :c2338, :c2339, :c2340, :c2341, :c2342, :c2343, :c2344, :c2345, :c2346, :c2347, :c2348, :c2349, :c2350, :c2351, :c2352, :c2353, :c2354, :c2355, :c2356, :c2357, :c2358, :c2359, :c2360, :c2361, :c2362, :c2363, :c2364, :c2365, :c2366, :c2367, :c2368, :c2369, :c2370, :c2371, :c2372, :c2373, :c2374, :c2375, :c2376, :c2377, :c2378, :c2379, :c2380, :c2381, :c2382, :c2383, :c2384, :c2385, :c2386, :c2387, :c2388, :c2389, :c2390, :c2391, :c2392, :c2393, :c2394, :c2395, :c2396, :c2397, :c2398, :c2399, :c2400, :c2401, :c2402, :c2403, :c2404, :c2405, :c2406, :c2407, :c2408, :c2409, :c2410, :c2411, :c2412, :c2413, :c2414, :c2415, :c2416, :c2417, :c2418, :c2419, :c2420, :c2421, :c2422, :c2423, :c2424, :c2425, :c2426, :c2427, :c2428, :c2429, :c2430, :c2431, :c2432, :c2433, :c2434, :c2435, :c2436, :c2437, :c2438, :c2439, :c2440, :c2441, :c2442, :c2443, :c2444, :c2445, :c2446, :c2447, :c2448, :c2449, :c2450, :c2451, :c2452, :c2453, :c2454, :c2455, :c2456, :c2457, :c2458, :c2459, :c2460, :c2461, :c2462, :c2463, :c2464, :c2465, :c2466, :c2467, :c2468, :c2469, :c2470, :c2471, :c2472, :c2473, :c2474, :c2475, :c2476, :c2477, :c2478, :c2479, :c2480, :c2481, :c2482, :c2483, :c2484, :c2485, :c2486, :c2487, :c2488, :c2489, :c2490, :c2491, :c2492, :c2493, :c2494, :c2495, :c2496, :c2497, :c2498, :c2499, :c2500, :c2501, :c2502, :c2503, :c2504, :c2505, :c2506, :c2507, :c2508, :c2509, :c2510, :c2511, :c2512, :c2513, :c2514, :c2515, :c2516, :c2517, :c2518, :c2519, :c2520, :c2521, :c2522, :c2523, :c2524, :c2525, :c2526, :c2527, :c2528, :c2529, :c2530, :c2531, :c2532, :c2533, :c2534, :c2535, :c2536, :c2537, :c2538, :c2539, :c2540, :c2541, :c2542, :c2543, :c2544, :c2545, :c2546, :c2547, :c2548, :c2549, :c2550, :c2551, :c2552, :c2553, :c2554, :c2555, :c2556, :c2557, :c2558, :c2559, :c2560, :c2561, :c2562, :c2563, :c2564, :c2565, :c2566, :c2567, :c2568, :c2569, :c2570, :c2571, :c2572, :c2573, :c2574, :c2575, :c2576, :c2577, :c2578, :c2579, :c2580, :c2581, :c2582, :c2583, :c2584, :c2585, :c2586, :c2587, :c2588, :c2589, :c2590, :c2591, :c2592, :c2593, :c2594, :c2595, :c2596, :c2597, :c2598, :c2599, :c2600, :c2601, :c2602, :c2603, :c2604, :c2605, :c2606, :c2607, :c2608, :c2609, :c2610, :c2611, :c2612, :c2613, :c2614, :c2615, :c2616, :c2617, :c2618, :c2619, :c2620, :c2621, :c2622, :c2623, :c2624, :c2625, :c2626, :c2627, :c2628, :c2629, :c2630, :c2631, :c2632, :c2633, :c2634, :c2635, :c2636, :c2637, :c2638, :c2639, :c2640, :c2641, :c2642, :c2643, :c2644, :c2645, :c2646, :c2647, :c2648, :c2649, :c2650, :c2651, :c2652, :c2653, :c2654, :c2655, :c2656, :c2657, :c2658, :c2659, :c2660, :c2661, :c2662, :c2663, :c2664, :c2665, :c2666, :c2667, :c2668, :c2669, :c2670, :c2671, :c2672, :c2673, :c2674, :c2675, :c2676, :c2677, :c2678, :c2679, :c2680, :c2681, :c2682, :c2683, :c2684, :c2685, :c2686, :c2687, :c2688, :c2689, :c2690, :c2691, :c2692, :c2693, :c2694, :c2695, :c2696, :c2697, :c2698, :c2699, :c2700, :c2701, :c2702, :c2703, :c2704, :c2705, :c2706, :c2707, :c2708, :c2709, :c2710, :c2711, :c2712, :c2713, :c2714, :c2715, :c2716, :c2717, :c2718, :c2719, :c2720, :c2721, :c2722, :c2723, :c2724, :c2725, :c2726, :c2727, :c2728, :c2729, :c2730, :c2731, :c2732, :c2733, :c2734, :c2735, :c2736, :c2737, :c2738, :c2739, :c2740, :c2741, :c2742, :c2743, :c2744, :c2745, :c2746, :c2747, :c2748, :c2749, :c2750, :c2751, :c2752, :c2753, :c2754, :c2755, :c2756, :c2757, :c2758, :c2759, :c2760, :c2761, :c2762, :c2763, :c2764, :c2765, :c2766, :c2767, :c2768, :c2769, :c2770, :c2771, :c2772, :c2773, :c2774, :c2775, :c2776, :c2777, :c2778, :c2779, :c2780, :c2781, :c2782, :c2783, :c2784, :c2785, :c2786, :c2787, :c2788, :c2789, :c2790, :c2791, :c2792, :c2793, :c2794, :c2795, :c2796, :c2797, :c2798, :c2799, :c2800, :c2801, :c2802, :c2803, :c2804, :c2805, :c2806, :c2807, :c2808, :c2809, :c2810, :c2811, :c2812, :c2813, :c2814, :c2815, :c2816, :c2817, :c2818, :c2819, :c2820, :c2821, :c2822, :c2823, :c2824, :c2825, :c2826, :c2827, :c2828, :c2829, :c2830, :c2831, :c2832, :c2833, :c2834, :c2835, :c2836, :c2837, :c2838, :c2839, :c2840, :c2841, :c2842, :c2843, :c2844, :c2845, :c2846, :c2847, :c2848, :c2849, :c2850, :c2851, :c2852, :c2853, :c2854, :c2855, :c2856, :c2857, :c2858, :c2859, :c2860, :c2861, :c2862, :c2863, :c2864, :c2865, :c2866, :c2867, :c2868, :c2869, :c2870, :c2871, :c2872, :c2873, :c2874, :c2875, :c2876, :c2877, :c2878, :c2879, :c2880, :c2881, :c2882, :c2883, :c2884, :c2885, :c2886, :c2887, :c2888, :c2889, :c2890, :c2891, :c2892, :c2893, :c2894, :c2895, :c2896, :c2897, :c2898, :c2899, :c2900, :c2901, :c2902, :c2903, :c2904, :c2905, :c2906, :c2907, :c2908, :c2909, :c2910, :c2911, :c2912, :c2913, :c2914, :c2915, :c2916, :c2917, :c2918, :c2919, :c2920, :c2921, :c2922, :c2923, :c2924, :c2925, :c2926, :c2927, :c2928, :c2929, :c2930, :c2931, :c2932, :c2933, :c2934, :c2935, :c2936, :c2937, :c2938, :c2939, :c2940, :c2941, :c2942, :c2943, :c2944, :c2945, :c2946, :c2947, :c2948, :c2949, :c2950, :c2951, :c2952, :c2953, :c2954, :c2955, :c2956, :c2957, :c2958, :c2959, :c2960, :c2961, :c2962, :c2963, :c2964, :c2965, :c2966, :c2967, :c2968, :c2969, :c2970, :c2971, :c2972, :c2973, :c2974, :c2975, :c2976, :c2977, :c2978, :c2979, :c2980, :c2981, :c2982, :c2983, :c2984, :c2985, :c2986, :c2987, :c2988, :c2989, :c2990, :c2991, :c2992, :c2993, :c2994, :c2995, :c2996, :c2997, :c2998, :c2999, :c3000, :c3001, :c3002, :c3003, :c3004, :c3005, :c3006, :c3007, :c3008, :c3009, :c3010, :c3011, :c3012, :c3013, :c3014, :c3015, :c3016, :c3017, :c3018, :c3019, :c3020, :c3021, :c3022, :c3023, :c3024, :c3025, :c3026, :c3027, :c3028, :c3029, :c3030, :c3031, :c3032, :c3033, :c3034, :c3035, :c3036, :c3037, :c3038, :c3039, :c3040, :c3041, :c3042, :c3043, :c3044, :c3045, :c3046, :c3047, :c3048, :c3049, :c3050, :c3051, :c3052, :c3053, :c3054, :c3055, :c3056, :c3057, :c3058, :c3059, :c3060, :c3061, :c3062, :c3063, :c3064, :c3065, :c3066, :c3067, :c3068, :c3069, :c3070, :c3071, :c3072, :c3073, :c3074, :c3075, :c3076, :c3077, :c3078, :c3079, :c3080, :c3081, :c3082, :c3083, :c3084, :c3085, :c3086, :c3087, :c3088, :c3089, :c3090, :c3091, :c3092, :c3093, :c3094, :c3095, :c3096, :c3097, :c3098, :c3099, :c3100, :c3101, :c3102, :c3103, :c3104, :c3105, :c3106, :c3107, :c3108, :c3109, :c3110, :c3111, :c3112, :c3113, :c3114, :c3115, :c3116, :c3117, :c3118, :c3119, :c3120, :c3121, :c3122, :c3123, :c3124, :c3125, :c3126, :c3127, :c3128, :c3129, :c3130, :c3131, :c3132, :c3133, :c3134, :c3135, :c3136, :c3137, :c3138, :c3139, :c3140, :c3141, :c3142, :c3143, :c3144, :c3145, :c3146, :c3147, :c3148, :c3149, :c3150, :c3151, :c3152, :c3153, :c3154, :c3155, :c3156, :c3157, :c3158, :c3159, :c3160, :c3161, :c3162, :c3163, :c3164, :c3165, :c3166, :c3167, :c3168, :c3169, :c3170, :c3171, :c3172, :c3173, :c3174, :c3175, :c3176, :c3177, :c3178, :c3179, :c3180, :c3181, :c3182, :c3183, :c3184, :c3185, :c3186, :c3187, :c3188, :c3189, :c3190, :c3191, :c3192, :c3193, :c3194, :c3195, :c3196, :c3197, :c3198, :c3199, :c3200, :c3201, :c3202, :c3203, :c3204, :c3205, :c3206, :c3207, :c3208, :c3209, :c3210, :c3211, :c3212, :c3213, :c3214, :c3215, :c3216, :c3217, :c3218, :c3219, :c3220, :c3221, :c3222, :c3223, :c3224, :c3225, :c3226, :c3227, :c3228, :c3229, :c3230, :c3231, :c3232, :c3233, :c3234, :c3235, :c3236, :c3237, :c3238, :c3239, :c3240, :c3241, :c3242, :c3243, :c3244, :c3245, :c3246, :c3247, :c3248, :c3249, :c3250, :c3251, :c3252, :c3253, :c3254, :c3255, :c3256, :c3257, :c3258, :c3259, :c3260, :c3261, :c3262, :c3263, :c3264, :c3265, :c3266, :c3267, :c3268, :c3269, :c3270, :c3271, :c3272, :c3273, :c3274, :c3275, :c3276, :c3277, :c3278, :c3279, :c3280, :c3281, :c3282, :c3283, :c3284, :c3285, :c3286, :c3287, :c3288, :c3289, :c3290, :c3291, :c3292, :c3293, :c3294, :c3295, :c3296, :c3297, :c3298, :c3299, :c3300, :c3301, :c3302, :c3303, :c3304, :c3305, :c3306, :c3307, :c3308, :c3309, :c3310, :c3311, :c3312, :c3313, :c3314, :c3315, :c3316, :c3317, :c3318, :c3319, :c3320, :c3321, :c3322, :c3323, :c3324, :c3325, :c3326, :c3327, :c3328, :c3329, :c3330, :c3331, :c3332, :c3333, :c3334, :c3335, :c3336, :c3337, :c3338, :c3339, :c3340, :c3341, :c3342, :c3343, :c3344, :c3345, :c3346, :c3347, :c3348, :c3349, :c3350, :c3351, :c3352, :c3353, :c3354, :c3355, :c3356, :c3357, :c3358, :c3359, :c3360, :c3361, :c3362, :c3363, :c3364, :c3365, :c3366, :c3367, :c3368, :c3369, :c3370, :c3371, :c3372, :c3373, :c3374, :c3375, :c3376, :c3377, :c3378, :c3379, :c3380, :c3381, :c3382, :c3383, :c3384, :c3385, :c3386, :c3387, :c3388, :c3389, :c3390, :c3391, :c3392, :c3393, :c3394, :c3395, :c3396, :c3397, :c3398, :c3399, :c3400, :c3401, :c3402, :c3403, :c3404, :c3405, :c3406, :c3407, :c3408, :c3409, :c3410, :c3411, :c3412, :c3413, :c3414, :c3415, :c3416, :c3417, :c3418, :c3419, :c3420, :c3421, :c3422, :c3423, :c3424, :c3425, :c3426, :c3427, :c3428, :c3429, :c3430, :c3431, :c3432, :c3433, :c3434, :c3435, :c3436, :c3437, :c3438, :c3439, :c3440, :c3441, :c3442, :c3443, :c3444, :c3445, :c3446, :c3447, :c3448, :c3449, :c3450, :c3451, :c3452, :c3453, :c3454, :c3455, :c3456, :c3457, :c3458, :c3459, :c3460, :c3461, :c3462, :c3463, :c3464, :c3465, :c3466, :c3467, :c3468, :c3469, :c3470, :c3471, :c3472, :c3473, :c3474, :c3475, :c3476, :c3477, :c3478, :c3479, :c3480, :c3481, :c3482, :c3483, :c3484, :c3485, :c3486, :c3487, :c3488, :c3489, :c3490, :c3491, :c3492, :c3493, :c3494, :c3495, :c3496, :c3497, :c3498, :c3499, :c3500, :c3501, :c3502, :c3503, :c3504, :c3505, :c3506, :c3507, :c3508, :c3509, :c3510, :c3511, :c3512, :c3513, :c3514, :c3515, :c3516, :c3517, :c3518, :c3519, :c3520, :c3521, :c3522, :c3523, :c3524, :c3525, :c3526, :c3527, :c3528, :c3529, :c3530, :c3531, :c3532, :c3533, :c3534, :c3535, :c3536, :c3537, :c3538, :c3539, :c3540, :c3541, :c3542, :c3543, :c3544, :c3545, :c3546, :c3547, :c3548, :c3549, :c3550, :c3551, :c3552, :c3553, :c3554, :c3555, :c3556, :c3557, :c3558, :c3559, :c3560, :c3561, :c3562, :c3563, :c3564, :c3565, :c3566, :c3567, :c3568, :c3569, :c3570, :c3571, :c3572, :c3573, :c3574, :c3575, :c3576, :c3577, :c3578, :c3579, :c3580, :c3581, :c3582, :c3583, :c3584, :c3585, :c3586, :c3587, :c3588, :c3589, :c3590, :c3591, :c3592, :c3593, :c3594, :c3595, :c3596, :c3597, :c3598, :c3599, :c3600, :c3601, :c3602, :c3603, :c3604, :c3605, :c3606, :c3607, :c3608, :c3609, :c3610, :c3611, :c3612, :c3613, :c3614, :c3615, :c3616, :c3617, :c3618, :c3619, :c3620, :c3621, :c3622, :c3623, :c3624, :c3625, :c3626, :c3627, :c3628, :c3629, :c3630, :c3631, :c3632, :c3633, :c3634, :c3635, :c3636, :c3637, :c3638, :c3639, :c3640, :c3641, :c3642, :c3643, :c3644, :c3645, :c3646, :c3647, :c3648, :c3649, :c3650, :c3651, :c3652, :c3653, :c3654, :c3655, :c3656, :c3657, :c3658, :c3659, :c3660, :c3661, :c3662, :c3663, :c3664, :c3665, :c3666, :c3667, :c3668, :c3669, :c3670, :c3671, :c3672, :c3673, :c3674, :c3675, :c3676, :c3677, :c3678, :c3679, :c3680, :c3681, :c3682, :c3683, :c3684, :c3685, :c3686, :c3687, :c3688, :c3689, :c3690, :c3691, :c3692, :c3693, :c3694, :c3695, :c3696, :c3697, :c3698, :c3699, :c3700, :c3701, :c3702, :c3703, :c3704, :c3705, :c3706, :c3707, :c3708, :c3709, :c3710, :c3711, :c3712, :c3713, :c3714, :c3715, :c3716, :c3717, :c3718, :c3719, :c3720, :c3721, :c3722, :c3723, :c3724, :c3725, :c3726, :c3727, :c3728, :c3729, :c3730, :c3731, :c3732, :c3733, :c3734, :c3735, :c3736, :c3737, :c3738, :c3739, :c3740, :c3741, :c3742, :c3743, :c3744, :c3745, :c3746, :c3747, :c3748, :c3749, :c3750, :c3751, :c3752, :c3753, :c3754, :c3755, :c3756, :c3757, :c3758, :c3759, :c3760, :c3761, :c3762, :c3763, :c3764, :c3765, :c3766, :c3767, :c3768, :c3769, :c3770, :c3771, :c3772, :c3773, :c3774, :c3775, :c3776, :c3777, :c3778, :c3779, :c3780, :c3781, :c3782, :c3783, :c3784, :c3785, :c3786, :c3787, :c3788, :c3789, :c3790, :c3791, :c3792, :c3793, :c3794, :c3795, :c3796, :c3797, :c3798, :c3799, :c3800, :c3801, :c3802, :c3803, :c3804, :c3805, :c3806, :c3807, :c3808, :c3809, :c3810, :c3811, :c3812, :c3813, :c3814, :c3815, :c3816, :c3817, :c3818, :c3819, :c3820, :c3821, :c3822, :c3823, :c3824, :c3825, :c3826, :c3827, :c3828, :c3829, :c3830, :c3831, :c3832, :c3833, :c3834, :c3835, :c3836, :c3837, :c3838, :c3839, :c3840, :c3841, :c3842, :c3843, :c3844, :c3845, :c3846, :c3847, :c3848, :c3849, :c3850, :c3851, :c3852, :c3853, :c3854, :c3855, :c3856, :c3857, :c3858, :c3859, :c3860, :c3861, :c3862, :c3863, :c3864, :c3865, :c3866, :c3867, :c3868, :c3869, :c3870, :c3871, :c3872, :c3873, :c3874, :c3875, :c3876, :c3877, :c3878, :c3879, :c3880, :c3881, :c3882, :c3883, :c3884, :c3885, :c3886, :c3887, :c3888, :c3889, :c3890, :c3891, :c3892, :c3893, :c3894, :c3895, :c3896, :c3897, :c3898, :c3899, :c3900, :c3901, :c3902, :c3903, :c3904, :c3905, :c3906, :c3907, :c3908, :c3909, :c3910, :c3911, :c3912, :c3913, :c3914, :c3915, :c3916, :c3917, :c3918, :c3919, :c3920, :c3921, :c3922, :c3923, :c3924, :c3925, :c3926, :c3927, :c3928, :c3929, :c3930, :c3931, :c3932, :c3933, :c3934, :c3935, :c3936, :c3937, :c3938, :c3939, :c3940, :c3941, :c3942, :c3943, :c3944, :c3945, :c3946, :c3947, :c3948, :c3949, :c3950, :c3951, :c3952, :c3953, :c3954, :c3955, :c3956, :c3957, :c3958, :c3959, :c3960, :c3961, :c3962, :c3963, :c3964, :c3965, :c3966, :c3967, :c3968, :c3969, :c3970, :c3971, :c3972, :c3973, :c3974, :c3975, :c3976, :c3977, :c3978, :c3979, :c3980, :c3981, :c3982, :c3983, :c3984, :c3985, :c3986, :c3987, :c3988, :c3989, :c3990, :c3991, :c3992, :c3993, :c3994, :c3995, :c3996, :c3997, :c3998, :c3999, :c4000, :c4001, :c4002, :c4003, :c4004, :c4005, :c4006, :c4007, :c4008, :c4009, :c4010, :c4011, :c4012, :c4013, :c4014, :c4015, :c4016, :c4017, :c4018, :c4019, :c4020, :c4021, :c4022, :c4023, :c4024, :c4025, :c4026, :c4027, :c4028, :c4029, :c4030, :c4031, :c4032, :c4033, :c4034, :c4035, :c4036, :c4037, :c4038, :c4039, :c4040, :c4041, :c4042, :c4043, :c4044, :c4045, :c4046, :c4047, :c4048, :c4049, :c4050, :c4051, :c4052, :c4053, :c4054, :c4055, :c4056, :c4057, :c4058, :c4059, :c4060, :c4061, :c4062, :c4063, :c4064, :c4065, :c4066, :c4067, :c4068, :c4069, :c4070, :c4071, :c4072, :c4073, :c4074, :c4075, :c4076, :c4077, :c4078, :c4079, :c4080, :c4081, :c4082, :c4083, :c4084, :c4085, :c4086, :c4087, :c4088, :c4089, :c4090, :c4091, :c4092, :c4093, :c4094, :c4095, :c4096, :c4097, :c4098, :c4099, :c4100, :c4101, :c4102, :c4103, :c4104, :c4105, :c4106, :c4107, :c4108, :c4109, :c4110, :c4111, :c4112, :c4113, :c4114, :c4115, :c4116, :c4117, :c4118, :c4119, :c4120, :c4121, :c4122, :c4123, :c4124, :c4125, :c4126, :c4127, :c4128, :c4129, :c4130, :c4131, :c4132, :c4133, :c4134, :c4135, :c4136, :c4137, :c4138, :c4139, :c4140, :c4141, :c4142, :c4143, :c4144, :c4145, :c4146, :c4147, :c4148, :c4149, :c4150, :c4151, :c4152, :c4153, :c4154, :c4155, :c4156, :c4157, :c4158, :c4159, :c4160, :c4161, :c4162, :c4163, :c4164, :c4165, :c4166, :c4167, :c4168, :c4169, :c4170, :c4171, :c4172, :c4173, :c4174, :c4175, :c4176, :c4177, :c4178, :c4179, :c4180, :c4181, :c4182, :c4183, :c4184, :c4185, :c4186, :c4187, :c4188, :c4189, :c4190, :c4191, :c4192, :c4193, :c4194, :c4195, :c4196, :c4197, :c4198, :c4199, :c4200, :c4201, :c4202, :c4203, :c4204, :c4205, :c4206, :c4207, :c4208, :c4209, :c4210, :c4211, :c4212, :c4213, :c4214, :c4215, :c4216, :c4217, :c4218, :c4219, :c4220, :c4221, :c4222, :c4223, :c4224, :c4225, :c4226, :c4227, :c4228, :c4229, :c4230, :c4231, :c4232, :c4233, :c4234, :c4235, :c4236, :c4237, :c4238, :c4239, :c4240, :c4241, :c4242, :c4243, :c4244, :c4245, :c4246, :c4247, :c4248, :c4249, :c4250, :c4251, :c4252, :c4253, :c4254, :c4255, :c4256, :c4257, :c4258, :c4259, :c4260, :c4261, :c4262, :c4263, :c4264, :c4265, :c4266, :c4267, :c4268, :c4269, :c4270, :c4271, :c4272, :c4273, :c4274, :c4275, :c4276, :c4277, :c4278, :c4279, :c4280, :c4281, :c4282, :c4283, :c4284, :c4285, :c4286, :c4287, :c4288, :c4289, :c4290, :c4291, :c4292, :c4293, :c4294, :c4295, :c4296, :c4297, :c4298, :c4299, :c4300, :c4301, :c4302, :c4303, :c4304, :c4305, :c4306, :c4307, :c4308, :c4309, :c4310, :c4311, :c4312, :c4313, :c4314, :c4315, :c4316, :c4317, :c4318, :c4319, :c4320, :c4321, :c4322, :c4323, :c4324, :c4325, :c4326, :c4327, :c4328, :c4329, :c4330, :c4331, :c4332, :c4333, :c4334, :c4335, :c4336, :c4337, :c4338, :c4339, :c4340, :c4341, :c4342, :c4343, :c4344, :c4345, :c4346, :c4347, :c4348, :c4349, :c4350, :c4351, :c4352, :c4353, :c4354, :c4355, :c4356, :c4357, :c4358, :c4359, :c4360, :c4361, :c4362, :c4363, :c4364, :c4365, :c4366, :c4367, :c4368, :c4369, :c4370, :c4371, :c4372, :c4373, :c4374, :c4375, :c4376, :c4377, :c4378, :c4379, :c4380, :c4381, :c4382, :c4383, :c4384, :c4385, :c4386, :c4387, :c4388, :c4389, :c4390, :c4391, :c4392, :c4393, :c4394, :c4395, :c4396, :c4397, :c4398, :c4399, :c4400, :c4401, :c4402, :c4403, :c4404, :c4405, :c4406, :c4407, :c4408, :c4409, :c4410, :c4411, :c4412, :c4413, :c4414, :c4415, :c4416, :c4417, :c4418, :c4419, :c4420, :c4421, :c4422, :c4423, :c4424, :c4425, :c4426, :c4427, :c4428, :c4429, :c4430, :c4431, :c4432, :c4433, :c4434, :c4435, :c4436, :c4437, :c4438, :c4439, :c4440, :c4441, :c4442, :c4443, :c4444, :c4445, :c4446, :c4447, :c4448, :c4449, :c4450, :c4451, :c4452, :c4453, :c4454, :c4455, :c4456, :c4457, :c4458, :c4459, :c4460, :c4461, :c4462, :c4463, :c4464, :c4465, :c4466, :c4467, :c4468, :c4469, :c4470, :c4471, :c4472, :c4473, :c4474, :c4475, :c4476, :c4477, :c4478, :c4479, :c4480, :c4481, :c4482, :c4483, :c4484, :c4485, :c4486, :c4487, :c4488, :c4489, :c4490, :c4491, :c4492, :c4493, :c4494, :c4495, :c4496, :c4497, :c4498, :c4499, :c4500, :c4501, :c4502, :c4503, :c4504, :c4505, :c4506, :c4507, :c4508, :c4509, :c4510, :c4511, :c4512, :c4513, :c4514, :c4515, :c4516, :c4517, :c4518, :c4519, :c4520, :c4521, :c4522, :c4523, :c4524, :c4525, :c4526, :c4527, :c4528, :c4529, :c4530, :c4531, :c4532, :c4533, :c4534, :c4535, :c4536, :c4537, :c4538, :c4539, :c4540, :c4541, :c4542, :c4543, :c4544, :c4545, :c4546, :c4547, :c4548, :c4549, :c4550, :c4551, :c4552, :c4553, :c4554, :c4555, :c4556, :c4557, :c4558, :c4559, :c4560, :c4561, :c4562, :c4563, :c4564, :c4565, :c4566, :c4567, :c4568, :c4569, :c4570, :c4571, :c4572, :c4573, :c4574, :c4575, :c4576, :c4577, :c4578, :c4579, :c4580, :c4581, :c4582, :c4583, :c4584, :c4585, :c4586, :c4587, :c4588, :c4589, :c4590, :c4591, :c4592, :c4593, :c4594, :c4595, :c4596, :c4597, :c4598, :c4599, :c4600, :c4601, :c4602, :c4603, :c4604, :c4605, :c4606, :c4607, :c4608, :c4609, :c4610, :c4611, :c4612, :c4613, :c4614, :c4615, :c4616, :c4617, :c4618, :c4619, :c4620, :c4621, :c4622, :c4623, :c4624, :c4625, :c4626, :c4627, :c4628, :c4629, :c4630, :c4631, :c4632, :c4633, :c4634, :c4635, :c4636, :c4637, :c4638, :c4639, :c4640, :c4641, :c4642, :c4643, :c4644, :c4645, :c4646, :c4647, :c4648, :c4649, :c4650, :c4651, :c4652, :c4653, :c4654, :c4655, :c4656, :c4657, :c4658, :c4659, :c4660, :c4661, :c4662, :c4663, :c4664, :c4665, :c4666, :c4667, :c4668, :c4669, :c4670, :c4671, :c4672, :c4673, :c4674, :c4675, :c4676, :c4677, :c4678, :c4679, :c4680, :c4681, :c4682, :c4683, :c4684, :c4685, :c4686, :c4687, :c4688, :c4689, :c4690, :c4691, :c4692, :c4693, :c4694, :c4695, :c4696, :c4697, :c4698, :c4699, :c4700, :c4701, :c4702, :c4703, :c4704, :c4705, :c4706, :c4707, :c4708, :c4709, :c4710, :c4711, :c4712, :c4713, :c4714, :c4715, :c4716, :c4717, :c4718, :c4719, :c4720, :c4721, :c4722, :c4723, :c4724, :c4725, :c4726, :c4727, :c4728, :c4729, :c4730, :c4731, :c4732, :c4733, :c4734, :c4735, :c4736, :c4737, :c4738, :c4739, :c4740, :c4741, :c4742, :c4743, :c4744, :c4745, :c4746, :c4747, :c4748, :c4749, :c4750, :c4751, :c4752, :c4753, :c4754, :c4755, :c4756, :c4757, :c4758, :c4759, :c4760, :c4761, :c4762, :c4763, :c4764, :c4765, :c4766, :c4767, :c4768, :c4769, :c4770, :c4771, :c4772, :c4773, :c4774, :c4775, :c4776, :c4777, :c4778, :c4779, :c4780, :c4781, :c4782, :c4783, :c4784, :c4785, :c4786, :c4787, :c4788, :c4789, :c4790, :c4791, :c4792, :c4793, :c4794, :c4795, :c4796, :c4797, :c4798, :c4799, :c4800, :c4801, :c4802, :c4803, :c4804, :c4805, :c4806, :c4807, :c4808, :c4809, :c4810, :c4811, :c4812, :c4813, :c4814, :c4815, :c4816, :c4817, :c4818, :c4819, :c4820, :c4821, :c4822, :c4823, :c4824, :c4825, :c4826, :c4827, :c4828, :c4829, :c4830, :c4831, :c4832, :c4833, :c4834, :c4835, :c4836, :c4837, :c4838, :c4839, :c4840, :c4841, :c4842, :c4843, :c4844, :c4845, :c4846, :c4847, :c4848, :c4849, :c4850, :c4851, :c4852, :c4853, :c4854, :c4855, :c4856, :c4857, :c4858, :c4859, :c4860, :c4861, :c4862, :c4863, :c4864, :c4865, :c4866, :c4867, :c4868, :c4869, :c4870, :c4871, :c4872, :c4873, :c4874, :c4875, :c4876, :c4877, :c4878, :c4879, :c4880, :c4881, :c4882, :c4883, :c4884, :c4885, :c4886, :c4887, :c4888, :c4889, :c4890, :c4891, :c4892, :c4893, :c4894, :c4895, :c4896, :c4897, :c4898, :c4899, :c4900, :c4901, :c4902, :c4903, :c4904, :c4905, :c4906, :c4907, :c4908, :c4909, :c4910, :c4911, :c4912, :c4913, :c4914, :c4915, :c4916, :c4917, :c4918, :c4919, :c4920, :c4921, :c4922, :c4923, :c4924, :c4925, :c4926, :c4927, :c4928, :c4929, :c4930, :c4931, :c4932, :c4933, :c4934, :c4935, :c4936, :c4937, :c4938, :c4939, :c4940, :c4941, :c4942, :c4943, :c4944, :c4945, :c4946, :c4947, :c4948, :c4949, :c4950, :c4951, :c4952, :c4953, :c4954, :c4955, :c4956, :c4957, :c4958, :c4959, :c4960, :c4961, :c4962, :c4963, :c4964, :c4965, :c4966, :c4967, :c4968, :c4969, :c4970, :c4971, :c4972, :c4973, :c4974, :c4975, :c4976, :c4977, :c4978, :c4979, :c4980, :c4981, :c4982, :c4983, :c4984, :c4985, :c4986, :c4987, :c4988, :c4989, :c4990, :c4991, :c4992, :c4993, :c4994, :c4995, :c4996, :c4997, :c4998, :c4999, :c5000, :c5001, :c5002, :c5003, :c5004, :c5005, :c5006, :c5007, :c5008, :c5009, :c5010, :c5011, :c5012, :c5013, :c5014, :c5015, :c5016, :c5017, :c5018, :c5019, :c5020, :c5021, :c5022, :c5023, :c5024, :c5025, :c5026, :c5027, :c5028, :c5029, :c5030, :c5031, :c5032, :c5033, :c5034, :c5035, :c5036, :c5037, :c5038, :c5039, :c5040, :c5041, :c5042, :c5043, :c5044, :c5045, :c5046, :c5047, :c5048, :c5049, :c5050, :c5051, :c5052, :c5053, :c5054, :c5055, :c5056, :c5057, :c5058, :c5059, :c5060, :c5061, :c5062, :c5063, :c5064, :c5065, :c5066, :c5067, :c5068, :c5069, :c5070, :c5071, :c5072, :c5073, :c5074, :c5075, :c5076, :c5077, :c5078, :c5079, :c5080, :c5081, :c5082, :c5083, :c5084, :c5085, :c5086, :c5087, :c5088, :c5089, :c5090, :c5091, :c5092, :c5093, :c5094, :c5095, :c5096, :c5097, :c5098, :c5099, :c5100, :c5101, :c5102, :c5103, :c5104, :c5105, :c5106, :c5107, :c5108, :c5109, :c5110, :c5111, :c5112, :c5113, :c5114, :c5115, :c5116, :c5117, :c5118, :c5119, :c5120, :c5121, :c5122, :c5123, :c5124, :c5125, :c5126, :c5127, :c5128, :c5129, :c5130, :c5131, :c5132, :c5133, :c5134, :c5135, :c5136, :c5137, :c5138, :c5139, :c5140, :c5141, :c5142, :c5143, :c5144, :c5145, :c5146, :c5147, :c5148, :c5149, :c5150, :c5151, :c5152, :c5153, :c5154, :c5155, :c5156, :c5157, :c5158, :c5159, :c5160, :c5161, :c5162, :c5163, :c5164, :c5165, :c5166, :c5167, :c5168, :c5169, :c5170, :c5171, :c5172, :c5173, :c5174, :c5175, :c5176, :c5177, :c5178, :c5179, :c5180, :c5181, :c5182, :c5183, :c5184, :c5185, :c5186, :c5187, :c5188, :c5189, :c5190, :c5191, :c5192, :c5193, :c5194, :c5195, :c5196, :c5197, :c5198, :c5199, :c5200, :c5201, :c5202, :c5203, :c5204, :c5205, :c5206, :c5207, :c5208, :c5209, :c5210, :c5211, :c5212, :c5213, :c5214, :c5215, :c5216, :c5217, :c5218, :c5219, :c5220, :c5221, :c5222, :c5223, :c5224, :c5225, :c5226, :c5227, :c5228, :c5229, :c5230, :c5231, :c5232, :c5233, :c5234, :c5235, :c5236, :c5237, :c5238, :c5239, :c5240, :c5241, :c5242, :c5243, :c5244, :c5245, :c5246, :c5247, :c5248, :c5249, :c5250, :c5251, :c5252, :c5253, :c5254, :c5255, :c5256, :c5257, :c5258, :c5259, :c5260, :c5261, :c5262, :c5263, :c5264, :c5265, :c5266, :c5267, :c5268, :c5269, :c5270, :c5271, :c5272, :c5273, :c5274, :c5275, :c5276, :c5277, :c5278, :c5279, :c5280, :c5281, :c5282, :c5283, :c5284, :c5285, :c5286, :c5287, :c5288, :c5289, :c5290, :c5291, :c5292, :c5293, :c5294, :c5295, :c5296, :c5297, :c5298, :c5299, :c5300, :c5301, :c5302, :c5303, :c5304, :c5305, :c5306, :c5307, :c5308, :c5309, :c5310, :c5311, :c5312, :c5313, :c5314, :c5315, :c5316, :c5317, :c5318, :c5319, :c5320, :c5321, :c5322, :c5323, :c5324, :c5325, :c5326, :c5327, :c5328, :c5329, :c5330, :c5331, :c5332, :c5333, :c5334, :c5335, :c5336, :c5337, :c5338, :c5339, :c5340, :c5341, :c5342, :c5343, :c5344, :c5345, :c5346, :c5347, :c5348, :c5349, :c5350, :c5351, :c5352, :c5353, :c5354, :c5355, :c5356, :c5357, :c5358, :c5359, :c5360, :c5361, :c5362, :c5363, :c5364, :c5365, :c5366, :c5367, :c5368, :c5369, :c5370, :c5371, :c5372, :c5373, :c5374, :c5375, :c5376, :c5377, :c5378, :c5379, :c5380, :c5381, :c5382, :c5383, :c5384, :c5385, :c5386, :c5387, :c5388, :c5389, :c5390, :c5391, :c5392, :c5393, :c5394, :c5395, :c5396, :c5397, :c5398, :c5399, :c5400, :c5401, :c5402, :c5403, :c5404, :c5405, :c5406, :c5407, :c5408, :c5409, :c5410, :c5411, :c5412, :c5413, :c5414, :c5415, :c5416, :c5417, :c5418, :c5419, :c5420, :c5421, :c5422, :c5423, :c5424, :c5425, :c5426, :c5427, :c5428, :c5429, :c5430, :c5431, :c5432, :c5433, :c5434, :c5435, :c5436, :c5437, :c5438, :c5439, :c5440, :c5441, :c5442, :c5443, :c5444, :c5445, :c5446, :c5447, :c5448, :c5449, :c5450, :c5451, :c5452, :c5453, :c5454, :c5455, :c5456, :c5457, :c5458, :c5459, :c5460, :c5461, :c5462, :c5463, :c5464, :c5465, :c5466, :c5467, :c5468, :c5469, :c5470, :c5471, :c5472, :c5473, :c5474, :c5475, :c5476, :c5477, :c5478, :c5479, :c5480, :c5481, :c5482, :c5483, :c5484, :c5485, :c5486, :c5487, :c5488, :c5489, :c5490, :c5491, :c5492, :c5493, :c5494, :c5495, :c5496, :c5497, :c5498, :c5499, :c5500, :c5501, :c5502, :c5503, :c5504, :c5505, :c5506, :c5507, :c5508, :c5509, :c5510, :c5511, :c5512, :c5513, :c5514, :c5515, :c5516, :c5517, :c5518, :c5519, :c5520, :c5521, :c5522, :c5523, :c5524, :c5525, :c5526, :c5527, :c5528, :c5529, :c5530, :c5531, :c5532, :c5533, :c5534, :c5535, :c5536, :c5537, :c5538, :c5539, :c5540, :c5541, :c5542, :c5543, :c5544, :c5545, :c5546, :c5547, :c5548, :c5549, :c5550, :c5551, :c5552, :c5553, :c5554, :c5555, :c5556, :c5557, :c5558, :c5559, :c5560, :c5561, :c5562, :c5563, :c5564, :c5565, :c5566, :c5567, :c5568, :c5569, :c5570, :c5571, :c5572, :c5573, :c5574, :c5575, :c5576, :c5577, :c5578, :c5579, :c5580, :c5581, :c5582, :c5583, :c5584, :c5585, :c5586, :c5587, :c5588, :c5589, :c5590, :c5591, :c5592, :c5593, :c5594, :c5595, :c5596, :c5597, :c5598, :c5599, :c5600, :c5601, :c5602, :c5603, :c5604, :c5605, :c5606, :c5607, :c5608, :c5609, :c5610, :c5611, :c5612, :c5613, :c5614, :c5615, :c5616, :c5617, :c5618, :c5619, :c5620, :c5621, :c5622, :c5623, :c5624, :c5625, :c5626, :c5627, :c5628, :c5629, :c5630, :c5631, :c5632, :c5633, :c5634, :c5635, :c5636, :c5637, :c5638, :c5639, :c5640, :c5641, :c5642, :c5643, :c5644, :c5645, :c5646, :c5647, :c5648, :c5649, :c5650, :c5651, :c5652, :c5653, :c5654, :c5655, :c5656, :c5657, :c5658, :c5659, :c5660, :c5661, :c5662, :c5663, :c5664, :c5665, :c5666, :c5667, :c5668, :c5669, :c5670, :c5671, :c5672, :c5673, :c5674, :c5675, :c5676, :c5677, :c5678, :c5679, :c5680, :c5681, :c5682, :c5683, :c5684, :c5685, :c5686, :c5687, :c5688, :c5689, :c5690, :c5691, :c5692, :c5693, :c5694, :c5695, :c5696, :c5697, :c5698, :c5699, :c5700, :c5701, :c5702, :c5703, :c5704, :c5705, :c5706, :c5707, :c5708, :c5709, :c5710, :c5711, :c5712, :c5713, :c5714, :c5715, :c5716, :c5717, :c5718, :c5719, :c5720, :c5721, :c5722, :c5723, :c5724, :c5725, :c5726, :c5727, :c5728, :c5729, :c5730, :c5731, :c5732, :c5733, :c5734, :c5735, :c5736, :c5737, :c5738, :c5739, :c5740, :c5741, :c5742, :c5743, :c5744, :c5745, :c5746, :c5747, :c5748, :c5749, :c5750, :c5751, :c5752, :c5753, :c5754, :c5755, :c5756, :c5757, :c5758, :c5759, :c5760, :c5761, :c5762, :c5763, :c5764, :c5765, :c5766, :c5767, :c5768, :c5769, :c5770, :c5771, :c5772, :c5773, :c5774, :c5775, :c5776, :c5777, :c5778, :c5779, :c5780, :c5781, :c5782, :c5783, :c5784, :c5785, :c5786, :c5787, :c5788, :c5789, :c5790, :c5791, :c5792, :c5793, :c5794, :c5795, :c5796, :c5797, :c5798, :c5799, :c5800, :c5801, :c5802, :c5803, :c5804, :c5805, :c5806, :c5807, :c5808, :c5809, :c5810, :c5811, :c5812, :c5813, :c5814, :c5815, :c5816, :c5817, :c5818, :c5819, :c5820, :c5821, :c5822, :c5823, :c5824, :c5825, :c5826, :c5827, :c5828, :c5829, :c5830, :c5831, :c5832, :c5833, :c5834, :c5835, :c5836, :c5837, :c5838, :c5839, :c5840, :c5841, :c5842, :c5843, :c5844, :c5845, :c5846, :c5847, :c5848, :c5849, :c5850, :c5851, :c5852, :c5853, :c5854, :c5855, :c5856, :c5857, :c5858, :c5859, :c5860, :c5861, :c5862, :c5863, :c5864, :c5865, :c5866, :c5867, :c5868, :c5869, :c5870, :c5871, :c5872, :c5873, :c5874, :c5875, :c5876, :c5877, :c5878, :c5879, :c5880, :c5881, :c5882, :c5883, :c5884, :c5885, :c5886, :c5887, :c5888, :c5889, :c5890, :c5891, :c5892, :c5893, :c5894, :c5895, :c5896, :c5897, :c5898, :c5899, :c5900, :c5901, :c5902, :c5903, :c5904, :c5905, :c5906, :c5907, :c5908, :c5909, :c5910, :c5911, :c5912, :c5913, :c5914, :c5915, :c5916, :c5917, :c5918, :c5919, :c5920, :c5921, :c5922, :c5923, :c5924, :c5925, :c5926, :c5927, :c5928, :c5929, :c5930, :c5931, :c5932, :c5933, :c5934, :c5935, :c5936, :c5937, :c5938, :c5939, :c5940, :c5941, :c5942, :c5943, :c5944, :c5945, :c5946, :c5947, :c5948, :c5949, :c5950, :c5951, :c5952, :c5953, :c5954, :c5955, :c5956, :c5957, :c5958, :c5959, :c5960, :c5961, :c5962, :c5963, :c5964, :c5965, :c5966, :c5967, :c5968, :c5969, :c5970, :c5971, :c5972, :c5973, :c5974, :c5975, :c5976, :c5977, :c5978, :c5979, :c5980, :c5981, :c5982, :c5983, :c5984, :c5985, :c5986, :c5987, :c5988, :c5989, :c5990, :c5991, :c5992, :c5993, :c5994, :c5995, :c5996, :c5997, :c5998, :c5999, :c6000, :c6001, :c6002, :c6003, :c6004, :c6005, :c6006, :c6007, :c6008, :c6009, :c6010, :c6011, :c6012, :c6013, :c6014, :c6015, :c6016, :c6017, :c6018, :c6019, :c6020, :c6021, :c6022, :c6023, :c6024, :c6025, :c6026, :c6027, :c6028, :c6029, :c6030, :c6031, :c6032, :c6033, :c6034, :c6035, :c6036, :c6037, :c6038, :c6039, :c6040, :c6041, :c6042, :c6043, :c6044, :c6045, :c6046, :c6047, :c6048, :c6049, :c6050, :c6051, :c6052, :c6053, :c6054, :c6055, :c6056, :c6057, :c6058, :c6059, :c6060, :c6061, :c6062, :c6063, :c6064, :c6065, :c6066, :c6067, :c6068, :c6069, :c6070, :c6071, :c6072, :c6073, :c6074, :c6075, :c6076, :c6077, :c6078, :c6079, :c6080, :c6081, :c6082, :c6083, :c6084, :c6085, :c6086, :c6087, :c6088, :c6089, :c6090, :c6091, :c6092, :c6093, :c6094, :c6095, :c6096, :c6097, :c6098, :c6099, :c6100, :c6101, :c6102, :c6103, :c6104, :c6105, :c6106, :c6107, :c6108, :c6109, :c6110, :c6111, :c6112, :c6113, :c6114, :c6115, :c6116, :c6117, :c6118, :c6119, :c6120, :c6121, :c6122, :c6123, :c6124, :c6125, :c6126, :c6127, :c6128, :c6129, :c6130, :c6131, :c6132, :c6133, :c6134, :c6135, :c6136, :c6137, :c6138, :c6139, :c6140, :c6141, :c6142, :c6143, :c6144, :c6145, :c6146, :c6147, :c6148, :c6149, :c6150, :c6151, :c6152, :c6153, :c6154, :c6155, :c6156, :c6157, :c6158, :c6159, :c6160, :c6161, :c6162, :c6163, :c6164, :c6165, :c6166, :c6167, :c6168, :c6169, :c6170, :c6171, :c6172, :c6173, :c6174, :c6175, :c6176, :c6177, :c6178, :c6179, :c6180, :c6181, :c6182, :c6183, :c6184, :c6185, :c6186, :c6187, :c6188, :c6189, :c6190, :c6191, :c6192, :c6193, :c6194, :c6195, :c6196, :c6197, :c6198, :c6199, :c6200, :c6201, :c6202, :c6203, :c6204, :c6205, :c6206, :c6207, :c6208, :c6209, :c6210, :c6211, :c6212, :c6213, :c6214, :c6215, :c6216, :c6217, :c6218, :c6219, :c6220, :c6221, :c6222, :c6223, :c6224, :c6225, :c6226, :c6227, :c6228, :c6229, :c6230, :c6231, :c6232, :c6233, :c6234, :c6235, :c6236, :c6237, :c6238, :c6239, :c6240, :c6241, :c6242, :c6243, :c6244, :c6245, :c6246, :c6247, :c6248, :c6249, :c6250, :c6251, :c6252, :c6253, :c6254, :c6255, :c6256, :c6257, :c6258, :c6259, :c6260, :c6261, :c6262, :c6263, :c6264, :c6265, :c6266, :c6267, :c6268, :c6269, :c6270, :c6271, :c6272, :c6273, :c6274, :c6275, :c6276, :c6277, :c6278, :c6279, :c6280, :c6281, :c6282, :c6283, :c6284, :c6285, :c6286, :c6287, :c6288, :c6289, :c6290, :c6291, :c6292, :c6293, :c6294, :c6295, :c6296, :c6297, :c6298, :c6299, :c6300, :c6301, :c6302, :c6303, :c6304, :c6305, :c6306, :c6307, :c6308, :c6309, :c6310, :c6311, :c6312, :c6313, :c6314, :c6315, :c6316, :c6317, :c6318, :c6319, :c6320, :c6321, :c6322, :c6323, :c6324, :c6325, :c6326, :c6327, :c6328, :c6329, :c6330, :c6331, :c6332, :c6333, :c6334, :c6335, :c6336, :c6337, :c6338, :c6339, :c6340, :c6341, :c6342, :c6343, :c6344, :c6345, :c6346, :c6347, :c6348, :c6349, :c6350, :c6351, :c6352, :c6353, :c6354, :c6355, :c6356, :c6357, :c6358, :c6359, :c6360, :c6361, :c6362, :c6363, :c6364, :c6365, :c6366, :c6367, :c6368, :c6369, :c6370, :c6371, :c6372, :c6373, :c6374, :c6375, :c6376, :c6377, :c6378, :c6379, :c6380, :c6381, :c6382, :c6383, :c6384, :c6385, :c6386, :c6387, :c6388, :c6389, :c6390, :c6391, :c6392, :c6393, :c6394, :c6395, :c6396, :c6397, :c6398, :c6399, :c6400, :c6401, :c6402, :c6403, :c6404, :c6405, :c6406, :c6407, :c6408, :c6409, :c6410, :c6411, :c6412, :c6413, :c6414, :c6415, :c6416, :c6417, :c6418, :c6419, :c6420, :c6421, :c6422, :c6423, :c6424, :c6425, :c6426, :c6427, :c6428, :c6429, :c6430, :c6431, :c6432, :c6433, :c6434, :c6435, :c6436, :c6437, :c6438, :c6439, :c6440, :c6441, :c6442, :c6443, :c6444, :c6445, :c6446, :c6447, :c6448, :c6449, :c6450, :c6451, :c6452, :c6453, :c6454, :c6455, :c6456, :c6457, :c6458, :c6459, :c6460, :c6461, :c6462, :c6463, :c6464, :c6465, :c6466, :c6467, :c6468, :c6469, :c6470, :c6471, :c6472, :c6473, :c6474, :c6475, :c6476, :c6477, :c6478, :c6479, :c6480, :c6481, :c6482, :c6483, :c6484, :c6485, :c6486, :c6487, :c6488, :c6489, :c6490, :c6491, :c6492, :c6493, :c6494, :c6495, :c6496, :c6497, :c6498, :c6499, :c6500, :c6501, :c6502, :c6503, :c6504, :c6505, :c6506, :c6507, :c6508, :c6509, :c6510, :c6511, :c6512, :c6513, :c6514, :c6515, :c6516, :c6517, :c6518, :c6519, :c6520, :c6521, :c6522, :c6523, :c6524, :c6525, :c6526, :c6527, :c6528, :c6529, :c6530, :c6531, :c6532, :c6533, :c6534, :c6535, :c6536, :c6537, :c6538, :c6539, :c6540, :c6541, :c6542, :c6543, :c6544, :c6545, :c6546, :c6547, :c6548, :c6549, :c6550, :c6551, :c6552, :c6553, :c6554, :c6555, :c6556, :c6557, :c6558, :c6559, :c6560, :c6561, :c6562, :c6563, :c6564, :c6565, :c6566, :c6567, :c6568, :c6569, :c6570, :c6571, :c6572, :c6573, :c6574, :c6575, :c6576, :c6577, :c6578, :c6579, :c6580, :c6581, :c6582, :c6583, :c6584, :c6585, :c6586, :c6587, :c6588, :c6589, :c6590, :c6591, :c6592, :c6593, :c6594, :c6595, :c6596, :c6597, :c6598, :c6599, :c6600, :c6601, :c6602, :c6603, :c6604, :c6605, :c6606, :c6607, :c6608, :c6609, :c6610, :c6611, :c6612, :c6613, :c6614, :c6615, :c6616, :c6617, :c6618, :c6619, :c6620, :c6621, :c6622, :c6623, :c6624, :c6625, :c6626, :c6627, :c6628, :c6629, :c6630, :c6631, :c6632, :c6633, :c6634, :c6635, :c6636, :c6637, :c6638, :c6639, :c6640, :c6641, :c6642, :c6643, :c6644, :c6645, :c6646, :c6647, :c6648, :c6649, :c6650, :c6651, :c6652, :c6653, :c6654, :c6655, :c6656, :c6657, :c6658, :c6659, :c6660, :c6661, :c6662, :c6663, :c6664, :c6665, :c6666, :c6667, :c6668, :c6669, :c6670, :c6671, :c6672, :c6673, :c6674, :c6675, :c6676, :c6677, :c6678, :c6679, :c6680, :c6681, :c6682, :c6683, :c6684, :c6685, :c6686, :c6687, :c6688, :c6689, :c6690, :c6691, :c6692, :c6693, :c6694, :c6695, :c6696, :c6697, :c6698, :c6699, :c6700, :c6701, :c6702, :c6703, :c6704, :c6705, :c6706, :c6707, :c6708, :c6709, :c6710, :c6711, :c6712, :c6713, :c6714, :c6715, :c6716, :c6717, :c6718, :c6719, :c6720, :c6721, :c6722, :c6723, :c6724, :c6725, :c6726, :c6727, :c6728, :c6729, :c6730, :c6731, :c6732, :c6733, :c6734, :c6735, :c6736, :c6737, :c6738, :c6739, :c6740, :c6741, :c6742, :c6743, :c6744, :c6745, :c6746, :c6747, :c6748, :c6749, :c6750, :c6751, :c6752, :c6753, :c6754, :c6755, :c6756, :c6757, :c6758, :c6759, :c6760, :c6761, :c6762, :c6763, :c6764, :c6765, :c6766, :c6767, :c6768, :c6769, :c6770, :c6771, :c6772, :c6773, :c6774, :c6775, :c6776, :c6777, :c6778, :c6779, :c6780, :c6781, :c6782, :c6783, :c6784, :c6785, :c6786, :c6787, :c6788, :c6789, :c6790, :c6791, :c6792, :c6793, :c6794, :c6795, :c6796, :c6797, :c6798, :c6799, :c6800, :c6801, :c6802, :c6803, :c6804, :c6805, :c6806, :c6807, :c6808, :c6809, :c6810, :c6811, :c6812, :c6813, :c6814, :c6815, :c6816, :c6817, :c6818, :c6819, :c6820, :c6821, :c6822, :c6823, :c6824, :c6825, :c6826, :c6827, :c6828, :c6829, :c6830, :c6831, :c6832, :c6833, :c6834, :c6835, :c6836, :c6837, :c6838, :c6839, :c6840, :c6841, :c6842, :c6843, :c6844, :c6845, :c6846, :c6847, :c6848, :c6849, :c6850, :c6851, :c6852, :c6853, :c6854, :c6855, :c6856, :c6857, :c6858, :c6859, :c6860, :c6861, :c6862, :c6863, :c6864, :c6865, :c6866, :c6867, :c6868, :c6869, :c6870, :c6871, :c6872, :c6873, :c6874, :c6875, :c6876, :c6877, :c6878, :c6879, :c6880, :c6881, :c6882, :c6883, :c6884, :c6885, :c6886, :c6887, :c6888, :c6889, :c6890, :c6891, :c6892, :c6893, :c6894, :c6895, :c6896, :c6897, :c6898, :c6899, :c6900, :c6901, :c6902, :c6903, :c6904, :c6905, :c6906, :c6907, :c6908, :c6909, :c6910, :c6911, :c6912, :c6913, :c6914, :c6915, :c6916, :c6917, :c6918, :c6919, :c6920, :c6921, :c6922, :c6923, :c6924, :c6925, :c6926, :c6927, :c6928, :c6929, :c6930, :c6931, :c6932, :c6933, :c6934, :c6935, :c6936, :c6937, :c6938, :c6939, :c6940, :c6941, :c6942, :c6943, :c6944, :c6945, :c6946, :c6947, :c6948, :c6949, :c6950, :c6951, :c6952, :c6953, :c6954, :c6955, :c6956, :c6957, :c6958, :c6959, :c6960, :c6961, :c6962, :c6963, :c6964, :c6965, :c6966, :c6967, :c6968, :c6969, :c6970, :c6971, :c6972, :c6973, :c6974, :c6975, :c6976, :c6977, :c6978, :c6979, :c6980, :c6981, :c6982, :c6983, :c6984, :c6985, :c6986, :c6987, :c6988, :c6989, :c6990, :c6991, :c6992, :c6993, :c6994, :c6995, :c6996, :c6997, :c6998, :c6999, :c7000, :c7001, :c7002, :c7003, :c7004, :c7005, :c7006, :c7007, :c7008, :c7009, :c7010, :c7011, :c7012, :c7013, :c7014, :c7015, :c7016, :c7017, :c7018, :c7019, :c7020, :c7021, :c7022, :c7023, :c7024, :c7025, :c7026, :c7027, :c7028, :c7029, :c7030, :c7031, :c7032, :c7033, :c7034, :c7035, :c7036, :c7037, :c7038, :c7039, :c7040, :c7041, :c7042, :c7043, :c7044, :c7045, :c7046, :c7047, :c7048, :c7049, :c7050, :c7051, :c7052, :c7053, :c7054, :c7055, :c7056, :c7057, :c7058, :c7059, :c7060, :c7061, :c7062, :c7063, :c7064, :c7065, :c7066, :c7067, :c7068, :c7069, :c7070, :c7071, :c7072, :c7073, :c7074, :c7075, :c7076, :c7077, :c7078, :c7079, :c7080, :c7081, :c7082, :c7083, :c7084, :c7085, :c7086, :c7087, :c7088, :c7089, :c7090, :c7091, :c7092, :c7093, :c7094, :c7095, :c7096, :c7097, :c7098, :c7099, :c7100, :c7101, :c7102, :c7103, :c7104, :c7105, :c7106, :c7107, :c7108, :c7109, :c7110, :c7111, :c7112, :c7113, :c7114, :c7115, :c7116, :c7117, :c7118, :c7119, :c7120, :c7121, :c7122, :c7123, :c7124, :c7125, :c7126, :c7127, :c7128, :c7129, :c7130, :c7131, :c7132, :c7133, :c7134, :c7135, :c7136, :c7137, :c7138, :c7139, :c7140, :c7141, :c7142, :c7143, :c7144, :c7145, :c7146, :c7147, :c7148, :c7149, :c7150, :c7151, :c7152, :c7153, :c7154, :c7155, :c7156, :c7157, :c7158, :c7159, :c7160, :c7161, :c7162, :c7163, :c7164, :c7165, :c7166, :c7167, :c7168, :c7169, :c7170, :c7171, :c7172, :c7173, :c7174, :c7175, :c7176, :c7177, :c7178, :c7179, :c7180, :c7181, :c7182, :c7183, :c7184, :c7185, :c7186, :c7187, :c7188, :c7189, :c7190, :c7191, :c7192, :c7193, :c7194, :c7195, :c7196, :c7197, :c7198, :c7199, :c7200, :c7201, :c7202, :c7203, :c7204, :c7205, :c7206, :c7207, :c7208, :c7209, :c7210, :c7211, :c7212, :c7213, :c7214, :c7215, :c7216, :c7217, :c7218, :c7219, :c7220, :c7221, :c7222, :c7223, :c7224, :c7225, :c7226, :c7227, :c7228, :c7229, :c7230, :c7231, :c7232, :c7233, :c7234, :c7235, :c7236, :c7237, :c7238, :c7239, :c7240, :c7241, :c7242, :c7243, :c7244, :c7245, :c7246, :c7247, :c7248, :c7249, :c7250, :c7251, :c7252, :c7253, :c7254, :c7255, :c7256, :c7257, :c7258, :c7259, :c7260, :c7261, :c7262, :c7263, :c7264, :c7265, :c7266, :c7267, :c7268, :c7269, :c7270, :c7271, :c7272, :c7273, :c7274, :c7275, :c7276, :c7277, :c7278, :c7279, :c7280, :c7281, :c7282, :c7283, :c7284, :c7285, :c7286, :c7287, :c7288, :c7289, :c7290, :c7291, :c7292, :c7293, :c7294, :c7295, :c7296, :c7297, :c7298, :c7299, :c7300, :c7301, :c7302, :c7303, :c7304, :c7305, :c7306, :c7307, :c7308, :c7309, :c7310, :c7311, :c7312, :c7313, :c7314, :c7315, :c7316, :c7317, :c7318, :c7319, :c7320, :c7321, :c7322, :c7323, :c7324, :c7325, :c7326, :c7327, :c7328, :c7329, :c7330, :c7331, :c7332, :c7333, :c7334, :c7335, :c7336, :c7337, :c7338, :c7339, :c7340, :c7341, :c7342, :c7343, :c7344, :c7345, :c7346, :c7347, :c7348, :c7349, :c7350, :c7351, :c7352, :c7353, :c7354, :c7355, :c7356, :c7357, :c7358, :c7359, :c7360, :c7361, :c7362, :c7363, :c7364, :c7365, :c7366, :c7367, :c7368, :c7369, :c7370, :c7371, :c7372, :c7373, :c7374, :c7375, :c7376, :c7377, :c7378, :c7379, :c7380, :c7381, :c7382, :c7383, :c7384, :c7385, :c7386, :c7387, :c7388, :c7389, :c7390, :c7391, :c7392, :c7393, :c7394, :c7395, :c7396, :c7397, :c7398, :c7399, :c7400, :c7401, :c7402, :c7403, :c7404, :c7405, :c7406, :c7407, :c7408, :c7409, :c7410, :c7411, :c7412, :c7413, :c7414, :c7415, :c7416, :c7417, :c7418, :c7419, :c7420, :c7421, :c7422, :c7423, :c7424, :c7425, :c7426, :c7427, :c7428, :c7429, :c7430, :c7431, :c7432, :c7433, :c7434, :c7435, :c7436, :c7437, :c7438, :c7439, :c7440, :c7441, :c7442, :c7443, :c7444, :c7445, :c7446, :c7447, :c7448, :c7449, :c7450, :c7451, :c7452, :c7453, :c7454, :c7455, :c7456, :c7457, :c7458, :c7459, :c7460, :c7461, :c7462, :c7463, :c7464, :c7465, :c7466, :c7467, :c7468, :c7469, :c7470, :c7471, :c7472, :c7473, :c7474, :c7475, :c7476, :c7477, :c7478, :c7479, :c7480, :c7481, :c7482, :c7483, :c7484, :c7485, :c7486, :c7487, :c7488, :c7489, :c7490, :c7491, :c7492, :c7493, :c7494, :c7495, :c7496, :c7497, :c7498, :c7499, :c7500, :c7501, :c7502, :c7503, :c7504, :c7505, :c7506, :c7507, :c7508, :c7509, :c7510, :c7511, :c7512, :c7513, :c7514, :c7515, :c7516, :c7517, :c7518, :c7519, :c7520, :c7521, :c7522, :c7523, :c7524, :c7525, :c7526, :c7527, :c7528, :c7529, :c7530, :c7531, :c7532, :c7533, :c7534, :c7535, :c7536, :c7537, :c7538, :c7539, :c7540, :c7541, :c7542, :c7543, :c7544, :c7545, :c7546, :c7547, :c7548, :c7549, :c7550, :c7551, :c7552, :c7553, :c7554, :c7555, :c7556, :c7557, :c7558, :c7559, :c7560, :c7561, :c7562, :c7563, :c7564, :c7565, :c7566, :c7567, :c7568, :c7569, :c7570, :c7571, :c7572, :c7573, :c7574, :c7575, :c7576, :c7577, :c7578, :c7579, :c7580, :c7581, :c7582, :c7583, :c7584, :c7585, :c7586, :c7587, :c7588, :c7589, :c7590, :c7591, :c7592, :c7593, :c7594, :c7595, :c7596, :c7597, :c7598, :c7599, :c7600, :c7601, :c7602, :c7603, :c7604, :c7605, :c7606, :c7607, :c7608, :c7609, :c7610, :c7611, :c7612, :c7613, :c7614, :c7615, :c7616, :c7617, :c7618, :c7619, :c7620, :c7621, :c7622, :c7623, :c7624, :c7625, :c7626, :c7627, :c7628, :c7629, :c7630, :c7631, :c7632, :c7633, :c7634, :c7635, :c7636, :c7637, :c7638, :c7639, :c7640, :c7641, :c7642, :c7643, :c7644, :c7645, :c7646, :c7647, :c7648, :c7649, :c7650, :c7651, :c7652, :c7653, :c7654, :c7655, :c7656, :c7657, :c7658, :c7659, :c7660, :c7661, :c7662, :c7663, :c7664, :c7665, :c7666, :c7667, :c7668, :c7669, :c7670, :c7671, :c7672, :c7673, :c7674, :c7675, :c7676, :c7677, :c7678, :c7679, :c7680, :c7681, :c7682, :c7683, :c7684, :c7685, :c7686, :c7687, :c7688, :c7689, :c7690, :c7691, :c7692, :c7693, :c7694, :c7695, :c7696, :c7697, :c7698, :c7699, :c7700, :c7701, :c7702, :c7703, :c7704, :c7705, :c7706, :c7707, :c7708, :c7709, :c7710, :c7711, :c7712, :c7713, :c7714, :c7715, :c7716, :c7717, :c7718, :c7719, :c7720, :c7721, :c7722, :c7723, :c7724, :c7725, :c7726, :c7727, :c7728, :c7729, :c7730, :c7731, :c7732, :c7733, :c7734, :c7735, :c7736, :c7737, :c7738, :c7739, :c7740, :c7741, :c7742, :c7743, :c7744, :c7745, :c7746, :c7747, :c7748, :c7749, :c7750, :c7751, :c7752, :c7753, :c7754, :c7755, :c7756, :c7757, :c7758, :c7759, :c7760, :c7761, :c7762, :c7763, :c7764, :c7765, :c7766, :c7767, :c7768, :c7769, :c7770, :c7771, :c7772, :c7773, :c7774, :c7775, :c7776, :c7777, :c7778, :c7779, :c7780, :c7781, :c7782, :c7783, :c7784, :c7785, :c7786, :c7787, :c7788, :c7789, :c7790, :c7791, :c7792, :c7793, :c7794, :c7795, :c7796, :c7797, :c7798, :c7799, :c7800, :c7801, :c7802, :c7803, :c7804, :c7805, :c7806, :c7807, :c7808, :c7809, :c7810, :c7811, :c7812, :c7813, :c7814, :c7815, :c7816, :c7817, :c7818, :c7819, :c7820, :c7821, :c7822, :c7823, :c7824, :c7825, :c7826, :c7827, :c7828, :c7829, :c7830, :c7831, :c7832, :c7833, :c7834, :c7835, :c7836, :c7837, :c7838, :c7839, :c7840, :c7841, :c7842, :c7843, :c7844, :c7845, :c7846, :c7847, :c7848, :c7849, :c7850, :c7851, :c7852, :c7853, :c7854, :c7855, :c7856, :c7857, :c7858, :c7859, :c7860, :c7861, :c7862, :c7863, :c7864, :c7865, :c7866, :c7867, :c7868, :c7869, :c7870, :c7871, :c7872, :c7873, :c7874, :c7875, :c7876, :c7877, :c7878, :c7879, :c7880, :c7881, :c7882, :c7883, :c7884, :c7885, :c7886, :c7887, :c7888, :c7889, :c7890, :c7891, :c7892, :c7893, :c7894, :c7895, :c7896, :c7897, :c7898, :c7899, :c7900, :c7901, :c7902, :c7903, :c7904, :c7905, :c7906, :c7907, :c7908, :c7909, :c7910, :c7911, :c7912, :c7913, :c7914, :c7915, :c7916, :c7917, :c7918, :c7919, :c7920, :c7921, :c7922, :c7923, :c7924, :c7925, :c7926, :c7927, :c7928, :c7929, :c7930, :c7931, :c7932, :c7933, :c7934, :c7935, :c7936, :c7937, :c7938, :c7939, :c7940, :c7941, :c7942, :c7943, :c7944, :c7945, :c7946, :c7947, :c7948, :c7949, :c7950, :c7951, :c7952, :c7953, :c7954, :c7955, :c7956, :c7957, :c7958, :c7959, :c7960, :c7961, :c7962, :c7963, :c7964, :c7965, :c7966, :c7967, :c7968, :c7969, :c7970, :c7971, :c7972, :c7973, :c7974, :c7975, :c7976, :c7977, :c7978, :c7979, :c7980, :c7981, :c7982, :c7983, :c7984, :c7985, :c7986, :c7987, :c7988, :c7989, :c7990, :c7991, :c7992, :c7993, :c7994, :c7995, :c7996, :c7997, :c7998, :c7999, :c8000, :c8001, :c8002, :c8003, :c8004, :c8005, :c8006, :c8007, :c8008, :c8009, :c8010, :c8011, :c8012, :c8013, :c8014, :c8015, :c8016, :c8017, :c8018, :c8019, :c8020, :c8021, :c8022, :c8023, :c8024, :c8025, :c8026, :c8027, :c8028, :c8029, :c8030, :c8031, :c8032, :c8033, :c8034, :c8035, :c8036, :c8037, :c8038, :c8039, :c8040, :c8041, :c8042, :c8043, :c8044, :c8045, :c8046, :c8047, :c8048, :c8049, :c8050, :c8051, :c8052, :c8053, :c8054, :c8055, :c8056, :c8057, :c8058, :c8059, :c8060, :c8061, :c8062, :c8063, :c8064, :c8065, :c8066, :c8067, :c8068, :c8069, :c8070, :c8071, :c8072, :c8073, :c8074, :c8075, :c8076, :c8077, :c8078, :c8079, :c8080, :c8081, :c8082, :c8083, :c8084, :c8085, :c8086, :c8087, :c8088, :c8089, :c8090, :c8091, :c8092, :c8093, :c8094, :c8095, :c8096, :c8097, :c8098, :c8099, :c8100, :c8101, :c8102, :c8103, :c8104, :c8105, :c8106, :c8107, :c8108, :c8109, :c8110, :c8111, :c8112, :c8113, :c8114, :c8115, :c8116, :c8117, :c8118, :c8119, :c8120, :c8121, :c8122, :c8123, :c8124, :c8125, :c8126, :c8127, :c8128, :c8129, :c8130, :c8131, :c8132, :c8133, :c8134, :c8135, :c8136, :c8137, :c8138, :c8139, :c8140, :c8141, :c8142, :c8143, :c8144, :c8145, :c8146, :c8147, :c8148, :c8149, :c8150, :c8151, :c8152, :c8153, :c8154, :c8155, :c8156, :c8157, :c8158, :c8159, :c8160, :c8161, :c8162, :c8163, :c8164, :c8165, :c8166, :c8167, :c8168, :c8169, :c8170, :c8171, :c8172, :c8173, :c8174, :c8175, :c8176, :c8177, :c8178, :c8179, :c8180, :c8181, :c8182, :c8183, :c8184, :c8185, :c8186, :c8187, :c8188, :c8189, :c8190, :c8191, :c8192, :c8193, :c8194, :c8195, :c8196, :c8197, :c8198, :c8199, :c8200, :c8201, :c8202, :c8203, :c8204, :c8205, :c8206, :c8207, :c8208, :c8209, :c8210, :c8211, :c8212, :c8213, :c8214, :c8215, :c8216, :c8217, :c8218, :c8219, :c8220, :c8221, :c8222, :c8223, :c8224, :c8225, :c8226, :c8227, :c8228, :c8229, :c8230, :c8231, :c8232, :c8233, :c8234, :c8235, :c8236, :c8237, :c8238, :c8239, :c8240, :c8241, :c8242, :c8243, :c8244, :c8245, :c8246, :c8247, :c8248, :c8249, :c8250, :c8251, :c8252, :c8253, :c8254, :c8255, :c8256, :c8257, :c8258, :c8259, :c8260, :c8261, :c8262, :c8263, :c8264, :c8265, :c8266, :c8267, :c8268, :c8269, :c8270, :c8271, :c8272, :c8273, :c8274, :c8275, :c8276, :c8277, :c8278, :c8279, :c8280, :c8281, :c8282, :c8283, :c8284, :c8285, :c8286, :c8287, :c8288, :c8289, :c8290, :c8291, :c8292, :c8293, :c8294, :c8295, :c8296, :c8297, :c8298, :c8299, :c8300, :c8301, :c8302, :c8303, :c8304, :c8305, :c8306, :c8307, :c8308, :c8309, :c8310, :c8311, :c8312, :c8313, :c8314, :c8315, :c8316, :c8317, :c8318, :c8319, :c8320, :c8321, :c8322, :c8323, :c8324, :c8325, :c8326, :c8327, :c8328, :c8329, :c8330, :c8331, :c8332, :c8333, :c8334, :c8335, :c8336, :c8337, :c8338, :c8339, :c8340, :c8341, :c8342, :c8343, :c8344, :c8345, :c8346, :c8347, :c8348, :c8349, :c8350, :c8351, :c8352, :c8353, :c8354, :c8355, :c8356, :c8357, :c8358, :c8359, :c8360, :c8361, :c8362, :c8363, :c8364, :c8365, :c8366, :c8367, :c8368, :c8369, :c8370, :c8371, :c8372, :c8373, :c8374, :c8375, :c8376, :c8377, :c8378, :c8379, :c8380, :c8381, :c8382, :c8383, :c8384, :c8385, :c8386, :c8387, :c8388, :c8389, :c8390, :c8391, :c8392, :c8393, :c8394, :c8395, :c8396, :c8397, :c8398, :c8399, :c8400, :c8401, :c8402, :c8403, :c8404, :c8405, :c8406, :c8407, :c8408, :c8409, :c8410, :c8411, :c8412, :c8413, :c8414, :c8415, :c8416, :c8417, :c8418, :c8419, :c8420, :c8421, :c8422, :c8423, :c8424, :c8425, :c8426, :c8427, :c8428, :c8429, :c8430, :c8431, :c8432, :c8433, :c8434, :c8435, :c8436, :c8437, :c8438, :c8439, :c8440, :c8441, :c8442, :c8443, :c8444, :c8445, :c8446, :c8447, :c8448, :c8449, :c8450, :c8451, :c8452, :c8453, :c8454, :c8455, :c8456, :c8457, :c8458, :c8459, :c8460, :c8461, :c8462, :c8463, :c8464, :c8465, :c8466, :c8467, :c8468, :c8469, :c8470, :c8471, :c8472, :c8473, :c8474, :c8475, :c8476, :c8477, :c8478, :c8479, :c8480, :c8481, :c8482, :c8483, :c8484, :c8485, :c8486, :c8487, :c8488, :c8489, :c8490, :c8491, :c8492, :c8493, :c8494, :c8495, :c8496, :c8497, :c8498, :c8499, :c8500, :c8501, :c8502, :c8503, :c8504, :c8505, :c8506, :c8507, :c8508, :c8509, :c8510, :c8511, :c8512, :c8513, :c8514, :c8515, :c8516, :c8517, :c8518, :c8519, :c8520, :c8521, :c8522, :c8523, :c8524, :c8525, :c8526, :c8527, :c8528, :c8529, :c8530, :c8531, :c8532, :c8533, :c8534, :c8535, :c8536, :c8537, :c8538, :c8539, :c8540, :c8541, :c8542, :c8543, :c8544, :c8545, :c8546, :c8547, :c8548, :c8549, :c8550, :c8551, :c8552, :c8553, :c8554, :c8555, :c8556, :c8557, :c8558, :c8559, :c8560, :c8561, :c8562, :c8563, :c8564, :c8565, :c8566, :c8567, :c8568, :c8569, :c8570, :c8571, :c8572, :c8573, :c8574, :c8575, :c8576, :c8577, :c8578, :c8579, :c8580, :c8581, :c8582, :c8583, :c8584, :c8585, :c8586, :c8587, :c8588, :c8589, :c8590, :c8591, :c8592, :c8593, :c8594, :c8595, :c8596, :c8597, :c8598, :c8599, :c8600, :c8601, :c8602, :c8603, :c8604, :c8605, :c8606, :c8607, :c8608, :c8609, :c8610, :c8611, :c8612, :c8613, :c8614, :c8615, :c8616, :c8617, :c8618, :c8619, :c8620, :c8621, :c8622, :c8623, :c8624, :c8625, :c8626, :c8627, :c8628, :c8629, :c8630, :c8631, :c8632, :c8633, :c8634, :c8635, :c8636, :c8637, :c8638, :c8639, :c8640, :c8641, :c8642, :c8643, :c8644, :c8645, :c8646, :c8647, :c8648, :c8649, :c8650, :c8651, :c8652, :c8653, :c8654, :c8655, :c8656, :c8657, :c8658, :c8659, :c8660, :c8661, :c8662, :c8663, :c8664, :c8665, :c8666, :c8667, :c8668, :c8669, :c8670, :c8671, :c8672, :c8673, :c8674, :c8675, :c8676, :c8677, :c8678, :c8679, :c8680, :c8681, :c8682, :c8683, :c8684, :c8685, :c8686, :c8687, :c8688, :c8689, :c8690, :c8691, :c8692, :c8693, :c8694, :c8695, :c8696, :c8697, :c8698, :c8699, :c8700, :c8701, :c8702, :c8703, :c8704, :c8705, :c8706, :c8707, :c8708, :c8709, :c8710, :c8711, :c8712, :c8713, :c8714, :c8715, :c8716, :c8717, :c8718, :c8719, :c8720, :c8721, :c8722, :c8723, :c8724, :c8725, :c8726, :c8727, :c8728, :c8729, :c8730, :c8731, :c8732, :c8733, :c8734, :c8735, :c8736, :c8737, :c8738, :c8739, :c8740, :c8741, :c8742, :c8743, :c8744, :c8745, :c8746, :c8747, :c8748, :c8749, :c8750, :c8751, :c8752, :c8753, :c8754, :c8755, :c8756, :c8757, :c8758, :c8759, :c8760, :c8761, :c8762, :c8763, :c8764, :c8765, :c8766, :c8767, :c8768, :c8769, :c8770, :c8771, :c8772, :c8773, :c8774, :c8775, :c8776, :c8777, :c8778, :c8779, :c8780, :c8781, :c8782, :c8783, :c8784, :c8785, :c8786, :c8787, :c8788, :c8789, :c8790, :c8791, :c8792, :c8793, :c8794, :c8795, :c8796, :c8797, :c8798, :c8799, :c8800, :c8801, :c8802, :c8803, :c8804, :c8805, :c8806, :c8807, :c8808, :c8809, :c8810, :c8811, :c8812, :c8813, :c8814, :c8815, :c8816, :c8817, :c8818, :c8819, :c8820, :c8821, :c8822, :c8823, :c8824, :c8825, :c8826, :c8827, :c8828, :c8829, :c8830, :c8831, :c8832, :c8833, :c8834, :c8835, :c8836, :c8837, :c8838, :c8839, :c8840, :c8841, :c8842, :c8843, :c8844, :c8845, :c8846, :c8847, :c8848, :c8849, :c8850, :c8851, :c8852, :c8853, :c8854, :c8855, :c8856, :c8857, :c8858, :c8859, :c8860, :c8861, :c8862, :c8863, :c8864, :c8865, :c8866, :c8867, :c8868, :c8869, :c8870, :c8871, :c8872, :c8873, :c8874, :c8875, :c8876, :c8877, :c8878, :c8879, :c8880, :c8881, :c8882, :c8883, :c8884, :c8885, :c8886, :c8887, :c8888, :c8889, :c8890, :c8891, :c8892, :c8893, :c8894, :c8895, :c8896, :c8897, :c8898, :c8899, :c8900, :c8901, :c8902, :c8903, :c8904, :c8905, :c8906, :c8907, :c8908, :c8909, :c8910, :c8911, :c8912, :c8913, :c8914, :c8915, :c8916, :c8917, :c8918, :c8919, :c8920, :c8921, :c8922, :c8923, :c8924, :c8925, :c8926, :c8927, :c8928, :c8929, :c8930, :c8931, :c8932, :c8933, :c8934, :c8935, :c8936, :c8937, :c8938, :c8939, :c8940, :c8941, :c8942, :c8943, :c8944, :c8945, :c8946, :c8947, :c8948, :c8949, :c8950, :c8951, :c8952, :c8953, :c8954, :c8955, :c8956, :c8957, :c8958, :c8959, :c8960, :c8961, :c8962, :c8963, :c8964, :c8965, :c8966, :c8967, :c8968, :c8969, :c8970, :c8971, :c8972, :c8973, :c8974, :c8975, :c8976, :c8977, :c8978, :c8979, :c8980, :c8981, :c8982, :c8983, :c8984, :c8985, :c8986, :c8987, :c8988, :c8989, :c8990, :c8991, :c8992, :c8993, :c8994, :c8995, :c8996, :c8997, :c8998, :c8999, :c9000, :c9001, :c9002, :c9003, :c9004, :c9005, :c9006, :c9007, :c9008, :c9009, :c9010, :c9011, :c9012, :c9013, :c9014, :c9015, :c9016, :c9017, :c9018, :c9019, :c9020, :c9021, :c9022, :c9023, :c9024, :c9025, :c9026, :c9027, :c9028, :c9029, :c9030, :c9031, :c9032, :c9033, :c9034, :c9035, :c9036, :c9037, :c9038, :c9039, :c9040, :c9041, :c9042, :c9043, :c9044, :c9045, :c9046, :c9047, :c9048, :c9049, :c9050, :c9051, :c9052, :c9053, :c9054, :c9055, :c9056, :c9057, :c9058, :c9059, :c9060, :c9061, :c9062, :c9063, :c9064, :c9065, :c9066, :c9067, :c9068, :c9069, :c9070, :c9071, :c9072, :c9073, :c9074, :c9075, :c9076, :c9077, :c9078, :c9079, :c9080, :c9081, :c9082, :c9083, :c9084, :c9085, :c9086, :c9087, :c9088, :c9089, :c9090, :c9091, :c9092, :c9093, :c9094, :c9095, :c9096, :c9097, :c9098, :c9099, :c9100, :c9101, :c9102, :c9103, :c9104, :c9105, :c9106, :c9107, :c9108, :c9109, :c9110, :c9111, :c9112, :c9113, :c9114, :c9115, :c9116, :c9117, :c9118, :c9119, :c9120, :c9121, :c9122, :c9123, :c9124, :c9125, :c9126, :c9127, :c9128, :c9129, :c9130, :c9131, :c9132, :c9133, :c9134, :c9135, :c9136, :c9137, :c9138, :c9139, :c9140, :c9141, :c9142, :c9143, :c9144, :c9145, :c9146, :c9147, :c9148, :c9149, :c9150, :c9151, :c9152, :c9153, :c9154, :c9155, :c9156, :c9157, :c9158, :c9159, :c9160, :c9161, :c9162, :c9163, :c9164, :c9165, :c9166, :c9167, :c9168, :c9169, :c9170, :c9171, :c9172, :c9173, :c9174, :c9175, :c9176, :c9177, :c9178, :c9179, :c9180, :c9181, :c9182, :c9183, :c9184, :c9185, :c9186, :c9187, :c9188, :c9189, :c9190, :c9191, :c9192, :c9193, :c9194, :c9195, :c9196, :c9197, :c9198, :c9199, :c9200, :c9201, :c9202, :c9203, :c9204, :c9205, :c9206, :c9207, :c9208, :c9209, :c9210, :c9211, :c9212, :c9213, :c9214, :c9215, :c9216, :c9217, :c9218, :c9219, :c9220, :c9221, :c9222, :c9223, :c9224, :c9225, :c9226, :c9227, :c9228, :c9229, :c9230, :c9231, :c9232, :c9233, :c9234, :c9235, :c9236, :c9237, :c9238, :c9239, :c9240, :c9241, :c9242, :c9243, :c9244, :c9245, :c9246, :c9247, :c9248, :c9249, :c9250, :c9251, :c9252, :c9253, :c9254, :c9255, :c9256, :c9257, :c9258, :c9259, :c9260, :c9261, :c9262, :c9263, :c9264, :c9265, :c9266, :c9267, :c9268, :c9269, :c9270, :c9271, :c9272, :c9273, :c9274, :c9275, :c9276, :c9277, :c9278, :c9279, :c9280, :c9281, :c9282, :c9283, :c9284, :c9285, :c9286, :c9287, :c9288, :c9289, :c9290, :c9291, :c9292, :c9293, :c9294, :c9295, :c9296, :c9297, :c9298, :c9299, :c9300, :c9301, :c9302, :c9303, :c9304, :c9305, :c9306, :c9307, :c9308, :c9309, :c9310, :c9311, :c9312, :c9313, :c9314, :c9315, :c9316, :c9317, :c9318, :c9319, :c9320, :c9321, :c9322, :c9323, :c9324, :c9325, :c9326, :c9327, :c9328, :c9329, :c9330, :c9331, :c9332, :c9333, :c9334, :c9335, :c9336, :c9337, :c9338, :c9339, :c9340, :c9341, :c9342, :c9343, :c9344, :c9345, :c9346, :c9347, :c9348, :c9349, :c9350, :c9351, :c9352, :c9353, :c9354, :c9355, :c9356, :c9357, :c9358, :c9359, :c9360, :c9361, :c9362, :c9363, :c9364, :c9365, :c9366, :c9367, :c9368, :c9369, :c9370, :c9371, :c9372, :c9373, :c9374, :c9375, :c9376, :c9377, :c9378, :c9379, :c9380, :c9381, :c9382, :c9383, :c9384, :c9385, :c9386, :c9387, :c9388, :c9389, :c9390, :c9391, :c9392, :c9393, :c9394, :c9395, :c9396, :c9397, :c9398, :c9399, :c9400, :c9401, :c9402, :c9403, :c9404, :c9405, :c9406, :c9407, :c9408, :c9409, :c9410, :c9411, :c9412, :c9413, :c9414, :c9415, :c9416, :c9417, :c9418, :c9419, :c9420, :c9421, :c9422, :c9423, :c9424, :c9425, :c9426, :c9427, :c9428, :c9429, :c9430, :c9431, :c9432, :c9433, :c9434, :c9435, :c9436, :c9437, :c9438, :c9439, :c9440, :c9441, :c9442, :c9443, :c9444, :c9445, :c9446, :c9447, :c9448, :c9449, :c9450, :c9451, :c9452, :c9453, :c9454, :c9455, :c9456, :c9457, :c9458, :c9459, :c9460, :c9461, :c9462, :c9463, :c9464, :c9465, :c9466, :c9467, :c9468, :c9469, :c9470, :c9471, :c9472, :c9473, :c9474, :c9475, :c9476, :c9477, :c9478, :c9479, :c9480, :c9481, :c9482, :c9483, :c9484, :c9485, :c9486, :c9487, :c9488, :c9489, :c9490, :c9491, :c9492, :c9493, :c9494, :c9495, :c9496, :c9497, :c9498, :c9499, :c9500, :c9501, :c9502, :c9503, :c9504, :c9505, :c9506, :c9507, :c9508, :c9509, :c9510, :c9511, :c9512, :c9513, :c9514, :c9515, :c9516, :c9517, :c9518, :c9519, :c9520, :c9521, :c9522, :c9523, :c9524, :c9525, :c9526, :c9527, :c9528, :c9529, :c9530, :c9531, :c9532, :c9533, :c9534, :c9535, :c9536, :c9537, :c9538, :c9539, :c9540, :c9541, :c9542, :c9543, :c9544, :c9545, :c9546, :c9547, :c9548, :c9549, :c9550, :c9551, :c9552, :c9553, :c9554, :c9555, :c9556, :c9557, :c9558, :c9559, :c9560, :c9561, :c9562, :c9563, :c9564, :c9565, :c9566, :c9567, :c9568, :c9569, :c9570, :c9571, :c9572, :c9573, :c9574, :c9575, :c9576, :c9577, :c9578, :c9579, :c9580, :c9581, :c9582, :c9583, :c9584, :c9585, :c9586, :c9587, :c9588, :c9589, :c9590, :c9591, :c9592, :c9593, :c9594, :c9595, :c9596, :c9597, :c9598, :c9599, :c9600, :c9601, :c9602, :c9603, :c9604, :c9605, :c9606, :c9607, :c9608, :c9609, :c9610, :c9611, :c9612, :c9613, :c9614, :c9615, :c9616, :c9617, :c9618, :c9619, :c9620, :c9621, :c9622, :c9623, :c9624, :c9625, :c9626, :c9627, :c9628, :c9629, :c9630, :c9631, :c9632, :c9633, :c9634, :c9635, :c9636, :c9637, :c9638, :c9639, :c9640, :c9641, :c9642, :c9643, :c9644, :c9645, :c9646, :c9647, :c9648, :c9649, :c9650, :c9651, :c9652, :c9653, :c9654, :c9655, :c9656, :c9657, :c9658, :c9659, :c9660, :c9661, :c9662, :c9663, :c9664, :c9665, :c9666, :c9667, :c9668, :c9669, :c9670, :c9671, :c9672, :c9673, :c9674, :c9675, :c9676, :c9677, :c9678, :c9679, :c9680, :c9681, :c9682, :c9683, :c9684, :c9685, :c9686, :c9687, :c9688, :c9689, :c9690, :c9691, :c9692, :c9693, :c9694, :c9695, :c9696, :c9697, :c9698, :c9699, :c9700, :c9701, :c9702, :c9703, :c9704, :c9705, :c9706, :c9707, :c9708, :c9709, :c9710, :c9711, :c9712, :c9713, :c9714, :c9715, :c9716, :c9717, :c9718, :c9719, :c9720, :c9721, :c9722, :c9723, :c9724, :c9725, :c9726, :c9727, :c9728, :c9729, :c9730, :c9731, :c9732, :c9733, :c9734, :c9735, :c9736, :c9737, :c9738, :c9739, :c9740, :c9741, :c9742, :c9743, :c9744, :c9745, :c9746, :c9747, :c9748, :c9749, :c9750, :c9751, :c9752, :c9753, :c9754, :c9755, :c9756, :c9757, :c9758, :c9759, :c9760, :c9761, :c9762, :c9763, :c9764, :c9765, :c9766, :c9767, :c9768, :c9769, :c9770, :c9771, :c9772, :c9773, :c9774, :c9775, :c9776, :c9777, :c9778, :c9779, :c9780, :c9781, :c9782, :c9783, :c9784, :c9785, :c9786, :c9787, :c9788, :c9789, :c9790, :c9791, :c9792, :c9793, :c9794, :c9795, :c9796, :c9797, :c9798, :c9799, :c9800, :c9801, :c9802, :c9803, :c9804, :c9805, :c9806, :c9807, :c9808, :c9809, :c9810, :c9811, :c9812, :c9813, :c9814, :c9815, :c9816, :c9817, :c9818, :c9819, :c9820, :c9821, :c9822, :c9823, :c9824, :c9825, :c9826, :c9827, :c9828, :c9829, :c9830, :c9831, :c9832, :c9833, :c9834, :c9835, :c9836, :c9837, :c9838, :c9839, :c9840, :c9841, :c9842, :c9843, :c9844, :c9845, :c9846, :c9847, :c9848, :c9849, :c9850, :c9851, :c9852, :c9853, :c9854, :c9855, :c9856, :c9857, :c9858, :c9859, :c9860, :c9861, :c9862, :c9863, :c9864, :c9865, :c9866, :c9867, :c9868, :c9869, :c9870, :c9871, :c9872, :c9873, :c9874, :c9875, :c9876, :c9877, :c9878, :c9879, :c9880, :c9881, :c9882, :c9883, :c9884, :c9885, :c9886, :c9887, :c9888, :c9889, :c9890, :c9891, :c9892, :c9893, :c9894, :c9895, :c9896, :c9897, :c9898, :c9899, :c9900, :c9901, :c9902, :c9903, :c9904, :c9905, :c9906, :c9907, :c9908, :c9909, :c9910, :c9911, :c9912, :c9913, :c9914, :c9915, :c9916, :c9917, :c9918, :c9919, :c9920, :c9921, :c9922, :c9923, :c9924, :c9925, :c9926, :c9927, :c9928, :c9929, :c9930, :c9931, :c9932, :c9933, :c9934, :c9935, :c9936, :c9937, :c9938, :c9939, :c9940, :c9941, :c9942, :c9943, :c9944, :c9945, :c9946, :c9947, :c9948, :c9949, :c9950, :c9951, :c9952, :c9953, :c9954, :c9955, :c9956, :c9957, :c9958, :c9959, :c9960, :c9961, :c9962, :c9963, :c9964, :c9965, :c9966, :c9967, :c9968, :c9969, :c9970, :c9971, :c9972, :c9973, :c9974, :c9975, :c9976, :c9977, :c9978, :c9979, :c9980, :c9981, :c9982, :c9983, :c9984, :c9985, :c9986, :c9987, :c9988, :c9989, :c9990, :c9991, :c9992, :c9993, :c9994, :c9995, :c9996, :c9997, :c9998, :c9999, :c10000 . rio-0.8.5/testsuite/serd-tests/good/test-16.nt000066400000000000000000031463561466265456300212040ustar00rootroot00000000000000 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . rio-0.8.5/testsuite/serd-tests/good/test-16.ttl000066400000000000000000004173711466265456300213610ustar00rootroot00000000000000# 10000 items (10000 triples) more than the default Bison stack size @prefix : . :a :b :c1; :b :c2; :b :c3; :b :c4; :b :c5; :b :c6; :b :c7; :b :c8; :b :c9; :b :c10; :b :c11; :b :c12; :b :c13; :b :c14; :b :c15; :b :c16; :b :c17; :b :c18; :b :c19; :b :c20; :b :c21; :b :c22; :b :c23; :b :c24; :b :c25; :b :c26; :b :c27; :b :c28; :b :c29; :b :c30; :b :c31; :b :c32; :b :c33; :b :c34; :b :c35; :b :c36; :b :c37; :b :c38; :b :c39; :b :c40; :b :c41; :b :c42; :b :c43; :b :c44; :b :c45; :b :c46; :b :c47; :b :c48; :b :c49; :b :c50; :b :c51; :b :c52; :b :c53; :b :c54; :b :c55; :b :c56; :b :c57; :b :c58; :b :c59; :b :c60; :b :c61; :b :c62; :b :c63; :b :c64; :b :c65; :b :c66; :b :c67; :b :c68; :b :c69; :b :c70; :b :c71; :b :c72; :b :c73; :b :c74; :b :c75; :b :c76; :b :c77; :b :c78; :b :c79; :b :c80; :b :c81; :b :c82; :b :c83; :b :c84; :b :c85; :b :c86; :b :c87; :b :c88; :b :c89; :b :c90; :b :c91; :b :c92; :b :c93; :b :c94; :b :c95; :b :c96; :b :c97; :b :c98; :b :c99; :b :c100; :b :c101; :b :c102; :b :c103; :b :c104; :b :c105; :b :c106; :b :c107; :b :c108; :b :c109; :b :c110; :b :c111; :b :c112; :b :c113; :b :c114; :b :c115; :b :c116; :b :c117; :b :c118; :b :c119; :b :c120; :b :c121; :b :c122; :b :c123; :b :c124; :b :c125; :b :c126; :b :c127; :b :c128; :b :c129; :b :c130; :b :c131; :b :c132; :b :c133; :b :c134; :b :c135; :b :c136; :b :c137; :b :c138; :b :c139; :b :c140; :b :c141; :b :c142; :b :c143; :b :c144; :b :c145; :b :c146; :b :c147; :b :c148; :b :c149; :b :c150; :b :c151; :b :c152; :b :c153; :b :c154; :b :c155; :b :c156; :b :c157; :b :c158; :b :c159; :b :c160; :b :c161; :b :c162; :b :c163; :b :c164; :b :c165; :b :c166; :b :c167; :b :c168; :b :c169; :b :c170; :b :c171; :b :c172; :b :c173; :b :c174; :b :c175; :b :c176; :b :c177; :b :c178; :b :c179; :b :c180; :b :c181; :b :c182; :b :c183; :b :c184; :b :c185; :b :c186; :b :c187; :b :c188; :b :c189; :b :c190; :b :c191; :b :c192; :b :c193; :b :c194; :b :c195; :b :c196; :b :c197; :b :c198; :b :c199; :b :c200; :b :c201; :b :c202; :b :c203; :b :c204; :b :c205; :b :c206; :b :c207; :b :c208; :b :c209; :b :c210; :b :c211; :b :c212; :b :c213; :b :c214; :b :c215; :b :c216; :b :c217; :b :c218; :b :c219; :b :c220; :b :c221; :b :c222; :b :c223; :b :c224; :b :c225; :b :c226; :b :c227; :b :c228; :b :c229; :b :c230; :b :c231; :b :c232; :b :c233; :b :c234; :b :c235; :b :c236; :b :c237; :b :c238; :b :c239; :b :c240; :b :c241; :b :c242; :b :c243; :b :c244; :b :c245; :b :c246; :b :c247; :b :c248; :b :c249; :b :c250; :b :c251; :b :c252; :b :c253; :b :c254; :b :c255; :b :c256; :b :c257; :b :c258; :b :c259; :b :c260; :b :c261; :b :c262; :b :c263; :b :c264; :b :c265; :b :c266; :b :c267; :b :c268; :b :c269; :b :c270; :b :c271; :b :c272; :b :c273; :b :c274; :b :c275; :b :c276; :b :c277; :b :c278; :b :c279; :b :c280; :b :c281; :b :c282; :b :c283; :b :c284; :b :c285; :b :c286; :b :c287; :b :c288; :b :c289; :b :c290; :b :c291; :b :c292; :b :c293; :b :c294; :b :c295; :b :c296; :b :c297; :b :c298; :b :c299; :b :c300; :b :c301; :b :c302; :b :c303; :b :c304; :b :c305; :b :c306; :b :c307; :b :c308; :b :c309; :b :c310; :b :c311; :b :c312; :b :c313; :b :c314; :b :c315; :b :c316; :b :c317; :b :c318; :b :c319; :b :c320; :b :c321; :b :c322; :b :c323; :b :c324; :b :c325; :b :c326; :b :c327; :b :c328; :b :c329; :b :c330; :b :c331; :b :c332; :b :c333; :b :c334; :b :c335; :b :c336; :b :c337; :b :c338; :b :c339; :b :c340; :b :c341; :b :c342; :b :c343; :b :c344; :b :c345; :b :c346; :b :c347; :b :c348; :b :c349; :b :c350; :b :c351; :b :c352; :b :c353; :b :c354; :b :c355; :b :c356; :b :c357; :b :c358; :b :c359; :b :c360; :b :c361; :b :c362; :b :c363; :b :c364; :b :c365; :b :c366; :b :c367; :b :c368; :b :c369; :b :c370; :b :c371; :b :c372; :b :c373; :b :c374; :b :c375; :b :c376; :b :c377; :b :c378; :b :c379; :b :c380; :b :c381; :b :c382; :b :c383; :b :c384; :b :c385; :b :c386; :b :c387; :b :c388; :b :c389; :b :c390; :b :c391; :b :c392; :b :c393; :b :c394; :b :c395; :b :c396; :b :c397; :b :c398; :b :c399; :b :c400; :b :c401; :b :c402; :b :c403; :b :c404; :b :c405; :b :c406; :b :c407; :b :c408; :b :c409; :b :c410; :b :c411; :b :c412; :b :c413; :b :c414; :b :c415; :b :c416; :b :c417; :b :c418; :b :c419; :b :c420; :b :c421; :b :c422; :b :c423; :b :c424; :b :c425; :b :c426; :b :c427; :b :c428; :b :c429; :b :c430; :b :c431; :b :c432; :b :c433; :b :c434; :b :c435; :b :c436; :b :c437; :b :c438; :b :c439; :b :c440; :b :c441; :b :c442; :b :c443; :b :c444; :b :c445; :b :c446; :b :c447; :b :c448; :b :c449; :b :c450; :b :c451; :b :c452; :b :c453; :b :c454; :b :c455; :b :c456; :b :c457; :b :c458; :b :c459; :b :c460; :b :c461; :b :c462; :b :c463; :b :c464; :b :c465; :b :c466; :b :c467; :b :c468; :b :c469; :b :c470; :b :c471; :b :c472; :b :c473; :b :c474; :b :c475; :b :c476; :b :c477; :b :c478; :b :c479; :b :c480; :b :c481; :b :c482; :b :c483; :b :c484; :b :c485; :b :c486; :b :c487; :b :c488; :b :c489; :b :c490; :b :c491; :b :c492; :b :c493; :b :c494; :b :c495; :b :c496; :b :c497; :b :c498; :b :c499; :b :c500; :b :c501; :b :c502; :b :c503; :b :c504; :b :c505; :b :c506; :b :c507; :b :c508; :b :c509; :b :c510; :b :c511; :b :c512; :b :c513; :b :c514; :b :c515; :b :c516; :b :c517; :b :c518; :b :c519; :b :c520; :b :c521; :b :c522; :b :c523; :b :c524; :b :c525; :b :c526; :b :c527; :b :c528; :b :c529; :b :c530; :b :c531; :b :c532; :b :c533; :b :c534; :b :c535; :b :c536; :b :c537; :b :c538; :b :c539; :b :c540; :b :c541; :b :c542; :b :c543; :b :c544; :b :c545; :b :c546; :b :c547; :b :c548; :b :c549; :b :c550; :b :c551; :b :c552; :b :c553; :b :c554; :b :c555; :b :c556; :b :c557; :b :c558; :b :c559; :b :c560; :b :c561; :b :c562; :b :c563; :b :c564; :b :c565; :b :c566; :b :c567; :b :c568; :b :c569; :b :c570; :b :c571; :b :c572; :b :c573; :b :c574; :b :c575; :b :c576; :b :c577; :b :c578; :b :c579; :b :c580; :b :c581; :b :c582; :b :c583; :b :c584; :b :c585; :b :c586; :b :c587; :b :c588; :b :c589; :b :c590; :b :c591; :b :c592; :b :c593; :b :c594; :b :c595; :b :c596; :b :c597; :b :c598; :b :c599; :b :c600; :b :c601; :b :c602; :b :c603; :b :c604; :b :c605; :b :c606; :b :c607; :b :c608; :b :c609; :b :c610; :b :c611; :b :c612; :b :c613; :b :c614; :b :c615; :b :c616; :b :c617; :b :c618; :b :c619; :b :c620; :b :c621; :b :c622; :b :c623; :b :c624; :b :c625; :b :c626; :b :c627; :b :c628; :b :c629; :b :c630; :b :c631; :b :c632; :b :c633; :b :c634; :b :c635; :b :c636; :b :c637; :b :c638; :b :c639; :b :c640; :b :c641; :b :c642; :b :c643; :b :c644; :b :c645; :b :c646; :b :c647; :b :c648; :b :c649; :b :c650; :b :c651; :b :c652; :b :c653; :b :c654; :b :c655; :b :c656; :b :c657; :b :c658; :b :c659; :b :c660; :b :c661; :b :c662; :b :c663; :b :c664; :b :c665; :b :c666; :b :c667; :b :c668; :b :c669; :b :c670; :b :c671; :b :c672; :b :c673; :b :c674; :b :c675; :b :c676; :b :c677; :b :c678; :b :c679; :b :c680; :b :c681; :b :c682; :b :c683; :b :c684; :b :c685; :b :c686; :b :c687; :b :c688; :b :c689; :b :c690; :b :c691; :b :c692; :b :c693; :b :c694; :b :c695; :b :c696; :b :c697; :b :c698; :b :c699; :b :c700; :b :c701; :b :c702; :b :c703; :b :c704; :b :c705; :b :c706; :b :c707; :b :c708; :b :c709; :b :c710; :b :c711; :b :c712; :b :c713; :b :c714; :b :c715; :b :c716; :b :c717; :b :c718; :b :c719; :b :c720; :b :c721; :b :c722; :b :c723; :b :c724; :b :c725; :b :c726; :b :c727; :b :c728; :b :c729; :b :c730; :b :c731; :b :c732; :b :c733; :b :c734; :b :c735; :b :c736; :b :c737; :b :c738; :b :c739; :b :c740; :b :c741; :b :c742; :b :c743; :b :c744; :b :c745; :b :c746; :b :c747; :b :c748; :b :c749; :b :c750; :b :c751; :b :c752; :b :c753; :b :c754; :b :c755; :b :c756; :b :c757; :b :c758; :b :c759; :b :c760; :b :c761; :b :c762; :b :c763; :b :c764; :b :c765; :b :c766; :b :c767; :b :c768; :b :c769; :b :c770; :b :c771; :b :c772; :b :c773; :b :c774; :b :c775; :b :c776; :b :c777; :b :c778; :b :c779; :b :c780; :b :c781; :b :c782; :b :c783; :b :c784; :b :c785; :b :c786; :b :c787; :b :c788; :b :c789; :b :c790; :b :c791; :b :c792; :b :c793; :b :c794; :b :c795; :b :c796; :b :c797; :b :c798; :b :c799; :b :c800; :b :c801; :b :c802; :b :c803; :b :c804; :b :c805; :b :c806; :b :c807; :b :c808; :b :c809; :b :c810; :b :c811; :b :c812; :b :c813; :b :c814; :b :c815; :b :c816; :b :c817; :b :c818; :b :c819; :b :c820; :b :c821; :b :c822; :b :c823; :b :c824; :b :c825; :b :c826; :b :c827; :b :c828; :b :c829; :b :c830; :b :c831; :b :c832; :b :c833; :b :c834; :b :c835; :b :c836; :b :c837; :b :c838; :b :c839; :b :c840; :b :c841; :b :c842; :b :c843; :b :c844; :b :c845; :b :c846; :b :c847; :b :c848; :b :c849; :b :c850; :b :c851; :b :c852; :b :c853; :b :c854; :b :c855; :b :c856; :b :c857; :b :c858; :b :c859; :b :c860; :b :c861; :b :c862; :b :c863; :b :c864; :b :c865; :b :c866; :b :c867; :b :c868; :b :c869; :b :c870; :b :c871; :b :c872; :b :c873; :b :c874; :b :c875; :b :c876; :b :c877; :b :c878; :b :c879; :b :c880; :b :c881; :b :c882; :b :c883; :b :c884; :b :c885; :b :c886; :b :c887; :b :c888; :b :c889; :b :c890; :b :c891; :b :c892; :b :c893; :b :c894; :b :c895; :b :c896; :b :c897; :b :c898; :b :c899; :b :c900; :b :c901; :b :c902; :b :c903; :b :c904; :b :c905; :b :c906; :b :c907; :b :c908; :b :c909; :b :c910; :b :c911; :b :c912; :b :c913; :b :c914; :b :c915; :b :c916; :b :c917; :b :c918; :b :c919; :b :c920; :b :c921; :b :c922; :b :c923; :b :c924; :b :c925; :b :c926; :b :c927; :b :c928; :b :c929; :b :c930; :b :c931; :b :c932; :b :c933; :b :c934; :b :c935; :b :c936; :b :c937; :b :c938; :b :c939; :b :c940; :b :c941; :b :c942; :b :c943; :b :c944; :b :c945; :b :c946; :b :c947; :b :c948; :b :c949; :b :c950; :b :c951; :b :c952; :b :c953; :b :c954; :b :c955; :b :c956; :b :c957; :b :c958; :b :c959; :b :c960; :b :c961; :b :c962; :b :c963; :b :c964; :b :c965; :b :c966; :b :c967; :b :c968; :b :c969; :b :c970; :b :c971; :b :c972; :b :c973; :b :c974; :b :c975; :b :c976; :b :c977; :b :c978; :b :c979; :b :c980; :b :c981; :b :c982; :b :c983; :b :c984; :b :c985; :b :c986; :b :c987; :b :c988; :b :c989; :b :c990; :b :c991; :b :c992; :b :c993; :b :c994; :b :c995; :b :c996; :b :c997; :b :c998; :b :c999; :b :c1000; :b :c1001; :b :c1002; :b :c1003; :b :c1004; :b :c1005; :b :c1006; :b :c1007; :b :c1008; :b :c1009; :b :c1010; :b :c1011; :b :c1012; :b :c1013; :b :c1014; :b :c1015; :b :c1016; :b :c1017; :b :c1018; :b :c1019; :b :c1020; :b :c1021; :b :c1022; :b :c1023; :b :c1024; :b :c1025; :b :c1026; :b :c1027; :b :c1028; :b :c1029; :b :c1030; :b :c1031; :b :c1032; :b :c1033; :b :c1034; :b :c1035; :b :c1036; :b :c1037; :b :c1038; :b :c1039; :b :c1040; :b :c1041; :b :c1042; :b :c1043; :b :c1044; :b :c1045; :b :c1046; :b :c1047; :b :c1048; :b :c1049; :b :c1050; :b :c1051; :b :c1052; :b :c1053; :b :c1054; :b :c1055; :b :c1056; :b :c1057; :b :c1058; :b :c1059; :b :c1060; :b :c1061; :b :c1062; :b :c1063; :b :c1064; :b :c1065; :b :c1066; :b :c1067; :b :c1068; :b :c1069; :b :c1070; :b :c1071; :b :c1072; :b :c1073; :b :c1074; :b :c1075; :b :c1076; :b :c1077; :b :c1078; :b :c1079; :b :c1080; :b :c1081; :b :c1082; :b :c1083; :b :c1084; :b :c1085; :b :c1086; :b :c1087; :b :c1088; :b :c1089; :b :c1090; :b :c1091; :b :c1092; :b :c1093; :b :c1094; :b :c1095; :b :c1096; :b :c1097; :b :c1098; :b :c1099; :b :c1100; :b :c1101; :b :c1102; :b :c1103; :b :c1104; :b :c1105; :b :c1106; :b :c1107; :b :c1108; :b :c1109; :b :c1110; :b :c1111; :b :c1112; :b :c1113; :b :c1114; :b :c1115; :b :c1116; :b :c1117; :b :c1118; :b :c1119; :b :c1120; :b :c1121; :b :c1122; :b :c1123; :b :c1124; :b :c1125; :b :c1126; :b :c1127; :b :c1128; :b :c1129; :b :c1130; :b :c1131; :b :c1132; :b :c1133; :b :c1134; :b :c1135; :b :c1136; :b :c1137; :b :c1138; :b :c1139; :b :c1140; :b :c1141; :b :c1142; :b :c1143; :b :c1144; :b :c1145; :b :c1146; :b :c1147; :b :c1148; :b :c1149; :b :c1150; :b :c1151; :b :c1152; :b :c1153; :b :c1154; :b :c1155; :b :c1156; :b :c1157; :b :c1158; :b :c1159; :b :c1160; :b :c1161; :b :c1162; :b :c1163; :b :c1164; :b :c1165; :b :c1166; :b :c1167; :b :c1168; :b :c1169; :b :c1170; :b :c1171; :b :c1172; :b :c1173; :b :c1174; :b :c1175; :b :c1176; :b :c1177; :b :c1178; :b :c1179; :b :c1180; :b :c1181; :b :c1182; :b :c1183; :b :c1184; :b :c1185; :b :c1186; :b :c1187; :b :c1188; :b :c1189; :b :c1190; :b :c1191; :b :c1192; :b :c1193; :b :c1194; :b :c1195; :b :c1196; :b :c1197; :b :c1198; :b :c1199; :b :c1200; :b :c1201; :b :c1202; :b :c1203; :b :c1204; :b :c1205; :b :c1206; :b :c1207; :b :c1208; :b :c1209; :b :c1210; :b :c1211; :b :c1212; :b :c1213; :b :c1214; :b :c1215; :b :c1216; :b :c1217; :b :c1218; :b :c1219; :b :c1220; :b :c1221; :b :c1222; :b :c1223; :b :c1224; :b :c1225; :b :c1226; :b :c1227; :b :c1228; :b :c1229; :b :c1230; :b :c1231; :b :c1232; :b :c1233; :b :c1234; :b :c1235; :b :c1236; :b :c1237; :b :c1238; :b :c1239; :b :c1240; :b :c1241; :b :c1242; :b :c1243; :b :c1244; :b :c1245; :b :c1246; :b :c1247; :b :c1248; :b :c1249; :b :c1250; :b :c1251; :b :c1252; :b :c1253; :b :c1254; :b :c1255; :b :c1256; :b :c1257; :b :c1258; :b :c1259; :b :c1260; :b :c1261; :b :c1262; :b :c1263; :b :c1264; :b :c1265; :b :c1266; :b :c1267; :b :c1268; :b :c1269; :b :c1270; :b :c1271; :b :c1272; :b :c1273; :b :c1274; :b :c1275; :b :c1276; :b :c1277; :b :c1278; :b :c1279; :b :c1280; :b :c1281; :b :c1282; :b :c1283; :b :c1284; :b :c1285; :b :c1286; :b :c1287; :b :c1288; :b :c1289; :b :c1290; :b :c1291; :b :c1292; :b :c1293; :b :c1294; :b :c1295; :b :c1296; :b :c1297; :b :c1298; :b :c1299; :b :c1300; :b :c1301; :b :c1302; :b :c1303; :b :c1304; :b :c1305; :b :c1306; :b :c1307; :b :c1308; :b :c1309; :b :c1310; :b :c1311; :b :c1312; :b :c1313; :b :c1314; :b :c1315; :b :c1316; :b :c1317; :b :c1318; :b :c1319; :b :c1320; :b :c1321; :b :c1322; :b :c1323; :b :c1324; :b :c1325; :b :c1326; :b :c1327; :b :c1328; :b :c1329; :b :c1330; :b :c1331; :b :c1332; :b :c1333; :b :c1334; :b :c1335; :b :c1336; :b :c1337; :b :c1338; :b :c1339; :b :c1340; :b :c1341; :b :c1342; :b :c1343; :b :c1344; :b :c1345; :b :c1346; :b :c1347; :b :c1348; :b :c1349; :b :c1350; :b :c1351; :b :c1352; :b :c1353; :b :c1354; :b :c1355; :b :c1356; :b :c1357; :b :c1358; :b :c1359; :b :c1360; :b :c1361; :b :c1362; :b :c1363; :b :c1364; :b :c1365; :b :c1366; :b :c1367; :b :c1368; :b :c1369; :b :c1370; :b :c1371; :b :c1372; :b :c1373; :b :c1374; :b :c1375; :b :c1376; :b :c1377; :b :c1378; :b :c1379; :b :c1380; :b :c1381; :b :c1382; :b :c1383; :b :c1384; :b :c1385; :b :c1386; :b :c1387; :b :c1388; :b :c1389; :b :c1390; :b :c1391; :b :c1392; :b :c1393; :b :c1394; :b :c1395; :b :c1396; :b :c1397; :b :c1398; :b :c1399; :b :c1400; :b :c1401; :b :c1402; :b :c1403; :b :c1404; :b :c1405; :b :c1406; :b :c1407; :b :c1408; :b :c1409; :b :c1410; :b :c1411; :b :c1412; :b :c1413; :b :c1414; :b :c1415; :b :c1416; :b :c1417; :b :c1418; :b :c1419; :b :c1420; :b :c1421; :b :c1422; :b :c1423; :b :c1424; :b :c1425; :b :c1426; :b :c1427; :b :c1428; :b :c1429; :b :c1430; :b :c1431; :b :c1432; :b :c1433; :b :c1434; :b :c1435; :b :c1436; :b :c1437; :b :c1438; :b :c1439; :b :c1440; :b :c1441; :b :c1442; :b :c1443; :b :c1444; :b :c1445; :b :c1446; :b :c1447; :b :c1448; :b :c1449; :b :c1450; :b :c1451; :b :c1452; :b :c1453; :b :c1454; :b :c1455; :b :c1456; :b :c1457; :b :c1458; :b :c1459; :b :c1460; :b :c1461; :b :c1462; :b :c1463; :b :c1464; :b :c1465; :b :c1466; :b :c1467; :b :c1468; :b :c1469; :b :c1470; :b :c1471; :b :c1472; :b :c1473; :b :c1474; :b :c1475; :b :c1476; :b :c1477; :b :c1478; :b :c1479; :b :c1480; :b :c1481; :b :c1482; :b :c1483; :b :c1484; :b :c1485; :b :c1486; :b :c1487; :b :c1488; :b :c1489; :b :c1490; :b :c1491; :b :c1492; :b :c1493; :b :c1494; :b :c1495; :b :c1496; :b :c1497; :b :c1498; :b :c1499; :b :c1500; :b :c1501; :b :c1502; :b :c1503; :b :c1504; :b :c1505; :b :c1506; :b :c1507; :b :c1508; :b :c1509; :b :c1510; :b :c1511; :b :c1512; :b :c1513; :b :c1514; :b :c1515; :b :c1516; :b :c1517; :b :c1518; :b :c1519; :b :c1520; :b :c1521; :b :c1522; :b :c1523; :b :c1524; :b :c1525; :b :c1526; :b :c1527; :b :c1528; :b :c1529; :b :c1530; :b :c1531; :b :c1532; :b :c1533; :b :c1534; :b :c1535; :b :c1536; :b :c1537; :b :c1538; :b :c1539; :b :c1540; :b :c1541; :b :c1542; :b :c1543; :b :c1544; :b :c1545; :b :c1546; :b :c1547; :b :c1548; :b :c1549; :b :c1550; :b :c1551; :b :c1552; :b :c1553; :b :c1554; :b :c1555; :b :c1556; :b :c1557; :b :c1558; :b :c1559; :b :c1560; :b :c1561; :b :c1562; :b :c1563; :b :c1564; :b :c1565; :b :c1566; :b :c1567; :b :c1568; :b :c1569; :b :c1570; :b :c1571; :b :c1572; :b :c1573; :b :c1574; :b :c1575; :b :c1576; :b :c1577; :b :c1578; :b :c1579; :b :c1580; :b :c1581; :b :c1582; :b :c1583; :b :c1584; :b :c1585; :b :c1586; :b :c1587; :b :c1588; :b :c1589; :b :c1590; :b :c1591; :b :c1592; :b :c1593; :b :c1594; :b :c1595; :b :c1596; :b :c1597; :b :c1598; :b :c1599; :b :c1600; :b :c1601; :b :c1602; :b :c1603; :b :c1604; :b :c1605; :b :c1606; :b :c1607; :b :c1608; :b :c1609; :b :c1610; :b :c1611; :b :c1612; :b :c1613; :b :c1614; :b :c1615; :b :c1616; :b :c1617; :b :c1618; :b :c1619; :b :c1620; :b :c1621; :b :c1622; :b :c1623; :b :c1624; :b :c1625; :b :c1626; :b :c1627; :b :c1628; :b :c1629; :b :c1630; :b :c1631; :b :c1632; :b :c1633; :b :c1634; :b :c1635; :b :c1636; :b :c1637; :b :c1638; :b :c1639; :b :c1640; :b :c1641; :b :c1642; :b :c1643; :b :c1644; :b :c1645; :b :c1646; :b :c1647; :b :c1648; :b :c1649; :b :c1650; :b :c1651; :b :c1652; :b :c1653; :b :c1654; :b :c1655; :b :c1656; :b :c1657; :b :c1658; :b :c1659; :b :c1660; :b :c1661; :b :c1662; :b :c1663; :b :c1664; :b :c1665; :b :c1666; :b :c1667; :b :c1668; :b :c1669; :b :c1670; :b :c1671; :b :c1672; :b :c1673; :b :c1674; :b :c1675; :b :c1676; :b :c1677; :b :c1678; :b :c1679; :b :c1680; :b :c1681; :b :c1682; :b :c1683; :b :c1684; :b :c1685; :b :c1686; :b :c1687; :b :c1688; :b :c1689; :b :c1690; :b :c1691; :b :c1692; :b :c1693; :b :c1694; :b :c1695; :b :c1696; :b :c1697; :b :c1698; :b :c1699; :b :c1700; :b :c1701; :b :c1702; :b :c1703; :b :c1704; :b :c1705; :b :c1706; :b :c1707; :b :c1708; :b :c1709; :b :c1710; :b :c1711; :b :c1712; :b :c1713; :b :c1714; :b :c1715; :b :c1716; :b :c1717; :b :c1718; :b :c1719; :b :c1720; :b :c1721; :b :c1722; :b :c1723; :b :c1724; :b :c1725; :b :c1726; :b :c1727; :b :c1728; :b :c1729; :b :c1730; :b :c1731; :b :c1732; :b :c1733; :b :c1734; :b :c1735; :b :c1736; :b :c1737; :b :c1738; :b :c1739; :b :c1740; :b :c1741; :b :c1742; :b :c1743; :b :c1744; :b :c1745; :b :c1746; :b :c1747; :b :c1748; :b :c1749; :b :c1750; :b :c1751; :b :c1752; :b :c1753; :b :c1754; :b :c1755; :b :c1756; :b :c1757; :b :c1758; :b :c1759; :b :c1760; :b :c1761; :b :c1762; :b :c1763; :b :c1764; :b :c1765; :b :c1766; :b :c1767; :b :c1768; :b :c1769; :b :c1770; :b :c1771; :b :c1772; :b :c1773; :b :c1774; :b :c1775; :b :c1776; :b :c1777; :b :c1778; :b :c1779; :b :c1780; :b :c1781; :b :c1782; :b :c1783; :b :c1784; :b :c1785; :b :c1786; :b :c1787; :b :c1788; :b :c1789; :b :c1790; :b :c1791; :b :c1792; :b :c1793; :b :c1794; :b :c1795; :b :c1796; :b :c1797; :b :c1798; :b :c1799; :b :c1800; :b :c1801; :b :c1802; :b :c1803; :b :c1804; :b :c1805; :b :c1806; :b :c1807; :b :c1808; :b :c1809; :b :c1810; :b :c1811; :b :c1812; :b :c1813; :b :c1814; :b :c1815; :b :c1816; :b :c1817; :b :c1818; :b :c1819; :b :c1820; :b :c1821; :b :c1822; :b :c1823; :b :c1824; :b :c1825; :b :c1826; :b :c1827; :b :c1828; :b :c1829; :b :c1830; :b :c1831; :b :c1832; :b :c1833; :b :c1834; :b :c1835; :b :c1836; :b :c1837; :b :c1838; :b :c1839; :b :c1840; :b :c1841; :b :c1842; :b :c1843; :b :c1844; :b :c1845; :b :c1846; :b :c1847; :b :c1848; :b :c1849; :b :c1850; :b :c1851; :b :c1852; :b :c1853; :b :c1854; :b :c1855; :b :c1856; :b :c1857; :b :c1858; :b :c1859; :b :c1860; :b :c1861; :b :c1862; :b :c1863; :b :c1864; :b :c1865; :b :c1866; :b :c1867; :b :c1868; :b :c1869; :b :c1870; :b :c1871; :b :c1872; :b :c1873; :b :c1874; :b :c1875; :b :c1876; :b :c1877; :b :c1878; :b :c1879; :b :c1880; :b :c1881; :b :c1882; :b :c1883; :b :c1884; :b :c1885; :b :c1886; :b :c1887; :b :c1888; :b :c1889; :b :c1890; :b :c1891; :b :c1892; :b :c1893; :b :c1894; :b :c1895; :b :c1896; :b :c1897; :b :c1898; :b :c1899; :b :c1900; :b :c1901; :b :c1902; :b :c1903; :b :c1904; :b :c1905; :b :c1906; :b :c1907; :b :c1908; :b :c1909; :b :c1910; :b :c1911; :b :c1912; :b :c1913; :b :c1914; :b :c1915; :b :c1916; :b :c1917; :b :c1918; :b :c1919; :b :c1920; :b :c1921; :b :c1922; :b :c1923; :b :c1924; :b :c1925; :b :c1926; :b :c1927; :b :c1928; :b :c1929; :b :c1930; :b :c1931; :b :c1932; :b :c1933; :b :c1934; :b :c1935; :b :c1936; :b :c1937; :b :c1938; :b :c1939; :b :c1940; :b :c1941; :b :c1942; :b :c1943; :b :c1944; :b :c1945; :b :c1946; :b :c1947; :b :c1948; :b :c1949; :b :c1950; :b :c1951; :b :c1952; :b :c1953; :b :c1954; :b :c1955; :b :c1956; :b :c1957; :b :c1958; :b :c1959; :b :c1960; :b :c1961; :b :c1962; :b :c1963; :b :c1964; :b :c1965; :b :c1966; :b :c1967; :b :c1968; :b :c1969; :b :c1970; :b :c1971; :b :c1972; :b :c1973; :b :c1974; :b :c1975; :b :c1976; :b :c1977; :b :c1978; :b :c1979; :b :c1980; :b :c1981; :b :c1982; :b :c1983; :b :c1984; :b :c1985; :b :c1986; :b :c1987; :b :c1988; :b :c1989; :b :c1990; :b :c1991; :b :c1992; :b :c1993; :b :c1994; :b :c1995; :b :c1996; :b :c1997; :b :c1998; :b :c1999; :b :c2000; :b :c2001; :b :c2002; :b :c2003; :b :c2004; :b :c2005; :b :c2006; :b :c2007; :b :c2008; :b :c2009; :b :c2010; :b :c2011; :b :c2012; :b :c2013; :b :c2014; :b :c2015; :b :c2016; :b :c2017; :b :c2018; :b :c2019; :b :c2020; :b :c2021; :b :c2022; :b :c2023; :b :c2024; :b :c2025; :b :c2026; :b :c2027; :b :c2028; :b :c2029; :b :c2030; :b :c2031; :b :c2032; :b :c2033; :b :c2034; :b :c2035; :b :c2036; :b :c2037; :b :c2038; :b :c2039; :b :c2040; :b :c2041; :b :c2042; :b :c2043; :b :c2044; :b :c2045; :b :c2046; :b :c2047; :b :c2048; :b :c2049; :b :c2050; :b :c2051; :b :c2052; :b :c2053; :b :c2054; :b :c2055; :b :c2056; :b :c2057; :b :c2058; :b :c2059; :b :c2060; :b :c2061; :b :c2062; :b :c2063; :b :c2064; :b :c2065; :b :c2066; :b :c2067; :b :c2068; :b :c2069; :b :c2070; :b :c2071; :b :c2072; :b :c2073; :b :c2074; :b :c2075; :b :c2076; :b :c2077; :b :c2078; :b :c2079; :b :c2080; :b :c2081; :b :c2082; :b :c2083; :b :c2084; :b :c2085; :b :c2086; :b :c2087; :b :c2088; :b :c2089; :b :c2090; :b :c2091; :b :c2092; :b :c2093; :b :c2094; :b :c2095; :b :c2096; :b :c2097; :b :c2098; :b :c2099; :b :c2100; :b :c2101; :b :c2102; :b :c2103; :b :c2104; :b :c2105; :b :c2106; :b :c2107; :b :c2108; :b :c2109; :b :c2110; :b :c2111; :b :c2112; :b :c2113; :b :c2114; :b :c2115; :b :c2116; :b :c2117; :b :c2118; :b :c2119; :b :c2120; :b :c2121; :b :c2122; :b :c2123; :b :c2124; :b :c2125; :b :c2126; :b :c2127; :b :c2128; :b :c2129; :b :c2130; :b :c2131; :b :c2132; :b :c2133; :b :c2134; :b :c2135; :b :c2136; :b :c2137; :b :c2138; :b :c2139; :b :c2140; :b :c2141; :b :c2142; :b :c2143; :b :c2144; :b :c2145; :b :c2146; :b :c2147; :b :c2148; :b :c2149; :b :c2150; :b :c2151; :b :c2152; :b :c2153; :b :c2154; :b :c2155; :b :c2156; :b :c2157; :b :c2158; :b :c2159; :b :c2160; :b :c2161; :b :c2162; :b :c2163; :b :c2164; :b :c2165; :b :c2166; :b :c2167; :b :c2168; :b :c2169; :b :c2170; :b :c2171; :b :c2172; :b :c2173; :b :c2174; :b :c2175; :b :c2176; :b :c2177; :b :c2178; :b :c2179; :b :c2180; :b :c2181; :b :c2182; :b :c2183; :b :c2184; :b :c2185; :b :c2186; :b :c2187; :b :c2188; :b :c2189; :b :c2190; :b :c2191; :b :c2192; :b :c2193; :b :c2194; :b :c2195; :b :c2196; :b :c2197; :b :c2198; :b :c2199; :b :c2200; :b :c2201; :b :c2202; :b :c2203; :b :c2204; :b :c2205; :b :c2206; :b :c2207; :b :c2208; :b :c2209; :b :c2210; :b :c2211; :b :c2212; :b :c2213; :b :c2214; :b :c2215; :b :c2216; :b :c2217; :b :c2218; :b :c2219; :b :c2220; :b :c2221; :b :c2222; :b :c2223; :b :c2224; :b :c2225; :b :c2226; :b :c2227; :b :c2228; :b :c2229; :b :c2230; :b :c2231; :b :c2232; :b :c2233; :b :c2234; :b :c2235; :b :c2236; :b :c2237; :b :c2238; :b :c2239; :b :c2240; :b :c2241; :b :c2242; :b :c2243; :b :c2244; :b :c2245; :b :c2246; :b :c2247; :b :c2248; :b :c2249; :b :c2250; :b :c2251; :b :c2252; :b :c2253; :b :c2254; :b :c2255; :b :c2256; :b :c2257; :b :c2258; :b :c2259; :b :c2260; :b :c2261; :b :c2262; :b :c2263; :b :c2264; :b :c2265; :b :c2266; :b :c2267; :b :c2268; :b :c2269; :b :c2270; :b :c2271; :b :c2272; :b :c2273; :b :c2274; :b :c2275; :b :c2276; :b :c2277; :b :c2278; :b :c2279; :b :c2280; :b :c2281; :b :c2282; :b :c2283; :b :c2284; :b :c2285; :b :c2286; :b :c2287; :b :c2288; :b :c2289; :b :c2290; :b :c2291; :b :c2292; :b :c2293; :b :c2294; :b :c2295; :b :c2296; :b :c2297; :b :c2298; :b :c2299; :b :c2300; :b :c2301; :b :c2302; :b :c2303; :b :c2304; :b :c2305; :b :c2306; :b :c2307; :b :c2308; :b :c2309; :b :c2310; :b :c2311; :b :c2312; :b :c2313; :b :c2314; :b :c2315; :b :c2316; :b :c2317; :b :c2318; :b :c2319; :b :c2320; :b :c2321; :b :c2322; :b :c2323; :b :c2324; :b :c2325; :b :c2326; :b :c2327; :b :c2328; :b :c2329; :b :c2330; :b :c2331; :b :c2332; :b :c2333; :b :c2334; :b :c2335; :b :c2336; :b :c2337; :b :c2338; :b :c2339; :b :c2340; :b :c2341; :b :c2342; :b :c2343; :b :c2344; :b :c2345; :b :c2346; :b :c2347; :b :c2348; :b :c2349; :b :c2350; :b :c2351; :b :c2352; :b :c2353; :b :c2354; :b :c2355; :b :c2356; :b :c2357; :b :c2358; :b :c2359; :b :c2360; :b :c2361; :b :c2362; :b :c2363; :b :c2364; :b :c2365; :b :c2366; :b :c2367; :b :c2368; :b :c2369; :b :c2370; :b :c2371; :b :c2372; :b :c2373; :b :c2374; :b :c2375; :b :c2376; :b :c2377; :b :c2378; :b :c2379; :b :c2380; :b :c2381; :b :c2382; :b :c2383; :b :c2384; :b :c2385; :b :c2386; :b :c2387; :b :c2388; :b :c2389; :b :c2390; :b :c2391; :b :c2392; :b :c2393; :b :c2394; :b :c2395; :b :c2396; :b :c2397; :b :c2398; :b :c2399; :b :c2400; :b :c2401; :b :c2402; :b :c2403; :b :c2404; :b :c2405; :b :c2406; :b :c2407; :b :c2408; :b :c2409; :b :c2410; :b :c2411; :b :c2412; :b :c2413; :b :c2414; :b :c2415; :b :c2416; :b :c2417; :b :c2418; :b :c2419; :b :c2420; :b :c2421; :b :c2422; :b :c2423; :b :c2424; :b :c2425; :b :c2426; :b :c2427; :b :c2428; :b :c2429; :b :c2430; :b :c2431; :b :c2432; :b :c2433; :b :c2434; :b :c2435; :b :c2436; :b :c2437; :b :c2438; :b :c2439; :b :c2440; :b :c2441; :b :c2442; :b :c2443; :b :c2444; :b :c2445; :b :c2446; :b :c2447; :b :c2448; :b :c2449; :b :c2450; :b :c2451; :b :c2452; :b :c2453; :b :c2454; :b :c2455; :b :c2456; :b :c2457; :b :c2458; :b :c2459; :b :c2460; :b :c2461; :b :c2462; :b :c2463; :b :c2464; :b :c2465; :b :c2466; :b :c2467; :b :c2468; :b :c2469; :b :c2470; :b :c2471; :b :c2472; :b :c2473; :b :c2474; :b :c2475; :b :c2476; :b :c2477; :b :c2478; :b :c2479; :b :c2480; :b :c2481; :b :c2482; :b :c2483; :b :c2484; :b :c2485; :b :c2486; :b :c2487; :b :c2488; :b :c2489; :b :c2490; :b :c2491; :b :c2492; :b :c2493; :b :c2494; :b :c2495; :b :c2496; :b :c2497; :b :c2498; :b :c2499; :b :c2500; :b :c2501; :b :c2502; :b :c2503; :b :c2504; :b :c2505; :b :c2506; :b :c2507; :b :c2508; :b :c2509; :b :c2510; :b :c2511; :b :c2512; :b :c2513; :b :c2514; :b :c2515; :b :c2516; :b :c2517; :b :c2518; :b :c2519; :b :c2520; :b :c2521; :b :c2522; :b :c2523; :b :c2524; :b :c2525; :b :c2526; :b :c2527; :b :c2528; :b :c2529; :b :c2530; :b :c2531; :b :c2532; :b :c2533; :b :c2534; :b :c2535; :b :c2536; :b :c2537; :b :c2538; :b :c2539; :b :c2540; :b :c2541; :b :c2542; :b :c2543; :b :c2544; :b :c2545; :b :c2546; :b :c2547; :b :c2548; :b :c2549; :b :c2550; :b :c2551; :b :c2552; :b :c2553; :b :c2554; :b :c2555; :b :c2556; :b :c2557; :b :c2558; :b :c2559; :b :c2560; :b :c2561; :b :c2562; :b :c2563; :b :c2564; :b :c2565; :b :c2566; :b :c2567; :b :c2568; :b :c2569; :b :c2570; :b :c2571; :b :c2572; :b :c2573; :b :c2574; :b :c2575; :b :c2576; :b :c2577; :b :c2578; :b :c2579; :b :c2580; :b :c2581; :b :c2582; :b :c2583; :b :c2584; :b :c2585; :b :c2586; :b :c2587; :b :c2588; :b :c2589; :b :c2590; :b :c2591; :b :c2592; :b :c2593; :b :c2594; :b :c2595; :b :c2596; :b :c2597; :b :c2598; :b :c2599; :b :c2600; :b :c2601; :b :c2602; :b :c2603; :b :c2604; :b :c2605; :b :c2606; :b :c2607; :b :c2608; :b :c2609; :b :c2610; :b :c2611; :b :c2612; :b :c2613; :b :c2614; :b :c2615; :b :c2616; :b :c2617; :b :c2618; :b :c2619; :b :c2620; :b :c2621; :b :c2622; :b :c2623; :b :c2624; :b :c2625; :b :c2626; :b :c2627; :b :c2628; :b :c2629; :b :c2630; :b :c2631; :b :c2632; :b :c2633; :b :c2634; :b :c2635; :b :c2636; :b :c2637; :b :c2638; :b :c2639; :b :c2640; :b :c2641; :b :c2642; :b :c2643; :b :c2644; :b :c2645; :b :c2646; :b :c2647; :b :c2648; :b :c2649; :b :c2650; :b :c2651; :b :c2652; :b :c2653; :b :c2654; :b :c2655; :b :c2656; :b :c2657; :b :c2658; :b :c2659; :b :c2660; :b :c2661; :b :c2662; :b :c2663; :b :c2664; :b :c2665; :b :c2666; :b :c2667; :b :c2668; :b :c2669; :b :c2670; :b :c2671; :b :c2672; :b :c2673; :b :c2674; :b :c2675; :b :c2676; :b :c2677; :b :c2678; :b :c2679; :b :c2680; :b :c2681; :b :c2682; :b :c2683; :b :c2684; :b :c2685; :b :c2686; :b :c2687; :b :c2688; :b :c2689; :b :c2690; :b :c2691; :b :c2692; :b :c2693; :b :c2694; :b :c2695; :b :c2696; :b :c2697; :b :c2698; :b :c2699; :b :c2700; :b :c2701; :b :c2702; :b :c2703; :b :c2704; :b :c2705; :b :c2706; :b :c2707; :b :c2708; :b :c2709; :b :c2710; :b :c2711; :b :c2712; :b :c2713; :b :c2714; :b :c2715; :b :c2716; :b :c2717; :b :c2718; :b :c2719; :b :c2720; :b :c2721; :b :c2722; :b :c2723; :b :c2724; :b :c2725; :b :c2726; :b :c2727; :b :c2728; :b :c2729; :b :c2730; :b :c2731; :b :c2732; :b :c2733; :b :c2734; :b :c2735; :b :c2736; :b :c2737; :b :c2738; :b :c2739; :b :c2740; :b :c2741; :b :c2742; :b :c2743; :b :c2744; :b :c2745; :b :c2746; :b :c2747; :b :c2748; :b :c2749; :b :c2750; :b :c2751; :b :c2752; :b :c2753; :b :c2754; :b :c2755; :b :c2756; :b :c2757; :b :c2758; :b :c2759; :b :c2760; :b :c2761; :b :c2762; :b :c2763; :b :c2764; :b :c2765; :b :c2766; :b :c2767; :b :c2768; :b :c2769; :b :c2770; :b :c2771; :b :c2772; :b :c2773; :b :c2774; :b :c2775; :b :c2776; :b :c2777; :b :c2778; :b :c2779; :b :c2780; :b :c2781; :b :c2782; :b :c2783; :b :c2784; :b :c2785; :b :c2786; :b :c2787; :b :c2788; :b :c2789; :b :c2790; :b :c2791; :b :c2792; :b :c2793; :b :c2794; :b :c2795; :b :c2796; :b :c2797; :b :c2798; :b :c2799; :b :c2800; :b :c2801; :b :c2802; :b :c2803; :b :c2804; :b :c2805; :b :c2806; :b :c2807; :b :c2808; :b :c2809; :b :c2810; :b :c2811; :b :c2812; :b :c2813; :b :c2814; :b :c2815; :b :c2816; :b :c2817; :b :c2818; :b :c2819; :b :c2820; :b :c2821; :b :c2822; :b :c2823; :b :c2824; :b :c2825; :b :c2826; :b :c2827; :b :c2828; :b :c2829; :b :c2830; :b :c2831; :b :c2832; :b :c2833; :b :c2834; :b :c2835; :b :c2836; :b :c2837; :b :c2838; :b :c2839; :b :c2840; :b :c2841; :b :c2842; :b :c2843; :b :c2844; :b :c2845; :b :c2846; :b :c2847; :b :c2848; :b :c2849; :b :c2850; :b :c2851; :b :c2852; :b :c2853; :b :c2854; :b :c2855; :b :c2856; :b :c2857; :b :c2858; :b :c2859; :b :c2860; :b :c2861; :b :c2862; :b :c2863; :b :c2864; :b :c2865; :b :c2866; :b :c2867; :b :c2868; :b :c2869; :b :c2870; :b :c2871; :b :c2872; :b :c2873; :b :c2874; :b :c2875; :b :c2876; :b :c2877; :b :c2878; :b :c2879; :b :c2880; :b :c2881; :b :c2882; :b :c2883; :b :c2884; :b :c2885; :b :c2886; :b :c2887; :b :c2888; :b :c2889; :b :c2890; :b :c2891; :b :c2892; :b :c2893; :b :c2894; :b :c2895; :b :c2896; :b :c2897; :b :c2898; :b :c2899; :b :c2900; :b :c2901; :b :c2902; :b :c2903; :b :c2904; :b :c2905; :b :c2906; :b :c2907; :b :c2908; :b :c2909; :b :c2910; :b :c2911; :b :c2912; :b :c2913; :b :c2914; :b :c2915; :b :c2916; :b :c2917; :b :c2918; :b :c2919; :b :c2920; :b :c2921; :b :c2922; :b :c2923; :b :c2924; :b :c2925; :b :c2926; :b :c2927; :b :c2928; :b :c2929; :b :c2930; :b :c2931; :b :c2932; :b :c2933; :b :c2934; :b :c2935; :b :c2936; :b :c2937; :b :c2938; :b :c2939; :b :c2940; :b :c2941; :b :c2942; :b :c2943; :b :c2944; :b :c2945; :b :c2946; :b :c2947; :b :c2948; :b :c2949; :b :c2950; :b :c2951; :b :c2952; :b :c2953; :b :c2954; :b :c2955; :b :c2956; :b :c2957; :b :c2958; :b :c2959; :b :c2960; :b :c2961; :b :c2962; :b :c2963; :b :c2964; :b :c2965; :b :c2966; :b :c2967; :b :c2968; :b :c2969; :b :c2970; :b :c2971; :b :c2972; :b :c2973; :b :c2974; :b :c2975; :b :c2976; :b :c2977; :b :c2978; :b :c2979; :b :c2980; :b :c2981; :b :c2982; :b :c2983; :b :c2984; :b :c2985; :b :c2986; :b :c2987; :b :c2988; :b :c2989; :b :c2990; :b :c2991; :b :c2992; :b :c2993; :b :c2994; :b :c2995; :b :c2996; :b :c2997; :b :c2998; :b :c2999; :b :c3000; :b :c3001; :b :c3002; :b :c3003; :b :c3004; :b :c3005; :b :c3006; :b :c3007; :b :c3008; :b :c3009; :b :c3010; :b :c3011; :b :c3012; :b :c3013; :b :c3014; :b :c3015; :b :c3016; :b :c3017; :b :c3018; :b :c3019; :b :c3020; :b :c3021; :b :c3022; :b :c3023; :b :c3024; :b :c3025; :b :c3026; :b :c3027; :b :c3028; :b :c3029; :b :c3030; :b :c3031; :b :c3032; :b :c3033; :b :c3034; :b :c3035; :b :c3036; :b :c3037; :b :c3038; :b :c3039; :b :c3040; :b :c3041; :b :c3042; :b :c3043; :b :c3044; :b :c3045; :b :c3046; :b :c3047; :b :c3048; :b :c3049; :b :c3050; :b :c3051; :b :c3052; :b :c3053; :b :c3054; :b :c3055; :b :c3056; :b :c3057; :b :c3058; :b :c3059; :b :c3060; :b :c3061; :b :c3062; :b :c3063; :b :c3064; :b :c3065; :b :c3066; :b :c3067; :b :c3068; :b :c3069; :b :c3070; :b :c3071; :b :c3072; :b :c3073; :b :c3074; :b :c3075; :b :c3076; :b :c3077; :b :c3078; :b :c3079; :b :c3080; :b :c3081; :b :c3082; :b :c3083; :b :c3084; :b :c3085; :b :c3086; :b :c3087; :b :c3088; :b :c3089; :b :c3090; :b :c3091; :b :c3092; :b :c3093; :b :c3094; :b :c3095; :b :c3096; :b :c3097; :b :c3098; :b :c3099; :b :c3100; :b :c3101; :b :c3102; :b :c3103; :b :c3104; :b :c3105; :b :c3106; :b :c3107; :b :c3108; :b :c3109; :b :c3110; :b :c3111; :b :c3112; :b :c3113; :b :c3114; :b :c3115; :b :c3116; :b :c3117; :b :c3118; :b :c3119; :b :c3120; :b :c3121; :b :c3122; :b :c3123; :b :c3124; :b :c3125; :b :c3126; :b :c3127; :b :c3128; :b :c3129; :b :c3130; :b :c3131; :b :c3132; :b :c3133; :b :c3134; :b :c3135; :b :c3136; :b :c3137; :b :c3138; :b :c3139; :b :c3140; :b :c3141; :b :c3142; :b :c3143; :b :c3144; :b :c3145; :b :c3146; :b :c3147; :b :c3148; :b :c3149; :b :c3150; :b :c3151; :b :c3152; :b :c3153; :b :c3154; :b :c3155; :b :c3156; :b :c3157; :b :c3158; :b :c3159; :b :c3160; :b :c3161; :b :c3162; :b :c3163; :b :c3164; :b :c3165; :b :c3166; :b :c3167; :b :c3168; :b :c3169; :b :c3170; :b :c3171; :b :c3172; :b :c3173; :b :c3174; :b :c3175; :b :c3176; :b :c3177; :b :c3178; :b :c3179; :b :c3180; :b :c3181; :b :c3182; :b :c3183; :b :c3184; :b :c3185; :b :c3186; :b :c3187; :b :c3188; :b :c3189; :b :c3190; :b :c3191; :b :c3192; :b :c3193; :b :c3194; :b :c3195; :b :c3196; :b :c3197; :b :c3198; :b :c3199; :b :c3200; :b :c3201; :b :c3202; :b :c3203; :b :c3204; :b :c3205; :b :c3206; :b :c3207; :b :c3208; :b :c3209; :b :c3210; :b :c3211; :b :c3212; :b :c3213; :b :c3214; :b :c3215; :b :c3216; :b :c3217; :b :c3218; :b :c3219; :b :c3220; :b :c3221; :b :c3222; :b :c3223; :b :c3224; :b :c3225; :b :c3226; :b :c3227; :b :c3228; :b :c3229; :b :c3230; :b :c3231; :b :c3232; :b :c3233; :b :c3234; :b :c3235; :b :c3236; :b :c3237; :b :c3238; :b :c3239; :b :c3240; :b :c3241; :b :c3242; :b :c3243; :b :c3244; :b :c3245; :b :c3246; :b :c3247; :b :c3248; :b :c3249; :b :c3250; :b :c3251; :b :c3252; :b :c3253; :b :c3254; :b :c3255; :b :c3256; :b :c3257; :b :c3258; :b :c3259; :b :c3260; :b :c3261; :b :c3262; :b :c3263; :b :c3264; :b :c3265; :b :c3266; :b :c3267; :b :c3268; :b :c3269; :b :c3270; :b :c3271; :b :c3272; :b :c3273; :b :c3274; :b :c3275; :b :c3276; :b :c3277; :b :c3278; :b :c3279; :b :c3280; :b :c3281; :b :c3282; :b :c3283; :b :c3284; :b :c3285; :b :c3286; :b :c3287; :b :c3288; :b :c3289; :b :c3290; :b :c3291; :b :c3292; :b :c3293; :b :c3294; :b :c3295; :b :c3296; :b :c3297; :b :c3298; :b :c3299; :b :c3300; :b :c3301; :b :c3302; :b :c3303; :b :c3304; :b :c3305; :b :c3306; :b :c3307; :b :c3308; :b :c3309; :b :c3310; :b :c3311; :b :c3312; :b :c3313; :b :c3314; :b :c3315; :b :c3316; :b :c3317; :b :c3318; :b :c3319; :b :c3320; :b :c3321; :b :c3322; :b :c3323; :b :c3324; :b :c3325; :b :c3326; :b :c3327; :b :c3328; :b :c3329; :b :c3330; :b :c3331; :b :c3332; :b :c3333; :b :c3334; :b :c3335; :b :c3336; :b :c3337; :b :c3338; :b :c3339; :b :c3340; :b :c3341; :b :c3342; :b :c3343; :b :c3344; :b :c3345; :b :c3346; :b :c3347; :b :c3348; :b :c3349; :b :c3350; :b :c3351; :b :c3352; :b :c3353; :b :c3354; :b :c3355; :b :c3356; :b :c3357; :b :c3358; :b :c3359; :b :c3360; :b :c3361; :b :c3362; :b :c3363; :b :c3364; :b :c3365; :b :c3366; :b :c3367; :b :c3368; :b :c3369; :b :c3370; :b :c3371; :b :c3372; :b :c3373; :b :c3374; :b :c3375; :b :c3376; :b :c3377; :b :c3378; :b :c3379; :b :c3380; :b :c3381; :b :c3382; :b :c3383; :b :c3384; :b :c3385; :b :c3386; :b :c3387; :b :c3388; :b :c3389; :b :c3390; :b :c3391; :b :c3392; :b :c3393; :b :c3394; :b :c3395; :b :c3396; :b :c3397; :b :c3398; :b :c3399; :b :c3400; :b :c3401; :b :c3402; :b :c3403; :b :c3404; :b :c3405; :b :c3406; :b :c3407; :b :c3408; :b :c3409; :b :c3410; :b :c3411; :b :c3412; :b :c3413; :b :c3414; :b :c3415; :b :c3416; :b :c3417; :b :c3418; :b :c3419; :b :c3420; :b :c3421; :b :c3422; :b :c3423; :b :c3424; :b :c3425; :b :c3426; :b :c3427; :b :c3428; :b :c3429; :b :c3430; :b :c3431; :b :c3432; :b :c3433; :b :c3434; :b :c3435; :b :c3436; :b :c3437; :b :c3438; :b :c3439; :b :c3440; :b :c3441; :b :c3442; :b :c3443; :b :c3444; :b :c3445; :b :c3446; :b :c3447; :b :c3448; :b :c3449; :b :c3450; :b :c3451; :b :c3452; :b :c3453; :b :c3454; :b :c3455; :b :c3456; :b :c3457; :b :c3458; :b :c3459; :b :c3460; :b :c3461; :b :c3462; :b :c3463; :b :c3464; :b :c3465; :b :c3466; :b :c3467; :b :c3468; :b :c3469; :b :c3470; :b :c3471; :b :c3472; :b :c3473; :b :c3474; :b :c3475; :b :c3476; :b :c3477; :b :c3478; :b :c3479; :b :c3480; :b :c3481; :b :c3482; :b :c3483; :b :c3484; :b :c3485; :b :c3486; :b :c3487; :b :c3488; :b :c3489; :b :c3490; :b :c3491; :b :c3492; :b :c3493; :b :c3494; :b :c3495; :b :c3496; :b :c3497; :b :c3498; :b :c3499; :b :c3500; :b :c3501; :b :c3502; :b :c3503; :b :c3504; :b :c3505; :b :c3506; :b :c3507; :b :c3508; :b :c3509; :b :c3510; :b :c3511; :b :c3512; :b :c3513; :b :c3514; :b :c3515; :b :c3516; :b :c3517; :b :c3518; :b :c3519; :b :c3520; :b :c3521; :b :c3522; :b :c3523; :b :c3524; :b :c3525; :b :c3526; :b :c3527; :b :c3528; :b :c3529; :b :c3530; :b :c3531; :b :c3532; :b :c3533; :b :c3534; :b :c3535; :b :c3536; :b :c3537; :b :c3538; :b :c3539; :b :c3540; :b :c3541; :b :c3542; :b :c3543; :b :c3544; :b :c3545; :b :c3546; :b :c3547; :b :c3548; :b :c3549; :b :c3550; :b :c3551; :b :c3552; :b :c3553; :b :c3554; :b :c3555; :b :c3556; :b :c3557; :b :c3558; :b :c3559; :b :c3560; :b :c3561; :b :c3562; :b :c3563; :b :c3564; :b :c3565; :b :c3566; :b :c3567; :b :c3568; :b :c3569; :b :c3570; :b :c3571; :b :c3572; :b :c3573; :b :c3574; :b :c3575; :b :c3576; :b :c3577; :b :c3578; :b :c3579; :b :c3580; :b :c3581; :b :c3582; :b :c3583; :b :c3584; :b :c3585; :b :c3586; :b :c3587; :b :c3588; :b :c3589; :b :c3590; :b :c3591; :b :c3592; :b :c3593; :b :c3594; :b :c3595; :b :c3596; :b :c3597; :b :c3598; :b :c3599; :b :c3600; :b :c3601; :b :c3602; :b :c3603; :b :c3604; :b :c3605; :b :c3606; :b :c3607; :b :c3608; :b :c3609; :b :c3610; :b :c3611; :b :c3612; :b :c3613; :b :c3614; :b :c3615; :b :c3616; :b :c3617; :b :c3618; :b :c3619; :b :c3620; :b :c3621; :b :c3622; :b :c3623; :b :c3624; :b :c3625; :b :c3626; :b :c3627; :b :c3628; :b :c3629; :b :c3630; :b :c3631; :b :c3632; :b :c3633; :b :c3634; :b :c3635; :b :c3636; :b :c3637; :b :c3638; :b :c3639; :b :c3640; :b :c3641; :b :c3642; :b :c3643; :b :c3644; :b :c3645; :b :c3646; :b :c3647; :b :c3648; :b :c3649; :b :c3650; :b :c3651; :b :c3652; :b :c3653; :b :c3654; :b :c3655; :b :c3656; :b :c3657; :b :c3658; :b :c3659; :b :c3660; :b :c3661; :b :c3662; :b :c3663; :b :c3664; :b :c3665; :b :c3666; :b :c3667; :b :c3668; :b :c3669; :b :c3670; :b :c3671; :b :c3672; :b :c3673; :b :c3674; :b :c3675; :b :c3676; :b :c3677; :b :c3678; :b :c3679; :b :c3680; :b :c3681; :b :c3682; :b :c3683; :b :c3684; :b :c3685; :b :c3686; :b :c3687; :b :c3688; :b :c3689; :b :c3690; :b :c3691; :b :c3692; :b :c3693; :b :c3694; :b :c3695; :b :c3696; :b :c3697; :b :c3698; :b :c3699; :b :c3700; :b :c3701; :b :c3702; :b :c3703; :b :c3704; :b :c3705; :b :c3706; :b :c3707; :b :c3708; :b :c3709; :b :c3710; :b :c3711; :b :c3712; :b :c3713; :b :c3714; :b :c3715; :b :c3716; :b :c3717; :b :c3718; :b :c3719; :b :c3720; :b :c3721; :b :c3722; :b :c3723; :b :c3724; :b :c3725; :b :c3726; :b :c3727; :b :c3728; :b :c3729; :b :c3730; :b :c3731; :b :c3732; :b :c3733; :b :c3734; :b :c3735; :b :c3736; :b :c3737; :b :c3738; :b :c3739; :b :c3740; :b :c3741; :b :c3742; :b :c3743; :b :c3744; :b :c3745; :b :c3746; :b :c3747; :b :c3748; :b :c3749; :b :c3750; :b :c3751; :b :c3752; :b :c3753; :b :c3754; :b :c3755; :b :c3756; :b :c3757; :b :c3758; :b :c3759; :b :c3760; :b :c3761; :b :c3762; :b :c3763; :b :c3764; :b :c3765; :b :c3766; :b :c3767; :b :c3768; :b :c3769; :b :c3770; :b :c3771; :b :c3772; :b :c3773; :b :c3774; :b :c3775; :b :c3776; :b :c3777; :b :c3778; :b :c3779; :b :c3780; :b :c3781; :b :c3782; :b :c3783; :b :c3784; :b :c3785; :b :c3786; :b :c3787; :b :c3788; :b :c3789; :b :c3790; :b :c3791; :b :c3792; :b :c3793; :b :c3794; :b :c3795; :b :c3796; :b :c3797; :b :c3798; :b :c3799; :b :c3800; :b :c3801; :b :c3802; :b :c3803; :b :c3804; :b :c3805; :b :c3806; :b :c3807; :b :c3808; :b :c3809; :b :c3810; :b :c3811; :b :c3812; :b :c3813; :b :c3814; :b :c3815; :b :c3816; :b :c3817; :b :c3818; :b :c3819; :b :c3820; :b :c3821; :b :c3822; :b :c3823; :b :c3824; :b :c3825; :b :c3826; :b :c3827; :b :c3828; :b :c3829; :b :c3830; :b :c3831; :b :c3832; :b :c3833; :b :c3834; :b :c3835; :b :c3836; :b :c3837; :b :c3838; :b :c3839; :b :c3840; :b :c3841; :b :c3842; :b :c3843; :b :c3844; :b :c3845; :b :c3846; :b :c3847; :b :c3848; :b :c3849; :b :c3850; :b :c3851; :b :c3852; :b :c3853; :b :c3854; :b :c3855; :b :c3856; :b :c3857; :b :c3858; :b :c3859; :b :c3860; :b :c3861; :b :c3862; :b :c3863; :b :c3864; :b :c3865; :b :c3866; :b :c3867; :b :c3868; :b :c3869; :b :c3870; :b :c3871; :b :c3872; :b :c3873; :b :c3874; :b :c3875; :b :c3876; :b :c3877; :b :c3878; :b :c3879; :b :c3880; :b :c3881; :b :c3882; :b :c3883; :b :c3884; :b :c3885; :b :c3886; :b :c3887; :b :c3888; :b :c3889; :b :c3890; :b :c3891; :b :c3892; :b :c3893; :b :c3894; :b :c3895; :b :c3896; :b :c3897; :b :c3898; :b :c3899; :b :c3900; :b :c3901; :b :c3902; :b :c3903; :b :c3904; :b :c3905; :b :c3906; :b :c3907; :b :c3908; :b :c3909; :b :c3910; :b :c3911; :b :c3912; :b :c3913; :b :c3914; :b :c3915; :b :c3916; :b :c3917; :b :c3918; :b :c3919; :b :c3920; :b :c3921; :b :c3922; :b :c3923; :b :c3924; :b :c3925; :b :c3926; :b :c3927; :b :c3928; :b :c3929; :b :c3930; :b :c3931; :b :c3932; :b :c3933; :b :c3934; :b :c3935; :b :c3936; :b :c3937; :b :c3938; :b :c3939; :b :c3940; :b :c3941; :b :c3942; :b :c3943; :b :c3944; :b :c3945; :b :c3946; :b :c3947; :b :c3948; :b :c3949; :b :c3950; :b :c3951; :b :c3952; :b :c3953; :b :c3954; :b :c3955; :b :c3956; :b :c3957; :b :c3958; :b :c3959; :b :c3960; :b :c3961; :b :c3962; :b :c3963; :b :c3964; :b :c3965; :b :c3966; :b :c3967; :b :c3968; :b :c3969; :b :c3970; :b :c3971; :b :c3972; :b :c3973; :b :c3974; :b :c3975; :b :c3976; :b :c3977; :b :c3978; :b :c3979; :b :c3980; :b :c3981; :b :c3982; :b :c3983; :b :c3984; :b :c3985; :b :c3986; :b :c3987; :b :c3988; :b :c3989; :b :c3990; :b :c3991; :b :c3992; :b :c3993; :b :c3994; :b :c3995; :b :c3996; :b :c3997; :b :c3998; :b :c3999; :b :c4000; :b :c4001; :b :c4002; :b :c4003; :b :c4004; :b :c4005; :b :c4006; :b :c4007; :b :c4008; :b :c4009; :b :c4010; :b :c4011; :b :c4012; :b :c4013; :b :c4014; :b :c4015; :b :c4016; :b :c4017; :b :c4018; :b :c4019; :b :c4020; :b :c4021; :b :c4022; :b :c4023; :b :c4024; :b :c4025; :b :c4026; :b :c4027; :b :c4028; :b :c4029; :b :c4030; :b :c4031; :b :c4032; :b :c4033; :b :c4034; :b :c4035; :b :c4036; :b :c4037; :b :c4038; :b :c4039; :b :c4040; :b :c4041; :b :c4042; :b :c4043; :b :c4044; :b :c4045; :b :c4046; :b :c4047; :b :c4048; :b :c4049; :b :c4050; :b :c4051; :b :c4052; :b :c4053; :b :c4054; :b :c4055; :b :c4056; :b :c4057; :b :c4058; :b :c4059; :b :c4060; :b :c4061; :b :c4062; :b :c4063; :b :c4064; :b :c4065; :b :c4066; :b :c4067; :b :c4068; :b :c4069; :b :c4070; :b :c4071; :b :c4072; :b :c4073; :b :c4074; :b :c4075; :b :c4076; :b :c4077; :b :c4078; :b :c4079; :b :c4080; :b :c4081; :b :c4082; :b :c4083; :b :c4084; :b :c4085; :b :c4086; :b :c4087; :b :c4088; :b :c4089; :b :c4090; :b :c4091; :b :c4092; :b :c4093; :b :c4094; :b :c4095; :b :c4096; :b :c4097; :b :c4098; :b :c4099; :b :c4100; :b :c4101; :b :c4102; :b :c4103; :b :c4104; :b :c4105; :b :c4106; :b :c4107; :b :c4108; :b :c4109; :b :c4110; :b :c4111; :b :c4112; :b :c4113; :b :c4114; :b :c4115; :b :c4116; :b :c4117; :b :c4118; :b :c4119; :b :c4120; :b :c4121; :b :c4122; :b :c4123; :b :c4124; :b :c4125; :b :c4126; :b :c4127; :b :c4128; :b :c4129; :b :c4130; :b :c4131; :b :c4132; :b :c4133; :b :c4134; :b :c4135; :b :c4136; :b :c4137; :b :c4138; :b :c4139; :b :c4140; :b :c4141; :b :c4142; :b :c4143; :b :c4144; :b :c4145; :b :c4146; :b :c4147; :b :c4148; :b :c4149; :b :c4150; :b :c4151; :b :c4152; :b :c4153; :b :c4154; :b :c4155; :b :c4156; :b :c4157; :b :c4158; :b :c4159; :b :c4160; :b :c4161; :b :c4162; :b :c4163; :b :c4164; :b :c4165; :b :c4166; :b :c4167; :b :c4168; :b :c4169; :b :c4170; :b :c4171; :b :c4172; :b :c4173; :b :c4174; :b :c4175; :b :c4176; :b :c4177; :b :c4178; :b :c4179; :b :c4180; :b :c4181; :b :c4182; :b :c4183; :b :c4184; :b :c4185; :b :c4186; :b :c4187; :b :c4188; :b :c4189; :b :c4190; :b :c4191; :b :c4192; :b :c4193; :b :c4194; :b :c4195; :b :c4196; :b :c4197; :b :c4198; :b :c4199; :b :c4200; :b :c4201; :b :c4202; :b :c4203; :b :c4204; :b :c4205; :b :c4206; :b :c4207; :b :c4208; :b :c4209; :b :c4210; :b :c4211; :b :c4212; :b :c4213; :b :c4214; :b :c4215; :b :c4216; :b :c4217; :b :c4218; :b :c4219; :b :c4220; :b :c4221; :b :c4222; :b :c4223; :b :c4224; :b :c4225; :b :c4226; :b :c4227; :b :c4228; :b :c4229; :b :c4230; :b :c4231; :b :c4232; :b :c4233; :b :c4234; :b :c4235; :b :c4236; :b :c4237; :b :c4238; :b :c4239; :b :c4240; :b :c4241; :b :c4242; :b :c4243; :b :c4244; :b :c4245; :b :c4246; :b :c4247; :b :c4248; :b :c4249; :b :c4250; :b :c4251; :b :c4252; :b :c4253; :b :c4254; :b :c4255; :b :c4256; :b :c4257; :b :c4258; :b :c4259; :b :c4260; :b :c4261; :b :c4262; :b :c4263; :b :c4264; :b :c4265; :b :c4266; :b :c4267; :b :c4268; :b :c4269; :b :c4270; :b :c4271; :b :c4272; :b :c4273; :b :c4274; :b :c4275; :b :c4276; :b :c4277; :b :c4278; :b :c4279; :b :c4280; :b :c4281; :b :c4282; :b :c4283; :b :c4284; :b :c4285; :b :c4286; :b :c4287; :b :c4288; :b :c4289; :b :c4290; :b :c4291; :b :c4292; :b :c4293; :b :c4294; :b :c4295; :b :c4296; :b :c4297; :b :c4298; :b :c4299; :b :c4300; :b :c4301; :b :c4302; :b :c4303; :b :c4304; :b :c4305; :b :c4306; :b :c4307; :b :c4308; :b :c4309; :b :c4310; :b :c4311; :b :c4312; :b :c4313; :b :c4314; :b :c4315; :b :c4316; :b :c4317; :b :c4318; :b :c4319; :b :c4320; :b :c4321; :b :c4322; :b :c4323; :b :c4324; :b :c4325; :b :c4326; :b :c4327; :b :c4328; :b :c4329; :b :c4330; :b :c4331; :b :c4332; :b :c4333; :b :c4334; :b :c4335; :b :c4336; :b :c4337; :b :c4338; :b :c4339; :b :c4340; :b :c4341; :b :c4342; :b :c4343; :b :c4344; :b :c4345; :b :c4346; :b :c4347; :b :c4348; :b :c4349; :b :c4350; :b :c4351; :b :c4352; :b :c4353; :b :c4354; :b :c4355; :b :c4356; :b :c4357; :b :c4358; :b :c4359; :b :c4360; :b :c4361; :b :c4362; :b :c4363; :b :c4364; :b :c4365; :b :c4366; :b :c4367; :b :c4368; :b :c4369; :b :c4370; :b :c4371; :b :c4372; :b :c4373; :b :c4374; :b :c4375; :b :c4376; :b :c4377; :b :c4378; :b :c4379; :b :c4380; :b :c4381; :b :c4382; :b :c4383; :b :c4384; :b :c4385; :b :c4386; :b :c4387; :b :c4388; :b :c4389; :b :c4390; :b :c4391; :b :c4392; :b :c4393; :b :c4394; :b :c4395; :b :c4396; :b :c4397; :b :c4398; :b :c4399; :b :c4400; :b :c4401; :b :c4402; :b :c4403; :b :c4404; :b :c4405; :b :c4406; :b :c4407; :b :c4408; :b :c4409; :b :c4410; :b :c4411; :b :c4412; :b :c4413; :b :c4414; :b :c4415; :b :c4416; :b :c4417; :b :c4418; :b :c4419; :b :c4420; :b :c4421; :b :c4422; :b :c4423; :b :c4424; :b :c4425; :b :c4426; :b :c4427; :b :c4428; :b :c4429; :b :c4430; :b :c4431; :b :c4432; :b :c4433; :b :c4434; :b :c4435; :b :c4436; :b :c4437; :b :c4438; :b :c4439; :b :c4440; :b :c4441; :b :c4442; :b :c4443; :b :c4444; :b :c4445; :b :c4446; :b :c4447; :b :c4448; :b :c4449; :b :c4450; :b :c4451; :b :c4452; :b :c4453; :b :c4454; :b :c4455; :b :c4456; :b :c4457; :b :c4458; :b :c4459; :b :c4460; :b :c4461; :b :c4462; :b :c4463; :b :c4464; :b :c4465; :b :c4466; :b :c4467; :b :c4468; :b :c4469; :b :c4470; :b :c4471; :b :c4472; :b :c4473; :b :c4474; :b :c4475; :b :c4476; :b :c4477; :b :c4478; :b :c4479; :b :c4480; :b :c4481; :b :c4482; :b :c4483; :b :c4484; :b :c4485; :b :c4486; :b :c4487; :b :c4488; :b :c4489; :b :c4490; :b :c4491; :b :c4492; :b :c4493; :b :c4494; :b :c4495; :b :c4496; :b :c4497; :b :c4498; :b :c4499; :b :c4500; :b :c4501; :b :c4502; :b :c4503; :b :c4504; :b :c4505; :b :c4506; :b :c4507; :b :c4508; :b :c4509; :b :c4510; :b :c4511; :b :c4512; :b :c4513; :b :c4514; :b :c4515; :b :c4516; :b :c4517; :b :c4518; :b :c4519; :b :c4520; :b :c4521; :b :c4522; :b :c4523; :b :c4524; :b :c4525; :b :c4526; :b :c4527; :b :c4528; :b :c4529; :b :c4530; :b :c4531; :b :c4532; :b :c4533; :b :c4534; :b :c4535; :b :c4536; :b :c4537; :b :c4538; :b :c4539; :b :c4540; :b :c4541; :b :c4542; :b :c4543; :b :c4544; :b :c4545; :b :c4546; :b :c4547; :b :c4548; :b :c4549; :b :c4550; :b :c4551; :b :c4552; :b :c4553; :b :c4554; :b :c4555; :b :c4556; :b :c4557; :b :c4558; :b :c4559; :b :c4560; :b :c4561; :b :c4562; :b :c4563; :b :c4564; :b :c4565; :b :c4566; :b :c4567; :b :c4568; :b :c4569; :b :c4570; :b :c4571; :b :c4572; :b :c4573; :b :c4574; :b :c4575; :b :c4576; :b :c4577; :b :c4578; :b :c4579; :b :c4580; :b :c4581; :b :c4582; :b :c4583; :b :c4584; :b :c4585; :b :c4586; :b :c4587; :b :c4588; :b :c4589; :b :c4590; :b :c4591; :b :c4592; :b :c4593; :b :c4594; :b :c4595; :b :c4596; :b :c4597; :b :c4598; :b :c4599; :b :c4600; :b :c4601; :b :c4602; :b :c4603; :b :c4604; :b :c4605; :b :c4606; :b :c4607; :b :c4608; :b :c4609; :b :c4610; :b :c4611; :b :c4612; :b :c4613; :b :c4614; :b :c4615; :b :c4616; :b :c4617; :b :c4618; :b :c4619; :b :c4620; :b :c4621; :b :c4622; :b :c4623; :b :c4624; :b :c4625; :b :c4626; :b :c4627; :b :c4628; :b :c4629; :b :c4630; :b :c4631; :b :c4632; :b :c4633; :b :c4634; :b :c4635; :b :c4636; :b :c4637; :b :c4638; :b :c4639; :b :c4640; :b :c4641; :b :c4642; :b :c4643; :b :c4644; :b :c4645; :b :c4646; :b :c4647; :b :c4648; :b :c4649; :b :c4650; :b :c4651; :b :c4652; :b :c4653; :b :c4654; :b :c4655; :b :c4656; :b :c4657; :b :c4658; :b :c4659; :b :c4660; :b :c4661; :b :c4662; :b :c4663; :b :c4664; :b :c4665; :b :c4666; :b :c4667; :b :c4668; :b :c4669; :b :c4670; :b :c4671; :b :c4672; :b :c4673; :b :c4674; :b :c4675; :b :c4676; :b :c4677; :b :c4678; :b :c4679; :b :c4680; :b :c4681; :b :c4682; :b :c4683; :b :c4684; :b :c4685; :b :c4686; :b :c4687; :b :c4688; :b :c4689; :b :c4690; :b :c4691; :b :c4692; :b :c4693; :b :c4694; :b :c4695; :b :c4696; :b :c4697; :b :c4698; :b :c4699; :b :c4700; :b :c4701; :b :c4702; :b :c4703; :b :c4704; :b :c4705; :b :c4706; :b :c4707; :b :c4708; :b :c4709; :b :c4710; :b :c4711; :b :c4712; :b :c4713; :b :c4714; :b :c4715; :b :c4716; :b :c4717; :b :c4718; :b :c4719; :b :c4720; :b :c4721; :b :c4722; :b :c4723; :b :c4724; :b :c4725; :b :c4726; :b :c4727; :b :c4728; :b :c4729; :b :c4730; :b :c4731; :b :c4732; :b :c4733; :b :c4734; :b :c4735; :b :c4736; :b :c4737; :b :c4738; :b :c4739; :b :c4740; :b :c4741; :b :c4742; :b :c4743; :b :c4744; :b :c4745; :b :c4746; :b :c4747; :b :c4748; :b :c4749; :b :c4750; :b :c4751; :b :c4752; :b :c4753; :b :c4754; :b :c4755; :b :c4756; :b :c4757; :b :c4758; :b :c4759; :b :c4760; :b :c4761; :b :c4762; :b :c4763; :b :c4764; :b :c4765; :b :c4766; :b :c4767; :b :c4768; :b :c4769; :b :c4770; :b :c4771; :b :c4772; :b :c4773; :b :c4774; :b :c4775; :b :c4776; :b :c4777; :b :c4778; :b :c4779; :b :c4780; :b :c4781; :b :c4782; :b :c4783; :b :c4784; :b :c4785; :b :c4786; :b :c4787; :b :c4788; :b :c4789; :b :c4790; :b :c4791; :b :c4792; :b :c4793; :b :c4794; :b :c4795; :b :c4796; :b :c4797; :b :c4798; :b :c4799; :b :c4800; :b :c4801; :b :c4802; :b :c4803; :b :c4804; :b :c4805; :b :c4806; :b :c4807; :b :c4808; :b :c4809; :b :c4810; :b :c4811; :b :c4812; :b :c4813; :b :c4814; :b :c4815; :b :c4816; :b :c4817; :b :c4818; :b :c4819; :b :c4820; :b :c4821; :b :c4822; :b :c4823; :b :c4824; :b :c4825; :b :c4826; :b :c4827; :b :c4828; :b :c4829; :b :c4830; :b :c4831; :b :c4832; :b :c4833; :b :c4834; :b :c4835; :b :c4836; :b :c4837; :b :c4838; :b :c4839; :b :c4840; :b :c4841; :b :c4842; :b :c4843; :b :c4844; :b :c4845; :b :c4846; :b :c4847; :b :c4848; :b :c4849; :b :c4850; :b :c4851; :b :c4852; :b :c4853; :b :c4854; :b :c4855; :b :c4856; :b :c4857; :b :c4858; :b :c4859; :b :c4860; :b :c4861; :b :c4862; :b :c4863; :b :c4864; :b :c4865; :b :c4866; :b :c4867; :b :c4868; :b :c4869; :b :c4870; :b :c4871; :b :c4872; :b :c4873; :b :c4874; :b :c4875; :b :c4876; :b :c4877; :b :c4878; :b :c4879; :b :c4880; :b :c4881; :b :c4882; :b :c4883; :b :c4884; :b :c4885; :b :c4886; :b :c4887; :b :c4888; :b :c4889; :b :c4890; :b :c4891; :b :c4892; :b :c4893; :b :c4894; :b :c4895; :b :c4896; :b :c4897; :b :c4898; :b :c4899; :b :c4900; :b :c4901; :b :c4902; :b :c4903; :b :c4904; :b :c4905; :b :c4906; :b :c4907; :b :c4908; :b :c4909; :b :c4910; :b :c4911; :b :c4912; :b :c4913; :b :c4914; :b :c4915; :b :c4916; :b :c4917; :b :c4918; :b :c4919; :b :c4920; :b :c4921; :b :c4922; :b :c4923; :b :c4924; :b :c4925; :b :c4926; :b :c4927; :b :c4928; :b :c4929; :b :c4930; :b :c4931; :b :c4932; :b :c4933; :b :c4934; :b :c4935; :b :c4936; :b :c4937; :b :c4938; :b :c4939; :b :c4940; :b :c4941; :b :c4942; :b :c4943; :b :c4944; :b :c4945; :b :c4946; :b :c4947; :b :c4948; :b :c4949; :b :c4950; :b :c4951; :b :c4952; :b :c4953; :b :c4954; :b :c4955; :b :c4956; :b :c4957; :b :c4958; :b :c4959; :b :c4960; :b :c4961; :b :c4962; :b :c4963; :b :c4964; :b :c4965; :b :c4966; :b :c4967; :b :c4968; :b :c4969; :b :c4970; :b :c4971; :b :c4972; :b :c4973; :b :c4974; :b :c4975; :b :c4976; :b :c4977; :b :c4978; :b :c4979; :b :c4980; :b :c4981; :b :c4982; :b :c4983; :b :c4984; :b :c4985; :b :c4986; :b :c4987; :b :c4988; :b :c4989; :b :c4990; :b :c4991; :b :c4992; :b :c4993; :b :c4994; :b :c4995; :b :c4996; :b :c4997; :b :c4998; :b :c4999; :b :c5000; :b :c5001; :b :c5002; :b :c5003; :b :c5004; :b :c5005; :b :c5006; :b :c5007; :b :c5008; :b :c5009; :b :c5010; :b :c5011; :b :c5012; :b :c5013; :b :c5014; :b :c5015; :b :c5016; :b :c5017; :b :c5018; :b :c5019; :b :c5020; :b :c5021; :b :c5022; :b :c5023; :b :c5024; :b :c5025; :b :c5026; :b :c5027; :b :c5028; :b :c5029; :b :c5030; :b :c5031; :b :c5032; :b :c5033; :b :c5034; :b :c5035; :b :c5036; :b :c5037; :b :c5038; :b :c5039; :b :c5040; :b :c5041; :b :c5042; :b :c5043; :b :c5044; :b :c5045; :b :c5046; :b :c5047; :b :c5048; :b :c5049; :b :c5050; :b :c5051; :b :c5052; :b :c5053; :b :c5054; :b :c5055; :b :c5056; :b :c5057; :b :c5058; :b :c5059; :b :c5060; :b :c5061; :b :c5062; :b :c5063; :b :c5064; :b :c5065; :b :c5066; :b :c5067; :b :c5068; :b :c5069; :b :c5070; :b :c5071; :b :c5072; :b :c5073; :b :c5074; :b :c5075; :b :c5076; :b :c5077; :b :c5078; :b :c5079; :b :c5080; :b :c5081; :b :c5082; :b :c5083; :b :c5084; :b :c5085; :b :c5086; :b :c5087; :b :c5088; :b :c5089; :b :c5090; :b :c5091; :b :c5092; :b :c5093; :b :c5094; :b :c5095; :b :c5096; :b :c5097; :b :c5098; :b :c5099; :b :c5100; :b :c5101; :b :c5102; :b :c5103; :b :c5104; :b :c5105; :b :c5106; :b :c5107; :b :c5108; :b :c5109; :b :c5110; :b :c5111; :b :c5112; :b :c5113; :b :c5114; :b :c5115; :b :c5116; :b :c5117; :b :c5118; :b :c5119; :b :c5120; :b :c5121; :b :c5122; :b :c5123; :b :c5124; :b :c5125; :b :c5126; :b :c5127; :b :c5128; :b :c5129; :b :c5130; :b :c5131; :b :c5132; :b :c5133; :b :c5134; :b :c5135; :b :c5136; :b :c5137; :b :c5138; :b :c5139; :b :c5140; :b :c5141; :b :c5142; :b :c5143; :b :c5144; :b :c5145; :b :c5146; :b :c5147; :b :c5148; :b :c5149; :b :c5150; :b :c5151; :b :c5152; :b :c5153; :b :c5154; :b :c5155; :b :c5156; :b :c5157; :b :c5158; :b :c5159; :b :c5160; :b :c5161; :b :c5162; :b :c5163; :b :c5164; :b :c5165; :b :c5166; :b :c5167; :b :c5168; :b :c5169; :b :c5170; :b :c5171; :b :c5172; :b :c5173; :b :c5174; :b :c5175; :b :c5176; :b :c5177; :b :c5178; :b :c5179; :b :c5180; :b :c5181; :b :c5182; :b :c5183; :b :c5184; :b :c5185; :b :c5186; :b :c5187; :b :c5188; :b :c5189; :b :c5190; :b :c5191; :b :c5192; :b :c5193; :b :c5194; :b :c5195; :b :c5196; :b :c5197; :b :c5198; :b :c5199; :b :c5200; :b :c5201; :b :c5202; :b :c5203; :b :c5204; :b :c5205; :b :c5206; :b :c5207; :b :c5208; :b :c5209; :b :c5210; :b :c5211; :b :c5212; :b :c5213; :b :c5214; :b :c5215; :b :c5216; :b :c5217; :b :c5218; :b :c5219; :b :c5220; :b :c5221; :b :c5222; :b :c5223; :b :c5224; :b :c5225; :b :c5226; :b :c5227; :b :c5228; :b :c5229; :b :c5230; :b :c5231; :b :c5232; :b :c5233; :b :c5234; :b :c5235; :b :c5236; :b :c5237; :b :c5238; :b :c5239; :b :c5240; :b :c5241; :b :c5242; :b :c5243; :b :c5244; :b :c5245; :b :c5246; :b :c5247; :b :c5248; :b :c5249; :b :c5250; :b :c5251; :b :c5252; :b :c5253; :b :c5254; :b :c5255; :b :c5256; :b :c5257; :b :c5258; :b :c5259; :b :c5260; :b :c5261; :b :c5262; :b :c5263; :b :c5264; :b :c5265; :b :c5266; :b :c5267; :b :c5268; :b :c5269; :b :c5270; :b :c5271; :b :c5272; :b :c5273; :b :c5274; :b :c5275; :b :c5276; :b :c5277; :b :c5278; :b :c5279; :b :c5280; :b :c5281; :b :c5282; :b :c5283; :b :c5284; :b :c5285; :b :c5286; :b :c5287; :b :c5288; :b :c5289; :b :c5290; :b :c5291; :b :c5292; :b :c5293; :b :c5294; :b :c5295; :b :c5296; :b :c5297; :b :c5298; :b :c5299; :b :c5300; :b :c5301; :b :c5302; :b :c5303; :b :c5304; :b :c5305; :b :c5306; :b :c5307; :b :c5308; :b :c5309; :b :c5310; :b :c5311; :b :c5312; :b :c5313; :b :c5314; :b :c5315; :b :c5316; :b :c5317; :b :c5318; :b :c5319; :b :c5320; :b :c5321; :b :c5322; :b :c5323; :b :c5324; :b :c5325; :b :c5326; :b :c5327; :b :c5328; :b :c5329; :b :c5330; :b :c5331; :b :c5332; :b :c5333; :b :c5334; :b :c5335; :b :c5336; :b :c5337; :b :c5338; :b :c5339; :b :c5340; :b :c5341; :b :c5342; :b :c5343; :b :c5344; :b :c5345; :b :c5346; :b :c5347; :b :c5348; :b :c5349; :b :c5350; :b :c5351; :b :c5352; :b :c5353; :b :c5354; :b :c5355; :b :c5356; :b :c5357; :b :c5358; :b :c5359; :b :c5360; :b :c5361; :b :c5362; :b :c5363; :b :c5364; :b :c5365; :b :c5366; :b :c5367; :b :c5368; :b :c5369; :b :c5370; :b :c5371; :b :c5372; :b :c5373; :b :c5374; :b :c5375; :b :c5376; :b :c5377; :b :c5378; :b :c5379; :b :c5380; :b :c5381; :b :c5382; :b :c5383; :b :c5384; :b :c5385; :b :c5386; :b :c5387; :b :c5388; :b :c5389; :b :c5390; :b :c5391; :b :c5392; :b :c5393; :b :c5394; :b :c5395; :b :c5396; :b :c5397; :b :c5398; :b :c5399; :b :c5400; :b :c5401; :b :c5402; :b :c5403; :b :c5404; :b :c5405; :b :c5406; :b :c5407; :b :c5408; :b :c5409; :b :c5410; :b :c5411; :b :c5412; :b :c5413; :b :c5414; :b :c5415; :b :c5416; :b :c5417; :b :c5418; :b :c5419; :b :c5420; :b :c5421; :b :c5422; :b :c5423; :b :c5424; :b :c5425; :b :c5426; :b :c5427; :b :c5428; :b :c5429; :b :c5430; :b :c5431; :b :c5432; :b :c5433; :b :c5434; :b :c5435; :b :c5436; :b :c5437; :b :c5438; :b :c5439; :b :c5440; :b :c5441; :b :c5442; :b :c5443; :b :c5444; :b :c5445; :b :c5446; :b :c5447; :b :c5448; :b :c5449; :b :c5450; :b :c5451; :b :c5452; :b :c5453; :b :c5454; :b :c5455; :b :c5456; :b :c5457; :b :c5458; :b :c5459; :b :c5460; :b :c5461; :b :c5462; :b :c5463; :b :c5464; :b :c5465; :b :c5466; :b :c5467; :b :c5468; :b :c5469; :b :c5470; :b :c5471; :b :c5472; :b :c5473; :b :c5474; :b :c5475; :b :c5476; :b :c5477; :b :c5478; :b :c5479; :b :c5480; :b :c5481; :b :c5482; :b :c5483; :b :c5484; :b :c5485; :b :c5486; :b :c5487; :b :c5488; :b :c5489; :b :c5490; :b :c5491; :b :c5492; :b :c5493; :b :c5494; :b :c5495; :b :c5496; :b :c5497; :b :c5498; :b :c5499; :b :c5500; :b :c5501; :b :c5502; :b :c5503; :b :c5504; :b :c5505; :b :c5506; :b :c5507; :b :c5508; :b :c5509; :b :c5510; :b :c5511; :b :c5512; :b :c5513; :b :c5514; :b :c5515; :b :c5516; :b :c5517; :b :c5518; :b :c5519; :b :c5520; :b :c5521; :b :c5522; :b :c5523; :b :c5524; :b :c5525; :b :c5526; :b :c5527; :b :c5528; :b :c5529; :b :c5530; :b :c5531; :b :c5532; :b :c5533; :b :c5534; :b :c5535; :b :c5536; :b :c5537; :b :c5538; :b :c5539; :b :c5540; :b :c5541; :b :c5542; :b :c5543; :b :c5544; :b :c5545; :b :c5546; :b :c5547; :b :c5548; :b :c5549; :b :c5550; :b :c5551; :b :c5552; :b :c5553; :b :c5554; :b :c5555; :b :c5556; :b :c5557; :b :c5558; :b :c5559; :b :c5560; :b :c5561; :b :c5562; :b :c5563; :b :c5564; :b :c5565; :b :c5566; :b :c5567; :b :c5568; :b :c5569; :b :c5570; :b :c5571; :b :c5572; :b :c5573; :b :c5574; :b :c5575; :b :c5576; :b :c5577; :b :c5578; :b :c5579; :b :c5580; :b :c5581; :b :c5582; :b :c5583; :b :c5584; :b :c5585; :b :c5586; :b :c5587; :b :c5588; :b :c5589; :b :c5590; :b :c5591; :b :c5592; :b :c5593; :b :c5594; :b :c5595; :b :c5596; :b :c5597; :b :c5598; :b :c5599; :b :c5600; :b :c5601; :b :c5602; :b :c5603; :b :c5604; :b :c5605; :b :c5606; :b :c5607; :b :c5608; :b :c5609; :b :c5610; :b :c5611; :b :c5612; :b :c5613; :b :c5614; :b :c5615; :b :c5616; :b :c5617; :b :c5618; :b :c5619; :b :c5620; :b :c5621; :b :c5622; :b :c5623; :b :c5624; :b :c5625; :b :c5626; :b :c5627; :b :c5628; :b :c5629; :b :c5630; :b :c5631; :b :c5632; :b :c5633; :b :c5634; :b :c5635; :b :c5636; :b :c5637; :b :c5638; :b :c5639; :b :c5640; :b :c5641; :b :c5642; :b :c5643; :b :c5644; :b :c5645; :b :c5646; :b :c5647; :b :c5648; :b :c5649; :b :c5650; :b :c5651; :b :c5652; :b :c5653; :b :c5654; :b :c5655; :b :c5656; :b :c5657; :b :c5658; :b :c5659; :b :c5660; :b :c5661; :b :c5662; :b :c5663; :b :c5664; :b :c5665; :b :c5666; :b :c5667; :b :c5668; :b :c5669; :b :c5670; :b :c5671; :b :c5672; :b :c5673; :b :c5674; :b :c5675; :b :c5676; :b :c5677; :b :c5678; :b :c5679; :b :c5680; :b :c5681; :b :c5682; :b :c5683; :b :c5684; :b :c5685; :b :c5686; :b :c5687; :b :c5688; :b :c5689; :b :c5690; :b :c5691; :b :c5692; :b :c5693; :b :c5694; :b :c5695; :b :c5696; :b :c5697; :b :c5698; :b :c5699; :b :c5700; :b :c5701; :b :c5702; :b :c5703; :b :c5704; :b :c5705; :b :c5706; :b :c5707; :b :c5708; :b :c5709; :b :c5710; :b :c5711; :b :c5712; :b :c5713; :b :c5714; :b :c5715; :b :c5716; :b :c5717; :b :c5718; :b :c5719; :b :c5720; :b :c5721; :b :c5722; :b :c5723; :b :c5724; :b :c5725; :b :c5726; :b :c5727; :b :c5728; :b :c5729; :b :c5730; :b :c5731; :b :c5732; :b :c5733; :b :c5734; :b :c5735; :b :c5736; :b :c5737; :b :c5738; :b :c5739; :b :c5740; :b :c5741; :b :c5742; :b :c5743; :b :c5744; :b :c5745; :b :c5746; :b :c5747; :b :c5748; :b :c5749; :b :c5750; :b :c5751; :b :c5752; :b :c5753; :b :c5754; :b :c5755; :b :c5756; :b :c5757; :b :c5758; :b :c5759; :b :c5760; :b :c5761; :b :c5762; :b :c5763; :b :c5764; :b :c5765; :b :c5766; :b :c5767; :b :c5768; :b :c5769; :b :c5770; :b :c5771; :b :c5772; :b :c5773; :b :c5774; :b :c5775; :b :c5776; :b :c5777; :b :c5778; :b :c5779; :b :c5780; :b :c5781; :b :c5782; :b :c5783; :b :c5784; :b :c5785; :b :c5786; :b :c5787; :b :c5788; :b :c5789; :b :c5790; :b :c5791; :b :c5792; :b :c5793; :b :c5794; :b :c5795; :b :c5796; :b :c5797; :b :c5798; :b :c5799; :b :c5800; :b :c5801; :b :c5802; :b :c5803; :b :c5804; :b :c5805; :b :c5806; :b :c5807; :b :c5808; :b :c5809; :b :c5810; :b :c5811; :b :c5812; :b :c5813; :b :c5814; :b :c5815; :b :c5816; :b :c5817; :b :c5818; :b :c5819; :b :c5820; :b :c5821; :b :c5822; :b :c5823; :b :c5824; :b :c5825; :b :c5826; :b :c5827; :b :c5828; :b :c5829; :b :c5830; :b :c5831; :b :c5832; :b :c5833; :b :c5834; :b :c5835; :b :c5836; :b :c5837; :b :c5838; :b :c5839; :b :c5840; :b :c5841; :b :c5842; :b :c5843; :b :c5844; :b :c5845; :b :c5846; :b :c5847; :b :c5848; :b :c5849; :b :c5850; :b :c5851; :b :c5852; :b :c5853; :b :c5854; :b :c5855; :b :c5856; :b :c5857; :b :c5858; :b :c5859; :b :c5860; :b :c5861; :b :c5862; :b :c5863; :b :c5864; :b :c5865; :b :c5866; :b :c5867; :b :c5868; :b :c5869; :b :c5870; :b :c5871; :b :c5872; :b :c5873; :b :c5874; :b :c5875; :b :c5876; :b :c5877; :b :c5878; :b :c5879; :b :c5880; :b :c5881; :b :c5882; :b :c5883; :b :c5884; :b :c5885; :b :c5886; :b :c5887; :b :c5888; :b :c5889; :b :c5890; :b :c5891; :b :c5892; :b :c5893; :b :c5894; :b :c5895; :b :c5896; :b :c5897; :b :c5898; :b :c5899; :b :c5900; :b :c5901; :b :c5902; :b :c5903; :b :c5904; :b :c5905; :b :c5906; :b :c5907; :b :c5908; :b :c5909; :b :c5910; :b :c5911; :b :c5912; :b :c5913; :b :c5914; :b :c5915; :b :c5916; :b :c5917; :b :c5918; :b :c5919; :b :c5920; :b :c5921; :b :c5922; :b :c5923; :b :c5924; :b :c5925; :b :c5926; :b :c5927; :b :c5928; :b :c5929; :b :c5930; :b :c5931; :b :c5932; :b :c5933; :b :c5934; :b :c5935; :b :c5936; :b :c5937; :b :c5938; :b :c5939; :b :c5940; :b :c5941; :b :c5942; :b :c5943; :b :c5944; :b :c5945; :b :c5946; :b :c5947; :b :c5948; :b :c5949; :b :c5950; :b :c5951; :b :c5952; :b :c5953; :b :c5954; :b :c5955; :b :c5956; :b :c5957; :b :c5958; :b :c5959; :b :c5960; :b :c5961; :b :c5962; :b :c5963; :b :c5964; :b :c5965; :b :c5966; :b :c5967; :b :c5968; :b :c5969; :b :c5970; :b :c5971; :b :c5972; :b :c5973; :b :c5974; :b :c5975; :b :c5976; :b :c5977; :b :c5978; :b :c5979; :b :c5980; :b :c5981; :b :c5982; :b :c5983; :b :c5984; :b :c5985; :b :c5986; :b :c5987; :b :c5988; :b :c5989; :b :c5990; :b :c5991; :b :c5992; :b :c5993; :b :c5994; :b :c5995; :b :c5996; :b :c5997; :b :c5998; :b :c5999; :b :c6000; :b :c6001; :b :c6002; :b :c6003; :b :c6004; :b :c6005; :b :c6006; :b :c6007; :b :c6008; :b :c6009; :b :c6010; :b :c6011; :b :c6012; :b :c6013; :b :c6014; :b :c6015; :b :c6016; :b :c6017; :b :c6018; :b :c6019; :b :c6020; :b :c6021; :b :c6022; :b :c6023; :b :c6024; :b :c6025; :b :c6026; :b :c6027; :b :c6028; :b :c6029; :b :c6030; :b :c6031; :b :c6032; :b :c6033; :b :c6034; :b :c6035; :b :c6036; :b :c6037; :b :c6038; :b :c6039; :b :c6040; :b :c6041; :b :c6042; :b :c6043; :b :c6044; :b :c6045; :b :c6046; :b :c6047; :b :c6048; :b :c6049; :b :c6050; :b :c6051; :b :c6052; :b :c6053; :b :c6054; :b :c6055; :b :c6056; :b :c6057; :b :c6058; :b :c6059; :b :c6060; :b :c6061; :b :c6062; :b :c6063; :b :c6064; :b :c6065; :b :c6066; :b :c6067; :b :c6068; :b :c6069; :b :c6070; :b :c6071; :b :c6072; :b :c6073; :b :c6074; :b :c6075; :b :c6076; :b :c6077; :b :c6078; :b :c6079; :b :c6080; :b :c6081; :b :c6082; :b :c6083; :b :c6084; :b :c6085; :b :c6086; :b :c6087; :b :c6088; :b :c6089; :b :c6090; :b :c6091; :b :c6092; :b :c6093; :b :c6094; :b :c6095; :b :c6096; :b :c6097; :b :c6098; :b :c6099; :b :c6100; :b :c6101; :b :c6102; :b :c6103; :b :c6104; :b :c6105; :b :c6106; :b :c6107; :b :c6108; :b :c6109; :b :c6110; :b :c6111; :b :c6112; :b :c6113; :b :c6114; :b :c6115; :b :c6116; :b :c6117; :b :c6118; :b :c6119; :b :c6120; :b :c6121; :b :c6122; :b :c6123; :b :c6124; :b :c6125; :b :c6126; :b :c6127; :b :c6128; :b :c6129; :b :c6130; :b :c6131; :b :c6132; :b :c6133; :b :c6134; :b :c6135; :b :c6136; :b :c6137; :b :c6138; :b :c6139; :b :c6140; :b :c6141; :b :c6142; :b :c6143; :b :c6144; :b :c6145; :b :c6146; :b :c6147; :b :c6148; :b :c6149; :b :c6150; :b :c6151; :b :c6152; :b :c6153; :b :c6154; :b :c6155; :b :c6156; :b :c6157; :b :c6158; :b :c6159; :b :c6160; :b :c6161; :b :c6162; :b :c6163; :b :c6164; :b :c6165; :b :c6166; :b :c6167; :b :c6168; :b :c6169; :b :c6170; :b :c6171; :b :c6172; :b :c6173; :b :c6174; :b :c6175; :b :c6176; :b :c6177; :b :c6178; :b :c6179; :b :c6180; :b :c6181; :b :c6182; :b :c6183; :b :c6184; :b :c6185; :b :c6186; :b :c6187; :b :c6188; :b :c6189; :b :c6190; :b :c6191; :b :c6192; :b :c6193; :b :c6194; :b :c6195; :b :c6196; :b :c6197; :b :c6198; :b :c6199; :b :c6200; :b :c6201; :b :c6202; :b :c6203; :b :c6204; :b :c6205; :b :c6206; :b :c6207; :b :c6208; :b :c6209; :b :c6210; :b :c6211; :b :c6212; :b :c6213; :b :c6214; :b :c6215; :b :c6216; :b :c6217; :b :c6218; :b :c6219; :b :c6220; :b :c6221; :b :c6222; :b :c6223; :b :c6224; :b :c6225; :b :c6226; :b :c6227; :b :c6228; :b :c6229; :b :c6230; :b :c6231; :b :c6232; :b :c6233; :b :c6234; :b :c6235; :b :c6236; :b :c6237; :b :c6238; :b :c6239; :b :c6240; :b :c6241; :b :c6242; :b :c6243; :b :c6244; :b :c6245; :b :c6246; :b :c6247; :b :c6248; :b :c6249; :b :c6250; :b :c6251; :b :c6252; :b :c6253; :b :c6254; :b :c6255; :b :c6256; :b :c6257; :b :c6258; :b :c6259; :b :c6260; :b :c6261; :b :c6262; :b :c6263; :b :c6264; :b :c6265; :b :c6266; :b :c6267; :b :c6268; :b :c6269; :b :c6270; :b :c6271; :b :c6272; :b :c6273; :b :c6274; :b :c6275; :b :c6276; :b :c6277; :b :c6278; :b :c6279; :b :c6280; :b :c6281; :b :c6282; :b :c6283; :b :c6284; :b :c6285; :b :c6286; :b :c6287; :b :c6288; :b :c6289; :b :c6290; :b :c6291; :b :c6292; :b :c6293; :b :c6294; :b :c6295; :b :c6296; :b :c6297; :b :c6298; :b :c6299; :b :c6300; :b :c6301; :b :c6302; :b :c6303; :b :c6304; :b :c6305; :b :c6306; :b :c6307; :b :c6308; :b :c6309; :b :c6310; :b :c6311; :b :c6312; :b :c6313; :b :c6314; :b :c6315; :b :c6316; :b :c6317; :b :c6318; :b :c6319; :b :c6320; :b :c6321; :b :c6322; :b :c6323; :b :c6324; :b :c6325; :b :c6326; :b :c6327; :b :c6328; :b :c6329; :b :c6330; :b :c6331; :b :c6332; :b :c6333; :b :c6334; :b :c6335; :b :c6336; :b :c6337; :b :c6338; :b :c6339; :b :c6340; :b :c6341; :b :c6342; :b :c6343; :b :c6344; :b :c6345; :b :c6346; :b :c6347; :b :c6348; :b :c6349; :b :c6350; :b :c6351; :b :c6352; :b :c6353; :b :c6354; :b :c6355; :b :c6356; :b :c6357; :b :c6358; :b :c6359; :b :c6360; :b :c6361; :b :c6362; :b :c6363; :b :c6364; :b :c6365; :b :c6366; :b :c6367; :b :c6368; :b :c6369; :b :c6370; :b :c6371; :b :c6372; :b :c6373; :b :c6374; :b :c6375; :b :c6376; :b :c6377; :b :c6378; :b :c6379; :b :c6380; :b :c6381; :b :c6382; :b :c6383; :b :c6384; :b :c6385; :b :c6386; :b :c6387; :b :c6388; :b :c6389; :b :c6390; :b :c6391; :b :c6392; :b :c6393; :b :c6394; :b :c6395; :b :c6396; :b :c6397; :b :c6398; :b :c6399; :b :c6400; :b :c6401; :b :c6402; :b :c6403; :b :c6404; :b :c6405; :b :c6406; :b :c6407; :b :c6408; :b :c6409; :b :c6410; :b :c6411; :b :c6412; :b :c6413; :b :c6414; :b :c6415; :b :c6416; :b :c6417; :b :c6418; :b :c6419; :b :c6420; :b :c6421; :b :c6422; :b :c6423; :b :c6424; :b :c6425; :b :c6426; :b :c6427; :b :c6428; :b :c6429; :b :c6430; :b :c6431; :b :c6432; :b :c6433; :b :c6434; :b :c6435; :b :c6436; :b :c6437; :b :c6438; :b :c6439; :b :c6440; :b :c6441; :b :c6442; :b :c6443; :b :c6444; :b :c6445; :b :c6446; :b :c6447; :b :c6448; :b :c6449; :b :c6450; :b :c6451; :b :c6452; :b :c6453; :b :c6454; :b :c6455; :b :c6456; :b :c6457; :b :c6458; :b :c6459; :b :c6460; :b :c6461; :b :c6462; :b :c6463; :b :c6464; :b :c6465; :b :c6466; :b :c6467; :b :c6468; :b :c6469; :b :c6470; :b :c6471; :b :c6472; :b :c6473; :b :c6474; :b :c6475; :b :c6476; :b :c6477; :b :c6478; :b :c6479; :b :c6480; :b :c6481; :b :c6482; :b :c6483; :b :c6484; :b :c6485; :b :c6486; :b :c6487; :b :c6488; :b :c6489; :b :c6490; :b :c6491; :b :c6492; :b :c6493; :b :c6494; :b :c6495; :b :c6496; :b :c6497; :b :c6498; :b :c6499; :b :c6500; :b :c6501; :b :c6502; :b :c6503; :b :c6504; :b :c6505; :b :c6506; :b :c6507; :b :c6508; :b :c6509; :b :c6510; :b :c6511; :b :c6512; :b :c6513; :b :c6514; :b :c6515; :b :c6516; :b :c6517; :b :c6518; :b :c6519; :b :c6520; :b :c6521; :b :c6522; :b :c6523; :b :c6524; :b :c6525; :b :c6526; :b :c6527; :b :c6528; :b :c6529; :b :c6530; :b :c6531; :b :c6532; :b :c6533; :b :c6534; :b :c6535; :b :c6536; :b :c6537; :b :c6538; :b :c6539; :b :c6540; :b :c6541; :b :c6542; :b :c6543; :b :c6544; :b :c6545; :b :c6546; :b :c6547; :b :c6548; :b :c6549; :b :c6550; :b :c6551; :b :c6552; :b :c6553; :b :c6554; :b :c6555; :b :c6556; :b :c6557; :b :c6558; :b :c6559; :b :c6560; :b :c6561; :b :c6562; :b :c6563; :b :c6564; :b :c6565; :b :c6566; :b :c6567; :b :c6568; :b :c6569; :b :c6570; :b :c6571; :b :c6572; :b :c6573; :b :c6574; :b :c6575; :b :c6576; :b :c6577; :b :c6578; :b :c6579; :b :c6580; :b :c6581; :b :c6582; :b :c6583; :b :c6584; :b :c6585; :b :c6586; :b :c6587; :b :c6588; :b :c6589; :b :c6590; :b :c6591; :b :c6592; :b :c6593; :b :c6594; :b :c6595; :b :c6596; :b :c6597; :b :c6598; :b :c6599; :b :c6600; :b :c6601; :b :c6602; :b :c6603; :b :c6604; :b :c6605; :b :c6606; :b :c6607; :b :c6608; :b :c6609; :b :c6610; :b :c6611; :b :c6612; :b :c6613; :b :c6614; :b :c6615; :b :c6616; :b :c6617; :b :c6618; :b :c6619; :b :c6620; :b :c6621; :b :c6622; :b :c6623; :b :c6624; :b :c6625; :b :c6626; :b :c6627; :b :c6628; :b :c6629; :b :c6630; :b :c6631; :b :c6632; :b :c6633; :b :c6634; :b :c6635; :b :c6636; :b :c6637; :b :c6638; :b :c6639; :b :c6640; :b :c6641; :b :c6642; :b :c6643; :b :c6644; :b :c6645; :b :c6646; :b :c6647; :b :c6648; :b :c6649; :b :c6650; :b :c6651; :b :c6652; :b :c6653; :b :c6654; :b :c6655; :b :c6656; :b :c6657; :b :c6658; :b :c6659; :b :c6660; :b :c6661; :b :c6662; :b :c6663; :b :c6664; :b :c6665; :b :c6666; :b :c6667; :b :c6668; :b :c6669; :b :c6670; :b :c6671; :b :c6672; :b :c6673; :b :c6674; :b :c6675; :b :c6676; :b :c6677; :b :c6678; :b :c6679; :b :c6680; :b :c6681; :b :c6682; :b :c6683; :b :c6684; :b :c6685; :b :c6686; :b :c6687; :b :c6688; :b :c6689; :b :c6690; :b :c6691; :b :c6692; :b :c6693; :b :c6694; :b :c6695; :b :c6696; :b :c6697; :b :c6698; :b :c6699; :b :c6700; :b :c6701; :b :c6702; :b :c6703; :b :c6704; :b :c6705; :b :c6706; :b :c6707; :b :c6708; :b :c6709; :b :c6710; :b :c6711; :b :c6712; :b :c6713; :b :c6714; :b :c6715; :b :c6716; :b :c6717; :b :c6718; :b :c6719; :b :c6720; :b :c6721; :b :c6722; :b :c6723; :b :c6724; :b :c6725; :b :c6726; :b :c6727; :b :c6728; :b :c6729; :b :c6730; :b :c6731; :b :c6732; :b :c6733; :b :c6734; :b :c6735; :b :c6736; :b :c6737; :b :c6738; :b :c6739; :b :c6740; :b :c6741; :b :c6742; :b :c6743; :b :c6744; :b :c6745; :b :c6746; :b :c6747; :b :c6748; :b :c6749; :b :c6750; :b :c6751; :b :c6752; :b :c6753; :b :c6754; :b :c6755; :b :c6756; :b :c6757; :b :c6758; :b :c6759; :b :c6760; :b :c6761; :b :c6762; :b :c6763; :b :c6764; :b :c6765; :b :c6766; :b :c6767; :b :c6768; :b :c6769; :b :c6770; :b :c6771; :b :c6772; :b :c6773; :b :c6774; :b :c6775; :b :c6776; :b :c6777; :b :c6778; :b :c6779; :b :c6780; :b :c6781; :b :c6782; :b :c6783; :b :c6784; :b :c6785; :b :c6786; :b :c6787; :b :c6788; :b :c6789; :b :c6790; :b :c6791; :b :c6792; :b :c6793; :b :c6794; :b :c6795; :b :c6796; :b :c6797; :b :c6798; :b :c6799; :b :c6800; :b :c6801; :b :c6802; :b :c6803; :b :c6804; :b :c6805; :b :c6806; :b :c6807; :b :c6808; :b :c6809; :b :c6810; :b :c6811; :b :c6812; :b :c6813; :b :c6814; :b :c6815; :b :c6816; :b :c6817; :b :c6818; :b :c6819; :b :c6820; :b :c6821; :b :c6822; :b :c6823; :b :c6824; :b :c6825; :b :c6826; :b :c6827; :b :c6828; :b :c6829; :b :c6830; :b :c6831; :b :c6832; :b :c6833; :b :c6834; :b :c6835; :b :c6836; :b :c6837; :b :c6838; :b :c6839; :b :c6840; :b :c6841; :b :c6842; :b :c6843; :b :c6844; :b :c6845; :b :c6846; :b :c6847; :b :c6848; :b :c6849; :b :c6850; :b :c6851; :b :c6852; :b :c6853; :b :c6854; :b :c6855; :b :c6856; :b :c6857; :b :c6858; :b :c6859; :b :c6860; :b :c6861; :b :c6862; :b :c6863; :b :c6864; :b :c6865; :b :c6866; :b :c6867; :b :c6868; :b :c6869; :b :c6870; :b :c6871; :b :c6872; :b :c6873; :b :c6874; :b :c6875; :b :c6876; :b :c6877; :b :c6878; :b :c6879; :b :c6880; :b :c6881; :b :c6882; :b :c6883; :b :c6884; :b :c6885; :b :c6886; :b :c6887; :b :c6888; :b :c6889; :b :c6890; :b :c6891; :b :c6892; :b :c6893; :b :c6894; :b :c6895; :b :c6896; :b :c6897; :b :c6898; :b :c6899; :b :c6900; :b :c6901; :b :c6902; :b :c6903; :b :c6904; :b :c6905; :b :c6906; :b :c6907; :b :c6908; :b :c6909; :b :c6910; :b :c6911; :b :c6912; :b :c6913; :b :c6914; :b :c6915; :b :c6916; :b :c6917; :b :c6918; :b :c6919; :b :c6920; :b :c6921; :b :c6922; :b :c6923; :b :c6924; :b :c6925; :b :c6926; :b :c6927; :b :c6928; :b :c6929; :b :c6930; :b :c6931; :b :c6932; :b :c6933; :b :c6934; :b :c6935; :b :c6936; :b :c6937; :b :c6938; :b :c6939; :b :c6940; :b :c6941; :b :c6942; :b :c6943; :b :c6944; :b :c6945; :b :c6946; :b :c6947; :b :c6948; :b :c6949; :b :c6950; :b :c6951; :b :c6952; :b :c6953; :b :c6954; :b :c6955; :b :c6956; :b :c6957; :b :c6958; :b :c6959; :b :c6960; :b :c6961; :b :c6962; :b :c6963; :b :c6964; :b :c6965; :b :c6966; :b :c6967; :b :c6968; :b :c6969; :b :c6970; :b :c6971; :b :c6972; :b :c6973; :b :c6974; :b :c6975; :b :c6976; :b :c6977; :b :c6978; :b :c6979; :b :c6980; :b :c6981; :b :c6982; :b :c6983; :b :c6984; :b :c6985; :b :c6986; :b :c6987; :b :c6988; :b :c6989; :b :c6990; :b :c6991; :b :c6992; :b :c6993; :b :c6994; :b :c6995; :b :c6996; :b :c6997; :b :c6998; :b :c6999; :b :c7000; :b :c7001; :b :c7002; :b :c7003; :b :c7004; :b :c7005; :b :c7006; :b :c7007; :b :c7008; :b :c7009; :b :c7010; :b :c7011; :b :c7012; :b :c7013; :b :c7014; :b :c7015; :b :c7016; :b :c7017; :b :c7018; :b :c7019; :b :c7020; :b :c7021; :b :c7022; :b :c7023; :b :c7024; :b :c7025; :b :c7026; :b :c7027; :b :c7028; :b :c7029; :b :c7030; :b :c7031; :b :c7032; :b :c7033; :b :c7034; :b :c7035; :b :c7036; :b :c7037; :b :c7038; :b :c7039; :b :c7040; :b :c7041; :b :c7042; :b :c7043; :b :c7044; :b :c7045; :b :c7046; :b :c7047; :b :c7048; :b :c7049; :b :c7050; :b :c7051; :b :c7052; :b :c7053; :b :c7054; :b :c7055; :b :c7056; :b :c7057; :b :c7058; :b :c7059; :b :c7060; :b :c7061; :b :c7062; :b :c7063; :b :c7064; :b :c7065; :b :c7066; :b :c7067; :b :c7068; :b :c7069; :b :c7070; :b :c7071; :b :c7072; :b :c7073; :b :c7074; :b :c7075; :b :c7076; :b :c7077; :b :c7078; :b :c7079; :b :c7080; :b :c7081; :b :c7082; :b :c7083; :b :c7084; :b :c7085; :b :c7086; :b :c7087; :b :c7088; :b :c7089; :b :c7090; :b :c7091; :b :c7092; :b :c7093; :b :c7094; :b :c7095; :b :c7096; :b :c7097; :b :c7098; :b :c7099; :b :c7100; :b :c7101; :b :c7102; :b :c7103; :b :c7104; :b :c7105; :b :c7106; :b :c7107; :b :c7108; :b :c7109; :b :c7110; :b :c7111; :b :c7112; :b :c7113; :b :c7114; :b :c7115; :b :c7116; :b :c7117; :b :c7118; :b :c7119; :b :c7120; :b :c7121; :b :c7122; :b :c7123; :b :c7124; :b :c7125; :b :c7126; :b :c7127; :b :c7128; :b :c7129; :b :c7130; :b :c7131; :b :c7132; :b :c7133; :b :c7134; :b :c7135; :b :c7136; :b :c7137; :b :c7138; :b :c7139; :b :c7140; :b :c7141; :b :c7142; :b :c7143; :b :c7144; :b :c7145; :b :c7146; :b :c7147; :b :c7148; :b :c7149; :b :c7150; :b :c7151; :b :c7152; :b :c7153; :b :c7154; :b :c7155; :b :c7156; :b :c7157; :b :c7158; :b :c7159; :b :c7160; :b :c7161; :b :c7162; :b :c7163; :b :c7164; :b :c7165; :b :c7166; :b :c7167; :b :c7168; :b :c7169; :b :c7170; :b :c7171; :b :c7172; :b :c7173; :b :c7174; :b :c7175; :b :c7176; :b :c7177; :b :c7178; :b :c7179; :b :c7180; :b :c7181; :b :c7182; :b :c7183; :b :c7184; :b :c7185; :b :c7186; :b :c7187; :b :c7188; :b :c7189; :b :c7190; :b :c7191; :b :c7192; :b :c7193; :b :c7194; :b :c7195; :b :c7196; :b :c7197; :b :c7198; :b :c7199; :b :c7200; :b :c7201; :b :c7202; :b :c7203; :b :c7204; :b :c7205; :b :c7206; :b :c7207; :b :c7208; :b :c7209; :b :c7210; :b :c7211; :b :c7212; :b :c7213; :b :c7214; :b :c7215; :b :c7216; :b :c7217; :b :c7218; :b :c7219; :b :c7220; :b :c7221; :b :c7222; :b :c7223; :b :c7224; :b :c7225; :b :c7226; :b :c7227; :b :c7228; :b :c7229; :b :c7230; :b :c7231; :b :c7232; :b :c7233; :b :c7234; :b :c7235; :b :c7236; :b :c7237; :b :c7238; :b :c7239; :b :c7240; :b :c7241; :b :c7242; :b :c7243; :b :c7244; :b :c7245; :b :c7246; :b :c7247; :b :c7248; :b :c7249; :b :c7250; :b :c7251; :b :c7252; :b :c7253; :b :c7254; :b :c7255; :b :c7256; :b :c7257; :b :c7258; :b :c7259; :b :c7260; :b :c7261; :b :c7262; :b :c7263; :b :c7264; :b :c7265; :b :c7266; :b :c7267; :b :c7268; :b :c7269; :b :c7270; :b :c7271; :b :c7272; :b :c7273; :b :c7274; :b :c7275; :b :c7276; :b :c7277; :b :c7278; :b :c7279; :b :c7280; :b :c7281; :b :c7282; :b :c7283; :b :c7284; :b :c7285; :b :c7286; :b :c7287; :b :c7288; :b :c7289; :b :c7290; :b :c7291; :b :c7292; :b :c7293; :b :c7294; :b :c7295; :b :c7296; :b :c7297; :b :c7298; :b :c7299; :b :c7300; :b :c7301; :b :c7302; :b :c7303; :b :c7304; :b :c7305; :b :c7306; :b :c7307; :b :c7308; :b :c7309; :b :c7310; :b :c7311; :b :c7312; :b :c7313; :b :c7314; :b :c7315; :b :c7316; :b :c7317; :b :c7318; :b :c7319; :b :c7320; :b :c7321; :b :c7322; :b :c7323; :b :c7324; :b :c7325; :b :c7326; :b :c7327; :b :c7328; :b :c7329; :b :c7330; :b :c7331; :b :c7332; :b :c7333; :b :c7334; :b :c7335; :b :c7336; :b :c7337; :b :c7338; :b :c7339; :b :c7340; :b :c7341; :b :c7342; :b :c7343; :b :c7344; :b :c7345; :b :c7346; :b :c7347; :b :c7348; :b :c7349; :b :c7350; :b :c7351; :b :c7352; :b :c7353; :b :c7354; :b :c7355; :b :c7356; :b :c7357; :b :c7358; :b :c7359; :b :c7360; :b :c7361; :b :c7362; :b :c7363; :b :c7364; :b :c7365; :b :c7366; :b :c7367; :b :c7368; :b :c7369; :b :c7370; :b :c7371; :b :c7372; :b :c7373; :b :c7374; :b :c7375; :b :c7376; :b :c7377; :b :c7378; :b :c7379; :b :c7380; :b :c7381; :b :c7382; :b :c7383; :b :c7384; :b :c7385; :b :c7386; :b :c7387; :b :c7388; :b :c7389; :b :c7390; :b :c7391; :b :c7392; :b :c7393; :b :c7394; :b :c7395; :b :c7396; :b :c7397; :b :c7398; :b :c7399; :b :c7400; :b :c7401; :b :c7402; :b :c7403; :b :c7404; :b :c7405; :b :c7406; :b :c7407; :b :c7408; :b :c7409; :b :c7410; :b :c7411; :b :c7412; :b :c7413; :b :c7414; :b :c7415; :b :c7416; :b :c7417; :b :c7418; :b :c7419; :b :c7420; :b :c7421; :b :c7422; :b :c7423; :b :c7424; :b :c7425; :b :c7426; :b :c7427; :b :c7428; :b :c7429; :b :c7430; :b :c7431; :b :c7432; :b :c7433; :b :c7434; :b :c7435; :b :c7436; :b :c7437; :b :c7438; :b :c7439; :b :c7440; :b :c7441; :b :c7442; :b :c7443; :b :c7444; :b :c7445; :b :c7446; :b :c7447; :b :c7448; :b :c7449; :b :c7450; :b :c7451; :b :c7452; :b :c7453; :b :c7454; :b :c7455; :b :c7456; :b :c7457; :b :c7458; :b :c7459; :b :c7460; :b :c7461; :b :c7462; :b :c7463; :b :c7464; :b :c7465; :b :c7466; :b :c7467; :b :c7468; :b :c7469; :b :c7470; :b :c7471; :b :c7472; :b :c7473; :b :c7474; :b :c7475; :b :c7476; :b :c7477; :b :c7478; :b :c7479; :b :c7480; :b :c7481; :b :c7482; :b :c7483; :b :c7484; :b :c7485; :b :c7486; :b :c7487; :b :c7488; :b :c7489; :b :c7490; :b :c7491; :b :c7492; :b :c7493; :b :c7494; :b :c7495; :b :c7496; :b :c7497; :b :c7498; :b :c7499; :b :c7500; :b :c7501; :b :c7502; :b :c7503; :b :c7504; :b :c7505; :b :c7506; :b :c7507; :b :c7508; :b :c7509; :b :c7510; :b :c7511; :b :c7512; :b :c7513; :b :c7514; :b :c7515; :b :c7516; :b :c7517; :b :c7518; :b :c7519; :b :c7520; :b :c7521; :b :c7522; :b :c7523; :b :c7524; :b :c7525; :b :c7526; :b :c7527; :b :c7528; :b :c7529; :b :c7530; :b :c7531; :b :c7532; :b :c7533; :b :c7534; :b :c7535; :b :c7536; :b :c7537; :b :c7538; :b :c7539; :b :c7540; :b :c7541; :b :c7542; :b :c7543; :b :c7544; :b :c7545; :b :c7546; :b :c7547; :b :c7548; :b :c7549; :b :c7550; :b :c7551; :b :c7552; :b :c7553; :b :c7554; :b :c7555; :b :c7556; :b :c7557; :b :c7558; :b :c7559; :b :c7560; :b :c7561; :b :c7562; :b :c7563; :b :c7564; :b :c7565; :b :c7566; :b :c7567; :b :c7568; :b :c7569; :b :c7570; :b :c7571; :b :c7572; :b :c7573; :b :c7574; :b :c7575; :b :c7576; :b :c7577; :b :c7578; :b :c7579; :b :c7580; :b :c7581; :b :c7582; :b :c7583; :b :c7584; :b :c7585; :b :c7586; :b :c7587; :b :c7588; :b :c7589; :b :c7590; :b :c7591; :b :c7592; :b :c7593; :b :c7594; :b :c7595; :b :c7596; :b :c7597; :b :c7598; :b :c7599; :b :c7600; :b :c7601; :b :c7602; :b :c7603; :b :c7604; :b :c7605; :b :c7606; :b :c7607; :b :c7608; :b :c7609; :b :c7610; :b :c7611; :b :c7612; :b :c7613; :b :c7614; :b :c7615; :b :c7616; :b :c7617; :b :c7618; :b :c7619; :b :c7620; :b :c7621; :b :c7622; :b :c7623; :b :c7624; :b :c7625; :b :c7626; :b :c7627; :b :c7628; :b :c7629; :b :c7630; :b :c7631; :b :c7632; :b :c7633; :b :c7634; :b :c7635; :b :c7636; :b :c7637; :b :c7638; :b :c7639; :b :c7640; :b :c7641; :b :c7642; :b :c7643; :b :c7644; :b :c7645; :b :c7646; :b :c7647; :b :c7648; :b :c7649; :b :c7650; :b :c7651; :b :c7652; :b :c7653; :b :c7654; :b :c7655; :b :c7656; :b :c7657; :b :c7658; :b :c7659; :b :c7660; :b :c7661; :b :c7662; :b :c7663; :b :c7664; :b :c7665; :b :c7666; :b :c7667; :b :c7668; :b :c7669; :b :c7670; :b :c7671; :b :c7672; :b :c7673; :b :c7674; :b :c7675; :b :c7676; :b :c7677; :b :c7678; :b :c7679; :b :c7680; :b :c7681; :b :c7682; :b :c7683; :b :c7684; :b :c7685; :b :c7686; :b :c7687; :b :c7688; :b :c7689; :b :c7690; :b :c7691; :b :c7692; :b :c7693; :b :c7694; :b :c7695; :b :c7696; :b :c7697; :b :c7698; :b :c7699; :b :c7700; :b :c7701; :b :c7702; :b :c7703; :b :c7704; :b :c7705; :b :c7706; :b :c7707; :b :c7708; :b :c7709; :b :c7710; :b :c7711; :b :c7712; :b :c7713; :b :c7714; :b :c7715; :b :c7716; :b :c7717; :b :c7718; :b :c7719; :b :c7720; :b :c7721; :b :c7722; :b :c7723; :b :c7724; :b :c7725; :b :c7726; :b :c7727; :b :c7728; :b :c7729; :b :c7730; :b :c7731; :b :c7732; :b :c7733; :b :c7734; :b :c7735; :b :c7736; :b :c7737; :b :c7738; :b :c7739; :b :c7740; :b :c7741; :b :c7742; :b :c7743; :b :c7744; :b :c7745; :b :c7746; :b :c7747; :b :c7748; :b :c7749; :b :c7750; :b :c7751; :b :c7752; :b :c7753; :b :c7754; :b :c7755; :b :c7756; :b :c7757; :b :c7758; :b :c7759; :b :c7760; :b :c7761; :b :c7762; :b :c7763; :b :c7764; :b :c7765; :b :c7766; :b :c7767; :b :c7768; :b :c7769; :b :c7770; :b :c7771; :b :c7772; :b :c7773; :b :c7774; :b :c7775; :b :c7776; :b :c7777; :b :c7778; :b :c7779; :b :c7780; :b :c7781; :b :c7782; :b :c7783; :b :c7784; :b :c7785; :b :c7786; :b :c7787; :b :c7788; :b :c7789; :b :c7790; :b :c7791; :b :c7792; :b :c7793; :b :c7794; :b :c7795; :b :c7796; :b :c7797; :b :c7798; :b :c7799; :b :c7800; :b :c7801; :b :c7802; :b :c7803; :b :c7804; :b :c7805; :b :c7806; :b :c7807; :b :c7808; :b :c7809; :b :c7810; :b :c7811; :b :c7812; :b :c7813; :b :c7814; :b :c7815; :b :c7816; :b :c7817; :b :c7818; :b :c7819; :b :c7820; :b :c7821; :b :c7822; :b :c7823; :b :c7824; :b :c7825; :b :c7826; :b :c7827; :b :c7828; :b :c7829; :b :c7830; :b :c7831; :b :c7832; :b :c7833; :b :c7834; :b :c7835; :b :c7836; :b :c7837; :b :c7838; :b :c7839; :b :c7840; :b :c7841; :b :c7842; :b :c7843; :b :c7844; :b :c7845; :b :c7846; :b :c7847; :b :c7848; :b :c7849; :b :c7850; :b :c7851; :b :c7852; :b :c7853; :b :c7854; :b :c7855; :b :c7856; :b :c7857; :b :c7858; :b :c7859; :b :c7860; :b :c7861; :b :c7862; :b :c7863; :b :c7864; :b :c7865; :b :c7866; :b :c7867; :b :c7868; :b :c7869; :b :c7870; :b :c7871; :b :c7872; :b :c7873; :b :c7874; :b :c7875; :b :c7876; :b :c7877; :b :c7878; :b :c7879; :b :c7880; :b :c7881; :b :c7882; :b :c7883; :b :c7884; :b :c7885; :b :c7886; :b :c7887; :b :c7888; :b :c7889; :b :c7890; :b :c7891; :b :c7892; :b :c7893; :b :c7894; :b :c7895; :b :c7896; :b :c7897; :b :c7898; :b :c7899; :b :c7900; :b :c7901; :b :c7902; :b :c7903; :b :c7904; :b :c7905; :b :c7906; :b :c7907; :b :c7908; :b :c7909; :b :c7910; :b :c7911; :b :c7912; :b :c7913; :b :c7914; :b :c7915; :b :c7916; :b :c7917; :b :c7918; :b :c7919; :b :c7920; :b :c7921; :b :c7922; :b :c7923; :b :c7924; :b :c7925; :b :c7926; :b :c7927; :b :c7928; :b :c7929; :b :c7930; :b :c7931; :b :c7932; :b :c7933; :b :c7934; :b :c7935; :b :c7936; :b :c7937; :b :c7938; :b :c7939; :b :c7940; :b :c7941; :b :c7942; :b :c7943; :b :c7944; :b :c7945; :b :c7946; :b :c7947; :b :c7948; :b :c7949; :b :c7950; :b :c7951; :b :c7952; :b :c7953; :b :c7954; :b :c7955; :b :c7956; :b :c7957; :b :c7958; :b :c7959; :b :c7960; :b :c7961; :b :c7962; :b :c7963; :b :c7964; :b :c7965; :b :c7966; :b :c7967; :b :c7968; :b :c7969; :b :c7970; :b :c7971; :b :c7972; :b :c7973; :b :c7974; :b :c7975; :b :c7976; :b :c7977; :b :c7978; :b :c7979; :b :c7980; :b :c7981; :b :c7982; :b :c7983; :b :c7984; :b :c7985; :b :c7986; :b :c7987; :b :c7988; :b :c7989; :b :c7990; :b :c7991; :b :c7992; :b :c7993; :b :c7994; :b :c7995; :b :c7996; :b :c7997; :b :c7998; :b :c7999; :b :c8000; :b :c8001; :b :c8002; :b :c8003; :b :c8004; :b :c8005; :b :c8006; :b :c8007; :b :c8008; :b :c8009; :b :c8010; :b :c8011; :b :c8012; :b :c8013; :b :c8014; :b :c8015; :b :c8016; :b :c8017; :b :c8018; :b :c8019; :b :c8020; :b :c8021; :b :c8022; :b :c8023; :b :c8024; :b :c8025; :b :c8026; :b :c8027; :b :c8028; :b :c8029; :b :c8030; :b :c8031; :b :c8032; :b :c8033; :b :c8034; :b :c8035; :b :c8036; :b :c8037; :b :c8038; :b :c8039; :b :c8040; :b :c8041; :b :c8042; :b :c8043; :b :c8044; :b :c8045; :b :c8046; :b :c8047; :b :c8048; :b :c8049; :b :c8050; :b :c8051; :b :c8052; :b :c8053; :b :c8054; :b :c8055; :b :c8056; :b :c8057; :b :c8058; :b :c8059; :b :c8060; :b :c8061; :b :c8062; :b :c8063; :b :c8064; :b :c8065; :b :c8066; :b :c8067; :b :c8068; :b :c8069; :b :c8070; :b :c8071; :b :c8072; :b :c8073; :b :c8074; :b :c8075; :b :c8076; :b :c8077; :b :c8078; :b :c8079; :b :c8080; :b :c8081; :b :c8082; :b :c8083; :b :c8084; :b :c8085; :b :c8086; :b :c8087; :b :c8088; :b :c8089; :b :c8090; :b :c8091; :b :c8092; :b :c8093; :b :c8094; :b :c8095; :b :c8096; :b :c8097; :b :c8098; :b :c8099; :b :c8100; :b :c8101; :b :c8102; :b :c8103; :b :c8104; :b :c8105; :b :c8106; :b :c8107; :b :c8108; :b :c8109; :b :c8110; :b :c8111; :b :c8112; :b :c8113; :b :c8114; :b :c8115; :b :c8116; :b :c8117; :b :c8118; :b :c8119; :b :c8120; :b :c8121; :b :c8122; :b :c8123; :b :c8124; :b :c8125; :b :c8126; :b :c8127; :b :c8128; :b :c8129; :b :c8130; :b :c8131; :b :c8132; :b :c8133; :b :c8134; :b :c8135; :b :c8136; :b :c8137; :b :c8138; :b :c8139; :b :c8140; :b :c8141; :b :c8142; :b :c8143; :b :c8144; :b :c8145; :b :c8146; :b :c8147; :b :c8148; :b :c8149; :b :c8150; :b :c8151; :b :c8152; :b :c8153; :b :c8154; :b :c8155; :b :c8156; :b :c8157; :b :c8158; :b :c8159; :b :c8160; :b :c8161; :b :c8162; :b :c8163; :b :c8164; :b :c8165; :b :c8166; :b :c8167; :b :c8168; :b :c8169; :b :c8170; :b :c8171; :b :c8172; :b :c8173; :b :c8174; :b :c8175; :b :c8176; :b :c8177; :b :c8178; :b :c8179; :b :c8180; :b :c8181; :b :c8182; :b :c8183; :b :c8184; :b :c8185; :b :c8186; :b :c8187; :b :c8188; :b :c8189; :b :c8190; :b :c8191; :b :c8192; :b :c8193; :b :c8194; :b :c8195; :b :c8196; :b :c8197; :b :c8198; :b :c8199; :b :c8200; :b :c8201; :b :c8202; :b :c8203; :b :c8204; :b :c8205; :b :c8206; :b :c8207; :b :c8208; :b :c8209; :b :c8210; :b :c8211; :b :c8212; :b :c8213; :b :c8214; :b :c8215; :b :c8216; :b :c8217; :b :c8218; :b :c8219; :b :c8220; :b :c8221; :b :c8222; :b :c8223; :b :c8224; :b :c8225; :b :c8226; :b :c8227; :b :c8228; :b :c8229; :b :c8230; :b :c8231; :b :c8232; :b :c8233; :b :c8234; :b :c8235; :b :c8236; :b :c8237; :b :c8238; :b :c8239; :b :c8240; :b :c8241; :b :c8242; :b :c8243; :b :c8244; :b :c8245; :b :c8246; :b :c8247; :b :c8248; :b :c8249; :b :c8250; :b :c8251; :b :c8252; :b :c8253; :b :c8254; :b :c8255; :b :c8256; :b :c8257; :b :c8258; :b :c8259; :b :c8260; :b :c8261; :b :c8262; :b :c8263; :b :c8264; :b :c8265; :b :c8266; :b :c8267; :b :c8268; :b :c8269; :b :c8270; :b :c8271; :b :c8272; :b :c8273; :b :c8274; :b :c8275; :b :c8276; :b :c8277; :b :c8278; :b :c8279; :b :c8280; :b :c8281; :b :c8282; :b :c8283; :b :c8284; :b :c8285; :b :c8286; :b :c8287; :b :c8288; :b :c8289; :b :c8290; :b :c8291; :b :c8292; :b :c8293; :b :c8294; :b :c8295; :b :c8296; :b :c8297; :b :c8298; :b :c8299; :b :c8300; :b :c8301; :b :c8302; :b :c8303; :b :c8304; :b :c8305; :b :c8306; :b :c8307; :b :c8308; :b :c8309; :b :c8310; :b :c8311; :b :c8312; :b :c8313; :b :c8314; :b :c8315; :b :c8316; :b :c8317; :b :c8318; :b :c8319; :b :c8320; :b :c8321; :b :c8322; :b :c8323; :b :c8324; :b :c8325; :b :c8326; :b :c8327; :b :c8328; :b :c8329; :b :c8330; :b :c8331; :b :c8332; :b :c8333; :b :c8334; :b :c8335; :b :c8336; :b :c8337; :b :c8338; :b :c8339; :b :c8340; :b :c8341; :b :c8342; :b :c8343; :b :c8344; :b :c8345; :b :c8346; :b :c8347; :b :c8348; :b :c8349; :b :c8350; :b :c8351; :b :c8352; :b :c8353; :b :c8354; :b :c8355; :b :c8356; :b :c8357; :b :c8358; :b :c8359; :b :c8360; :b :c8361; :b :c8362; :b :c8363; :b :c8364; :b :c8365; :b :c8366; :b :c8367; :b :c8368; :b :c8369; :b :c8370; :b :c8371; :b :c8372; :b :c8373; :b :c8374; :b :c8375; :b :c8376; :b :c8377; :b :c8378; :b :c8379; :b :c8380; :b :c8381; :b :c8382; :b :c8383; :b :c8384; :b :c8385; :b :c8386; :b :c8387; :b :c8388; :b :c8389; :b :c8390; :b :c8391; :b :c8392; :b :c8393; :b :c8394; :b :c8395; :b :c8396; :b :c8397; :b :c8398; :b :c8399; :b :c8400; :b :c8401; :b :c8402; :b :c8403; :b :c8404; :b :c8405; :b :c8406; :b :c8407; :b :c8408; :b :c8409; :b :c8410; :b :c8411; :b :c8412; :b :c8413; :b :c8414; :b :c8415; :b :c8416; :b :c8417; :b :c8418; :b :c8419; :b :c8420; :b :c8421; :b :c8422; :b :c8423; :b :c8424; :b :c8425; :b :c8426; :b :c8427; :b :c8428; :b :c8429; :b :c8430; :b :c8431; :b :c8432; :b :c8433; :b :c8434; :b :c8435; :b :c8436; :b :c8437; :b :c8438; :b :c8439; :b :c8440; :b :c8441; :b :c8442; :b :c8443; :b :c8444; :b :c8445; :b :c8446; :b :c8447; :b :c8448; :b :c8449; :b :c8450; :b :c8451; :b :c8452; :b :c8453; :b :c8454; :b :c8455; :b :c8456; :b :c8457; :b :c8458; :b :c8459; :b :c8460; :b :c8461; :b :c8462; :b :c8463; :b :c8464; :b :c8465; :b :c8466; :b :c8467; :b :c8468; :b :c8469; :b :c8470; :b :c8471; :b :c8472; :b :c8473; :b :c8474; :b :c8475; :b :c8476; :b :c8477; :b :c8478; :b :c8479; :b :c8480; :b :c8481; :b :c8482; :b :c8483; :b :c8484; :b :c8485; :b :c8486; :b :c8487; :b :c8488; :b :c8489; :b :c8490; :b :c8491; :b :c8492; :b :c8493; :b :c8494; :b :c8495; :b :c8496; :b :c8497; :b :c8498; :b :c8499; :b :c8500; :b :c8501; :b :c8502; :b :c8503; :b :c8504; :b :c8505; :b :c8506; :b :c8507; :b :c8508; :b :c8509; :b :c8510; :b :c8511; :b :c8512; :b :c8513; :b :c8514; :b :c8515; :b :c8516; :b :c8517; :b :c8518; :b :c8519; :b :c8520; :b :c8521; :b :c8522; :b :c8523; :b :c8524; :b :c8525; :b :c8526; :b :c8527; :b :c8528; :b :c8529; :b :c8530; :b :c8531; :b :c8532; :b :c8533; :b :c8534; :b :c8535; :b :c8536; :b :c8537; :b :c8538; :b :c8539; :b :c8540; :b :c8541; :b :c8542; :b :c8543; :b :c8544; :b :c8545; :b :c8546; :b :c8547; :b :c8548; :b :c8549; :b :c8550; :b :c8551; :b :c8552; :b :c8553; :b :c8554; :b :c8555; :b :c8556; :b :c8557; :b :c8558; :b :c8559; :b :c8560; :b :c8561; :b :c8562; :b :c8563; :b :c8564; :b :c8565; :b :c8566; :b :c8567; :b :c8568; :b :c8569; :b :c8570; :b :c8571; :b :c8572; :b :c8573; :b :c8574; :b :c8575; :b :c8576; :b :c8577; :b :c8578; :b :c8579; :b :c8580; :b :c8581; :b :c8582; :b :c8583; :b :c8584; :b :c8585; :b :c8586; :b :c8587; :b :c8588; :b :c8589; :b :c8590; :b :c8591; :b :c8592; :b :c8593; :b :c8594; :b :c8595; :b :c8596; :b :c8597; :b :c8598; :b :c8599; :b :c8600; :b :c8601; :b :c8602; :b :c8603; :b :c8604; :b :c8605; :b :c8606; :b :c8607; :b :c8608; :b :c8609; :b :c8610; :b :c8611; :b :c8612; :b :c8613; :b :c8614; :b :c8615; :b :c8616; :b :c8617; :b :c8618; :b :c8619; :b :c8620; :b :c8621; :b :c8622; :b :c8623; :b :c8624; :b :c8625; :b :c8626; :b :c8627; :b :c8628; :b :c8629; :b :c8630; :b :c8631; :b :c8632; :b :c8633; :b :c8634; :b :c8635; :b :c8636; :b :c8637; :b :c8638; :b :c8639; :b :c8640; :b :c8641; :b :c8642; :b :c8643; :b :c8644; :b :c8645; :b :c8646; :b :c8647; :b :c8648; :b :c8649; :b :c8650; :b :c8651; :b :c8652; :b :c8653; :b :c8654; :b :c8655; :b :c8656; :b :c8657; :b :c8658; :b :c8659; :b :c8660; :b :c8661; :b :c8662; :b :c8663; :b :c8664; :b :c8665; :b :c8666; :b :c8667; :b :c8668; :b :c8669; :b :c8670; :b :c8671; :b :c8672; :b :c8673; :b :c8674; :b :c8675; :b :c8676; :b :c8677; :b :c8678; :b :c8679; :b :c8680; :b :c8681; :b :c8682; :b :c8683; :b :c8684; :b :c8685; :b :c8686; :b :c8687; :b :c8688; :b :c8689; :b :c8690; :b :c8691; :b :c8692; :b :c8693; :b :c8694; :b :c8695; :b :c8696; :b :c8697; :b :c8698; :b :c8699; :b :c8700; :b :c8701; :b :c8702; :b :c8703; :b :c8704; :b :c8705; :b :c8706; :b :c8707; :b :c8708; :b :c8709; :b :c8710; :b :c8711; :b :c8712; :b :c8713; :b :c8714; :b :c8715; :b :c8716; :b :c8717; :b :c8718; :b :c8719; :b :c8720; :b :c8721; :b :c8722; :b :c8723; :b :c8724; :b :c8725; :b :c8726; :b :c8727; :b :c8728; :b :c8729; :b :c8730; :b :c8731; :b :c8732; :b :c8733; :b :c8734; :b :c8735; :b :c8736; :b :c8737; :b :c8738; :b :c8739; :b :c8740; :b :c8741; :b :c8742; :b :c8743; :b :c8744; :b :c8745; :b :c8746; :b :c8747; :b :c8748; :b :c8749; :b :c8750; :b :c8751; :b :c8752; :b :c8753; :b :c8754; :b :c8755; :b :c8756; :b :c8757; :b :c8758; :b :c8759; :b :c8760; :b :c8761; :b :c8762; :b :c8763; :b :c8764; :b :c8765; :b :c8766; :b :c8767; :b :c8768; :b :c8769; :b :c8770; :b :c8771; :b :c8772; :b :c8773; :b :c8774; :b :c8775; :b :c8776; :b :c8777; :b :c8778; :b :c8779; :b :c8780; :b :c8781; :b :c8782; :b :c8783; :b :c8784; :b :c8785; :b :c8786; :b :c8787; :b :c8788; :b :c8789; :b :c8790; :b :c8791; :b :c8792; :b :c8793; :b :c8794; :b :c8795; :b :c8796; :b :c8797; :b :c8798; :b :c8799; :b :c8800; :b :c8801; :b :c8802; :b :c8803; :b :c8804; :b :c8805; :b :c8806; :b :c8807; :b :c8808; :b :c8809; :b :c8810; :b :c8811; :b :c8812; :b :c8813; :b :c8814; :b :c8815; :b :c8816; :b :c8817; :b :c8818; :b :c8819; :b :c8820; :b :c8821; :b :c8822; :b :c8823; :b :c8824; :b :c8825; :b :c8826; :b :c8827; :b :c8828; :b :c8829; :b :c8830; :b :c8831; :b :c8832; :b :c8833; :b :c8834; :b :c8835; :b :c8836; :b :c8837; :b :c8838; :b :c8839; :b :c8840; :b :c8841; :b :c8842; :b :c8843; :b :c8844; :b :c8845; :b :c8846; :b :c8847; :b :c8848; :b :c8849; :b :c8850; :b :c8851; :b :c8852; :b :c8853; :b :c8854; :b :c8855; :b :c8856; :b :c8857; :b :c8858; :b :c8859; :b :c8860; :b :c8861; :b :c8862; :b :c8863; :b :c8864; :b :c8865; :b :c8866; :b :c8867; :b :c8868; :b :c8869; :b :c8870; :b :c8871; :b :c8872; :b :c8873; :b :c8874; :b :c8875; :b :c8876; :b :c8877; :b :c8878; :b :c8879; :b :c8880; :b :c8881; :b :c8882; :b :c8883; :b :c8884; :b :c8885; :b :c8886; :b :c8887; :b :c8888; :b :c8889; :b :c8890; :b :c8891; :b :c8892; :b :c8893; :b :c8894; :b :c8895; :b :c8896; :b :c8897; :b :c8898; :b :c8899; :b :c8900; :b :c8901; :b :c8902; :b :c8903; :b :c8904; :b :c8905; :b :c8906; :b :c8907; :b :c8908; :b :c8909; :b :c8910; :b :c8911; :b :c8912; :b :c8913; :b :c8914; :b :c8915; :b :c8916; :b :c8917; :b :c8918; :b :c8919; :b :c8920; :b :c8921; :b :c8922; :b :c8923; :b :c8924; :b :c8925; :b :c8926; :b :c8927; :b :c8928; :b :c8929; :b :c8930; :b :c8931; :b :c8932; :b :c8933; :b :c8934; :b :c8935; :b :c8936; :b :c8937; :b :c8938; :b :c8939; :b :c8940; :b :c8941; :b :c8942; :b :c8943; :b :c8944; :b :c8945; :b :c8946; :b :c8947; :b :c8948; :b :c8949; :b :c8950; :b :c8951; :b :c8952; :b :c8953; :b :c8954; :b :c8955; :b :c8956; :b :c8957; :b :c8958; :b :c8959; :b :c8960; :b :c8961; :b :c8962; :b :c8963; :b :c8964; :b :c8965; :b :c8966; :b :c8967; :b :c8968; :b :c8969; :b :c8970; :b :c8971; :b :c8972; :b :c8973; :b :c8974; :b :c8975; :b :c8976; :b :c8977; :b :c8978; :b :c8979; :b :c8980; :b :c8981; :b :c8982; :b :c8983; :b :c8984; :b :c8985; :b :c8986; :b :c8987; :b :c8988; :b :c8989; :b :c8990; :b :c8991; :b :c8992; :b :c8993; :b :c8994; :b :c8995; :b :c8996; :b :c8997; :b :c8998; :b :c8999; :b :c9000; :b :c9001; :b :c9002; :b :c9003; :b :c9004; :b :c9005; :b :c9006; :b :c9007; :b :c9008; :b :c9009; :b :c9010; :b :c9011; :b :c9012; :b :c9013; :b :c9014; :b :c9015; :b :c9016; :b :c9017; :b :c9018; :b :c9019; :b :c9020; :b :c9021; :b :c9022; :b :c9023; :b :c9024; :b :c9025; :b :c9026; :b :c9027; :b :c9028; :b :c9029; :b :c9030; :b :c9031; :b :c9032; :b :c9033; :b :c9034; :b :c9035; :b :c9036; :b :c9037; :b :c9038; :b :c9039; :b :c9040; :b :c9041; :b :c9042; :b :c9043; :b :c9044; :b :c9045; :b :c9046; :b :c9047; :b :c9048; :b :c9049; :b :c9050; :b :c9051; :b :c9052; :b :c9053; :b :c9054; :b :c9055; :b :c9056; :b :c9057; :b :c9058; :b :c9059; :b :c9060; :b :c9061; :b :c9062; :b :c9063; :b :c9064; :b :c9065; :b :c9066; :b :c9067; :b :c9068; :b :c9069; :b :c9070; :b :c9071; :b :c9072; :b :c9073; :b :c9074; :b :c9075; :b :c9076; :b :c9077; :b :c9078; :b :c9079; :b :c9080; :b :c9081; :b :c9082; :b :c9083; :b :c9084; :b :c9085; :b :c9086; :b :c9087; :b :c9088; :b :c9089; :b :c9090; :b :c9091; :b :c9092; :b :c9093; :b :c9094; :b :c9095; :b :c9096; :b :c9097; :b :c9098; :b :c9099; :b :c9100; :b :c9101; :b :c9102; :b :c9103; :b :c9104; :b :c9105; :b :c9106; :b :c9107; :b :c9108; :b :c9109; :b :c9110; :b :c9111; :b :c9112; :b :c9113; :b :c9114; :b :c9115; :b :c9116; :b :c9117; :b :c9118; :b :c9119; :b :c9120; :b :c9121; :b :c9122; :b :c9123; :b :c9124; :b :c9125; :b :c9126; :b :c9127; :b :c9128; :b :c9129; :b :c9130; :b :c9131; :b :c9132; :b :c9133; :b :c9134; :b :c9135; :b :c9136; :b :c9137; :b :c9138; :b :c9139; :b :c9140; :b :c9141; :b :c9142; :b :c9143; :b :c9144; :b :c9145; :b :c9146; :b :c9147; :b :c9148; :b :c9149; :b :c9150; :b :c9151; :b :c9152; :b :c9153; :b :c9154; :b :c9155; :b :c9156; :b :c9157; :b :c9158; :b :c9159; :b :c9160; :b :c9161; :b :c9162; :b :c9163; :b :c9164; :b :c9165; :b :c9166; :b :c9167; :b :c9168; :b :c9169; :b :c9170; :b :c9171; :b :c9172; :b :c9173; :b :c9174; :b :c9175; :b :c9176; :b :c9177; :b :c9178; :b :c9179; :b :c9180; :b :c9181; :b :c9182; :b :c9183; :b :c9184; :b :c9185; :b :c9186; :b :c9187; :b :c9188; :b :c9189; :b :c9190; :b :c9191; :b :c9192; :b :c9193; :b :c9194; :b :c9195; :b :c9196; :b :c9197; :b :c9198; :b :c9199; :b :c9200; :b :c9201; :b :c9202; :b :c9203; :b :c9204; :b :c9205; :b :c9206; :b :c9207; :b :c9208; :b :c9209; :b :c9210; :b :c9211; :b :c9212; :b :c9213; :b :c9214; :b :c9215; :b :c9216; :b :c9217; :b :c9218; :b :c9219; :b :c9220; :b :c9221; :b :c9222; :b :c9223; :b :c9224; :b :c9225; :b :c9226; :b :c9227; :b :c9228; :b :c9229; :b :c9230; :b :c9231; :b :c9232; :b :c9233; :b :c9234; :b :c9235; :b :c9236; :b :c9237; :b :c9238; :b :c9239; :b :c9240; :b :c9241; :b :c9242; :b :c9243; :b :c9244; :b :c9245; :b :c9246; :b :c9247; :b :c9248; :b :c9249; :b :c9250; :b :c9251; :b :c9252; :b :c9253; :b :c9254; :b :c9255; :b :c9256; :b :c9257; :b :c9258; :b :c9259; :b :c9260; :b :c9261; :b :c9262; :b :c9263; :b :c9264; :b :c9265; :b :c9266; :b :c9267; :b :c9268; :b :c9269; :b :c9270; :b :c9271; :b :c9272; :b :c9273; :b :c9274; :b :c9275; :b :c9276; :b :c9277; :b :c9278; :b :c9279; :b :c9280; :b :c9281; :b :c9282; :b :c9283; :b :c9284; :b :c9285; :b :c9286; :b :c9287; :b :c9288; :b :c9289; :b :c9290; :b :c9291; :b :c9292; :b :c9293; :b :c9294; :b :c9295; :b :c9296; :b :c9297; :b :c9298; :b :c9299; :b :c9300; :b :c9301; :b :c9302; :b :c9303; :b :c9304; :b :c9305; :b :c9306; :b :c9307; :b :c9308; :b :c9309; :b :c9310; :b :c9311; :b :c9312; :b :c9313; :b :c9314; :b :c9315; :b :c9316; :b :c9317; :b :c9318; :b :c9319; :b :c9320; :b :c9321; :b :c9322; :b :c9323; :b :c9324; :b :c9325; :b :c9326; :b :c9327; :b :c9328; :b :c9329; :b :c9330; :b :c9331; :b :c9332; :b :c9333; :b :c9334; :b :c9335; :b :c9336; :b :c9337; :b :c9338; :b :c9339; :b :c9340; :b :c9341; :b :c9342; :b :c9343; :b :c9344; :b :c9345; :b :c9346; :b :c9347; :b :c9348; :b :c9349; :b :c9350; :b :c9351; :b :c9352; :b :c9353; :b :c9354; :b :c9355; :b :c9356; :b :c9357; :b :c9358; :b :c9359; :b :c9360; :b :c9361; :b :c9362; :b :c9363; :b :c9364; :b :c9365; :b :c9366; :b :c9367; :b :c9368; :b :c9369; :b :c9370; :b :c9371; :b :c9372; :b :c9373; :b :c9374; :b :c9375; :b :c9376; :b :c9377; :b :c9378; :b :c9379; :b :c9380; :b :c9381; :b :c9382; :b :c9383; :b :c9384; :b :c9385; :b :c9386; :b :c9387; :b :c9388; :b :c9389; :b :c9390; :b :c9391; :b :c9392; :b :c9393; :b :c9394; :b :c9395; :b :c9396; :b :c9397; :b :c9398; :b :c9399; :b :c9400; :b :c9401; :b :c9402; :b :c9403; :b :c9404; :b :c9405; :b :c9406; :b :c9407; :b :c9408; :b :c9409; :b :c9410; :b :c9411; :b :c9412; :b :c9413; :b :c9414; :b :c9415; :b :c9416; :b :c9417; :b :c9418; :b :c9419; :b :c9420; :b :c9421; :b :c9422; :b :c9423; :b :c9424; :b :c9425; :b :c9426; :b :c9427; :b :c9428; :b :c9429; :b :c9430; :b :c9431; :b :c9432; :b :c9433; :b :c9434; :b :c9435; :b :c9436; :b :c9437; :b :c9438; :b :c9439; :b :c9440; :b :c9441; :b :c9442; :b :c9443; :b :c9444; :b :c9445; :b :c9446; :b :c9447; :b :c9448; :b :c9449; :b :c9450; :b :c9451; :b :c9452; :b :c9453; :b :c9454; :b :c9455; :b :c9456; :b :c9457; :b :c9458; :b :c9459; :b :c9460; :b :c9461; :b :c9462; :b :c9463; :b :c9464; :b :c9465; :b :c9466; :b :c9467; :b :c9468; :b :c9469; :b :c9470; :b :c9471; :b :c9472; :b :c9473; :b :c9474; :b :c9475; :b :c9476; :b :c9477; :b :c9478; :b :c9479; :b :c9480; :b :c9481; :b :c9482; :b :c9483; :b :c9484; :b :c9485; :b :c9486; :b :c9487; :b :c9488; :b :c9489; :b :c9490; :b :c9491; :b :c9492; :b :c9493; :b :c9494; :b :c9495; :b :c9496; :b :c9497; :b :c9498; :b :c9499; :b :c9500; :b :c9501; :b :c9502; :b :c9503; :b :c9504; :b :c9505; :b :c9506; :b :c9507; :b :c9508; :b :c9509; :b :c9510; :b :c9511; :b :c9512; :b :c9513; :b :c9514; :b :c9515; :b :c9516; :b :c9517; :b :c9518; :b :c9519; :b :c9520; :b :c9521; :b :c9522; :b :c9523; :b :c9524; :b :c9525; :b :c9526; :b :c9527; :b :c9528; :b :c9529; :b :c9530; :b :c9531; :b :c9532; :b :c9533; :b :c9534; :b :c9535; :b :c9536; :b :c9537; :b :c9538; :b :c9539; :b :c9540; :b :c9541; :b :c9542; :b :c9543; :b :c9544; :b :c9545; :b :c9546; :b :c9547; :b :c9548; :b :c9549; :b :c9550; :b :c9551; :b :c9552; :b :c9553; :b :c9554; :b :c9555; :b :c9556; :b :c9557; :b :c9558; :b :c9559; :b :c9560; :b :c9561; :b :c9562; :b :c9563; :b :c9564; :b :c9565; :b :c9566; :b :c9567; :b :c9568; :b :c9569; :b :c9570; :b :c9571; :b :c9572; :b :c9573; :b :c9574; :b :c9575; :b :c9576; :b :c9577; :b :c9578; :b :c9579; :b :c9580; :b :c9581; :b :c9582; :b :c9583; :b :c9584; :b :c9585; :b :c9586; :b :c9587; :b :c9588; :b :c9589; :b :c9590; :b :c9591; :b :c9592; :b :c9593; :b :c9594; :b :c9595; :b :c9596; :b :c9597; :b :c9598; :b :c9599; :b :c9600; :b :c9601; :b :c9602; :b :c9603; :b :c9604; :b :c9605; :b :c9606; :b :c9607; :b :c9608; :b :c9609; :b :c9610; :b :c9611; :b :c9612; :b :c9613; :b :c9614; :b :c9615; :b :c9616; :b :c9617; :b :c9618; :b :c9619; :b :c9620; :b :c9621; :b :c9622; :b :c9623; :b :c9624; :b :c9625; :b :c9626; :b :c9627; :b :c9628; :b :c9629; :b :c9630; :b :c9631; :b :c9632; :b :c9633; :b :c9634; :b :c9635; :b :c9636; :b :c9637; :b :c9638; :b :c9639; :b :c9640; :b :c9641; :b :c9642; :b :c9643; :b :c9644; :b :c9645; :b :c9646; :b :c9647; :b :c9648; :b :c9649; :b :c9650; :b :c9651; :b :c9652; :b :c9653; :b :c9654; :b :c9655; :b :c9656; :b :c9657; :b :c9658; :b :c9659; :b :c9660; :b :c9661; :b :c9662; :b :c9663; :b :c9664; :b :c9665; :b :c9666; :b :c9667; :b :c9668; :b :c9669; :b :c9670; :b :c9671; :b :c9672; :b :c9673; :b :c9674; :b :c9675; :b :c9676; :b :c9677; :b :c9678; :b :c9679; :b :c9680; :b :c9681; :b :c9682; :b :c9683; :b :c9684; :b :c9685; :b :c9686; :b :c9687; :b :c9688; :b :c9689; :b :c9690; :b :c9691; :b :c9692; :b :c9693; :b :c9694; :b :c9695; :b :c9696; :b :c9697; :b :c9698; :b :c9699; :b :c9700; :b :c9701; :b :c9702; :b :c9703; :b :c9704; :b :c9705; :b :c9706; :b :c9707; :b :c9708; :b :c9709; :b :c9710; :b :c9711; :b :c9712; :b :c9713; :b :c9714; :b :c9715; :b :c9716; :b :c9717; :b :c9718; :b :c9719; :b :c9720; :b :c9721; :b :c9722; :b :c9723; :b :c9724; :b :c9725; :b :c9726; :b :c9727; :b :c9728; :b :c9729; :b :c9730; :b :c9731; :b :c9732; :b :c9733; :b :c9734; :b :c9735; :b :c9736; :b :c9737; :b :c9738; :b :c9739; :b :c9740; :b :c9741; :b :c9742; :b :c9743; :b :c9744; :b :c9745; :b :c9746; :b :c9747; :b :c9748; :b :c9749; :b :c9750; :b :c9751; :b :c9752; :b :c9753; :b :c9754; :b :c9755; :b :c9756; :b :c9757; :b :c9758; :b :c9759; :b :c9760; :b :c9761; :b :c9762; :b :c9763; :b :c9764; :b :c9765; :b :c9766; :b :c9767; :b :c9768; :b :c9769; :b :c9770; :b :c9771; :b :c9772; :b :c9773; :b :c9774; :b :c9775; :b :c9776; :b :c9777; :b :c9778; :b :c9779; :b :c9780; :b :c9781; :b :c9782; :b :c9783; :b :c9784; :b :c9785; :b :c9786; :b :c9787; :b :c9788; :b :c9789; :b :c9790; :b :c9791; :b :c9792; :b :c9793; :b :c9794; :b :c9795; :b :c9796; :b :c9797; :b :c9798; :b :c9799; :b :c9800; :b :c9801; :b :c9802; :b :c9803; :b :c9804; :b :c9805; :b :c9806; :b :c9807; :b :c9808; :b :c9809; :b :c9810; :b :c9811; :b :c9812; :b :c9813; :b :c9814; :b :c9815; :b :c9816; :b :c9817; :b :c9818; :b :c9819; :b :c9820; :b :c9821; :b :c9822; :b :c9823; :b :c9824; :b :c9825; :b :c9826; :b :c9827; :b :c9828; :b :c9829; :b :c9830; :b :c9831; :b :c9832; :b :c9833; :b :c9834; :b :c9835; :b :c9836; :b :c9837; :b :c9838; :b :c9839; :b :c9840; :b :c9841; :b :c9842; :b :c9843; :b :c9844; :b :c9845; :b :c9846; :b :c9847; :b :c9848; :b :c9849; :b :c9850; :b :c9851; :b :c9852; :b :c9853; :b :c9854; :b :c9855; :b :c9856; :b :c9857; :b :c9858; :b :c9859; :b :c9860; :b :c9861; :b :c9862; :b :c9863; :b :c9864; :b :c9865; :b :c9866; :b :c9867; :b :c9868; :b :c9869; :b :c9870; :b :c9871; :b :c9872; :b :c9873; :b :c9874; :b :c9875; :b :c9876; :b :c9877; :b :c9878; :b :c9879; :b :c9880; :b :c9881; :b :c9882; :b :c9883; :b :c9884; :b :c9885; :b :c9886; :b :c9887; :b :c9888; :b :c9889; :b :c9890; :b :c9891; :b :c9892; :b :c9893; :b :c9894; :b :c9895; :b :c9896; :b :c9897; :b :c9898; :b :c9899; :b :c9900; :b :c9901; :b :c9902; :b :c9903; :b :c9904; :b :c9905; :b :c9906; :b :c9907; :b :c9908; :b :c9909; :b :c9910; :b :c9911; :b :c9912; :b :c9913; :b :c9914; :b :c9915; :b :c9916; :b :c9917; :b :c9918; :b :c9919; :b :c9920; :b :c9921; :b :c9922; :b :c9923; :b :c9924; :b :c9925; :b :c9926; :b :c9927; :b :c9928; :b :c9929; :b :c9930; :b :c9931; :b :c9932; :b :c9933; :b :c9934; :b :c9935; :b :c9936; :b :c9937; :b :c9938; :b :c9939; :b :c9940; :b :c9941; :b :c9942; :b :c9943; :b :c9944; :b :c9945; :b :c9946; :b :c9947; :b :c9948; :b :c9949; :b :c9950; :b :c9951; :b :c9952; :b :c9953; :b :c9954; :b :c9955; :b :c9956; :b :c9957; :b :c9958; :b :c9959; :b :c9960; :b :c9961; :b :c9962; :b :c9963; :b :c9964; :b :c9965; :b :c9966; :b :c9967; :b :c9968; :b :c9969; :b :c9970; :b :c9971; :b :c9972; :b :c9973; :b :c9974; :b :c9975; :b :c9976; :b :c9977; :b :c9978; :b :c9979; :b :c9980; :b :c9981; :b :c9982; :b :c9983; :b :c9984; :b :c9985; :b :c9986; :b :c9987; :b :c9988; :b :c9989; :b :c9990; :b :c9991; :b :c9992; :b :c9993; :b :c9994; :b :c9995; :b :c9996; :b :c9997; :b :c9998; :b :c9999; :b :c10000 . rio-0.8.5/testsuite/serd-tests/good/test-18.nt000066400000000000000000000003211466265456300211600ustar00rootroot00000000000000 "\nthis \ris a \U00015678long\t\nliteral\uABCD\n" . "\tThis \uABCDis\r \U00015678another\n\none\n" . rio-0.8.5/testsuite/serd-tests/good/test-18.ttl000066400000000000000000000002351466265456300213460ustar00rootroot00000000000000@prefix : . :a :b """\nthis \ris a \U00015678long\t literal\uABCD """ . :d :e """\tThis \uABCDis\r \U00015678another\n one """ . rio-0.8.5/testsuite/serd-tests/good/test-30.nt000066400000000000000000000007661466265456300211670ustar00rootroot00000000000000 . . . . . rio-0.8.5/testsuite/serd-tests/good/test-30.ttl000066400000000000000000000006261466265456300213440ustar00rootroot00000000000000# In-scope base URI is http://drobilla.net/sw/serd/test/good/ at this point . @base . # In-scope base URI is http://example.org/ns/ at this point . @base . # In-scope base URI is http://example.org/ns/foo/ at this point . @prefix : . :a4 :b4 :c4 . @prefix : . :a5 :b5 :c5 . rio-0.8.5/testsuite/serd-tests/good/test-a-without-whitespace.nt000066400000000000000000000010511466265456300250040ustar00rootroot00000000000000_:b1 . _:b2 _:b3 . _:b4 . . _:b5 . . rio-0.8.5/testsuite/serd-tests/good/test-a-without-whitespace.ttl000066400000000000000000000002211466265456300251640ustar00rootroot00000000000000[a]. [a[]]. [a()]. a. a[]. a(). rio-0.8.5/testsuite/serd-tests/good/test-backspace.nt000066400000000000000000000003071466265456300226500ustar00rootroot00000000000000 "\u0008" . "\u0008" . "\n\u0008\n" . rio-0.8.5/testsuite/serd-tests/good/test-backspace.ttl000066400000000000000000000002761466265456300230370ustar00rootroot00000000000000 "\u0008" . "" . """  """ .rio-0.8.5/testsuite/serd-tests/good/test-base-nopath.nt000066400000000000000000000001071466265456300231330ustar00rootroot00000000000000 . rio-0.8.5/testsuite/serd-tests/good/test-base-nopath.ttl000066400000000000000000000000541466265456300233160ustar00rootroot00000000000000@base .

. rio-0.8.5/testsuite/serd-tests/good/test-base-query.nt000066400000000000000000000001601466265456300230060ustar00rootroot00000000000000 . rio-0.8.5/testsuite/serd-tests/good/test-base-query.ttl000066400000000000000000000001131466265456300231660ustar00rootroot00000000000000@base . <> a .rio-0.8.5/testsuite/serd-tests/good/test-blank-cont.nt000066400000000000000000000005071466265456300227660ustar00rootroot00000000000000 _:b1 . _:b1 . _:b2 . _:b2 . rio-0.8.5/testsuite/serd-tests/good/test-blank-cont.ttl000066400000000000000000000001511466265456300231430ustar00rootroot00000000000000@prefix : . :subj :pred [ a :FirstThing ] ; :pred [ a :SecondThing ] . rio-0.8.5/testsuite/serd-tests/good/test-blank-in-list.nt000066400000000000000000000004731466265456300234040ustar00rootroot00000000000000 _:b1 . _:b1 _:b2 . _:b2 . _:b1 . rio-0.8.5/testsuite/serd-tests/good/test-blank-in-list.ttl000066400000000000000000000001021466265456300235530ustar00rootroot00000000000000@prefix : . :a :b ( [ :c :d ] ) . rio-0.8.5/testsuite/serd-tests/good/test-blank-node-statement.nt000066400000000000000000000000651466265456300247510ustar00rootroot00000000000000_:b1 . rio-0.8.5/testsuite/serd-tests/good/test-blank-node-statement.ttl000066400000000000000000000000651466265456300251330ustar00rootroot00000000000000[ ] . rio-0.8.5/testsuite/serd-tests/good/test-blankdot.nt000066400000000000000000000001021466265456300225230ustar00rootroot00000000000000 _:c . rio-0.8.5/testsuite/serd-tests/good/test-blankdot.ttl000066400000000000000000000001011466265456300227040ustar00rootroot00000000000000 _:c. rio-0.8.5/testsuite/serd-tests/good/test-bom.nt000066400000000000000000000001521466265456300215070ustar00rootroot00000000000000 . rio-0.8.5/testsuite/serd-tests/good/test-bom.ttl000066400000000000000000000001551466265456300216740ustar00rootroot00000000000000# This file starts with a UTF-8 Byte Order Mark a .rio-0.8.5/testsuite/serd-tests/good/test-cr.nt000066400000000000000000000001521466265456300213360ustar00rootroot00000000000000 . rio-0.8.5/testsuite/serd-tests/good/test-cr.ttl000066400000000000000000000001021466265456300215130ustar00rootroot00000000000000#Test a . rio-0.8.5/testsuite/serd-tests/good/test-delete.nt000066400000000000000000000002021466265456300221700ustar00rootroot00000000000000 "\u007F" . "\u007F" . rio-0.8.5/testsuite/serd-tests/good/test-delete.ttl000066400000000000000000000001751466265456300223630ustar00rootroot00000000000000 "\u007F" . "" . rio-0.8.5/testsuite/serd-tests/good/test-digit-start-pname.nt000066400000000000000000000001531466265456300242640ustar00rootroot00000000000000 . rio-0.8.5/testsuite/serd-tests/good/test-digit-start-pname.ttl000066400000000000000000000000731466265456300244470ustar00rootroot00000000000000@prefix eg: . eg:1thing a eg:Thing .rio-0.8.5/testsuite/serd-tests/good/test-empty-path-base.nt000066400000000000000000000001551466265456300237350ustar00rootroot00000000000000 . rio-0.8.5/testsuite/serd-tests/good/test-empty-path-base.ttl000066400000000000000000000001111466265456300241070ustar00rootroot00000000000000@base . a . rio-0.8.5/testsuite/serd-tests/good/test-empty.nt000066400000000000000000000000001466265456300220600ustar00rootroot00000000000000rio-0.8.5/testsuite/serd-tests/good/test-empty.ttl000066400000000000000000000000001466265456300222420ustar00rootroot00000000000000rio-0.8.5/testsuite/serd-tests/good/test-eof-at-page-end.nt000066400000000000000000000101211466265456300235600ustar00rootroot00000000000000 "\n0123456789012345678901234567890123456789\n\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567890123456789012345678901234567890123456789\n01234567" . rio-0.8.5/testsuite/serd-tests/good/test-eof-at-page-end.ttl000066400000000000000000000100001466265456300237360ustar00rootroot00000000000000 """ 0123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789 01234567""" .rio-0.8.5/testsuite/serd-tests/good/test-escapes.nt000066400000000000000000000002331466265456300223550ustar00rootroot00000000000000 "\\\r\n\t" . . rio-0.8.5/testsuite/serd-tests/good/test-escapes.ttl000066400000000000000000000002331466265456300225370ustar00rootroot00000000000000 "\\\r\n\t" . . rio-0.8.5/testsuite/serd-tests/good/test-ext-namedblank-iri.nt000066400000000000000000000002211466265456300244020ustar00rootroot00000000000000 . "o" . rio-0.8.5/testsuite/serd-tests/good/test-ext-namedblank-iri.ttl000066400000000000000000000001451466265456300245710ustar00rootroot00000000000000@prefix eg: . eg:s eg:p [ == ; eg:name "o" ] . rio-0.8.5/testsuite/serd-tests/good/test-ext-namedblank-prefix.nt000066400000000000000000000002151466265456300251170ustar00rootroot00000000000000 . "o" . rio-0.8.5/testsuite/serd-tests/good/test-ext-namedblank-prefix.ttl000066400000000000000000000001161466265456300253010ustar00rootroot00000000000000@prefix eg: . eg:s eg:p [ == eg:o ; eg:name "o" ] . rio-0.8.5/testsuite/serd-tests/good/test-form-feed.nt000066400000000000000000000002021466265456300225720ustar00rootroot00000000000000 "\u000C" . "\u000C" . rio-0.8.5/testsuite/serd-tests/good/test-form-feed.ttl000066400000000000000000000001751466265456300227650ustar00rootroot00000000000000 "\u000C" . " " . rio-0.8.5/testsuite/serd-tests/good/test-id.nt000066400000000000000000000001761466265456300213340ustar00rootroot00000000000000 _:b1 . _:B1 . rio-0.8.5/testsuite/serd-tests/good/test-id.ttl000066400000000000000000000001001466265456300215010ustar00rootroot00000000000000@prefix : . :c :d [] . _:b1 :a :b . rio-0.8.5/testsuite/serd-tests/good/test-lang.nt000066400000000000000000000007431466265456300216610ustar00rootroot00000000000000 "Hello"@en . "Howdy"@en-us . "Bonjour"@fr . "Guten Tag"@de-latn-de . # "HEY MAN"@en-crazy0place . rio-0.8.5/testsuite/serd-tests/good/test-lang.ttl000066400000000000000000000003441466265456300220400ustar00rootroot00000000000000@prefix : . :thing :greeting "Hello"@en ; :greeting "Howdy"@en-us ; :greeting "Bonjour"@fr ; :greeting "Guten Tag"@de-latn-de . # :greeting "HEY MAN"@en-crazy0place . rio-0.8.5/testsuite/serd-tests/good/test-list-in-blank.nt000066400000000000000000000006431466265456300234030ustar00rootroot00000000000000 _:b1 . _:b1 _:b2 . _:b2 "apple" . _:b2 _:b3 . _:b3 "banana" . _:b3 . rio-0.8.5/testsuite/serd-tests/good/test-list-in-blank.ttl000066400000000000000000000001201466265456300235530ustar00rootroot00000000000000@prefix : . :a :b [ :c ( "apple" "banana" ) ] . rio-0.8.5/testsuite/serd-tests/good/test-list-subject.nt000066400000000000000000000007771466265456300233570ustar00rootroot00000000000000 . _:b1 "apple" . _:b1 _:b2 . _:b2 "banana" . _:b2 . _:b1 . rio-0.8.5/testsuite/serd-tests/good/test-list-subject.ttl000066400000000000000000000001221466265456300235210ustar00rootroot00000000000000() a . ("apple" "banana") a . rio-0.8.5/testsuite/serd-tests/good/test-list.nt000066400000000000000000000001771466265456300217140ustar00rootroot00000000000000 . rio-0.8.5/testsuite/serd-tests/good/test-list.ttl000066400000000000000000000000401466265456300220630ustar00rootroot00000000000000() a .rio-0.8.5/testsuite/serd-tests/good/test-local-name-ends-with-dot.ttl000066400000000000000000000000721466265456300256110ustar00rootroot00000000000000@prefix eg: . eg:s eg:p eg:foo\. . rio-0.8.5/testsuite/serd-tests/good/test-long-string.nt000066400000000000000000000001651466265456300232010ustar00rootroot00000000000000 "This is a\nlong string\nwith\n tabs\nand spaces." . rio-0.8.5/testsuite/serd-tests/good/test-long-string.ttl000066400000000000000000000001571466265456300233640ustar00rootroot00000000000000@prefix : . :thing :greeting """This is a long string with tabs and spaces.""" .rio-0.8.5/testsuite/serd-tests/good/test-no-spaces.nt000066400000000000000000000004771466265456300226340ustar00rootroot00000000000000 . . . . rio-0.8.5/testsuite/serd-tests/good/test-no-spaces.ttl000066400000000000000000000001511466265456300230030ustar00rootroot00000000000000@prefix eg: . eg:s eg:p eg:o;eg:p2 eg:o2,eg:o3 . eg:s a .rio-0.8.5/testsuite/serd-tests/good/test-non-curie-uri.nt000066400000000000000000000001201466265456300234210ustar00rootroot00000000000000 . rio-0.8.5/testsuite/serd-tests/good/test-non-curie-uri.ttl000066400000000000000000000001211466265456300236040ustar00rootroot00000000000000@prefix eg: . eg:s eg:p . rio-0.8.5/testsuite/serd-tests/good/test-num.nt000066400000000000000000000021471466265456300215370ustar00rootroot00000000000000 "0.1"^^ . "+0.2"^^ . "-0.3"^^ . ".4"^^ . "+.5"^^ . "-.6"^^ . "1.58490e-05"^^ . "1.58490e+05"^^ . "1.58490e05"^^ . "1.58490E05"^^ . rio-0.8.5/testsuite/serd-tests/good/test-num.ttl000066400000000000000000000004431466265456300217160ustar00rootroot00000000000000@prefix eg: . eg:thing eg:num 0.1 . eg:thing eg:num +0.2 . eg:thing eg:num -0.3 . eg:thing eg:num .4 . eg:thing eg:num +.5 . eg:thing eg:num -.6 . eg:thing eg:num 1.58490e-05 . eg:thing eg:num 1.58490e+05 . eg:thing eg:num 1.58490e05 . eg:thing eg:num 1.58490E05 . rio-0.8.5/testsuite/serd-tests/good/test-out-of-range-unicode.nt000066400000000000000000000001051466265456300246570ustar00rootroot00000000000000 "\uFFFD" . rio-0.8.5/testsuite/serd-tests/good/test-out-of-range-unicode.ttl000066400000000000000000000001111466265456300250360ustar00rootroot00000000000000 "\U00110000" . rio-0.8.5/testsuite/serd-tests/good/test-prefix.nt000066400000000000000000000012261466265456300222320ustar00rootroot00000000000000 . . . . . . rio-0.8.5/testsuite/serd-tests/good/test-prefix.ttl000066400000000000000000000006351466265456300224170ustar00rootroot00000000000000@prefix eg: . a . a . a . a . a . a . rio-0.8.5/testsuite/serd-tests/good/test-pretty.nt000066400000000000000000000063101466265456300222630ustar00rootroot00000000000000 . _:b1 . . _:b2 _:b3 . _:b4 "apple" . _:b4 _:b5 . _:b5 "banana" . _:b5 _:b6 . _:b6 "pear" . _:b6 . _:b4 . _:b7 _:b8 . _:b8 . _:b8 _:b9 . _:b9 . _:b9 . _:b7 _:b10 . _:b10 _:b11 . _:b11 . _:b11 _:b12 . _:b12 . _:b12 . _:b10 . _:b7 . _:b13 _:b14 . _:b14 "apple" . _:b14 _:b15 . _:b15 "banana" . _:b15 _:b16 . _:b16 "pear" . _:b16 . _:b17 . _:b17 . _:b17 . _:b18 _:b19 . _:b19 . _:b19 . _:b18 _:b20 . _:b20 . _:b21 _:b22 . _:b22 _:b23 . _:b23 . _:b22 _:b24 . _:b24 _:b25 . _:b25 . _:b24 . rio-0.8.5/testsuite/serd-tests/good/test-pretty.ttl000066400000000000000000000005331466265456300224460ustar00rootroot00000000000000@prefix : . () :isA :List . [] :isA :Blank . () :sameAs () . [] :sameAs [] . ( "apple" "banana" "pear" ) a :List . ( (:a :b) (:c :d) ) a :List . [] :list ( "apple" "banana" "pear" ) . [] :a :b , :c , :d . [] :a [ :b :c ; :d :e ; ] , [ :f :g ] . [] :list ( [ a :Apple ] [ a :Banana ] ) .rio-0.8.5/testsuite/serd-tests/good/test-rel.nt000066400000000000000000000013301466265456300215130ustar00rootroot00000000000000 . . . . . . rio-0.8.5/testsuite/serd-tests/good/test-rel.ttl000066400000000000000000000006221466265456300217000ustar00rootroot00000000000000 a . a . a . a . a . a . rio-0.8.5/testsuite/serd-tests/good/test-semi-dot.nt000066400000000000000000000001521466265456300224530ustar00rootroot00000000000000 . rio-0.8.5/testsuite/serd-tests/good/test-semi-dot.ttl000066400000000000000000000000731466265456300226370ustar00rootroot00000000000000 a ; .rio-0.8.5/testsuite/serd-tests/good/test-several-eaten-dots.nq000066400000000000000000000004541466265456300244360ustar00rootroot00000000000000 . . . rio-0.8.5/testsuite/serd-tests/good/test-several-eaten-dots.trig000066400000000000000000000001141466265456300247560ustar00rootroot00000000000000prefix : :g { :s :p1 :o1. :s :p1 :o2; :p2 :o3. }rio-0.8.5/testsuite/serd-tests/good/test-uri-escape.nt000066400000000000000000000005661466265456300230000ustar00rootroot00000000000000 . rio-0.8.5/testsuite/serd-tests/good/test-uri-escape.ttl000066400000000000000000000005661466265456300231620ustar00rootroot00000000000000 . rio-0.8.5/testsuite/serd-tests/good/test-uri.nt000066400000000000000000000070621466265456300215400ustar00rootroot00000000000000 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . rio-0.8.5/testsuite/serd-tests/good/test-uri.ttl000066400000000000000000000051751466265456300217250ustar00rootroot00000000000000# http://tools.ietf.org/html/rfc3986#section-5.4 @base . @prefix owl: . # 5.4.1. Normal Examples owl:sameAs . owl:sameAs . <./g> owl:sameAs . owl:sameAs . owl:sameAs . owl:sameAs . owl:sameAs . owl:sameAs . <#s> owl:sameAs . owl:sameAs . owl:sameAs . <;x> owl:sameAs . owl:sameAs . owl:sameAs . <> owl:sameAs . <.> owl:sameAs . <./> owl:sameAs . <..> owl:sameAs . <../> owl:sameAs . <../g> owl:sameAs . <../..> owl:sameAs . <../../> owl:sameAs . <../../g> owl:sameAs . # 5.4.2. Abnormal Examples <../../../g> owl:sameAs . <../../../../g> owl:sameAs . owl:sameAs . owl:sameAs . owl:sameAs . <.g> owl:sameAs . owl:sameAs . <..g> owl:sameAs . <./../g> owl:sameAs . # Serd only resolves the leading components #<./g/.> owl:sameAs . # owl:sameAs . # owl:sameAs . # owl:sameAs . # owl:sameAs . owl:sameAs . owl:sameAs . owl:sameAs . owl:sameAs . # Additional tests for Serd owl:sameAs . owl:sameAs . owl:sameAs . owl:sameAs . owl:sameAs . <#afragment> owl:sameAs . <../../../../../../> owl:sameAs . owl:sameAs . owl:sameAs . owl:sameAs . @base . owl:sameAs . @base . owl:sameAs . rio-0.8.5/testsuite/serd-tests/good/test-utf8-uri.nt000066400000000000000000000001751466265456300224220ustar00rootroot00000000000000 . rio-0.8.5/testsuite/serd-tests/good/test-utf8-uri.ttl000066400000000000000000000001031466265456300225730ustar00rootroot00000000000000 a .rio-0.8.5/testsuite/src/000077500000000000000000000000001466265456300151565ustar00rootroot00000000000000rio-0.8.5/testsuite/src/isomorphism.rs000066400000000000000000000220141466265456300200740ustar00rootroot00000000000000use crate::model::*; use permutohedron::LexicalPermutation; use std::collections::hash_map::DefaultHasher; use std::collections::HashSet; use std::collections::{BTreeSet, HashMap}; use std::hash::Hash; use std::hash::Hasher; #[derive(Eq, PartialEq, Ord, PartialOrd, Debug, Clone, Hash)] struct SubjectPredicate<'a> { subject: &'a OwnedSubject, predicate: &'a OwnedNamedNode, } #[derive(Eq, PartialEq, Ord, PartialOrd, Debug, Clone, Hash)] struct PredicateObject<'a> { predicate: &'a OwnedNamedNode, object: &'a OwnedTerm, } fn subject_predicates_for_object<'a>( dataset: &'a OwnedDataset, object: &'a OwnedTerm, ) -> impl Iterator> + 'a { dataset .triples_for_object(object) .map(|t| SubjectPredicate { subject: &t.subject, predicate: &t.predicate, }) } fn predicate_objects_for_subject<'a>( dataset: &'a OwnedDataset, subject: &'a OwnedSubject, ) -> impl Iterator> + 'a { dataset .triples_for_subject(subject) .map(|t| PredicateObject { predicate: &t.predicate, object: &t.object, }) } fn hash_blank_nodes<'a>( bnodes: HashSet<&'a OwnedBlankNode>, dataset: &'a OwnedDataset, ) -> HashMap> { let mut bnodes_by_hash = HashMap::default(); // NB: we need to sort the triples to have the same hash for bnode in bnodes { let mut hasher = DefaultHasher::new(); { let subject = OwnedSubject::from(bnode.clone()); let mut po_set: BTreeSet> = BTreeSet::default(); for po in predicate_objects_for_subject(dataset, &subject) { if !matches!(&po.object, OwnedTerm::BlankNode(_) | OwnedTerm::Triple(_)) { po_set.insert(po); } } for po in po_set { po.hash(&mut hasher); } } { let object = OwnedTerm::from(bnode.clone()); let mut sp_set: BTreeSet> = BTreeSet::default(); for sp in subject_predicates_for_object(dataset, &object) { if !matches!( &sp.subject, OwnedSubject::BlankNode(_) | OwnedSubject::Triple(_) ) { sp_set.insert(sp); } } for sp in sp_set { sp.hash(&mut hasher); } } bnodes_by_hash .entry(hasher.finish()) .or_insert_with(Vec::default) .push(bnode); } bnodes_by_hash } fn build_and_check_containment_from_hashes<'a>( hashes_to_see: &mut Vec<&u64>, a_bnodes_by_hash: &'a HashMap>, b_bnodes_by_hash: &'a HashMap>, a_to_b_mapping: &mut HashMap<&'a OwnedBlankNode, &'a OwnedBlankNode>, a: &OwnedDataset, b: &OwnedDataset, ) -> bool { let hash = match hashes_to_see.pop() { Some(h) => h, None => return check_is_contained(a_to_b_mapping, a, b), }; const EMPTY_SLICE: &[&OwnedBlankNode] = &[]; let a_nodes = a_bnodes_by_hash .get(hash) .map_or(EMPTY_SLICE, |v| v.as_slice()); let b_nodes = b_bnodes_by_hash .get(hash) .map_or(EMPTY_SLICE, |v| v.as_slice()); if a_nodes.len() != b_nodes.len() { return false; } if a_nodes.len() == 1 { // Avoid allocation for len == 1 a_to_b_mapping.insert(a_nodes[0], b_nodes[0]); let result = build_and_check_containment_from_hashes( hashes_to_see, a_bnodes_by_hash, b_bnodes_by_hash, a_to_b_mapping, a, b, ); a_to_b_mapping.remove(a_nodes[0]); hashes_to_see.push(hash); result } else { // We compute all the rotations of a_nodes and then zip it with b_nodes to have all the possible pairs (a,b) let mut a_nodes_rotated = a_nodes.to_vec(); a_nodes_rotated.sort(); loop { for (a_node, b_node) in a_nodes_rotated.iter().zip(b_nodes.iter()) { a_to_b_mapping.insert(a_node, b_node); } let result = if build_and_check_containment_from_hashes( hashes_to_see, a_bnodes_by_hash, b_bnodes_by_hash, a_to_b_mapping, a, b, ) { Some(true) } else if !a_nodes_rotated.next_permutation() { Some(false) // No more permutation } else { None //keep going }; if let Some(result) = result { for a_node in &a_nodes_rotated { a_to_b_mapping.remove(a_node); } hashes_to_see.push(hash); return result; } } } } fn check_is_contained<'a>( a_to_b_mapping: &mut HashMap<&'a OwnedBlankNode, &'a OwnedBlankNode>, a: &OwnedDataset, b: &OwnedDataset, ) -> bool { for t_a in a.iter() { let a_quad = OwnedQuad { subject: if let OwnedSubject::BlankNode(s_a) = &t_a.subject { a_to_b_mapping[s_a].clone().into() } else if let OwnedSubject::Triple(s_a) = &t_a.subject { OwnedSubject::Triple(Box::new(map_triple_blank_nodes(s_a, a_to_b_mapping))) } else { t_a.subject.clone() }, predicate: t_a.predicate.clone(), object: if let OwnedTerm::BlankNode(o_a) = &t_a.object { a_to_b_mapping[o_a].clone().into() } else if let OwnedTerm::Triple(o_a) = &t_a.object { OwnedTerm::Triple(Box::new(map_triple_blank_nodes(o_a, a_to_b_mapping))) } else { t_a.object.clone() }, graph_name: if let Some(OwnedGraphName::BlankNode(g_a)) = &t_a.graph_name { Some(a_to_b_mapping[g_a].clone().into()) } else { t_a.graph_name.clone() }, }; if !b.contains(&a_quad) { return false; } } true } fn map_triple_blank_nodes<'a>( t: &OwnedTriple, a_to_b_mapping: &mut HashMap<&'a OwnedBlankNode, &'a OwnedBlankNode>, ) -> OwnedTriple { OwnedTriple { subject: match &t.subject { OwnedSubject::NamedNode(node) => node.clone().into(), OwnedSubject::BlankNode(node) => a_to_b_mapping[node].clone().into(), OwnedSubject::Triple(node) => { OwnedSubject::Triple(Box::new(map_triple_blank_nodes(node, a_to_b_mapping))) } }, predicate: t.predicate.clone(), object: match &t.object { OwnedTerm::NamedNode(node) => node.clone().into(), OwnedTerm::BlankNode(node) => a_to_b_mapping[node].clone().into(), OwnedTerm::Literal(node) => node.clone().into(), OwnedTerm::Triple(node) => { OwnedTerm::Triple(Box::new(map_triple_blank_nodes(node, a_to_b_mapping))) } }, } } fn dataset_blank_nodes(dataset: &OwnedDataset) -> HashSet<&OwnedBlankNode> { let mut blank_nodes = HashSet::default(); for t in dataset.iter() { if let OwnedSubject::BlankNode(subject) = &t.subject { blank_nodes.insert(subject); } else if let OwnedSubject::Triple(t) = &t.subject { add_triple_blank_nodes(t, &mut blank_nodes); } if let OwnedTerm::BlankNode(object) = &t.object { blank_nodes.insert(object); } else if let OwnedSubject::Triple(t) = &t.subject { add_triple_blank_nodes(t, &mut blank_nodes); } if let Some(OwnedGraphName::BlankNode(graph_name)) = &t.graph_name { blank_nodes.insert(graph_name); } } blank_nodes } fn add_triple_blank_nodes<'a>(t: &'a OwnedTriple, blank_nodes: &mut HashSet<&'a OwnedBlankNode>) { if let OwnedSubject::BlankNode(subject) = &t.subject { blank_nodes.insert(subject); } else if let OwnedSubject::Triple(t) = &t.subject { add_triple_blank_nodes(t, blank_nodes); } if let OwnedTerm::BlankNode(object) = &t.object { blank_nodes.insert(object); } else if let OwnedTerm::Triple(t) = &t.object { add_triple_blank_nodes(t, blank_nodes); } } pub fn are_datasets_isomorphic(a: &OwnedDataset, b: &OwnedDataset) -> bool { if a.len() != b.len() { return false; } let a_bnodes = dataset_blank_nodes(a); let a_bnodes_by_hash = hash_blank_nodes(a_bnodes, a); let b_bnodes = dataset_blank_nodes(b); let b_bnodes_by_hash = hash_blank_nodes(b_bnodes, b); // Hashes should have the same size everywhere if a_bnodes_by_hash.len() != b_bnodes_by_hash.len() { return false; } build_and_check_containment_from_hashes( &mut a_bnodes_by_hash.keys().collect(), &a_bnodes_by_hash, &b_bnodes_by_hash, &mut HashMap::default(), a, b, ) } rio-0.8.5/testsuite/src/lib.rs000066400000000000000000000003471466265456300162760ustar00rootroot00000000000000//! Implementation of [W3C RDF tests](http://w3c.github.io/rdf-tests/) to tests Rio parsers conformance. #![deny(unsafe_code)] mod isomorphism; pub mod manifest; pub mod model; pub mod parser_evaluator; pub mod report; mod vocab; rio-0.8.5/testsuite/src/main.rs000066400000000000000000000041671466265456300164600ustar00rootroot00000000000000use rio_testsuite::manifest::TestManifest; use rio_testsuite::model::OwnedDataset; use rio_testsuite::parser_evaluator::*; use rio_testsuite::report::TestOutcome; use std::env; use std::error::Error; use std::path::Path; type ParseFunction = fn(&str, &Path) -> Result>; fn main() { let args: Vec = env::args().collect(); if args.len() != 3 { eprintln!("Expecting two arguments: "); return; } #[allow(unused_mut)] let mut parse_func: ParseFunction = parse_w3c_rdf_test_file; #[allow(unused_mut)] let mut manifest_url = match args[2].as_ref() { "ntriples" | "nt" => "http://w3c.github.io/rdf-tests/ntriples/manifest.ttl", "nquads" | "nq" => "http://w3c.github.io/rdf-tests/nquads/manifest.ttl", "turtle" | "ttl" => "http://w3c.github.io/rdf-tests/turtle/manifest.ttl", "rdf-xml" | "rdf" => "http://w3c.github.io/rdf-tests/rdf-xml/manifest.ttl", "trig" => "http://w3c.github.io/rdf-tests/trig/manifest.ttl", _ => &args[2], }; #[cfg(feature = "generalized")] { if manifest_url == "gtrig" { manifest_url = "http://w3c.github.io/rdf-tests/trig/manifest.ttl"; parse_func = parse_w3c_rdf_test_file_for_gtrig; } else if manifest_url == "gnquads" { manifest_url = "http://w3c.github.io/rdf-tests/nquads/manifest.ttl"; parse_func = parse_w3c_rdf_test_file_for_gnquads; } } let test_path = Path::new(&args[1]); let manifest = TestManifest::new(manifest_url.to_string(), |url| parse_func(url, test_path)); match evaluate_parser_tests(manifest, |url| parse_func(url, test_path)) { Ok(results) => { for result in results { match result.outcome { TestOutcome::Passed => println!("{}: passed", result.test), TestOutcome::Failed { error } => { println!("{}: failed with error {}", result.test, error) } } } } Err(e) => eprintln!("{}", e), } } rio-0.8.5/testsuite/src/manifest.rs000066400000000000000000000242351466265456300173400ustar00rootroot00000000000000use crate::model::*; use crate::vocab::*; use rio_api::model::Literal; use std::error::Error; use std::fmt; pub struct Test { pub id: OwnedNamedNode, pub kind: OwnedNamedNode, pub name: Option, pub comment: Option, pub action: String, pub result: Option, } impl fmt::Display for Test { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "{}", self.kind)?; if let Some(name) = &self.name { write!(f, " named \"{}\"", name)?; } if let Some(comment) = &self.comment { write!(f, " with comment \"{}\"", comment)?; } write!(f, " on file \"{}\"", self.action)?; Ok(()) } } pub struct TestManifest Result>> { graph: OwnedDataset, tests_to_do: Vec, manifests_to_do: Vec, file_reader: R, } impl Result>> TestManifest { pub fn new(manifest_url: String, file_reader: R) -> Self { Self { graph: OwnedDataset::default(), tests_to_do: Vec::default(), manifests_to_do: vec![manifest_url], file_reader, } } } impl Result>> Iterator for TestManifest { type Item = Result>; fn next(&mut self) -> Option>> { match self.tests_to_do.pop() { Some(OwnedTerm::NamedNode(test_node)) => { let test_subject = OwnedSubject::from(test_node.clone()); let kind = match self .graph .object_for_subject_predicate(&test_subject, &rdf::TYPE) { Some(OwnedTerm::NamedNode(c)) => c.clone(), _ => return Some(Err(Box::new(TestManifestError::InvalidTestType(test_node)))), }; let name = match self .graph .object_for_subject_predicate(&test_subject, &mf::NAME) { Some(OwnedTerm::Literal(c)) => Some(literal_value(c).to_owned()), _ => None, }; let comment = match self .graph .object_for_subject_predicate(&test_subject, &rdfs::COMMENT) { Some(OwnedTerm::Literal(c)) => Some(literal_value(c).to_owned()), _ => None, }; let action = match self .graph .object_for_subject_predicate(&test_subject, &mf::ACTION) { Some(OwnedTerm::NamedNode(n)) => n.iri.clone(), _ => { return Some(Err(Box::new(TestManifestError::InvalidTestAction( test_node, )))) } }; let result = match self .graph .object_for_subject_predicate(&test_subject, &mf::RESULT) { Some(OwnedTerm::NamedNode(n)) => Some(n.iri.clone()), Some(_) => { return Some(Err(Box::new(TestManifestError::InvalidTestResult( test_node, )))) } None => None, }; Some(Ok(Test { id: test_node, kind, name, comment, action, result, })) } Some(_) => self.next(), None => { match self.manifests_to_do.pop() { Some(url) => { let manifest = OwnedNamedNode { iri: url.clone() }; match (self.file_reader)(&url) { Ok(g) => g.into_iter().for_each(|g| self.graph.insert(g)), Err(e) => return Some(Err(e)), } // New manifests let manifest_subject = { let manifest_type = OwnedTerm::from(rio_api::model::Term::from(mf::MANIFEST)); let mut candidates: Vec<_> = self .graph .iter() .filter_map(|q| { if rdf::TYPE == q.predicate && manifest_type == q.object { Some(q.subject.clone()) } else { None } }) .collect(); if candidates.is_empty() { OwnedSubject::from(manifest.clone()) } else if candidates.len() == 1 { candidates.drain(0..1).next().unwrap() } else { return Some(Err(Box::new(TestManifestError::AmbiguousManifest( manifest, )))); } }; match self .graph .object_for_subject_predicate(&manifest_subject, &mf::INCLUDE) { Some(OwnedTerm::BlankNode(list)) => { self.manifests_to_do.extend( RdfListIterator::iter(&self.graph, list.clone().into()) .filter_map(|m| match m { OwnedTerm::NamedNode(nm) => Some(dbg!(nm.iri)), _ => None, }), ); } Some(_) => { return Some(Err(Box::new(TestManifestError::InvalidManifestList( manifest, )))) } None => (), } // New tests match self .graph .object_for_subject_predicate(&manifest_subject, &mf::ENTRIES) { Some(OwnedTerm::BlankNode(list)) => { self.tests_to_do.extend(RdfListIterator::iter( &self.graph, list.clone().into(), )); } Some(_) => { return Some(Err(Box::new(TestManifestError::InvalidTestList( manifest, )))) } None => (), } } None => return None, } self.next() } } } } #[derive(Debug, Clone)] pub enum TestManifestError { AmbiguousManifest(OwnedNamedNode), InvalidTestType(OwnedNamedNode), InvalidTestAction(OwnedNamedNode), InvalidTestResult(OwnedNamedNode), InvalidManifestList(OwnedNamedNode), InvalidTestList(OwnedNamedNode), } impl fmt::Display for TestManifestError { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> Result<(), fmt::Error> { match self { TestManifestError::AmbiguousManifest(t) => { write!(f, "Could not decide what is the manifest IRI in {}", t) } TestManifestError::InvalidTestType(t) => { write!(f, "The test {} has an unsupported or missing rdf:type", t) } TestManifestError::InvalidTestAction(t) => { write!(f, "The test {} has an invalid or missing mf:action", t) } TestManifestError::InvalidTestResult(t) => { write!(f, "The test {} has an invalid mf:result", t) } TestManifestError::InvalidManifestList(t) => { write!(f, "The manifest {} contains an invalid mf:include list", t) } TestManifestError::InvalidTestList(t) => { write!(f, "The manifest {} contains an invalid mf:entries list", t) } } } } impl Error for TestManifestError {} pub struct RdfListIterator<'a> { graph: &'a OwnedDataset, current_node: Option, } impl<'a> RdfListIterator<'a> { fn iter(graph: &'a OwnedDataset, root: OwnedSubject) -> RdfListIterator<'a> { RdfListIterator { graph, current_node: Some(root), } } } impl<'a> Iterator for RdfListIterator<'a> { type Item = OwnedTerm; fn next(&mut self) -> Option { match self.current_node.clone() { Some(current) => { let result = self .graph .object_for_subject_predicate(¤t, &rdf::FIRST) .cloned(); self.current_node = match self .graph .object_for_subject_predicate(¤t, &rdf::REST) { Some(OwnedTerm::NamedNode(n)) if n.iri == rdf::NIL.iri => None, Some(OwnedTerm::NamedNode(n)) => Some(n.clone().into()), Some(OwnedTerm::BlankNode(n)) => Some(n.clone().into()), _ => None, }; result } None => None, } } } fn literal_value<'a>(l: impl Into>) -> &'a str { match l.into() { Literal::Simple { value } => value, Literal::LanguageTaggedString { value, .. } => value, Literal::Typed { value, .. } => value, } } rio-0.8.5/testsuite/src/model.rs000066400000000000000000000444211466265456300166310ustar00rootroot00000000000000use rio_api::model::*; use std::collections::HashSet; use std::fmt; use std::iter::FromIterator; #[derive(Eq, PartialEq, Ord, PartialOrd, Debug, Clone, Hash)] pub struct OwnedNamedNode { pub iri: String, } impl fmt::Display for OwnedNamedNode { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { NamedNode::from(self).fmt(f) } } impl From> for OwnedNamedNode { fn from(n: NamedNode<'_>) -> Self { Self { iri: n.iri.to_owned(), } } } impl<'a> From<&'a OwnedNamedNode> for NamedNode<'a> { fn from(n: &'a OwnedNamedNode) -> Self { Self { iri: &n.iri } } } impl PartialEq for NamedNode<'_> { fn eq(&self, other: &OwnedNamedNode) -> bool { self.iri == other.iri } } #[derive(Eq, PartialEq, Ord, PartialOrd, Debug, Clone, Hash)] pub struct OwnedBlankNode { pub id: String, } impl fmt::Display for OwnedBlankNode { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { BlankNode::from(self).fmt(f) } } impl From> for OwnedBlankNode { fn from(n: BlankNode<'_>) -> Self { Self { id: n.id.to_owned(), } } } impl<'a> From<&'a OwnedBlankNode> for BlankNode<'a> { fn from(n: &'a OwnedBlankNode) -> Self { Self { id: &n.id } } } impl PartialEq for BlankNode<'_> { fn eq(&self, other: &OwnedBlankNode) -> bool { self.id == other.id } } #[derive(Eq, PartialEq, Ord, PartialOrd, Debug, Clone, Hash)] pub enum OwnedLiteral { Simple { value: String, }, LanguageTaggedString { value: String, language: String, }, Typed { value: String, datatype: OwnedNamedNode, }, } impl fmt::Display for OwnedLiteral { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { Literal::from(self).fmt(f) } } impl From> for OwnedLiteral { fn from(n: Literal<'_>) -> Self { match n { Literal::Simple { value } => OwnedLiteral::Simple { value: value.to_owned(), }, Literal::LanguageTaggedString { value, language } => { OwnedLiteral::LanguageTaggedString { value: value.to_owned(), language: language.to_owned(), } } Literal::Typed { value, datatype } => OwnedLiteral::Typed { value: value.to_owned(), datatype: datatype.into(), }, } } } impl<'a> From<&'a OwnedLiteral> for Literal<'a> { fn from(n: &'a OwnedLiteral) -> Self { match n { OwnedLiteral::Simple { value } => Literal::Simple { value }, OwnedLiteral::LanguageTaggedString { value, language } => { Literal::LanguageTaggedString { value, language } } OwnedLiteral::Typed { value, datatype } => Literal::Typed { value, datatype: datatype.into(), }, } } } impl PartialEq for Literal<'_> { fn eq(&self, other: &OwnedLiteral) -> bool { match (self, other) { (Literal::Simple { value }, OwnedLiteral::Simple { value: v2 }) => value == v2, ( Literal::LanguageTaggedString { value, language }, OwnedLiteral::LanguageTaggedString { value: v2, language: l2, }, ) => value == v2 && language == l2, ( Literal::Typed { value, datatype }, OwnedLiteral::Typed { value: v2, datatype: d2, }, ) => value == v2 && datatype == d2, _ => false, } } } #[derive(Eq, PartialEq, Ord, PartialOrd, Debug, Clone, Hash)] pub enum OwnedSubject { NamedNode(OwnedNamedNode), BlankNode(OwnedBlankNode), Triple(Box), } impl fmt::Display for OwnedSubject { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { OwnedSubject::NamedNode(n) => n.fmt(f), OwnedSubject::BlankNode(n) => n.fmt(f), OwnedSubject::Triple(t) => write!(f, "<< {} >>", t), } } } impl From> for OwnedSubject { fn from(t: Subject<'_>) -> Self { match t { Subject::NamedNode(n) => OwnedSubject::NamedNode(n.into()), Subject::BlankNode(n) => OwnedSubject::BlankNode(n.into()), Subject::Triple(t) => OwnedSubject::Triple(Box::new(OwnedTriple::from(*t))), } } } impl PartialEq for Subject<'_> { fn eq(&self, other: &OwnedSubject) -> bool { match (self, other) { (Subject::NamedNode(n1), OwnedSubject::NamedNode(n2)) => n1 == n2, (Subject::BlankNode(n1), OwnedSubject::BlankNode(n2)) => n1 == n2, (Subject::Triple(t1), OwnedSubject::Triple(t2)) => *t1 == &**t2, _ => false, } } } impl From for OwnedSubject { fn from(node: OwnedNamedNode) -> Self { OwnedSubject::NamedNode(node) } } impl From for OwnedSubject { fn from(node: OwnedBlankNode) -> Self { OwnedSubject::BlankNode(node) } } #[derive(Eq, PartialEq, Ord, PartialOrd, Debug, Clone, Hash)] pub enum OwnedGraphName { NamedNode(OwnedNamedNode), BlankNode(OwnedBlankNode), } impl fmt::Display for OwnedGraphName { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { GraphName::from(self).fmt(f) } } impl From> for OwnedGraphName { fn from(t: GraphName<'_>) -> Self { match t { GraphName::NamedNode(n) => OwnedGraphName::NamedNode(n.into()), GraphName::BlankNode(n) => OwnedGraphName::BlankNode(n.into()), } } } impl<'a> From<&'a OwnedGraphName> for GraphName<'a> { fn from(t: &'a OwnedGraphName) -> Self { match t { OwnedGraphName::NamedNode(n) => GraphName::NamedNode(n.into()), OwnedGraphName::BlankNode(n) => GraphName::BlankNode(n.into()), } } } impl From for OwnedGraphName { fn from(node: OwnedNamedNode) -> Self { OwnedGraphName::NamedNode(node) } } impl From for OwnedGraphName { fn from(node: OwnedBlankNode) -> Self { OwnedGraphName::BlankNode(node) } } impl PartialEq for GraphName<'_> { fn eq(&self, other: &OwnedGraphName) -> bool { match (self, other) { (GraphName::NamedNode(n1), OwnedGraphName::NamedNode(n2)) => n1 == n2, (GraphName::BlankNode(n1), OwnedGraphName::BlankNode(n2)) => n1 == n2, _ => false, } } } fn same_graph_name(gn1: &Option>, gn2: &Option) -> bool { match (gn1, gn2) { (Some(n1), Some(n2)) => n1 == n2, (None, None) => true, _ => false, } } #[derive(Eq, PartialEq, Ord, PartialOrd, Debug, Clone, Hash)] pub enum OwnedTerm { NamedNode(OwnedNamedNode), BlankNode(OwnedBlankNode), Literal(OwnedLiteral), Triple(Box), } impl fmt::Display for OwnedTerm { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { OwnedTerm::NamedNode(n) => n.fmt(f), OwnedTerm::BlankNode(n) => n.fmt(f), OwnedTerm::Literal(n) => n.fmt(f), OwnedTerm::Triple(t) => write!(f, "<< {} >>", t), } } } impl From> for OwnedTerm { fn from(t: Term<'_>) -> Self { match t { Term::NamedNode(n) => OwnedTerm::NamedNode(n.into()), Term::BlankNode(n) => OwnedTerm::BlankNode(n.into()), Term::Literal(n) => OwnedTerm::Literal(n.into()), Term::Triple(t) => OwnedTerm::Triple(Box::new(OwnedTriple::from(*t))), } } } impl From for OwnedTerm { fn from(node: OwnedNamedNode) -> Self { OwnedTerm::NamedNode(node) } } impl From for OwnedTerm { fn from(node: OwnedBlankNode) -> Self { OwnedTerm::BlankNode(node) } } impl From for OwnedTerm { fn from(literal: OwnedLiteral) -> Self { OwnedTerm::Literal(literal) } } impl From for OwnedTerm { fn from(other: OwnedSubject) -> Self { match other { OwnedSubject::NamedNode(node) => OwnedTerm::NamedNode(node), OwnedSubject::BlankNode(node) => OwnedTerm::BlankNode(node), OwnedSubject::Triple(triple) => OwnedTerm::Triple(triple), } } } impl PartialEq for Term<'_> { fn eq(&self, other: &OwnedTerm) -> bool { match (self, other) { (Term::NamedNode(n1), OwnedTerm::NamedNode(n2)) => n1 == n2, (Term::BlankNode(n1), OwnedTerm::BlankNode(n2)) => n1 == n2, (Term::Literal(n1), OwnedTerm::Literal(n2)) => n1 == n2, (Term::Triple(t1), OwnedTerm::Triple(t2)) => *t1 == &**t2, _ => false, } } } /// A [RDF triple](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-triple) #[derive(Eq, PartialEq, Debug, Clone, Hash, Ord, PartialOrd)] pub struct OwnedTriple { pub subject: OwnedSubject, pub predicate: OwnedNamedNode, pub object: OwnedTerm, } impl fmt::Display for OwnedTriple { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "{} {} {}", self.subject, self.predicate, self.object) } } impl From> for OwnedTriple { fn from(t: Triple<'_>) -> Self { Self { subject: t.subject.into(), predicate: t.predicate.into(), object: t.object.into(), } } } impl PartialEq for Triple<'_> { fn eq(&self, other: &OwnedTriple) -> bool { self.subject == other.subject && self.predicate == other.predicate && self.object == other.object } } /// A [RDF triple](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-triple) #[derive(Eq, PartialEq, Debug, Clone, Hash)] pub struct OwnedQuad { pub subject: OwnedSubject, pub predicate: OwnedNamedNode, pub object: OwnedTerm, pub graph_name: Option, } impl fmt::Display for OwnedQuad { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "{} {} {}", self.subject, self.predicate, self.object)?; if let Some(n) = &self.graph_name { ' '.fmt(f)?; n.fmt(f)?; } Ok(()) } } impl From> for OwnedQuad { fn from(t: Triple<'_>) -> Self { Self { subject: t.subject.into(), predicate: t.predicate.into(), object: t.object.into(), graph_name: None, } } } impl From> for OwnedQuad { fn from(q: Quad<'_>) -> Self { Self { subject: q.subject.into(), predicate: q.predicate.into(), object: q.object.into(), graph_name: q.graph_name.map(|g| g.into()), } } } impl PartialEq for Quad<'_> { fn eq(&self, other: &OwnedQuad) -> bool { self.subject == other.subject && self.predicate == other.predicate && self.object == other.object && same_graph_name(&self.graph_name, &other.graph_name) } } #[derive(Default, Debug, Clone)] pub struct OwnedDataset { inner: HashSet, } impl OwnedDataset { pub fn insert(&mut self, t: impl Into) { self.inner.insert(t.into()); } pub fn iter(&self) -> impl Iterator { self.inner.iter() } pub fn len(&self) -> usize { self.inner.len() } pub fn is_empty(&self) -> bool { self.inner.is_empty() } pub fn contains(&self, t: &OwnedQuad) -> bool { self.inner.contains(t) } pub fn triples_for_subject<'a, T>( &'a self, subject: &'a T, ) -> impl Iterator + 'a where T: PartialEq + 'a, { self.inner.iter().filter(move |t| subject == &t.subject) } pub fn triples_for_object<'a, T>( &'a self, object: &'a T, ) -> impl Iterator + 'a where T: PartialEq + 'a, { self.inner.iter().filter(move |t| *object == t.object) } pub fn object_for_subject_predicate<'a, T, U>( &'a self, subject: &T, predicate: &U, ) -> Option<&'a OwnedTerm> where T: PartialEq + 'a, U: PartialEq + 'a, { self.inner .iter() .filter(move |t| subject == &t.subject && predicate == &t.predicate) .map(|t| &t.object) .next() } pub fn subject_for_predicate_object<'a, T, U>( &'a self, predicate: &T, object: &U, ) -> Option<&'a OwnedSubject> where T: PartialEq + 'a, U: PartialEq + 'a, { self.inner .iter() .filter(move |t| predicate == &t.predicate && object == &t.object) .map(|t| &t.subject) .next() } } impl IntoIterator for OwnedDataset { type Item = OwnedQuad; type IntoIter = as IntoIterator>::IntoIter; fn into_iter(self) -> Self::IntoIter { self.inner.into_iter() } } impl FromIterator for OwnedDataset { fn from_iter>(iter: I) -> Self { Self { inner: HashSet::from_iter(iter), } } } impl fmt::Display for OwnedDataset { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { for t in &self.inner { writeln!(f, "{}", t)?; } Ok(()) } } #[cfg(feature = "generalized")] mod generalized { use super::*; use std::convert::{TryFrom, TryInto}; impl<'a> TryFrom> for OwnedQuad { type Error = StrictRdfError; #[inline] fn try_from(other: GeneralizedQuad<'a>) -> Result { Ok(OwnedQuad { subject: other.subject.try_into()?, predicate: other.predicate.try_into()?, object: other.object.try_into()?, graph_name: other .graph_name .map(GeneralizedTerm::try_into) .transpose()?, }) } } impl<'a> TryFrom> for OwnedSubject { type Error = StrictRdfError; #[inline] fn try_from(other: GeneralizedTerm<'a>) -> Result { match other { GeneralizedTerm::NamedNode(inner) => Ok(OwnedSubject::NamedNode(inner.into())), GeneralizedTerm::BlankNode(inner) => Ok(OwnedSubject::BlankNode(inner.into())), GeneralizedTerm::Literal(_) => Err(StrictRdfError { message: "Literal cannot be used as a subject", }), GeneralizedTerm::Variable(_) => Err(StrictRdfError { message: "Variable cannot be converted to strict RDF term", }), GeneralizedTerm::Triple(triple) => { Ok(OwnedSubject::Triple(Box::new(OwnedTriple { subject: triple[0].try_into()?, predicate: triple[1].try_into()?, object: triple[2].try_into()?, }))) } } } } impl<'a> TryFrom> for OwnedNamedNode { type Error = StrictRdfError; #[inline] fn try_from(other: GeneralizedTerm<'a>) -> Result { match other { GeneralizedTerm::NamedNode(inner) => Ok(inner.into()), GeneralizedTerm::BlankNode(_) => Err(StrictRdfError { message: "BlankNode cannot be used as a predicate", }), GeneralizedTerm::Literal(_) => Err(StrictRdfError { message: "Literal cannot be used as a predicate", }), GeneralizedTerm::Variable(_) => Err(StrictRdfError { message: "Variable cannot be converted to strict RDF term", }), GeneralizedTerm::Triple(_) => Err(StrictRdfError { message: "Quoted triple cannot be used as a predicate", }), } } } impl<'a> TryFrom> for OwnedTerm { type Error = StrictRdfError; #[inline] fn try_from(other: GeneralizedTerm<'a>) -> Result { match other { GeneralizedTerm::NamedNode(inner) => Ok(OwnedTerm::NamedNode(inner.into())), GeneralizedTerm::BlankNode(inner) => Ok(OwnedTerm::BlankNode(inner.into())), GeneralizedTerm::Literal(inner) => Ok(OwnedTerm::Literal(inner.into())), GeneralizedTerm::Variable(_) => Err(StrictRdfError { message: "Variable cannot be converted to struct RDF term", }), GeneralizedTerm::Triple(triple) => Ok(OwnedTerm::Triple(Box::new(OwnedTriple { subject: triple[0].try_into()?, predicate: triple[1].try_into()?, object: triple[2].try_into()?, }))), } } } impl<'a> TryFrom> for OwnedGraphName { type Error = StrictRdfError; #[inline] fn try_from(other: GeneralizedTerm<'a>) -> Result { match other { GeneralizedTerm::NamedNode(inner) => Ok(OwnedGraphName::NamedNode(inner.into())), GeneralizedTerm::BlankNode(inner) => Ok(OwnedGraphName::BlankNode(inner.into())), GeneralizedTerm::Literal(_) => Err(StrictRdfError { message: "Literal cannot be used as a graph name", }), GeneralizedTerm::Variable(_) => Err(StrictRdfError { message: "Variable cannot be converted to strict RDF term", }), GeneralizedTerm::Triple(_) => Err(StrictRdfError { message: "Quoted triple cannot be used as a graph name", }), } } } } rio-0.8.5/testsuite/src/parser_evaluator.rs000066400000000000000000000240731466265456300211100ustar00rootroot00000000000000use crate::isomorphism::are_datasets_isomorphic; use crate::manifest::{Test, TestManifestError}; use crate::model::OwnedDataset; use crate::report::{TestOutcome, TestResult}; use oxiri::Iri; use rio_api::parser::*; use rio_turtle::*; use rio_xml::RdfXmlParser; use std::error::Error; use std::fmt; use std::fs::File; use std::io; use std::io::BufReader; use std::path::Path; pub fn evaluate_parser_tests( manifest: impl Iterator>>, file_reader: impl Fn(&str) -> Result>, ) -> Result, Box> { manifest .map(|test| { let test = test?; let outcome = if &test.kind.iri == "http://www.w3.org/ns/rdftest#TestNTriplesPositiveSyntax" || &test.kind.iri == "http://www.w3.org/ns/rdftest#TestNQuadsPositiveSyntax" || &test.kind.iri == "http://www.w3.org/ns/rdftest#TestTurtlePositiveSyntax" || &test.kind.iri == "http://www.w3.org/ns/rdftest#TestTrigPositiveSyntax" { match file_reader(&test.action) { Ok(_) => TestOutcome::Passed, Err(e) => TestOutcome::Failed { error: format!("Parse error on file {}: {}", &test.action, e), }, } } else if &test.kind.iri == "http://www.w3.org/ns/rdftest#TestNTriplesNegativeSyntax" || &test.kind.iri == "http://www.w3.org/ns/rdftest#TestNQuadsNegativeSyntax" || &test.kind.iri == "http://www.w3.org/ns/rdftest#TestTurtleNegativeSyntax" || &test.kind.iri == "http://www.w3.org/ns/rdftest#TestTurtleNegativeEval" || &test.kind.iri == "http://www.w3.org/ns/rdftest#TestTrigNegativeSyntax" || &test.kind.iri == "http://www.w3.org/ns/rdftest#TestTrigNegativeEval" || &test.kind.iri == "http://www.w3.org/ns/rdftest#TestXMLNegativeSyntax" { match file_reader(&test.action) { Ok(_) => TestOutcome::Failed { error: "file parsed without error even if it should not".to_owned(), }, Err(_) => TestOutcome::Passed, } } else if &test.kind.iri == "http://www.w3.org/ns/rdftest#TestTurtleEval" || &test.kind.iri == "http://www.w3.org/ns/rdftest#TestTrigEval" || &test.kind.iri == "http://www.w3.org/ns/rdftest#TestXMLEval" { match file_reader(&test.action) { Ok(actual_graph) => { if let Some(result) = &test.result { match file_reader(result) { Ok(expected_graph) => if are_datasets_isomorphic(&expected_graph, &actual_graph) { TestOutcome::Passed } else { TestOutcome::Failed { error: format!("The two files are not isomorphics. Expected:\n{}\nActual:\n{}", expected_graph, actual_graph), } } Err(e) => TestOutcome::Failed { error: format!("Parse error on file {}: {}", &test.action, e), }, } } else { return Err(TestManifestError::InvalidTestResult(test.id.clone()).into()) } } Err(e) => TestOutcome::Failed { error: format!("Parse error on file {}: {}", &test.action, e), }, } } else { return Err(TestManifestError::InvalidTestType(test.kind).into()) }; Ok(TestResult { test: test.id, outcome, }) }) .collect() } pub fn read_w3c_rdf_test_file( url: &str, tests_path: &Path, ) -> Result, Box> { let mut path = tests_path.to_owned(); path.push(if url.starts_with("http://w3c.github.io/rdf-tests/") { Ok(url.replace("http://w3c.github.io/rdf-tests/", "")) } else if url.starts_with("http://www.w3.org/2013/RDFXMLTests/") { Ok(url.replace("http://www.w3.org/2013/RDFXMLTests/", "rdf-xml/")) } else if url.starts_with("https://w3c.github.io/rdf-star/") { Ok(url.replace("https://w3c.github.io/rdf-star/", "../rdf-star/")) } else { Err(Box::new(TestEvaluationError::UnknownTestUrl( url.to_owned(), ))) }?); Ok(BufReader::new(File::open(&path).map_err(|e| { TestEvaluationError::Io(path.to_string_lossy().to_string(), e) })?)) } pub fn parse_w3c_rdf_test_file( url: &str, tests_path: &Path, ) -> Result> { let read = read_w3c_rdf_test_file(url, tests_path)?; let base_iri = Iri::parse(url.to_owned())?; if url.ends_with(".nt") { NTriplesParser::new(read) .into_iter(|t| Ok(t.into())) .collect() } else if url.ends_with(".nq") { NQuadsParser::new(read) .into_iter(|t| Ok(t.into())) .collect() } else if url.ends_with(".ttl") { TurtleParser::new(read, Some(base_iri)) .into_iter(|t| Ok(t.into())) .collect() } else if url.ends_with(".trig") { TriGParser::new(read, Some(base_iri)) .into_iter(|t| Ok(t.into())) .collect() } else if url.ends_with(".rdf") { RdfXmlParser::new(read, Some(base_iri)) .into_iter(|t| Ok(t.into())) .collect() } else { Err(Box::new(TestEvaluationError::UnsupportedFormat( url.to_owned(), ))) } } /// Use Generalized N-Quads instead of Turtle and TriG parser #[cfg(feature = "generalized")] pub fn parse_w3c_rdf_test_file_for_gnquads( url: &str, tests_path: &Path, ) -> Result> { let read = read_w3c_rdf_test_file(url, tests_path)?; let base_iri = Iri::parse(url.to_owned())?; if url.ends_with(".nt") { NTriplesParser::new(read) .into_iter(|t| Ok(t.into())) .collect() } else if url.ends_with(".nq") { GeneralizedNQuadsParser::new(read) .into_iter(|q| Ok(q.try_into()?)) .collect() } else if url.ends_with(".ttl") { TurtleParser::new(read, Some(base_iri)) .into_iter(|t| Ok(t.into())) .collect() } else { Err(Box::new(TestEvaluationError::UnsupportedFormat( url.to_owned(), ))) } } /// Use Generalized TriG instead of Turtle and TriG parser #[cfg(feature = "generalized")] pub fn parse_w3c_rdf_test_file_for_gtrig( url: &str, tests_path: &Path, ) -> Result> { let read = read_w3c_rdf_test_file(url, tests_path)?; let base_iri = Iri::parse(url.to_owned())?; if url.ends_with(".nt") { NTriplesParser::new(read) .into_iter(|t| Ok(t.into())) .collect() } else if url.ends_with(".nq") { NQuadsParser::new(read) .into_iter(|q| Ok(q.into())) .collect() } else if url.ends_with(".ttl") || url.ends_with(".trig") { GTriGParser::new(read, Some(base_iri)) .into_iter(|q| Ok(q.try_into()?)) .collect() } else { Err(Box::new(TestEvaluationError::UnsupportedFormat( url.to_owned(), ))) } } /// Use NQuads instead of NTriples parser /// (in order to test the NQuads parser with NT files) pub fn parse_w3c_rdf_test_file_for_nquads( url: &str, tests_path: &Path, ) -> Result> { let read = read_w3c_rdf_test_file(url, tests_path)?; let base_iri = Iri::parse(url.to_owned())?; if url.ends_with(".nt") || url.ends_with(".nq") { NQuadsParser::new(read) .into_iter(|t| Ok(t.into())) .collect() } else if url.ends_with(".ttl") { TurtleParser::new(read, Some(base_iri)) .into_iter(|t| Ok(t.into())) .collect() } else if url.ends_with(".trig") { TriGParser::new(read, Some(base_iri)) .into_iter(|t| Ok(t.into())) .collect() } else { Err(Box::new(TestEvaluationError::UnsupportedFormat( url.to_owned(), ))) } } /// Use TriG instead of Turtle parser /// (in order to test the TriG parser with Turtle files) pub fn parse_w3c_rdf_test_file_for_trig( url: &str, tests_path: &Path, ) -> Result> { let read = read_w3c_rdf_test_file(url, tests_path)?; let base_iri = Iri::parse(url.to_owned())?; if url.ends_with(".nt") { NTriplesParser::new(read) .into_iter(|t| Ok(t.into())) .collect() } else if url.ends_with(".nq") { NQuadsParser::new(read) .into_iter(|t| Ok(t.into())) .collect() } else if url.ends_with(".ttl") || url.ends_with(".trig") { TriGParser::new(read, Some(base_iri)) .into_iter(|t| Ok(t.into())) .collect() } else { Err(Box::new(TestEvaluationError::UnsupportedFormat( url.to_owned(), ))) } } #[derive(Debug)] pub enum TestEvaluationError { UnknownTestUrl(String), UnsupportedFormat(String), Io(String, io::Error), } impl fmt::Display for TestEvaluationError { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> Result<(), fmt::Error> { match self { TestEvaluationError::UnknownTestUrl(u) => { write!(f, "The URL {} does not corresponds to a known RDF test", u) } TestEvaluationError::UnsupportedFormat(u) => write!( f, "The extension of {} does not match any supported format", u ), TestEvaluationError::Io(file, error) => { write!(f, "I/O error on file {}: {}", file, error) } } } } impl Error for TestEvaluationError {} rio-0.8.5/testsuite/src/report.rs000066400000000000000000000003551466265456300170420ustar00rootroot00000000000000use crate::model::OwnedNamedNode; #[derive(Debug, Clone)] pub struct TestResult { pub test: OwnedNamedNode, pub outcome: TestOutcome, } #[derive(Debug, Clone)] pub enum TestOutcome { Passed, Failed { error: String }, } rio-0.8.5/testsuite/src/vocab.rs000066400000000000000000000031421466265456300166160ustar00rootroot00000000000000pub mod mf { use rio_api::model::NamedNode; pub const INCLUDE: NamedNode<'static> = NamedNode { iri: "http://www.w3.org/2001/sw/DataAccess/tests/test-manifest#include", }; pub const ENTRIES: NamedNode<'static> = NamedNode { iri: "http://www.w3.org/2001/sw/DataAccess/tests/test-manifest#entries", }; pub const MANIFEST: NamedNode<'static> = NamedNode { iri: "http://www.w3.org/2001/sw/DataAccess/tests/test-manifest#Manifest", }; pub const NAME: NamedNode<'static> = NamedNode { iri: "http://www.w3.org/2001/sw/DataAccess/tests/test-manifest#name", }; pub const ACTION: NamedNode<'static> = NamedNode { iri: "http://www.w3.org/2001/sw/DataAccess/tests/test-manifest#action", }; pub const RESULT: NamedNode<'static> = NamedNode { iri: "http://www.w3.org/2001/sw/DataAccess/tests/test-manifest#result", }; } pub mod rdf { use rio_api::model::NamedNode; pub const FIRST: NamedNode<'static> = NamedNode { iri: "http://www.w3.org/1999/02/22-rdf-syntax-ns#first", }; pub const NIL: NamedNode<'static> = NamedNode { iri: "http://www.w3.org/1999/02/22-rdf-syntax-ns#nil", }; pub const REST: NamedNode<'static> = NamedNode { iri: "http://www.w3.org/1999/02/22-rdf-syntax-ns#rest", }; pub const TYPE: NamedNode<'static> = NamedNode { iri: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", }; } pub mod rdfs { use rio_api::model::NamedNode; pub const COMMENT: NamedNode<'static> = NamedNode { iri: "http://www.w3.org/2000/01/rdf-schema#comment", }; } rio-0.8.5/testsuite/tests/000077500000000000000000000000001466265456300155315ustar00rootroot00000000000000rio-0.8.5/testsuite/tests/rio_testsuite.rs000066400000000000000000000043411466265456300210030ustar00rootroot00000000000000use oxiri::Iri; use rio_api::parser::{QuadsParser, TriplesParser}; use rio_testsuite::manifest::TestManifest; use rio_testsuite::model::OwnedDataset; use rio_testsuite::parser_evaluator::*; use rio_testsuite::report::TestOutcome; use rio_turtle::{NQuadsParser, NTriplesParser, TriGParser, TurtleParser}; use rio_xml::RdfXmlParser; use std::error::Error; use std::fs::File; use std::io::BufReader; pub fn parse_rdf_test_file(url: &str) -> Result> { let base = env!("CARGO_MANIFEST_DIR").to_owned() + "/rio-tests"; let read = BufReader::new( File::open(url.replace("https://github.com/Tpt/rio/tests", &base)) .map_err(|e| TestEvaluationError::Io(url.to_owned(), e))?, ); let base_iri = Iri::parse(url.to_owned())?; if url.ends_with(".nt") { NTriplesParser::new(read) .into_iter(|t| Ok(t.into())) .collect() } else if url.ends_with(".nq") { NQuadsParser::new(read) .into_iter(|t| Ok(t.into())) .collect() } else if url.ends_with(".ttl") { TurtleParser::new(read, Some(base_iri)) .into_iter(|t| Ok(t.into())) .collect() } else if url.ends_with(".trig") { TriGParser::new(read, Some(base_iri)) .into_iter(|t| Ok(t.into())) .collect() } else if url.ends_with(".rdf") { RdfXmlParser::new(read, Some(base_iri)) .into_iter(|t| Ok(t.into())) .collect() } else { Err(Box::new(TestEvaluationError::UnsupportedFormat( url.to_owned(), ))) } } fn run_testsuite(manifest_uri: String) -> Result<(), Box> { let manifest = TestManifest::new(manifest_uri, parse_rdf_test_file); let results = evaluate_parser_tests(manifest, parse_rdf_test_file)?; let mut errors = Vec::default(); for result in results { if let TestOutcome::Failed { error } = result.outcome { errors.push(format!("{}: failed with error {}", result.test, error)) } } assert!(errors.is_empty(), "\n{}\n", errors.join("\n")); Ok(()) } #[test] fn rio_testsuite() -> Result<(), Box> { run_testsuite("https://github.com/Tpt/rio/tests/manifest.ttl".to_owned()) } rio-0.8.5/testsuite/tests/serd_testsuite.rs000066400000000000000000000043211466265456300211450ustar00rootroot00000000000000use oxiri::Iri; use rio_api::parser::{QuadsParser, TriplesParser}; use rio_testsuite::manifest::TestManifest; use rio_testsuite::model::OwnedDataset; use rio_testsuite::parser_evaluator::*; use rio_testsuite::report::TestOutcome; use rio_turtle::{NQuadsParser, NTriplesParser, TriGParser, TurtleParser}; use std::error::Error; use std::fs::File; use std::io::BufReader; pub fn parse_rdf_test_file(url: &str) -> Result> { let base = env!("CARGO_MANIFEST_DIR").to_owned() + "/serd-tests"; let read = BufReader::new( File::open(url.replace("http://drobilla.net/sw/serd/test", &base)) .map_err(|e| TestEvaluationError::Io(url.to_owned(), e))?, ); let base_iri = Iri::parse(url.to_owned())?; if url.ends_with(".nt") { NTriplesParser::new(read) .into_iter(|t| Ok(t.into())) .collect() } else if url.ends_with(".nq") { NQuadsParser::new(read) .into_iter(|t| Ok(t.into())) .collect() } else if url.ends_with(".ttl") { TurtleParser::new(read, Some(base_iri)) .into_iter(|t| Ok(t.into())) .collect() } else if url.ends_with(".trig") { TriGParser::new(read, Some(base_iri)) .into_iter(|t| Ok(t.into())) .collect() } else { Err(Box::new(TestEvaluationError::UnsupportedFormat( url.to_owned(), ))) } } fn run_testsuite(manifest_uri: String) -> Result<(), Box> { let manifest = TestManifest::new(manifest_uri, parse_rdf_test_file); let results = evaluate_parser_tests(manifest, parse_rdf_test_file)?; let mut errors = Vec::default(); for result in results { if let TestOutcome::Failed { error } = result.outcome { errors.push(format!("{}: failed with error {}", result.test, error)) } } assert!(errors.is_empty(), "\n{}\n", errors.join("\n")); Ok(()) } #[test] fn serd_good_testsuite() -> Result<(), Box> { run_testsuite("http://drobilla.net/sw/serd/test/good/manifest.ttl".to_owned()) } #[test] fn serd_bad_testsuite() -> Result<(), Box> { run_testsuite("http://drobilla.net/sw/serd/test/bad/manifest.ttl".to_owned()) } rio-0.8.5/testsuite/tests/w3c_testsuite.rs000066400000000000000000000071251466265456300207110ustar00rootroot00000000000000use rio_testsuite::manifest::TestManifest; use rio_testsuite::model::OwnedDataset; use rio_testsuite::parser_evaluator::*; use rio_testsuite::report::TestOutcome; use std::error::Error; use std::path::{Path, PathBuf}; fn get_test_path() -> PathBuf { let mut base_path = PathBuf::from(env!("CARGO_MANIFEST_DIR")); base_path.push("rdf-tests"); base_path } fn run_testsuite(manifest_uri: &str) -> Result<(), Box> { run_testsuite_with(manifest_uri, parse_w3c_rdf_test_file) } fn run_testsuite_with(manifest_uri: &str, file_reader: R) -> Result<(), Box> where R: Fn(&str, &Path) -> Result>, { let test_path = get_test_path(); let manifest = TestManifest::new(manifest_uri.to_owned(), |file| { file_reader(file, &test_path) }); let results = evaluate_parser_tests(manifest, |file| file_reader(file, &test_path))?; let mut errors = Vec::default(); if results.is_empty() { errors.push(format!("<{}>: no entry found", manifest_uri)); } for result in results { if let TestOutcome::Failed { error } = result.outcome { errors.push(format!("{}: failed with error {}", result.test, error)) } } assert!(errors.is_empty(), "\n{}\n", errors.join("\n")); Ok(()) } #[test] fn ntriples_w3c_testsuite() -> Result<(), Box> { run_testsuite("http://w3c.github.io/rdf-tests/ntriples/manifest.ttl") } #[test] fn nquads_w3c_testsuite() -> Result<(), Box> { run_testsuite_with( "http://w3c.github.io/rdf-tests/ntriples/manifest.ttl", parse_w3c_rdf_test_file_for_nquads, ) } #[test] fn turtle_w3c_testsuite() -> Result<(), Box> { run_testsuite("http://w3c.github.io/rdf-tests/turtle/manifest.ttl") } #[test] fn trig_w3c_testsuite() -> Result<(), Box> { run_testsuite_with( "http://w3c.github.io/rdf-tests/trig/manifest.ttl", parse_w3c_rdf_test_file_for_trig, ) } #[test] fn rdf_xml_w3c_testsuite() -> Result<(), Box> { run_testsuite("http://www.w3.org/2013/RDFXMLTests/manifest.ttl") } #[test] fn ntriples_star_w3c_testsuite() -> Result<(), Box> { run_testsuite("https://w3c.github.io/rdf-star/tests/nt/syntax/manifest.ttl") } #[test] fn nquads_star_w3c_testsuite() -> Result<(), Box> { run_testsuite_with( "https://w3c.github.io/rdf-star/tests/nt/syntax/manifest.ttl", parse_w3c_rdf_test_file_for_nquads, ) } #[test] fn turtle_star_w3c_testsuite() -> Result<(), Box> { run_testsuite("https://w3c.github.io/rdf-star/tests/turtle/syntax/manifest.ttl")?; run_testsuite("https://w3c.github.io/rdf-star/tests/turtle/eval/manifest.ttl")?; Ok(()) } #[test] fn trig_star_w3c_testsuite() -> Result<(), Box> { run_testsuite_with( "https://w3c.github.io/rdf-star/tests/trig/syntax/manifest.ttl", parse_w3c_rdf_test_file_for_trig, )?; run_testsuite_with( "https://w3c.github.io/rdf-star/tests/trig/eval/manifest.ttl", parse_w3c_rdf_test_file_for_trig, )?; run_testsuite_with( "https://w3c.github.io/rdf-star/tests/turtle/syntax/manifest.ttl", parse_w3c_rdf_test_file_for_trig, )?; run_testsuite_with( "https://w3c.github.io/rdf-star/tests/turtle/eval/manifest.ttl", parse_w3c_rdf_test_file_for_trig, ) } #[cfg(feature = "generalized")] #[test] fn gtrig_w3c_testsuite() -> Result<(), Box> { run_testsuite_with( "http://w3c.github.io/rdf-tests/trig/manifest.ttl", parse_w3c_rdf_test_file_for_gtrig, ) } rio-0.8.5/turtle/000077500000000000000000000000001466265456300136555ustar00rootroot00000000000000rio-0.8.5/turtle/Cargo.toml000066400000000000000000000011711466265456300156050ustar00rootroot00000000000000[package] name = "rio_turtle" version = "0.8.5" authors = ["Tpt ", "Pierre-Antoine Champin "] license = "Apache-2.0" readme = "../README.md" keywords = ["RDF", "Turtle", "TriG", "N-Triples", "N-Quads"] repository = "https://github.com/oxigraph/rio" description = """ RDF Turtle, Trig, N-Triples and N-Quads parsers and serializers """ edition = "2021" rust-version = "1.75" [package.metadata.docs.rs] all-features = true [features] default = [] generalized = ["rio_api/generalized"] [dependencies] oxilangtag = "0.1" oxiri = "0.2" rio_api = { version = "0.8", path = "../api" } rio-0.8.5/turtle/src/000077500000000000000000000000001466265456300144445ustar00rootroot00000000000000rio-0.8.5/turtle/src/error.rs000066400000000000000000000065071466265456300161530ustar00rootroot00000000000000use crate::MAX_STACK_SIZE; use oxilangtag::LanguageTagParseError; use oxiri::IriParseError; use rio_api::parser::{LineBytePosition, ParseError}; use std::char; use std::error::Error; use std::fmt; use std::io; /// Error that might be returned during parsing. /// /// It might wrap an IO error or be a parsing error. #[derive(Debug)] pub struct TurtleError { pub(crate) kind: TurtleErrorKind, pub(crate) position: Option, } #[derive(Debug)] pub enum TurtleErrorKind { Io(io::Error), UnknownPrefix(String), PrematureEof, UnexpectedByte(u8), InvalidUnicodeCodePoint(u32), InvalidIri { iri: String, error: IriParseError, }, InvalidLanguageTag { tag: String, error: LanguageTagParseError, }, StackOverflow, } impl fmt::Display for TurtleError { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match &self.kind { TurtleErrorKind::Io(error) => return error.fmt(f), TurtleErrorKind::UnknownPrefix(prefix) => write!(f, "unknown prefix '{}'", prefix), TurtleErrorKind::PrematureEof => write!(f, "premature end of file"), TurtleErrorKind::UnexpectedByte(c) => match char::from_u32(u32::from(*c)) { Some(c) => write!(f, "unexpected character '{}'", c.escape_debug()), None => write!(f, "unexpected byter {}", c), }, TurtleErrorKind::InvalidUnicodeCodePoint(point) => { write!(f, "invalid unicode code point '{}'", point) } TurtleErrorKind::InvalidIri { iri, error } => { write!(f, "error while parsing IRI '{}': {}", iri, error) } TurtleErrorKind::InvalidLanguageTag { tag, error } => { write!(f, "error while parsing language tag '{}': {}", tag, error) } TurtleErrorKind::StackOverflow => { write!(f, "The parser encountered more than {} nested constructions. This number is limited in order to avoid stack overflow OS errors.", MAX_STACK_SIZE) } }?; if let Some(position) = self.position { write!( f, " on line {} at position {}", position.line_number(), position.byte_number(), )?; } Ok(()) } } impl Error for TurtleError { fn source(&self) -> Option<&(dyn Error + 'static)> { match &self.kind { TurtleErrorKind::Io(error) => Some(error), TurtleErrorKind::InvalidIri { error, .. } => Some(error), TurtleErrorKind::InvalidLanguageTag { error, .. } => Some(error), _ => None, } } } impl ParseError for TurtleError { fn textual_position(&self) -> Option { self.position } } impl From for TurtleError { fn from(error: io::Error) -> Self { Self { kind: TurtleErrorKind::Io(error), position: None, } } } impl From for io::Error { fn from(error: TurtleError) -> Self { match error.kind { TurtleErrorKind::Io(error) => error, TurtleErrorKind::PrematureEof => io::Error::new(io::ErrorKind::UnexpectedEof, error), _ => io::Error::new(io::ErrorKind::InvalidData, error), } } } rio-0.8.5/turtle/src/formatters.rs000066400000000000000000000305441466265456300172060ustar00rootroot00000000000000use rio_api::formatter::{QuadsFormatter, TriplesFormatter}; use rio_api::model::*; use std::io; use std::io::Write; /// A [Canonical N-Triples](https://www.w3.org/TR/n-triples/#canonical-ntriples) formatter. /// /// It implements the `TriplesFormatter` trait. /// /// Write some triples using the `TriplesFormatter` API into a `Vec` buffer: /// ``` /// use rio_turtle::NTriplesFormatter; /// use rio_api::formatter::TriplesFormatter; /// use rio_api::model::{NamedNode, Triple}; /// /// let mut formatter = NTriplesFormatter::new(Vec::default()); /// formatter.format(&Triple { /// subject: NamedNode { iri: "http://example.com/foo" }.into(), /// predicate: NamedNode { iri: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" }.into(), /// object: NamedNode { iri: "http://schema.org/Person" }.into() /// })?; /// let _ntriples = formatter.finish(); /// # std::io::Result::Ok(()) /// ``` pub struct NTriplesFormatter { write: W, } impl NTriplesFormatter { /// Builds a new formatter from a `Write` implementation pub fn new(write: W) -> Self { Self { write } } /// Finishes writing and returns the underlying `Write` pub fn finish(mut self) -> io::Result { self.write.flush()?; Ok(self.write) } } impl TriplesFormatter for NTriplesFormatter { type Error = io::Error; fn format(&mut self, triple: &Triple<'_>) -> io::Result<()> { writeln!(self.write, "{} .", triple) } } /// A [N-Quads](https://www.w3.org/TR/n-quads/) formatter. /// /// It implements the `QuadsFormatter` trait. /// /// Write some triples using the `QuadsFormatter` API into a `Vec` buffer: /// ``` /// use rio_turtle::NQuadsFormatter; /// use rio_api::formatter::QuadsFormatter; /// use rio_api::model::{NamedNode, Quad}; /// /// let mut formatter = NQuadsFormatter::new(Vec::default()); /// formatter.format(&Quad { /// subject: NamedNode { iri: "http://example.com/foo" }.into(), /// predicate: NamedNode { iri: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" }.into(), /// object: NamedNode { iri: "http://schema.org/Person" }.into(), /// graph_name: Some(NamedNode { iri: "http://example.com/" }.into()) /// })?; /// let _nquads = formatter.finish(); /// # std::io::Result::Ok(()) /// ``` pub struct NQuadsFormatter { write: W, } impl NQuadsFormatter { /// Builds a new formatter from a `Write` implementation pub fn new(write: W) -> Self { Self { write } } /// Finishes writing and returns the underlying `Write` pub fn finish(mut self) -> io::Result { self.write.flush()?; Ok(self.write) } } impl QuadsFormatter for NQuadsFormatter { type Error = io::Error; fn format(&mut self, quad: &Quad<'_>) -> io::Result<()> { writeln!(self.write, "{} .", quad) } } /// A [Turtle](https://www.w3.org/TR/turtle/) formatter. /// /// It implements the `TriplesFormatter` trait. /// /// Write some triples using the `TriplesFormatter` API into a `Vec` buffer: /// ``` /// use rio_turtle::TurtleFormatter; /// use rio_api::formatter::TriplesFormatter; /// use rio_api::model::{NamedNode, Triple}; /// /// let mut formatter = TurtleFormatter::new(Vec::default()); /// formatter.format(&Triple { /// subject: NamedNode { iri: "http://example.com/foo" }.into(), /// predicate: NamedNode { iri: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" }.into(), /// object: NamedNode { iri: "http://schema.org/Person" }.into() /// })?; /// let _turtle = formatter.finish()?; /// # std::io::Result::Ok(()) /// ``` pub struct TurtleFormatter { write: W, current_subject: String, current_subject_type: Option, current_predicate: String, } impl TurtleFormatter { /// Builds a new formatter from a `Write` implementation pub fn new(write: W) -> Self { Self { write, current_subject: String::default(), current_subject_type: None, current_predicate: String::default(), } } /// Finishes writing and returns the underlying `Write` pub fn finish(mut self) -> io::Result { if self.current_subject_type.is_some() { writeln!(self.write, " .")?; } self.write.flush()?; Ok(self.write) } } impl TriplesFormatter for TurtleFormatter { type Error = io::Error; fn format(&mut self, triple: &Triple<'_>) -> io::Result<()> { if let Some(current_subject_type) = self.current_subject_type { let current_subject = current_subject_type.with_value(&self.current_subject); if current_subject == Some(triple.subject) { if self.current_predicate == *triple.predicate.iri { write!(self.write, " , {}", triple.object)?; } else { write!(self.write, " ;\n\t{} {}", triple.predicate, triple.object)?; } } else { write!( self.write, " .\n{} {} {}", triple.subject, triple.predicate, triple.object )?; } } else { write!( self.write, "{} {} {}", triple.subject, triple.predicate, triple.object )?; } self.current_subject.clear(); match triple.subject { Subject::NamedNode(n) => { self.current_subject.push_str(n.iri); self.current_subject_type = Some(SubjectType::NamedNode); } Subject::BlankNode(n) => { self.current_subject.push_str(n.id); self.current_subject_type = Some(SubjectType::BlankNode); } Subject::Triple(_) => { // can't factorize embedded triple as subject for the moment self.current_subject_type = Some(SubjectType::Triple); } } self.current_predicate.clear(); self.current_predicate.push_str(triple.predicate.iri); Ok(()) } } /// A [TriG](https://www.w3.org/TR/trig/) formatter. /// /// It implements the `QuadsFormatter` trait. /// /// Write some triples using the `QuadsFormatter` API into a `Vec` buffer: /// ``` /// use rio_turtle::TriGFormatter; /// use rio_api::formatter::QuadsFormatter; /// use rio_api::model::{NamedNode, Quad}; /// /// let mut formatter = TriGFormatter::new(Vec::default()); /// formatter.format(&Quad { /// subject: NamedNode { iri: "http://example.com/foo" }.into(), /// predicate: NamedNode { iri: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" }.into(), /// object: NamedNode { iri: "http://schema.org/Person" }.into(), /// graph_name: Some(NamedNode { iri: "http://example.com/" }.into()) /// })?; /// let _trig = formatter.finish()?; /// # std::io::Result::Ok(()) /// ``` pub struct TriGFormatter { write: W, current_graph_name: String, current_graph_name_type: Option>, current_subject: String, current_subject_type: Option, current_predicate: String, } impl TriGFormatter { /// Builds a new formatter from a `Write` implementation pub fn new(write: W) -> Self { Self { write, current_graph_name: String::default(), current_graph_name_type: None, current_subject: String::default(), current_subject_type: None, current_predicate: String::default(), } } /// Finishes writing and returns the underlying `Write` pub fn finish(mut self) -> io::Result { if self.current_subject_type.is_some() { writeln!(self.write, " .")?; } if self.current_graph_name_type.and_then(|t| t).is_some() { writeln!(self.write, "}}")?; } self.write.flush()?; Ok(self.write) } } impl QuadsFormatter for TriGFormatter { type Error = io::Error; fn format(&mut self, quad: &Quad<'_>) -> io::Result<()> { if let Some(current_graph_name_type) = self.current_graph_name_type { let current_graph_name = current_graph_name_type.map(|t| t.with_value(&self.current_graph_name)); if current_graph_name == quad.graph_name { if let Some(current_subject_type) = self.current_subject_type { let current_subject = current_subject_type.with_value(&self.current_subject); if current_subject == Some(quad.subject) { if self.current_predicate == *quad.predicate.iri { write!(self.write, " , {}", quad.object)?; } else { write!(self.write, " ;\n\t\t{} {}", quad.predicate, quad.object)?; } } else { write!( self.write, " .\n\t{} {} {}", quad.subject, quad.predicate, quad.object )?; } } else { write!( self.write, "{} {} {}", quad.subject, quad.predicate, quad.object )?; } } else { if self.current_graph_name_type.and_then(|t| t).is_some() { writeln!(self.write, " .\n}}")?; } else { writeln!(self.write, " .")?; } if let Some(graph_name) = quad.graph_name { write!( self.write, "{} {{\n\t{} {} {}", graph_name, quad.subject, quad.predicate, quad.object )?; } else { write!( self.write, "{} {} {}", quad.subject, quad.predicate, quad.object )?; } } } else if let Some(graph_name) = quad.graph_name { write!( self.write, "{} {{\n\t{} {} {}", graph_name, quad.subject, quad.predicate, quad.object )?; } else { write!( self.write, "{} {} {}", quad.subject, quad.predicate, quad.object )?; } self.current_graph_name.clear(); match quad.graph_name { Some(GraphName::NamedNode(n)) => { self.current_graph_name.push_str(n.iri); self.current_graph_name_type = Some(Some(GraphNameType::NamedNode)); } Some(GraphName::BlankNode(n)) => { self.current_graph_name.push_str(n.id); self.current_graph_name_type = Some(Some(GraphNameType::BlankNode)); } None => self.current_graph_name_type = Some(None), } self.current_subject.clear(); match &quad.subject { Subject::NamedNode(n) => { self.current_subject.push_str(n.iri); self.current_subject_type = Some(SubjectType::NamedNode); } Subject::BlankNode(n) => { self.current_subject.push_str(n.id); self.current_subject_type = Some(SubjectType::BlankNode); } Subject::Triple(_) => { self.current_subject_type = Some(SubjectType::Triple); } } self.current_predicate.clear(); self.current_predicate.push_str(quad.predicate.iri); Ok(()) } } #[derive(Copy, Clone)] enum SubjectType { NamedNode, BlankNode, Triple, } impl SubjectType { fn with_value<'a>(&self, value: &'a str) -> Option> { match self { SubjectType::NamedNode => Some(NamedNode { iri: value }.into()), SubjectType::BlankNode => Some(BlankNode { id: value }.into()), SubjectType::Triple => None, } } } #[derive(Copy, Clone)] enum GraphNameType { NamedNode, BlankNode, } impl GraphNameType { fn with_value<'a>(&self, value: &'a str) -> GraphName<'a> { match self { GraphNameType::NamedNode => NamedNode { iri: value }.into(), GraphNameType::BlankNode => BlankNode { id: value }.into(), } } } rio-0.8.5/turtle/src/gnquads.rs000066400000000000000000000251131466265456300164560ustar00rootroot00000000000000//! Implementation of a generalized RDF / RDF-star version of the N-Quads syntax use crate::error::*; use crate::gtriple_allocator::GeneralizedTripleAllocator; use crate::ntriples::{parse_literal, skip_until_eol, skip_whitespace}; use crate::shared::*; use crate::utils::*; use oxiri::IriRef; use rio_api::model::*; use rio_api::parser::*; use std::io::BufRead; /// A [N-Quads](https://www.w3.org/TR/n-quads/) streaming parser parsing generalized quads. /// /// It implements the `GeneralizedQuadsParser` trait. /// Using it requires to enable the `generalized` feature. pub struct GeneralizedNQuadsParser { read: LookAheadByteReader, triple_alloc: GeneralizedTripleAllocator, graph_name_alloc: GeneralizedTripleAllocator, } impl GeneralizedNQuadsParser { pub fn new(reader: R) -> Self { Self { read: LookAheadByteReader::new(reader), triple_alloc: GeneralizedTripleAllocator::new(), graph_name_alloc: GeneralizedTripleAllocator::new(), } } } impl GeneralizedQuadsParser for GeneralizedNQuadsParser { type Error = TurtleError; fn parse_step>( &mut self, on_quad: &mut impl FnMut(GeneralizedQuad<'_>) -> Result<(), E>, ) -> Result<(), E> { match self.parse_quad_line() { Ok(Some(named_graph)) => { match on_quad(self.triple_alloc.top_quad( named_graph.then(|| self.graph_name_alloc.current_subject().unwrap()), )) { Ok(()) => { if named_graph { // named graph is allocated as the subject of an incomplete triple self.graph_name_alloc.pop_term(0); self.graph_name_alloc.pop_top_empty_triple(); } self.triple_alloc.pop_top_triple(); debug_assert_eq!(self.triple_alloc.complete_len(), 0); debug_assert_eq!(self.triple_alloc.incomplete_len(), 0); debug_assert_eq!(self.graph_name_alloc.complete_len(), 0); debug_assert_eq!(self.graph_name_alloc.incomplete_len(), 0); Ok(()) } Err(err) => { self.triple_alloc.clear(); Err(err) } } } Ok(None) => Ok(()), Err(error) => { self.read.consume_line_end()?; self.triple_alloc.clear(); Err(E::from(error)) } } } fn is_end(&self) -> bool { self.read.current().is_none() } } impl GeneralizedNQuadsParser { fn parse_quad_line(&mut self) -> Result, TurtleError> { let read = &mut self.read; let triple_alloc = &mut &mut self.triple_alloc; skip_whitespace(read)?; if matches!( read.current(), None | Some(b'#') | Some(b'\r') | Some(b'\n') ) { skip_until_eol(read)?; return Ok(None); } parse_triple(read, triple_alloc)?; let named_graph = match read.current() { Some(b'.') => false, _ => { self.graph_name_alloc.push_triple_start(); parse_term(0, read, &mut self.graph_name_alloc)?; skip_whitespace(read)?; true } }; read.check_is_current(b'.')?; read.consume()?; skip_whitespace(read)?; match read.current() { None | Some(b'#') | Some(b'\r') | Some(b'\n') => skip_until_eol(read)?, _ => read.unexpected_char_error()?, } Ok(Some(named_graph)) } } fn parse_triple( read: &mut LookAheadByteReader, triple_alloc: &mut GeneralizedTripleAllocator, ) -> Result<(), TurtleError> { triple_alloc.push_triple_start(); for i in 0..3 { parse_term(i, read, triple_alloc)?; skip_whitespace(read)?; } Ok(()) } fn parse_term( pos: usize, read: &mut LookAheadByteReader, triple_alloc: &mut GeneralizedTripleAllocator, ) -> Result<(), TurtleError> { match read.required_current()? { b'<' => match read.required_next()? { b'<' => { parse_quoted_triple(read, triple_alloc)?; triple_alloc.push_quoted_triple(pos); Ok(()) } _ => triple_alloc.try_push_atom(pos, |b, _| { parse_iriref(read, b)?; IriRef::parse(b.as_str()).map_err(|error| { read.parse_error(TurtleErrorKind::InvalidIri { iri: b.to_owned(), error, }) })?; Ok(NamedNode { iri: b }.into()) }), }, b'_' => triple_alloc.try_push_atom(pos, |b, _| { parse_blank_node_label(read, b).map(GeneralizedTerm::from) }), b'"' => triple_alloc.try_push_atom(pos, |b1, b2| { parse_literal(read, b1, b2).map(GeneralizedTerm::from) }), b'?' | b'$' => triple_alloc.try_push_atom(pos, |b, _| { parse_variable(read, b).map(GeneralizedTerm::from) }), _ => read.unexpected_char_error(), } } fn parse_quoted_triple( read: &mut LookAheadByteReader, triple_alloc: &mut GeneralizedTripleAllocator, ) -> Result<(), TurtleError> { debug_assert_eq!(read.current(), Some(b'<')); debug_assert_eq!(read.next()?, Some(b'<')); read.increment_stack_size()?; read.consume_many(2)?; skip_whitespace(read)?; parse_triple(read, triple_alloc)?; read.check_is_current(b'>')?; read.consume()?; read.check_is_current(b'>')?; read.consume()?; read.decrement_stack_size(); skip_whitespace(read) } pub(crate) fn parse_variable<'a>( read: &mut LookAheadByteReader, buffer: &'a mut String, ) -> Result, TurtleError> { read.consume()?; let c = read.required_current()?; if c <= MAX_ASCII && (is_possible_pn_chars_u_ascii(c) || c.is_ascii_digit()) { buffer.push(char::from(c)) } else { let c = read_utf8_char(read)?; if is_possible_pn_chars_u_unicode(c) { buffer.push(c); } else { read.unexpected_char_error()? } } loop { read.consume()?; if let Some(c) = read.current() { if c <= MAX_ASCII && (is_possible_pn_chars_u_ascii(c) || c.is_ascii_digit() || c == 0xb7) { buffer.push(char::from(c)) } else { let c = read_utf8_char(read)?; if is_possible_pn_chars_u_unicode(c) { buffer.push(c); } else { return Ok(Variable { name: buffer }); } } } else { return Ok(Variable { name: buffer }); } } } #[cfg(test)] mod test { use super::*; #[test] fn nquads_relative_irirefs() -> Result<(), Box> { // adding this test because there is currently no testsuite specific to N-Quads star let file = r#"<#s> <../p> ."#; let mut count = 0; GeneralizedNQuadsParser::new(file.as_ref()).parse_all(&mut |q| -> Result< (), TurtleError, > { assert!(matches!( q.subject, GeneralizedTerm::NamedNode(NamedNode { iri: "#s" }), )); assert!(matches!( q.predicate, GeneralizedTerm::NamedNode(NamedNode { iri: "../p" }), )); assert!(matches!( q.object, GeneralizedTerm::NamedNode(NamedNode { iri: "/o" }), )); assert!(matches!( q.graph_name, Some(GeneralizedTerm::NamedNode(NamedNode { iri: "//g" })), )); count += 1; Ok(()) })?; assert_eq!(1, count); Ok(()) } #[test] fn nquads_star_valid_quad() -> Result<(), Box> { // adding this test because there is currently no testsuite specific to N-Quads star let file = br#"<< "a" _:b >> << "d" ?e <./f> >> << "g" $h <../i> >> << "j" _:k >>."#; let mut count = 0; GeneralizedNQuadsParser::new(file.as_ref()).parse_all(&mut |q| -> Result< (), TurtleError, > { assert!(matches!( q.subject, GeneralizedTerm::Triple([ GeneralizedTerm::Literal(Literal::Simple { value: "a" }), GeneralizedTerm::BlankNode(BlankNode { id: "b" }), GeneralizedTerm::NamedNode(NamedNode { iri: "tag:c" }), ]) )); assert!(matches!( q.predicate, GeneralizedTerm::Triple([ GeneralizedTerm::Literal(Literal::Simple { value: "d" }), GeneralizedTerm::Variable(Variable { name: "e" }), GeneralizedTerm::NamedNode(NamedNode { iri: "./f" }), ]) )); assert!(matches!( q.object, GeneralizedTerm::Triple([ GeneralizedTerm::Literal(Literal::Simple { value: "g" }), GeneralizedTerm::Variable(Variable { name: "h" }), GeneralizedTerm::NamedNode(NamedNode { iri: "../i" }), ]) )); assert!(matches!( q.graph_name, Some(GeneralizedTerm::Triple([ GeneralizedTerm::Literal(Literal::Simple { value: "j" }), GeneralizedTerm::BlankNode(BlankNode { id: "k" }), GeneralizedTerm::NamedNode(NamedNode { iri: "/l" }), ])) )); count += 1; Ok(()) })?; assert_eq!(1, count); Ok(()) } #[test] fn nquads_star_invalid_graph_name() { // adding this test because there is currently no testsuite specific to N-Quads star let file = b" << ."; let mut count = 0; let res = GeneralizedNQuadsParser::new(file.as_ref()).parse_all(&mut |_| -> Result< (), TurtleError, > { count += 1; Ok(()) }); assert!(res.is_err()); } } rio-0.8.5/turtle/src/gtrig.rs000066400000000000000000001101431466265456300161260ustar00rootroot00000000000000//! Implementation of a generalized RDF / RDF-star version of the Trig syntax use crate::error::*; use crate::gnquads::parse_variable; use crate::gtriple_allocator::GeneralizedTripleAllocator; use crate::shared::*; use crate::turtle::*; use crate::utils::*; use oxiri::Iri; use rio_api::model::*; use rio_api::parser::GeneralizedQuadsParser; use std::collections::HashMap; use std::io::BufRead; use std::mem::swap; /// A [TriG](https://www.w3.org/TR/trig/) streaming parser parsing generalized quads. /// /// It implements the `GeneralizedQuadsParser` trait. /// Using it requires to enable the `generalized` feature. /// /// /// Count the number of people using the `QuadsParser` API: /// ``` /// use rio_turtle::{GTriGParser, TurtleError}; /// use rio_api::parser::GeneralizedQuadsParser; /// use rio_api::model::NamedNode; /// /// let file = b"@prefix schema: . /// { /// a schema:Person ; /// schema:name ?name . /// a schema:Person ; /// schema:name ?name . /// }"; /// /// let rdf_type = NamedNode { iri: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" }; /// let schema_person = NamedNode { iri: "http://schema.org/Person" }; /// let mut count = 0; /// GTriGParser::new(file.as_ref(), None).parse_all(&mut |t| { /// if t.predicate == rdf_type.into() && t.object == schema_person.into() { /// count += 1; /// } /// Ok(()) as Result<(), TurtleError> /// })?; /// assert_eq!(2, count); /// # Result::<_,rio_turtle::TurtleError>::Ok(()) /// ``` pub struct GTriGParser { read: LookAheadByteReader, base_iri: Option>, prefixes: HashMap, bnode_id_generator: BlankNodeIdGenerator, triple_alloc: GeneralizedTripleAllocator, graph_name_alloc: GeneralizedTripleAllocator, temp_buf: String, } impl GTriGParser { /// Builds the parser from a `BufRead` implementation, and a base IRI for relative IRI resolution. pub fn new(reader: R, base_iri: Option>) -> Self { Self { read: LookAheadByteReader::new(reader), base_iri, prefixes: HashMap::default(), bnode_id_generator: BlankNodeIdGenerator::default(), triple_alloc: GeneralizedTripleAllocator::new(), graph_name_alloc: GeneralizedTripleAllocator::new(), temp_buf: String::with_capacity(64), } } fn make_quad(&self) -> GeneralizedQuad<'_> { self.triple_alloc .top_quad(self.graph_name_alloc.current_subject()) } } impl GeneralizedQuadsParser for GTriGParser { type Error = TurtleError; fn parse_step>( &mut self, on_quad: &mut impl FnMut(GeneralizedQuad<'_>) -> Result<(), E>, ) -> Result<(), E> { self.parse_generalized_block_or_directive(on_quad) } fn is_end(&self) -> bool { self.read.current().is_none() } } impl GTriGParser { fn parse_generalized_block_or_directive>( &mut self, on_quad: &mut impl FnMut(GeneralizedQuad<'_>) -> Result<(), E>, ) -> Result<(), E> { // [1g] trigDoc ::= (directive | block)* // [2g] block ::= triplesOrGraph | wrappedGraph | triples2 | "GRAPH" labelOrSubject wrappedGraph skip_whitespace(&mut self.read)?; if self.read.current().is_none() { Ok(()) } else if self.read.starts_with(b"@prefix") { self.parse_generalized_prefix_id()?; Ok(()) } else if self.read.starts_with(b"@base") { self.base_iri = Some(parse_base( &mut self.read, &mut self.temp_buf, &self.base_iri, )?); Ok(()) } else if self.read.starts_with_ignore_ascii_case(b"BASE") && self .read .ahead(4)? .map_or(true, |c| c.is_ascii_whitespace() || c == b'<') { self.base_iri = Some(parse_sparql_base( &mut self.read, &mut self.temp_buf, &self.base_iri, )?); Ok(()) } else if self.read.starts_with_ignore_ascii_case(b"PREFIX") && self .read .ahead(6)? .map_or(true, |c| c.is_ascii_whitespace()) { self.parse_generalized_sparql_prefix()?; Ok(()) } else if self.read.starts_with_ignore_ascii_case(b"GRAPH") && self .read .ahead(5)? .map_or(true, |c| c.is_ascii_whitespace() || c == b'<') { self.read.consume_many("GRAPH".len())?; skip_whitespace(&mut self.read)?; self.graph_name_alloc.push_triple_start(); self.parse_generalized_term(0, true)?; skip_whitespace(&mut self.read)?; self.parse_generalized_wrapped_graph(on_quad)?; self.graph_name_alloc.pop_term(0); self.graph_name_alloc.pop_top_empty_triple(); debug_assert_eq!(self.triple_alloc.complete_len(), 0); debug_assert_eq!(self.triple_alloc.incomplete_len(), 0); debug_assert_eq!(self.graph_name_alloc.complete_len(), 0); debug_assert_eq!(self.graph_name_alloc.incomplete_len(), 0); Ok(()) } else if self.read.current() == Some(b'{') { self.parse_generalized_wrapped_graph(on_quad)?; debug_assert_eq!(self.triple_alloc.complete_len(), 0); debug_assert_eq!(self.triple_alloc.incomplete_len(), 0); debug_assert_eq!(self.graph_name_alloc.complete_len(), 0); debug_assert_eq!(self.graph_name_alloc.incomplete_len(), 0); Ok(()) } else if self.read.current() == Some(b'[') && !is_followed_by_space_and_closing_bracket(&mut self.read)? || self.read.current() == Some(b'(') { self.parse_generalized_triples2(on_quad)?; debug_assert_eq!(self.triple_alloc.complete_len(), 0); debug_assert_eq!(self.triple_alloc.incomplete_len(), 0); debug_assert_eq!(self.graph_name_alloc.complete_len(), 0); debug_assert_eq!(self.graph_name_alloc.incomplete_len(), 0); Ok(()) } else { self.parse_generalized_triples_or_graph(on_quad)?; debug_assert_eq!(self.triple_alloc.complete_len(), 0); debug_assert_eq!(self.triple_alloc.incomplete_len(), 0); debug_assert_eq!(self.graph_name_alloc.complete_len(), 0); debug_assert_eq!(self.graph_name_alloc.incomplete_len(), 0); Ok(()) } } fn parse_generalized_prefix_id(&mut self) -> Result<(), TurtleError> { // [4] prefixID ::= '@prefix' PNAME_NS IRIREF '.' self.read.consume_many("@prefix".len())?; skip_whitespace(&mut self.read)?; let mut prefix = String::default(); parse_pname_ns(&mut self.read, &mut prefix)?; skip_whitespace(&mut self.read)?; let mut value = String::default(); parse_generalized_iriref( &mut self.read, &mut value, &mut self.temp_buf, self.base_iri.as_ref(), )?; skip_whitespace(&mut self.read)?; self.read.check_is_current(b'.')?; self.read.consume()?; self.prefixes.insert(prefix, value); Ok(()) } fn parse_generalized_sparql_prefix(&mut self) -> Result<(), TurtleError> { // [6s] sparqlPrefix ::= "PREFIX" PNAME_NS IRIREF self.read.consume_many("PREFIX".len())?; skip_whitespace(&mut self.read)?; let mut prefix = String::default(); parse_pname_ns(&mut self.read, &mut prefix)?; skip_whitespace(&mut self.read)?; let mut value = String::default(); parse_generalized_iriref( &mut self.read, &mut value, &mut self.temp_buf, self.base_iri.as_ref(), )?; skip_whitespace(&mut self.read)?; self.prefixes.insert(prefix, value); Ok(()) } fn parse_generalized_wrapped_graph>( &mut self, on_quad: &mut impl FnMut(GeneralizedQuad<'_>) -> Result<(), E>, ) -> Result<(), E> { // [5g] wrappedGraph ::= '{' triplesBlock? '}' // [6g] triplesBlock ::= triples ('.' triplesBlock?)? self.read.check_is_current(b'{')?; self.read.consume()?; skip_whitespace(&mut self.read)?; loop { if self.read.current() == Some(b'}') { self.read.consume()?; break; } self.parse_generalized_triples(on_quad)?; debug_assert_eq!(self.triple_alloc.complete_len(), 0); debug_assert_eq!(self.triple_alloc.incomplete_len(), 0); match self.read.required_current()? { b'.' => { self.read.consume()?; skip_whitespace(&mut self.read)?; } b'}' => { self.read.consume()?; break; } _ => self.read.unexpected_char_error()?, } } Ok(()) } fn parse_generalized_triples>( &mut self, on_quad: &mut impl FnMut(GeneralizedQuad<'_>) -> Result<(), E>, ) -> Result<(), E> { // [6] triples ::= subject predicateObjectList | blankNodePropertyList predicateObjectList? match self.read.current() { Some(b'[') if !is_followed_by_space_and_closing_bracket(&mut self.read)? => { let bn = self.parse_generalized_blank_node_property_list(on_quad)?; skip_whitespace(&mut self.read)?; if self.read.current() != Some(b'.') && self.read.current() != Some(b'}') { self.triple_alloc.push_triple_start(); self.triple_alloc.try_push_atom(0, |b, _| { b.push_str(bn.as_ref()); Ok(GeneralizedTerm::from(BlankNode { id: b })) })?; self.parse_generalized_predicate_object_list(on_quad)?; self.triple_alloc.pop_term(0); self.triple_alloc.pop_top_empty_triple(); } } _ => { self.triple_alloc.push_triple_start(); self.parse_generalized_node(0, on_quad)?; skip_whitespace(&mut self.read)?; self.parse_generalized_predicate_object_list(on_quad)?; self.triple_alloc.pop_term(0); self.triple_alloc.pop_top_empty_triple(); } } Ok(()) } fn parse_generalized_triples2>( &mut self, on_quad: &mut impl FnMut(GeneralizedQuad<'_>) -> Result<(), E>, ) -> Result<(), E> { // [4g] triples2 ::= blankNodePropertyList predicateObjectList? '.' | collection predicateObjectList '.' match self.read.current() { Some(b'[') => { let bn = self.parse_generalized_blank_node_property_list(on_quad)?; skip_whitespace(&mut self.read)?; if self.read.current() != Some(b'.') { self.triple_alloc.push_triple_start(); self.triple_alloc.try_push_atom(0, |b, _| { b.push_str(bn.as_ref()); Ok(GeneralizedTerm::from(BlankNode { id: b })) })?; self.parse_generalized_predicate_object_list(on_quad)?; self.triple_alloc.pop_term(0); self.triple_alloc.pop_top_empty_triple(); } } _ => { let collec = self.parse_generalized_collection(on_quad)?; self.triple_alloc.push_triple_start(); self.triple_alloc .try_push_atom(0, |b, _| allocate_collection(collec, b))?; skip_whitespace(&mut self.read)?; self.parse_generalized_predicate_object_list(on_quad)?; self.triple_alloc.pop_term(0); self.triple_alloc.pop_top_empty_triple(); } } self.read.check_is_current(b'.')?; self.read.consume()?; Ok(()) } fn parse_generalized_triples_or_graph>( &mut self, on_quad: &mut impl FnMut(GeneralizedQuad<'_>) -> Result<(), E>, ) -> Result<(), E> { // [3g] triplesOrGraph ::= labelOrSubject (wrappedGraph | predicateObjectList '.') self.triple_alloc.push_triple_start(); self.parse_generalized_node(0, on_quad)?; skip_whitespace(&mut self.read)?; if self.read.current() == Some(b'{') { // what was supposed to be a subject is in fact a graph name swap(&mut self.triple_alloc, &mut self.graph_name_alloc); self.parse_generalized_wrapped_graph(on_quad)?; self.graph_name_alloc.pop_term(0); self.graph_name_alloc.pop_top_empty_triple(); } else { self.parse_generalized_predicate_object_list(on_quad)?; self.triple_alloc.pop_term(0); self.triple_alloc.pop_top_empty_triple(); self.read.check_is_current(b'.')?; self.read.consume()?; } Ok(()) } fn parse_generalized_blank_node_property_list>( &mut self, on_quad: &mut impl FnMut(GeneralizedQuad<'_>) -> Result<(), E>, ) -> Result { self.read.check_is_current(b'[')?; self.read.consume()?; skip_whitespace(&mut self.read)?; let id = self.bnode_id_generator.generate(); if self.read.current() == Some(b']') { self.read.consume()?; return Ok(id); } self.triple_alloc.push_triple_start(); self.triple_alloc.try_push_atom(0, |b, _| { b.push_str(id.as_ref()); Ok(GeneralizedTerm::from(BlankNode { id: b })) })?; loop { self.parse_generalized_predicate_object_list(on_quad)?; skip_whitespace(&mut self.read)?; if self.read.current() == Some(b']') { break; } } self.read.consume()?; self.triple_alloc.pop_term(0); self.triple_alloc.pop_top_empty_triple(); Ok(id) } fn parse_generalized_collection>( &mut self, on_quad: &mut impl FnMut(GeneralizedQuad<'_>) -> Result<(), E>, ) -> Result, E> { // [15] collection ::= '(' object* ')' self.read.check_is_current(b'(')?; self.read.consume()?; let mut root: Option = None; loop { skip_whitespace(&mut self.read)?; if self.read.current().is_none() { self.read.unexpected_char_error()?; unreachable!(); // unexpected_char always errs } else if self.read.current() != Some(b')') { let new = self.bnode_id_generator.generate(); if root.is_none() { root = Some(new); self.triple_alloc.push_triple_start(); } else { self.triple_alloc.try_push_atom(1, |_, _| { Ok(GeneralizedTerm::from(NamedNode { iri: RDF_REST })) })?; self.triple_alloc.try_push_atom(2, |b, _| { b.push_str(new.as_ref()); Ok(GeneralizedTerm::from(BlankNode { id: b })) })?; on_quad(self.make_quad())?; self.triple_alloc.pop_term(2); self.triple_alloc.pop_term(1); self.triple_alloc.pop_term(0); } self.triple_alloc.try_push_atom(0, |b, _| { b.push_str(new.as_ref()); Ok(GeneralizedTerm::from(BlankNode { id: b })) })?; self.triple_alloc.try_push_atom(1, |_, _| { Ok(GeneralizedTerm::from(NamedNode { iri: RDF_FIRST })) })?; self.parse_generalized_node(2, on_quad)?; on_quad(self.make_quad())?; self.triple_alloc.pop_term(2); self.triple_alloc.pop_term(1); } else { // trailing ')' break; } } self.read.consume()?; if root.is_some() { self.triple_alloc.try_push_atom(1, |_, _| { Ok(GeneralizedTerm::from(NamedNode { iri: RDF_REST })) })?; self.triple_alloc.try_push_atom(2, |_, _| { Ok(GeneralizedTerm::from(NamedNode { iri: RDF_NIL })) })?; on_quad(self.make_quad())?; self.triple_alloc.pop_top_triple(); } Ok(root) } fn parse_generalized_predicate_object_list>( &mut self, on_quad: &mut impl FnMut(GeneralizedQuad<'_>) -> Result<(), E>, ) -> Result<(), E> { // [7] predicateObjectList ::= verb objectList (';' (verb objectList)?)* loop { self.parse_generalized_verb(on_quad)?; skip_whitespace(&mut self.read)?; self.parse_generalized_object_list(on_quad)?; skip_whitespace(&mut self.read)?; self.triple_alloc.pop_term(1); if self.read.current() != Some(b';') { return Ok(()); } while self.read.current() == Some(b';') { self.read.consume()?; skip_whitespace(&mut self.read)?; } match self.read.current() { Some(b'.') | Some(b']') | Some(b'}') | None => return Ok(()), Some(b'|') => return Ok(()), _ => (), //continue } } } fn parse_generalized_verb>( &mut self, on_quad: &mut impl FnMut(GeneralizedQuad<'_>) -> Result<(), E>, ) -> Result<(), E> { // [9] verb ::= predicate | 'a' if self.read.current() == Some(b'a') { match self.read.next()? { // We check that it is not a prefixed URI Some(c) if is_possible_pn_chars_ascii(c) || c == b'.' || c == b':' || c > MAX_ASCII => { self.parse_generalized_node(1, on_quad) } _ => { self.read.consume()?; self.triple_alloc.try_push_atom(1, |_, _| { Ok(GeneralizedTerm::from(NamedNode { iri: RDF_TYPE })) }) } } } else { self.parse_generalized_node(1, on_quad) } } fn parse_generalized_object_list>( &mut self, on_quad: &mut impl FnMut(GeneralizedQuad<'_>) -> Result<(), E>, ) -> Result<(), E> { // [8] objectList ::= object (',' object)* loop { self.parse_generalized_node(2, on_quad)?; on_quad(self.make_quad())?; skip_whitespace(&mut self.read)?; if self.read.current() == Some(b'{') { self.read.check_is_next(b'|')?; self.read.consume_many(2)?; skip_whitespace(&mut self.read)?; self.triple_alloc.push_triple_start(); self.triple_alloc.push_quoted_triple(0); self.parse_generalized_predicate_object_list(on_quad)?; self.read.check_is_current(b'|')?; self.read.check_is_next(b'}')?; self.read.consume_many(2)?; skip_whitespace(&mut self.read)?; self.triple_alloc.pop_annotation_triple(); } self.triple_alloc.pop_term(2); if self.read.current() != Some(b',') { return Ok(()); } self.read.consume()?; skip_whitespace(&mut self.read)?; } } fn parse_generalized_node>( &mut self, pos: usize, on_quad: &mut impl FnMut(GeneralizedQuad<'_>) -> Result<(), E>, ) -> Result<(), E> { //[10] subject ::= iri | BlankNode | collection match self.read.current() { Some(b'[') => { let bn = self.parse_generalized_blank_node_property_list(on_quad)?; self.triple_alloc.try_push_atom(pos, |b, _| { b.push_str(bn.as_ref()); Ok(GeneralizedTerm::from(BlankNode { id: b })) }) } Some(b'(') => { let collec = self.parse_generalized_collection(on_quad)?; self.triple_alloc .try_push_atom(pos, |b, _| allocate_collection(collec, b))?; Ok(()) } _ => { self.parse_generalized_term(pos, false)?; Ok(()) } } } fn parse_generalized_term(&mut self, pos: usize, graph_name: bool) -> Result<(), TurtleError> { let read = &mut self.read; let alloc = if graph_name { &mut self.graph_name_alloc } else { &mut self.triple_alloc }; match read.required_current()? { b'<' => { if read.required_next()? == b'<' { read.consume_many(2)?; skip_whitespace(read)?; alloc.push_triple_start(); // at this point, we need to drop read and alloc to be able to use self in the loop for i in 0..3 { self.parse_generalized_term(i, graph_name)?; skip_whitespace(&mut self.read)?; } self.read.check_is_current(b'>')?; self.read.check_is_next(b'>')?; self.read.consume_many(2)?; // reassign alloc, since we had to drop it above (just before 'for' loop) let alloc = if graph_name { &mut self.graph_name_alloc } else { &mut self.triple_alloc }; alloc.push_quoted_triple(pos); Ok(()) } else { let temp_buf = &mut &mut self.temp_buf; let base_iri = self.base_iri.as_ref(); alloc.try_push_atom(pos, |b, _| { parse_generalized_iriref(read, b, temp_buf, base_iri)?; Ok(GeneralizedTerm::from(NamedNode { iri: b })) }) } } b'_' | b'[' => { let bnode_id_generator = &mut self.bnode_id_generator; alloc.try_push_atom(pos, |b, _| { parse_blank_node(read, b, bnode_id_generator).map(GeneralizedTerm::from) }) } b'"' | b'\'' | b'+' | b'-' | b'.' | b'0'..=b'9' => { let temp_buf = &mut &mut self.temp_buf; let base_iri = &self.base_iri; let prefixes = &self.prefixes; alloc.try_push_atom(pos, |b1, b2| { parse_literal(read, b1, b2, temp_buf, base_iri, prefixes) .map(GeneralizedTerm::from) }) } b'?' | b'$' => alloc.try_push_atom(pos, |b, _| { parse_variable(read, b).map(GeneralizedTerm::from) }), _ => { let base_iri = &self.base_iri; let prefixes = &self.prefixes; if read.starts_with(b"true") && read.ahead(4)?.map_or(true, |c| { c < MAX_ASCII && !is_possible_pn_chars_ascii(c) && c != b':' }) || read.starts_with(b"false") && read.ahead(5)?.map_or(true, |c| { c < MAX_ASCII && !is_possible_pn_chars_ascii(c) && c != b':' }) { let temp_buf = &mut &mut self.temp_buf; alloc.try_push_atom(pos, |b1, b2| { parse_literal(read, b1, b2, temp_buf, base_iri, prefixes) .map(GeneralizedTerm::from) }) } else { alloc.try_push_atom(pos, |b, _| { parse_prefixed_name(read, b, prefixes).map(GeneralizedTerm::from) }) } } } } } pub fn parse_generalized_iriref( read: &mut LookAheadByteReader, buffer: &mut String, temp_buf: &mut String, base_iri: Option<&Iri>, ) -> Result<(), TurtleError> { if let Some(base_iri) = base_iri { parse_iriref(read, temp_buf)?; let result = base_iri.resolve_into(temp_buf, buffer).map_err(|error| { read.parse_error(TurtleErrorKind::InvalidIri { iri: temp_buf.to_owned(), error, }) }); temp_buf.clear(); result } else { parse_iriref(read, buffer) } } fn parse_literal<'a>( read: &mut LookAheadByteReader, buffer: &'a mut String, annotation_buffer: &'a mut String, temp_buf: &mut String, base_iri: &Option>, prefixes: &HashMap, ) -> Result, TurtleError> { // [13] literal ::= RDFLiteral | NumericLiteral | BooleanLiteral match read.required_current()? { b'"' | b'\'' => { match parse_rdf_literal( read, buffer, annotation_buffer, temp_buf, base_iri, prefixes, )? { Literal::LanguageTaggedString { .. } => Ok(Literal::LanguageTaggedString { value: buffer, language: annotation_buffer, }), Literal::Simple { .. } => Ok(Literal::Simple { value: buffer }), Literal::Typed { .. } => Ok(Literal::Typed { value: buffer, datatype: NamedNode { iri: annotation_buffer, }, }), } } b'+' | b'-' | b'.' | b'0'..=b'9' => { match parse_numeric_literal(read, buffer)? { Literal::Typed { datatype, .. } => { annotation_buffer.push_str(datatype.iri); } _ => unreachable!(), } Ok(Literal::Typed { value: buffer, datatype: NamedNode { iri: annotation_buffer, }, }) } _ => { match parse_boolean_literal(read, buffer)? { Literal::Typed { datatype, .. } => { annotation_buffer.push_str(datatype.iri); } _ => unreachable!(), } Ok(Literal::Typed { value: buffer, datatype: NamedNode { iri: annotation_buffer, }, }) } } } #[allow(clippy::unnecessary_wraps)] fn allocate_collection( collection: Option, buffer: &mut String, ) -> Result, TurtleError> { match collection { Some(id) => { buffer.push_str(id.as_ref()); Ok(BlankNode { id: buffer }.into()) } None => Ok(NamedNode { iri: RDF_NIL }.into()), } } // #[cfg(test)] mod test { use super::*; use std::io::Cursor; const OK_TURTLE_ERROR: Result<(), TurtleError> = Ok(()); type OwnedQuad = (OwnedTerm, OwnedTerm, OwnedTerm, Option); #[test] fn relative_iri_references() -> Result<(), TurtleError> { let got = parse_gtrig( r#" <../s1> <#p1> . { <../s2> <#p2> } { <../s3> <#p3> } GRAPH { <../s4> <#p4> } "#, )?; let expected = parse_gnq( r#" <../s1> <#p1> . <../s2> <#p2> . <../s3> <#p3> . <../s4> <#p4> . "#, )?; assert_eq!(expected, got); Ok(()) } #[test] fn relative_prefixes() -> Result<(), TurtleError> { let got = parse_gtrig( r#" @prefix s: <../>. PREFIX p: <#> PREFIX o: PREFIX g: s:s1 p:p1 o:o1. { s:s2 p:p2 o:o2 } g:g3 { s:s3 p:p3 o:o3 } GRAPH g:g4 { s:s4 p:p4 o:o4 } "#, )?; let expected = parse_gnq( r#" <../s1> <#p1> . <../s2> <#p2> . <../s3> <#p3> . <../s4> <#p4> . "#, )?; assert_eq!(expected, got); Ok(()) } #[test] fn all_variables() -> Result<(), TurtleError> { let got = parse_gtrig( r#" ?s1 ?p1 ?o1. { ?s2 ?p2 ?o2 } ?g3 { ?s3 ?p3 ?o3 } GRAPH ?g4 { ?s4 ?p4 ?o4 } "#, )?; let expected = parse_gnq( r#" ?s1 ?p1 ?o1. ?s2 ?p2 ?o2. ?s3 ?p3 ?o3 ?g3. ?s4 ?p4 ?o4 ?g4. "#, ) .unwrap(); assert_eq!(expected, got); Ok(()) } #[test] fn all_literals() -> Result<(), TurtleError> { let got = parse_gtrig( r#" "s1" "p1" "o1". { "s2" "p2" "o2" } "g3" { "s3" "p3" "o3" } GRAPH "g4" { "s4" "p4" "o4" } "#, )?; let expected = parse_gnq( r#" "s1" "p1" "o1". "s2" "p2" "o2". "s3" "p3" "o3" "g3". "s4" "p4" "o4" "g4". "#, ) .unwrap(); assert_eq!(expected, got); Ok(()) } #[test] fn all_quoted_triples() -> Result<(), TurtleError> { let got = parse_gtrig( r#"@prefix : <#>. << :ss1 _:ps1 "os1" >> << _:sp1 "pp1" ?op1 >> << "so1" ?po1 :oo1 >>. { << ?ss2 :ps2 _:os2 >> << :sp2 "pp2" _:op2 >> << "so2" _:po2 ?oo2 >> } << _:sg3 ?pg3 :og3 >> { << ?ss3 :ps3 ?os3 >> << :sp3 ?pp3 _:op3 >> << ?so3 _:po3 "oo3" >> } GRAPH << _:sg4 "pg4" :og4 >> { << "ss4" :ps4 _:os4 >> << :sp4 _:pp4 ?op4 >> << _:so4 ?po4 "oo4" >> } "#, )?; let expected = parse_gnq(r#" << <#ss1> _:ps1 "os1" >> << _:sp1 "pp1" ?op1 >> << "so1" ?po1 <#oo1> >>. << ?ss2 <#ps2> _:os2 >> << <#sp2> "pp2" _:op2 >> << "so2" _:po2 ?oo2 >>. << ?ss3 <#ps3> ?os3 >> << <#sp3> ?pp3 _:op3 >> << ?so3 _:po3 "oo3" >> << _:sg3 ?pg3 <#og3> >>. << "ss4" <#ps4> _:os4 >> << <#sp4> _:pp4 ?op4 >> << _:so4 ?po4 "oo4" >> << _:sg4 "pg4" <#og4> >>. "#).unwrap(); assert_eq!(expected, got); Ok(()) } #[test] fn deeply_nested_triple() -> Result<(), TurtleError> { let got = parse_gtrig( r#"@prefix : <#>. << << :a :b :c >> << :d :e :f >> << :g :h :i >> >> { << << :j :k :l >> << :m :n :o >> << :p :q :r >> >> << << :s :t :u >> << :v :w :x >> << :y :z :A >> >> << << :B :C :D >> << :E :F :G >> << :H :I :J >> >> }"#, )?; let expected = parse_gnq(r#" << << <#j> <#k> <#l> >> << <#m> <#n> <#o> >> << <#p> <#q> <#r> >> >> << << <#s> <#t> <#u> >> << <#v> <#w> <#x> >> << <#y> <#z> <#A> >> >> << << <#B> <#C> <#D> >> << <#E> <#F> <#G> >> << <#H> <#I> <#J> >> >> << << <#a> <#b> <#c> >> << <#d> <#e> <#f> >> << <#g> <#h> <#i> >> >>. "#).unwrap(); assert_eq!(expected, got); Ok(()) } #[test] fn composite_predicate() -> Result<(), TurtleError> { let gtrig = r#" ?s [ ?p ?o1 ] ?o2 . "#; let mut got: Vec = Vec::with_capacity(2); GTriGParser::new( Cursor::new(gtrig), Some(Iri::parse("http://example.org/base/".to_owned()).unwrap()), ) .parse_all(&mut |quad| { got.push(( quad.subject.into(), quad.predicate.into(), quad.object.into(), quad.graph_name.map(OwnedTerm::from), )); OK_TURTLE_ERROR })?; assert_eq!(v("p"), got[0].1); assert_eq!(v("o1"), got[0].2); assert_eq!(v("s"), got[1].0); assert_eq!(v("o2"), got[1].2); assert_eq!(got[0].0, got[1].1); Ok(()) } fn parse_gtrig(txt: &str) -> Result, TurtleError> { let mut got = Vec::new(); GTriGParser::new(Cursor::new(txt), None).parse_all(&mut |quad| { got.push(( quad.subject.into(), quad.predicate.into(), quad.object.into(), quad.graph_name.map(OwnedTerm::from), )); OK_TURTLE_ERROR })?; Ok(got) } fn parse_gnq(txt: &str) -> Result, TurtleError> { let mut got = Vec::new(); crate::GeneralizedNQuadsParser::new(Cursor::new(txt)).parse_all(&mut |quad| { got.push(( quad.subject.into(), quad.predicate.into(), quad.object.into(), quad.graph_name.map(OwnedTerm::from), )); OK_TURTLE_ERROR })?; Ok(got) } fn v(value: &str) -> OwnedTerm { OwnedTerm::Variable(value.to_string()) } impl<'a> From> for OwnedTerm { fn from(other: GeneralizedTerm<'a>) -> OwnedTerm { match other { GeneralizedTerm::NamedNode(n) => OwnedTerm::NamedNode(n.iri.to_string()), GeneralizedTerm::BlankNode(n) => OwnedTerm::BlankNode(n.id.to_string()), GeneralizedTerm::Literal(Literal::Simple { value }) => { OwnedTerm::LiteralSimple(value.to_string()) } GeneralizedTerm::Literal(Literal::LanguageTaggedString { value, language }) => { OwnedTerm::LiteralLanguage(value.to_string(), language.to_string()) } GeneralizedTerm::Literal(Literal::Typed { value, datatype }) => { OwnedTerm::LiteralDatatype(value.to_string(), datatype.iri.to_string()) } GeneralizedTerm::Variable(n) => OwnedTerm::Variable(n.name.to_string()), GeneralizedTerm::Triple(t) => { OwnedTerm::Triple(Box::new([t[0].into(), t[1].into(), t[2].into()])) } } } } #[derive(Clone, Debug, PartialEq)] enum OwnedTerm { NamedNode(String), BlankNode(String), LiteralSimple(String), LiteralLanguage(String, String), LiteralDatatype(String, String), Variable(String), Triple(Box<[OwnedTerm; 3]>), } impl<'a> From<&'a OwnedTerm> for GeneralizedTerm<'a> { fn from(other: &'a OwnedTerm) -> GeneralizedTerm<'a> { match other { OwnedTerm::NamedNode(iri) => GeneralizedTerm::NamedNode(NamedNode { iri }), OwnedTerm::BlankNode(id) => GeneralizedTerm::BlankNode(BlankNode { id }), OwnedTerm::LiteralSimple(value) => { GeneralizedTerm::Literal(Literal::Simple { value }) } OwnedTerm::LiteralLanguage(value, language) => { GeneralizedTerm::Literal(Literal::LanguageTaggedString { value, language }) } OwnedTerm::LiteralDatatype(value, iri) => { GeneralizedTerm::Literal(Literal::Typed { value, datatype: NamedNode { iri }, }) } OwnedTerm::Variable(name) => GeneralizedTerm::Variable(Variable { name }), OwnedTerm::Triple(_) => { unimplemented!() } } } } } rio-0.8.5/turtle/src/gtriple_allocator.rs000066400000000000000000000463621466265456300205330ustar00rootroot00000000000000//! I define [`GeneralizedTripleAllocator`] #![allow(unsafe_code)] use crate::utils::StringBufferStack; use rio_api::model::*; use std::mem::transmute; /// A stack allocator for storing generalized RDF and RDF-star triples. /// /// # Implementation /// This type uses `&'static str` internally to reference text that it allocates. /// It therefore contains unsafe code to cheat the borrow checker, /// but ensures that the referenced data lives as long as the referencing struct. pub struct GeneralizedTripleAllocator { incomplete_stack: Vec<[GeneralizedTerm<'static>; 3]>, incomplete_len: usize, #[allow(clippy::vec_box)] complete_stack: Vec; 3]>>, complete_len: usize, string_stack: StringBufferStack, } impl GeneralizedTripleAllocator { pub fn new() -> GeneralizedTripleAllocator { GeneralizedTripleAllocator { incomplete_stack: Vec::with_capacity(1), incomplete_len: 0, complete_stack: Vec::with_capacity(1), complete_len: 0, string_stack: StringBufferStack::with_capacity(4), } } pub fn complete_len(&self) -> usize { self.complete_len } pub fn incomplete_len(&self) -> usize { self.incomplete_len } /// Return the last completed triple pub fn top(&self) -> &[GeneralizedTerm<'_>; 3] { debug_assert!(self.complete_len > 0); &self.complete_stack[self.complete_len - 1] } /// Return the subject of the current (in-progress) triple, if any. pub fn current_subject(&self) -> Option { if self.incomplete_len == 0 { None } else { debug_assert!(!dummy(self.incomplete_stack[self.incomplete_len - 1][0])); Some(self.incomplete_stack[self.incomplete_len - 1][0]) } } /// Generate a quad from the top completed triple, /// with the given graph name. pub fn top_quad<'s>(&'s self, graph_name: Option>) -> GeneralizedQuad<'s> { debug_assert!(self.complete_len > 0); let [subject, predicate, object] = *self.top(); GeneralizedQuad { subject, predicate, object, graph_name, } } pub fn push_triple_start(&mut self) { let dummy: GeneralizedTerm = DUMMY_IRI.into(); if self.incomplete_len == self.incomplete_stack.len() { self.incomplete_stack.push([dummy, dummy, dummy]) } #[cfg(debug_assertions)] // to ensure that dummy() assertions work { self.incomplete_stack[self.incomplete_len] = [dummy, dummy, dummy]; } self.incomplete_len += 1; } /// Push an atomic term, /// produced by `subject_factory`, /// at the position `pos` of the current triple. /// /// # Pre-condition /// In standard RDF, any term is acceptable. /// In RDF-star embedded triples [`GeneralizedTerm::Triple`] are *not allowed*. /// For adding an embedded triple, use [`TripleAllocator::push_quoted_triple`] instead. pub fn try_push_atom(&mut self, pos: usize, term_factory: F) -> Result<(), E> where F: for<'x> FnOnce(&'x mut String, &'x mut String) -> Result, E>, { debug_assert!(pos < 3); debug_assert!(pos == 0 || !dummy(self.current()[pos - 1])); debug_assert!(dummy(self.current()[pos])); let buffers = self.string_stack.push2(); let atom = term_factory(buffers.0, buffers.1)?; debug_assert!(!matches!(atom, GeneralizedTerm::Triple(_))); let atom: GeneralizedTerm<'static> = unsafe { transmute(atom) }; // The unsafe code above changes the lifetime parameter of atom to `'static`. // This is ok because: // * we will only expose it with a shorter lifetime, and // * this implementation guarantees that the pointed `str` lives as long as the atom if pos < 2 { self.current()[pos] = atom; } else { self.complete_triple(atom); } Ok(()) } /// Use the [top](TripleAllocator::top) triple of this stash at the position `pos` of the current triple. pub fn push_quoted_triple(&mut self, pos: usize) { debug_assert!(pos < 3); debug_assert!(dummy(self.current()[pos])); debug_assert!(self.complete_len > 0); let triple = &*self.complete_stack[self.complete_len - 1]; debug_assert!((0..pos).all( |i| match self.incomplete_stack[self.incomplete_len - 1][i] { GeneralizedTerm::Triple(s) => { let ptr_s: *const _ = s; ptr_s != triple } _ => true, } )); let triple: &'static [GeneralizedTerm<'static>; 3] = unsafe { transmute(triple) }; // The unsafe code above changes the lifetime of the ref to `'static`. // This is ok because: // * we will only expose it with a shorter lifetime, and // * this implementation guarantees that the pointed `Triple` lives as long as the `Term` embedding it let quoted = GeneralizedTerm::Triple(triple); if pos < 2 { self.current()[pos] = quoted; } else { self.complete_triple(quoted); } } pub fn pop_term(&mut self, pos: usize) { debug_assert!(pos < 3); if pos == 2 { debug_assert!(self.complete_len > 0); self.complete_len -= 1; let inc_triple = *self.complete_stack[self.complete_len]; if self.incomplete_len == self.incomplete_stack.len() { self.incomplete_stack.push(inc_triple) } else { self.incomplete_stack[self.incomplete_len] = inc_triple; } self.incomplete_len += 1; } else { debug_assert!(dummy(self.current()[pos + 1])); }; match self.current()[pos] { GeneralizedTerm::Triple(_) => self.pop_top_triple(), _ => { // we allocate two buffers for any atomic object, not just literals self.string_stack.pop(); self.string_stack.pop() } } #[cfg(debug_assertions)] // to ensure that dummy() assertions work { self.current()[pos] = DUMMY_IRI.into(); } } #[inline(always)] /// Pops the latest complete triple, and recursively pops all its constituent triples. /// Equivalent to pop_object, pop_predicate, pop_subject, pop_empty_triple pub fn pop_top_triple(&mut self) { self.pop_term(2); self.pop_term(1); self.pop_term(0); self.incomplete_len -= 1; } /// Pops the top-most empty triple, created with push_triple_start, /// but with all its components having been popped (or never pushed) #[inline(always)] pub fn pop_top_empty_triple(&mut self) { debug_assert!(self.incomplete_len > 0); debug_assert!(dummy(self.current()[1])); debug_assert!(dummy(self.current()[0])); self.incomplete_len -= 1; } /// Pops the top-most annotation triple, i.e. /// a triple on the incomplete stack with only its subject pushed, /// and that subject is an embedded triple. /// /// The goal is to remove this triple *without* freeing the subject triple. #[inline(always)] pub fn pop_annotation_triple(&mut self) { debug_assert!(self.incomplete_len > 0); debug_assert!(dummy(self.current()[1])); debug_assert!(!dummy(self.current()[0])); debug_assert!(matches!(self.current()[0], GeneralizedTerm::Triple(_))); self.incomplete_len -= 1; } pub fn clear(&mut self) { self.incomplete_len = 0; self.incomplete_stack.clear(); self.complete_len = 0; self.complete_stack.clear(); self.string_stack.clear(); } fn complete_triple(&mut self, object: GeneralizedTerm<'static>) { self.incomplete_len -= 1; let mut triple = self.incomplete_stack[self.incomplete_len]; triple[2] = object; if self.complete_len == self.complete_stack.len() { self.complete_stack.push(Box::new(triple)) } else { *self.complete_stack[self.complete_len] = triple; } self.complete_len += 1; } fn current(&mut self) -> &mut [GeneralizedTerm<'static>; 3] { debug_assert!(self.incomplete_len > 0); &mut self.incomplete_stack[self.incomplete_len - 1] } } #[cfg(debug_assertions)] // debug assertions need DUMMY to have a static address static DUMMY_IRI: NamedNode<'static> = NamedNode { iri: "" }; #[cfg(not(debug_assertions))] // otherwise, a const is sufficient const DUMMY_IRI: NamedNode<'static> = NamedNode { iri: "" }; fn dummy<'a, T: std::fmt::Debug + Into>>(t: T) -> bool { match t.into() { GeneralizedTerm::NamedNode(n) => { let ptr_iri: *const str = n.iri; ptr_iri == DUMMY_IRI.iri } _ => false, } } #[cfg(test)] mod test { use super::*; use std::convert::Infallible; #[cfg(debug_assertions)] #[test] fn dummy_works() { assert!(dummy(DUMMY_IRI)); let b = "foo".to_string(); let n = NamedNode { iri: &b[..0] }; assert!(DUMMY_IRI.iri == n.iri); // and yet: assert!(!dummy(n)); } fn iri<'a, T: From>>( buffer: &'a mut String, value: &str, ) -> Result { buffer.push_str(value); Ok(NamedNode { iri: &*buffer }.into()) } fn bn<'a, T: From>>( buffer: &'a mut String, value: &str, ) -> Result { buffer.push_str(value); Ok(BlankNode { id: &*buffer }.into()) } fn sl<'a, T: From>>(buffer: &'a mut String, value: &str) -> Result { buffer.push_str(value); Ok(Literal::Simple { value: &*buffer }.into()) } fn lt<'a, T: From>>( buffer1: &'a mut String, buffer2: &'a mut String, value: &str, tag: &str, ) -> Result { buffer1.push_str(value); buffer2.push_str(tag); Ok(Literal::LanguageTaggedString { value: &*buffer1, language: &*buffer2, } .into()) } fn dt<'a, T: From>>( buffer1: &'a mut String, buffer2: &'a mut String, value: &str, dt: &str, ) -> Result { buffer1.push_str(value); buffer2.push_str(dt); Ok(Literal::Typed { value: &*buffer1, datatype: NamedNode { iri: &*buffer2 }, } .into()) } #[test] fn simple_triple_w_named() -> Result<(), Infallible> { let mut ta = GeneralizedTripleAllocator::new(); ta.push_triple_start(); ta.try_push_atom(0, |b, _| iri(b, "a"))?; ta.try_push_atom(1, |b, _| iri(b, "b"))?; ta.try_push_atom(2, |b, _| iri(b, "c"))?; assert_eq!(display(ta.top()), r#" "#); Ok(()) } #[test] fn simple_triple_w_blank() -> Result<(), Infallible> { let mut ta = GeneralizedTripleAllocator::new(); ta.push_triple_start(); ta.try_push_atom(0, |b, _| bn(b, "a"))?; ta.try_push_atom(1, |b, _| bn(b, "b"))?; ta.try_push_atom(2, |b, _| bn(b, "c"))?; assert_eq!(display(ta.top()), r#"_:a _:b _:c"#); Ok(()) } #[test] fn simple_triple_w_simple_lit() -> Result<(), Infallible> { let mut ta = GeneralizedTripleAllocator::new(); ta.push_triple_start(); ta.try_push_atom(0, |b, _| sl(b, "a"))?; ta.try_push_atom(1, |b, _| sl(b, "b"))?; ta.try_push_atom(2, |b, _| sl(b, "c"))?; assert_eq!(display(ta.top()), r#""a" "b" "c""#); Ok(()) } #[test] fn simple_triple_w_lang_lit() -> Result<(), Infallible> { let mut ta = GeneralizedTripleAllocator::new(); ta.push_triple_start(); ta.try_push_atom(0, |b1, b2| lt(b1, b2, "a", "en"))?; ta.try_push_atom(1, |b1, b2| lt(b1, b2, "b", "fr"))?; ta.try_push_atom(2, |b1, b2| lt(b1, b2, "c", "ge"))?; assert_eq!(display(ta.top()), r#""a"@en "b"@fr "c"@ge"#); Ok(()) } #[test] fn simple_triple_w_typed_lit() -> Result<(), Infallible> { let mut ta = GeneralizedTripleAllocator::new(); ta.push_triple_start(); ta.try_push_atom(0, |b1, b2| dt(b1, b2, "a", "b"))?; ta.try_push_atom(1, |b1, b2| dt(b1, b2, "c", "d"))?; ta.try_push_atom(2, |b1, b2| dt(b1, b2, "e", "f"))?; assert_eq!(display(ta.top()), r#""a"^^ "c"^^ "e"^^"#); Ok(()) } #[test] fn simple_triples_pop() -> Result<(), Infallible> { let mut ta = GeneralizedTripleAllocator::new(); ta.push_triple_start(); ta.try_push_atom(0, |b, _| iri(b, "a"))?; ta.try_push_atom(1, |b, _| iri(b, "b"))?; ta.try_push_atom(2, |b, _| iri(b, "c"))?; assert_eq!(display(ta.top()), r#" "#); ta.pop_term(2); ta.try_push_atom(2, |b, _| iri(b, "d"))?; assert_eq!(display(ta.top()), r#" "#); ta.pop_term(2); ta.pop_term(1); ta.try_push_atom(1, |b, _| iri(b, "e"))?; ta.try_push_atom(2, |b, _| iri(b, "f"))?; assert_eq!(display(ta.top()), r#" "#); ta.pop_term(2); ta.try_push_atom(2, |b, _| iri(b, "g"))?; assert_eq!(display(ta.top()), r#" "#); ta.pop_term(2); ta.pop_term(1); ta.pop_term(0); ta.try_push_atom(0, |b, _| iri(b, "h"))?; ta.try_push_atom(1, |b, _| iri(b, "i"))?; ta.try_push_atom(2, |b, _| iri(b, "j"))?; assert_eq!(display(ta.top()), r#" "#); Ok(()) } #[test] fn simple_triples_stacked() -> Result<(), Infallible> { let mut ta = GeneralizedTripleAllocator::new(); ta.push_triple_start(); ta.try_push_atom(0, |b, _| iri(b, "a"))?; ta.try_push_atom(1, |b, _| iri(b, "b"))?; ta.try_push_atom(2, |b, _| iri(b, "c"))?; assert_eq!(display(ta.top()), r#" "#); ta.push_triple_start(); ta.try_push_atom(0, |b, _| iri(b, "d"))?; ta.try_push_atom(1, |b, _| iri(b, "e"))?; ta.try_push_atom(2, |b, _| iri(b, "f"))?; assert_eq!(display(ta.top()), r#" "#); ta.pop_top_triple(); assert_eq!(display(ta.top()), r#" "#); ta.pop_top_triple(); assert_eq!(ta.complete_len, 0); assert_eq!(ta.incomplete_len, 0); Ok(()) } #[test] fn quoted_triple_as_subject() -> Result<(), Infallible> { let mut ta = GeneralizedTripleAllocator::new(); ta.push_triple_start(); { ta.push_triple_start(); ta.try_push_atom(0, |b, _| bn(b, "a"))?; ta.try_push_atom(1, |b, _| iri(b, "b"))?; ta.try_push_atom(2, |b, _| sl(b, "c"))?; assert_eq!(display(ta.top()), r#"_:a "c""#); } ta.push_quoted_triple(0); ta.try_push_atom(1, |b, _| iri(b, "d"))?; ta.try_push_atom(2, |b, _| sl(b, "e"))?; assert_eq!(display(ta.top()), r#"<< _:a "c" >> "e""#); Ok(()) } #[test] fn quoted_triple_as_predicate() -> Result<(), Infallible> { let mut ta = GeneralizedTripleAllocator::new(); ta.push_triple_start(); ta.try_push_atom(0, |b, _| bn(b, "a"))?; { ta.push_triple_start(); ta.try_push_atom(0, |b, _| bn(b, "b"))?; ta.try_push_atom(1, |b, _| iri(b, "c"))?; ta.try_push_atom(2, |b, _| sl(b, "d"))?; assert_eq!(display(ta.top()), r#"_:b "d""#); } ta.push_quoted_triple(1); ta.try_push_atom(2, |b, _| bn(b, "e"))?; assert_eq!(display(ta.top()), r#"_:a << _:b "d" >> _:e"#); Ok(()) } #[test] fn quoted_triple_as_object() -> Result<(), Infallible> { let mut ta = GeneralizedTripleAllocator::new(); ta.push_triple_start(); ta.try_push_atom(0, |b, _| bn(b, "a"))?; ta.try_push_atom(1, |b, _| iri(b, "b"))?; { ta.push_triple_start(); ta.try_push_atom(0, |b, _| bn(b, "c"))?; ta.try_push_atom(1, |b, _| iri(b, "d"))?; ta.try_push_atom(2, |b, _| sl(b, "e"))?; assert_eq!(display(ta.top()), r#"_:c "e""#); } ta.push_quoted_triple(2); assert_eq!(display(ta.top()), r#"_:a << _:c "e" >>"#); Ok(()) } #[test] fn quoted_triple_as_both() -> Result<(), Infallible> { let mut ta = GeneralizedTripleAllocator::new(); ta.push_triple_start(); { ta.push_triple_start(); ta.try_push_atom(0, |b, _| bn(b, "a"))?; ta.try_push_atom(1, |b, _| iri(b, "b"))?; ta.try_push_atom(2, |b, _| sl(b, "c"))?; assert_eq!(display(ta.top()), r#"_:a "c""#); } ta.push_quoted_triple(0); ta.try_push_atom(1, |b, _| iri(b, "d"))?; { ta.push_triple_start(); ta.try_push_atom(0, |b, _| bn(b, "e"))?; ta.try_push_atom(1, |b, _| iri(b, "f"))?; ta.try_push_atom(2, |b, _| sl(b, "g"))?; assert_eq!(display(ta.top()), r#"_:e "g""#); } ta.push_quoted_triple(2); assert_eq!( display(ta.top()), r#"<< _:a "c" >> << _:e "g" >>"# ); Ok(()) } #[test] fn quoted_triple_deep() -> Result<(), Infallible> { let mut ta = GeneralizedTripleAllocator::new(); ta.push_triple_start(); { ta.push_triple_start(); ta.try_push_atom(0, |b, _| bn(b, "a"))?; ta.try_push_atom(1, |b, _| iri(b, "b"))?; { ta.push_triple_start(); ta.try_push_atom(0, |b, _| bn(b, "c"))?; ta.try_push_atom(1, |b, _| iri(b, "d"))?; ta.try_push_atom(2, |b, _| sl(b, "e"))?; assert_eq!(display(ta.top()), r#"_:c "e""#); } ta.push_quoted_triple(2); assert_eq!(display(ta.top()), r#"_:a << _:c "e" >>"#); } ta.push_quoted_triple(0); ta.try_push_atom(1, |b, _| iri(b, "f"))?; { ta.push_triple_start(); { ta.push_triple_start(); ta.try_push_atom(0, |b, _| bn(b, "g"))?; ta.try_push_atom(1, |b, _| iri(b, "h"))?; ta.try_push_atom(2, |b, _| sl(b, "i"))?; assert_eq!(display(ta.top()), r#"_:g "i""#); } ta.push_quoted_triple(0); ta.try_push_atom(1, |b, _| iri(b, "j"))?; ta.try_push_atom(2, |b, _| sl(b, "k"))?; assert_eq!(display(ta.top()), r#"<< _:g "i" >> "k""#); } ta.push_quoted_triple(2); assert_eq!( display(ta.top()), r#"<< _:a << _:c "e" >> >> << << _:g "i" >> "k" >>"# ); ta.pop_top_triple(); assert_eq!(ta.complete_len, 0); assert_eq!(ta.incomplete_len, 0); Ok(()) } fn display(triple: &[GeneralizedTerm<'_>; 3]) -> String { format!("{} {} {}", triple[0], triple[1], triple[2]) } } rio-0.8.5/turtle/src/lib.rs000066400000000000000000000062451466265456300155670ustar00rootroot00000000000000//! Implementation of [N-Triples](https://www.w3.org/TR/n-triples/), [N-Quads](https://www.w3.org/TR/n-quads/), [Turtle](https://www.w3.org/TR/turtle/) and [TriG](https://www.w3.org/TR/trig/) parsers. //! //! //! //! This library is going to be deprecated. //! [oxttl](https://crates.io/crates/oxttl) is currently in development to replace it. //! //! //! [RDF-star](https://w3c.github.io/rdf-star/cg-spec/) syntaxes are also supported, i.e. [Turtle-star](https://w3c.github.io/rdf-star/cg-spec/#turtle-star), [TriG-star](https://w3c.github.io/rdf-star/cg-spec/#trig-star), [N-Triples-star](https://w3c.github.io/rdf-star/cg-spec/#n-triples-star) and [N-Quads-star](https://w3c.github.io/rdf-star/cg-spec/#n-quads-star). //! //! All the provided parsers work in streaming from a `BufRead` implementation. //! They do not rely on any dependencies outside of Rust standard library. //! The parsers are not protected against memory overflows. //! For example if the parsed content contains a literal string of 16 GB, 16 GB of memory will be allocated. //! //! How to read a file `foo.ttl` and count the number of `rdf:type` triples: //! ```no_run //! use rio_turtle::{TurtleParser, TurtleError}; //! use rio_api::parser::TriplesParser; //! use rio_api::model::NamedNode; //! use std::io::BufReader; //! use std::fs::File; //! use oxiri::Iri; //! //! let rdf_type = NamedNode { iri: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" }; //! let mut count = 0; //! TurtleParser::new(BufReader::new(File::open("foo.ttl")?), Some(Iri::parse("file:foo.ttl".to_owned()).unwrap())).parse_all(&mut |t| { //! if t.predicate == rdf_type { //! count += 1; //! } //! Ok(()) as Result<(), TurtleError> //! })?; //! # Result::<_,TurtleError>::Ok(()) //! ``` //! //! Replace `TurtleParser` by `NTriplesParser`, `NQuadsParser` or `TriGParser` to read an N-Triples, N-Quads or TriG file instead. //! //! `NTriplesParser` and `NQuadsParser` do not use the second argument of the `new` function that is the IRI of the file. #![deny(unsafe_code)] #![cfg_attr(docsrs, feature(doc_auto_cfg))] #![doc(test(attr(deny(warnings))))] mod error; mod formatters; mod ntriples; mod shared; mod triple_allocator; mod turtle; mod utils; #[cfg(feature = "generalized")] mod gnquads; #[cfg(feature = "generalized")] mod gtrig; #[cfg(feature = "generalized")] mod gtriple_allocator; pub use error::TurtleError; pub use formatters::NQuadsFormatter; pub use formatters::NTriplesFormatter; pub use formatters::TriGFormatter; pub use formatters::TurtleFormatter; pub use ntriples::NQuadsParser; pub use ntriples::NTriplesParser; pub use turtle::TriGParser; pub use turtle::TurtleParser; #[cfg(feature = "generalized")] pub use gnquads::GeneralizedNQuadsParser; #[cfg(feature = "generalized")] pub use gtrig::GTriGParser; /// Maximal number of nested structures (collections, blank node, quoted triples...). /// /// This limit is set in order to avoid stack overflow error when parsing such structures due to too many recursive calls. /// The actual limit value is a wet finger compromise between not failing to parse valid files and avoiding to trigger stack overflow errors. const MAX_STACK_SIZE: usize = 128; rio-0.8.5/turtle/src/ntriples.rs000066400000000000000000000324051466265456300166560ustar00rootroot00000000000000//! Implementation of N-Triples and N-Quads RDF syntax use crate::error::*; use crate::shared::*; use crate::triple_allocator::TripleAllocator; use crate::utils::*; use rio_api::model::*; use rio_api::parser::*; use std::io::BufRead; /// A [N-Triples](https://www.w3.org/TR/n-triples/) and [N-Triples-star](https://w3c.github.io/rdf-star/cg-spec/#n-triples-star) streaming parser. /// /// It implements the [`TriplesParser`] trait. /// /// Its memory consumption is linear in the size of the longest line of the file. /// It does not do any allocation during parsing except buffer resizing /// if a line significantly longer than the previous is encountered, /// or if a line uses deeply nested triples. /// /// /// Count the number of people using the [`TriplesParser`] API: /// ``` /// use rio_turtle::{NTriplesParser, TurtleError}; /// use rio_api::parser::TriplesParser; /// use rio_api::model::NamedNode; /// /// let file = b" . /// \"Foo\" . /// . /// \"Bar\" ."; /// /// let rdf_type = NamedNode { iri: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" }; /// let schema_person = NamedNode { iri: "http://schema.org/Person" }; /// let mut count = 0; /// NTriplesParser::new(file.as_ref()).parse_all(&mut |t| { /// if t.predicate == rdf_type && t.object == schema_person.into() { /// count += 1; /// } /// Ok(()) as Result<(), TurtleError> /// })?; /// assert_eq!(2, count); /// # Result::<_,rio_turtle::TurtleError>::Ok(()) /// ``` pub struct NTriplesParser { read: LookAheadByteReader, triple_alloc: TripleAllocator, } impl NTriplesParser { pub fn new(reader: R) -> Self { Self { read: LookAheadByteReader::new(reader), triple_alloc: TripleAllocator::new(), } } } impl TriplesParser for NTriplesParser { type Error = TurtleError; fn parse_step>( &mut self, on_triple: &mut impl FnMut(Triple<'_>) -> Result<(), E>, ) -> Result<(), E> { match parse_triple_line(&mut self.read, &mut self.triple_alloc) { Ok(true) => match on_triple(*self.triple_alloc.top()) { Ok(()) => { self.triple_alloc.pop_top_triple(); debug_assert_eq!(self.triple_alloc.complete_len(), 0); debug_assert_eq!(self.triple_alloc.incomplete_len(), 0); Ok(()) } Err(err) => { self.triple_alloc.clear(); Err(err) } }, Ok(false) => Ok(()), Err(error) => { self.read.consume_line_end()?; self.triple_alloc.clear(); Err(E::from(error)) } } } fn is_end(&self) -> bool { self.read.current().is_none() } } /// A [N-Quads](https://www.w3.org/TR/n-quads/) and [N-Quads-star](https://w3c.github.io/rdf-star/cg-spec/#n-quads-star) streaming parser. /// /// It implements the `QuadsParser` trait. /// /// Its memory consumption is linear in the size of the longest line of the file. /// It does not do any allocation during parsing except buffer resizing /// if a line significantly longer than the previous is encountered, /// or if a line uses deeply nested triples. /// /// Count the number of people using the `QuadsParser` API: /// ``` /// use rio_turtle::{NQuadsParser, TurtleError}; /// use rio_api::parser::QuadsParser; /// use rio_api::model::NamedNode; /// /// let file = b" . /// \"Foo\" . /// . /// \"Bar\" ."; /// /// let rdf_type = NamedNode { iri: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" }; /// let schema_person = NamedNode { iri: "http://schema.org/Person" }; /// let mut count = 0; /// NQuadsParser::new(file.as_ref()).parse_all(&mut |t| { /// if t.predicate == rdf_type && t.object == schema_person.into() { /// count += 1; /// } /// Ok(()) as Result<(), TurtleError> /// })?; /// assert_eq!(2, count); /// # Result::<_,rio_turtle::TurtleError>::Ok(()) /// ``` pub struct NQuadsParser { read: LookAheadByteReader, triple_alloc: TripleAllocator, graph_name_buf: String, } impl NQuadsParser { pub fn new(reader: R) -> Self { Self { read: LookAheadByteReader::new(reader), triple_alloc: TripleAllocator::new(), graph_name_buf: String::default(), } } } impl QuadsParser for NQuadsParser { type Error = TurtleError; fn parse_step>( &mut self, on_quad: &mut impl FnMut(Quad<'_>) -> Result<(), E>, ) -> Result<(), E> { match parse_quad_line( &mut self.read, &mut self.triple_alloc, &mut self.graph_name_buf, ) { Ok(Some(opt_graph_name)) => match on_quad(self.triple_alloc.top_quad(opt_graph_name)) { Ok(()) => { self.triple_alloc.pop_top_triple(); debug_assert_eq!(self.triple_alloc.complete_len(), 0); debug_assert_eq!(self.triple_alloc.incomplete_len(), 0); Ok(()) } Err(err) => { self.triple_alloc.clear(); Err(err) } }, Ok(None) => Ok(()), Err(error) => { self.read.consume_line_end()?; self.triple_alloc.clear(); Err(E::from(error)) } } } fn is_end(&self) -> bool { self.read.current().is_none() } } fn parse_triple_line( read: &mut LookAheadByteReader, triple_alloc: &mut TripleAllocator, ) -> Result { skip_whitespace(read)?; if matches!( read.current(), None | Some(b'#') | Some(b'\r') | Some(b'\n') ) { skip_until_eol(read)?; return Ok(false); } parse_triple(read, triple_alloc)?; read.check_is_current(b'.')?; read.consume()?; skip_whitespace(read)?; match read.current() { None | Some(b'#') | Some(b'\r') | Some(b'\n') => skip_until_eol(read)?, _ => read.unexpected_char_error()?, } Ok(true) } fn parse_triple( read: &mut LookAheadByteReader, triple_alloc: &mut TripleAllocator, ) -> Result<(), TurtleError> { triple_alloc.push_triple_start(); parse_subject(read, triple_alloc)?; skip_whitespace(read)?; triple_alloc.try_push_predicate(|b| parse_iriref(read, b))?; skip_whitespace(read)?; parse_object(read, triple_alloc)?; skip_whitespace(read)?; Ok(()) } fn parse_quad_line<'a>( read: &mut LookAheadByteReader, triple_alloc: &mut TripleAllocator, graph_name_buf: &'a mut String, ) -> Result>>, TurtleError> { skip_whitespace(read)?; if matches!( read.current(), None | Some(b'#') | Some(b'\r') | Some(b'\n') ) { skip_until_eol(read)?; return Ok(None); } parse_triple(read, triple_alloc)?; let opt_graph_name = match read.current() { Some(b'<') | Some(b'_') => { graph_name_buf.clear(); Some(parse_graph_name(read, graph_name_buf)?) } _ => None, }; skip_whitespace(read)?; read.check_is_current(b'.')?; read.consume()?; skip_whitespace(read)?; match read.current() { None | Some(b'#') | Some(b'\r') | Some(b'\n') => skip_until_eol(read)?, _ => read.unexpected_char_error()?, } Ok(Some(opt_graph_name)) } fn parse_subject( read: &mut LookAheadByteReader, triple_alloc: &mut TripleAllocator, ) -> Result<(), TurtleError> { match read.required_current()? { b'<' => match read.required_next()? { b'<' => { parse_quoted_triple(read, triple_alloc)?; triple_alloc.push_subject_triple(); Ok(()) } _ => triple_alloc.try_push_subject(|b| parse_iriref(read, b).map(Subject::from)), }, b'_' => { triple_alloc.try_push_subject(|b| parse_blank_node_label(read, b).map(Subject::from)) } _ => read.unexpected_char_error(), } } fn parse_object( read: &mut LookAheadByteReader, triple_alloc: &mut TripleAllocator, ) -> Result<(), TurtleError> { match read.required_current()? { b'<' => match read.required_next()? { b'<' => { parse_quoted_triple(read, triple_alloc)?; triple_alloc.push_object_triple(); Ok(()) } _ => triple_alloc.try_push_object(|b, _| parse_iriref(read, b).map(Term::from)), }, b'_' => { triple_alloc.try_push_object(|b, _| parse_blank_node_label(read, b).map(Term::from)) } b'"' => triple_alloc.try_push_object(|b1, b2| parse_literal(read, b1, b2).map(Term::from)), _ => read.unexpected_char_error(), } } fn parse_quoted_triple( read: &mut LookAheadByteReader, triple_alloc: &mut TripleAllocator, ) -> Result<(), TurtleError> { debug_assert_eq!(read.current(), Some(b'<')); debug_assert_eq!(read.next()?, Some(b'<')); read.increment_stack_size()?; read.consume_many(2)?; skip_whitespace(read)?; parse_triple(read, triple_alloc)?; read.check_is_current(b'>')?; read.consume()?; read.check_is_current(b'>')?; read.consume()?; read.decrement_stack_size(); skip_whitespace(read) } fn parse_graph_name<'a>( read: &mut LookAheadByteReader, buffer: &'a mut String, ) -> Result, TurtleError> { match read.required_current()? { b'<' => Ok(parse_iriref(read, buffer)?.into()), b'_' => Ok(parse_blank_node_label(read, buffer)?.into()), _ => read.unexpected_char_error(), } } pub(crate) fn parse_literal<'a>( read: &mut LookAheadByteReader, buffer: &'a mut String, annotation_buffer: &'a mut String, ) -> Result, TurtleError> { parse_string_literal_quote(read, buffer)?; skip_whitespace(read)?; match read.current() { Some(b'@') => { parse_langtag(read, annotation_buffer)?; Ok(Literal::LanguageTaggedString { value: buffer, language: annotation_buffer, }) } Some(b'^') => { read.consume()?; read.check_is_current(b'^')?; read.consume()?; skip_whitespace(read)?; Ok(Literal::Typed { value: buffer, datatype: parse_iriref(read, annotation_buffer)?, }) } _ => Ok(Literal::Simple { value: buffer }), } } pub(crate) fn skip_whitespace( read: &mut LookAheadByteReader, ) -> Result<(), TurtleError> { loop { match read.current() { Some(b' ') | Some(b'\t') => read.consume()?, _ => return Ok(()), } } } pub(crate) fn skip_until_eol( read: &mut LookAheadByteReader, ) -> Result<(), TurtleError> { loop { match read.current() { None => return Ok(()), Some(b'\n') => { read.consume()?; return Ok(()); } _ => (), } read.consume()?; } } pub(crate) fn parse_iriref<'a>( read: &mut LookAheadByteReader, buffer: &'a mut String, ) -> Result, TurtleError> { parse_iriref_absolute(read, buffer)?; Ok(NamedNode { iri: buffer }) } #[cfg(test)] mod test { #[test] fn nquads_star_valid_quad() -> Result<(), Box> { // adding this test because there is currently no testsuite specific to N-Quads star use crate::{NQuadsParser, TurtleError}; use rio_api::parser::QuadsParser; let file = b"<< >> << >> ."; let mut count = 0; NQuadsParser::new(file.as_ref()).parse_all(&mut |_| -> Result<(), TurtleError> { count += 1; Ok(()) })?; assert_eq!(1, count); Ok(()) } #[test] fn nquads_star_invalid_graph_name() { // adding this test because there is currently no testsuite specific to N-Quads star use crate::{NQuadsParser, TurtleError}; use rio_api::parser::QuadsParser; let file = b" << >> ."; let mut count = 0; let res = NQuadsParser::new(file.as_ref()).parse_all(&mut |_| -> Result<(), TurtleError> { count += 1; Ok(()) }); assert!(res.is_err()); } } rio-0.8.5/turtle/src/shared.rs000066400000000000000000000251561466265456300162710ustar00rootroot00000000000000use crate::error::*; use crate::utils::*; use oxilangtag::LanguageTag; use oxiri::Iri; use rio_api::model::*; use std::char; use std::io::BufRead; pub const MAX_ASCII: u8 = 0x7F; pub fn parse_iriref_absolute<'a>( read: &mut LookAheadByteReader, buffer: &'a mut String, ) -> Result, TurtleError> { parse_iriref(read, buffer)?; Iri::parse(buffer.as_str()).map_err(|error| { read.parse_error(TurtleErrorKind::InvalidIri { iri: buffer.to_owned(), error, }) })?; Ok(NamedNode { iri: buffer }) } pub fn parse_iriref_relative<'a>( read: &mut LookAheadByteReader, buffer: &'a mut String, temp_buffer: &mut String, base_iri: &Option>, ) -> Result, TurtleError> { if let Some(base_iri) = base_iri { parse_iriref(read, temp_buffer)?; let result = base_iri.resolve_into(temp_buffer, buffer).map_err(|error| { read.parse_error(TurtleErrorKind::InvalidIri { iri: temp_buffer.to_owned(), error, }) }); temp_buffer.clear(); result.map(move |_| NamedNode { iri: buffer }) } else { parse_iriref_absolute(read, buffer) } } pub fn parse_iriref( read: &mut LookAheadByteReader, buffer: &mut String, ) -> Result<(), TurtleError> { // [18] IRIREF ::= '<' ([^#x00-#x20<>"{}|^`\] | UCHAR)* '>' /* #x00=NULL #01-#x1F=control codes #x20=space */ // Most of the validation is done by the IRI parser read.check_is_current(b'<')?; loop { read.consume()?; match read.current() { None | Some(b'\n') | Some(b'\r') => read.unexpected_char_error()?, Some(b'>') => { read.consume()?; return Ok(()); } Some(b'\\') => { read.consume()?; buffer.push(match read.current() { Some(b'u') => read_hexa_char(read, 4)?, Some(b'U') => read_hexa_char(read, 8)?, _ => read.unexpected_char_error()?, }); } Some(c) => buffer.push(if c <= MAX_ASCII { char::from(c) //optimization to avoid UTF-8 decoding } else { read_utf8_char(read)? }), } } } pub fn parse_blank_node_label<'a>( read: &mut LookAheadByteReader, buffer: &'a mut String, ) -> Result, TurtleError> { // [141s] BLANK_NODE_LABEL ::= '_:' (PN_CHARS_U | [0-9]) ((PN_CHARS | '.')* PN_CHARS)? read.check_is_current(b'_')?; read.consume()?; read.check_is_current(b':')?; read.consume()?; let c = read.required_current()?; if c <= MAX_ASCII && (is_possible_pn_chars_u_ascii(c) || c.is_ascii_digit()) { buffer.push(char::from(c)) } else { let c = read_utf8_char(read)?; if is_possible_pn_chars_u_unicode(c) { buffer.push(c); } else { read.unexpected_char_error()? } } loop { read.consume()?; match read.current() { Some(b'.') => match read.next()? { Some(c) if is_possible_pn_chars_ascii(c) || c > MAX_ASCII => buffer.push('.'), _ => { return Ok(BlankNode { id: buffer }); } }, Some(c) if c < MAX_ASCII && is_possible_pn_chars_ascii(c) => buffer.push(char::from(c)), _ => { let c = read_utf8_char(read)?; if is_possible_pn_chars_unicode(c) { buffer.push(c); } else { return Ok(BlankNode { id: buffer }); } } } } } pub fn parse_langtag( read: &mut LookAheadByteReader, buffer: &mut String, ) -> Result<(), TurtleError> { // [144s] LANGTAG ::= '@' [a-zA-Z]+ ('-' [a-zA-Z0-9]+)* read.check_is_current(b'@')?; read.consume()?; while let Some(c) = read.current() { match c { b'a'..=b'z' | b'A'..=b'Z' | b'0'..=b'9' | b'-' => { buffer.push(char::from(c).to_ascii_lowercase()); read.consume()?; } _ => { break; } } } LanguageTag::parse(buffer.as_str()).map_err(|error| { read.parse_error(TurtleErrorKind::InvalidLanguageTag { tag: buffer.to_owned(), error, }) })?; Ok(()) } pub fn parse_string_literal_quote( read: &mut LookAheadByteReader, buffer: &mut String, ) -> Result<(), TurtleError> { // [22] STRING_LITERAL_QUOTE ::= '"' ([^#x22#x5C#xA#xD] | ECHAR | UCHAR)* '"' /* #x22=" #x5C=\ #xA=new line #xD=carriage return */ parse_string_literal_quote_inner(read, buffer, b'"') } pub fn parse_string_literal_quote_inner( read: &mut LookAheadByteReader, buffer: &mut String, quote: u8, ) -> Result<(), TurtleError> { read.check_is_current(quote)?; loop { read.consume()?; match read.required_current()? { c if c == quote => { read.consume()?; return Ok(()); } b'\\' => parse_echar_or_uchar(read, buffer)?, b'\n' | b'\r' => read.unexpected_char_error()?, c => buffer.push(if c <= MAX_ASCII { char::from(c) //optimization to avoid UTF-8 decoding } else { read_utf8_char(read)? }), } } } pub fn parse_echar_or_uchar( read: &mut LookAheadByteReader, buffer: &mut String, ) -> Result<(), TurtleError> { read.check_is_current(b'\\')?; read.consume()?; match read.required_current()? { b't' => buffer.push('\t'), b'b' => buffer.push('\u{8}'), b'n' => buffer.push('\n'), b'r' => buffer.push('\r'), b'f' => buffer.push('\u{C}'), b'"' => buffer.push('"'), b'\'' => buffer.push('\''), b'\\' => buffer.push('\\'), b'u' => buffer.push(read_hexa_char(read, 4)?), b'U' => buffer.push(read_hexa_char(read, 8)?), _ => read.unexpected_char_error()?, } Ok(()) } pub(crate) fn read_hexa_char( read: &mut LookAheadByteReader, len: usize, ) -> Result { let point = read_hexa_u32(read, len)?; char::from_u32(point) .ok_or_else(|| read.parse_error(TurtleErrorKind::InvalidUnicodeCodePoint(point))) } fn read_hexa_u32( read: &mut LookAheadByteReader, len: usize, ) -> Result { let mut value = 0; for _ in 0..len { read.consume()?; if let Some(d) = convert_hexa_byte(read.required_current()?) { value = value * 16 + u32::from(d); } else { read.unexpected_char_error()?; }; } Ok(value) } fn convert_hexa_byte(c: u8) -> Option { match c { b'0'..=b'9' => Some(c - b'0'), b'a'..=b'f' => Some(c - b'a' + 10), b'A'..=b'F' => Some(c - b'A' + 10), _ => None, } } // [157s] PN_CHARS_BASE ::= [A-Z] | [a-z] | [#x00C0-#x00D6] | [#x00D8-#x00F6] | [#x00F8-#x02FF] | [#x0370-#x037D] | [#x037F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF] pub fn is_possible_pn_chars_base_ascii(c: u8) -> bool { c.is_ascii_alphabetic() } // [157s] PN_CHARS_BASE ::= [A-Z] | [a-z] | [#x00C0-#x00D6] | [#x00D8-#x00F6] | [#x00F8-#x02FF] | [#x0370-#x037D] | [#x037F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF] pub fn is_possible_pn_chars_base_unicode(c: char) -> bool { matches!(c, 'A'..='Z' | 'a'..='z' | '\u{00C0}'..='\u{00D6}' | '\u{00D8}'..='\u{00F6}' | '\u{00F8}'..='\u{02FF}' | '\u{0370}'..='\u{037D}' | '\u{037F}'..='\u{1FFF}' | '\u{200C}'..='\u{200D}' | '\u{2070}'..='\u{218F}' | '\u{2C00}'..='\u{2FEF}' | '\u{3001}'..='\u{D7FF}' | '\u{F900}'..='\u{FDCF}' | '\u{FDF0}'..='\u{FFFD}' | '\u{10000}'..='\u{EFFFF}') } // [158s] PN_CHARS_U ::= PN_CHARS_BASE | '_' | ':' pub fn is_possible_pn_chars_u_ascii(c: u8) -> bool { is_possible_pn_chars_base_ascii(c) || c == b'_' } // [158s] PN_CHARS_U ::= PN_CHARS_BASE | '_' | ':' pub fn is_possible_pn_chars_u_unicode(c: char) -> bool { is_possible_pn_chars_base_unicode(c) || c == '_' } // [160s] PN_CHARS ::= PN_CHARS_U | '-' | [0-9] | #x00B7 | [#x0300-#x036F] | [#x203F-#x2040] pub fn is_possible_pn_chars_ascii(c: u8) -> bool { is_possible_pn_chars_u_ascii(c) || matches!(c, b'-' | b'0'..=b'9' | 0x00B7) } // [160s] PN_CHARS ::= PN_CHARS_U | '-' | [0-9] | #x00B7 | [#x0300-#x036F] | [#x203F-#x2040] pub fn is_possible_pn_chars_unicode(c: char) -> bool { is_possible_pn_chars_u_unicode(c) || matches!(c, '-' | '0'..='9' | '\u{00B7}' | '\u{0300}'..='\u{036F}' | '\u{203F}'..='\u{2040}') } /// Algorithm from https://encoding.spec.whatwg.org/#utf-8-decoder pub fn read_utf8_char(read: &mut LookAheadByteReader) -> Result { let mut code_point: u32; let bytes_needed: usize; let mut lower_boundary = 0x80; let mut upper_boundary = 0xBF; let byte = read.required_current()?; match byte { 0x00..=0x7F => return Ok(char::from(byte)), 0xC2..=0xDF => { bytes_needed = 1; code_point = u32::from(byte) & 0x1F; } 0xE0..=0xEF => { if byte == 0xE0 { lower_boundary = 0xA0; } if byte == 0xED { upper_boundary = 0x9F; } bytes_needed = 2; code_point = u32::from(byte) & 0xF; } 0xF0..=0xF4 => { if byte == 0xF0 { lower_boundary = 0x90; } if byte == 0xF4 { upper_boundary = 0x8F; } bytes_needed = 3; code_point = u32::from(byte) & 0x7; } _ => return read.unexpected_char_error(), } for _ in 0..bytes_needed { read.consume()?; let byte = read.required_current()?; if byte < lower_boundary || upper_boundary < byte { return read.unexpected_char_error(); } lower_boundary = 0x80; upper_boundary = 0xBF; code_point = (code_point << 6) | (u32::from(byte) & 0x3F); } char::from_u32(code_point) .ok_or_else(|| read.parse_error(TurtleErrorKind::InvalidUnicodeCodePoint(code_point))) } rio-0.8.5/turtle/src/triple_allocator.rs000066400000000000000000000524611466265456300203610ustar00rootroot00000000000000//! I define [`TripleAllocator`] #![allow(unsafe_code)] use crate::utils::StringBufferStack; use rio_api::model::*; use std::mem::transmute; /// A stack allocator for storing RDF and RDF-star triples. /// /// # Implementation /// This type uses `&'static str` internally to reference text that it allocates. /// It therefore contains unsafe code to cheat the borrow checker, /// but ensures that the referenced data lives as long as the referencing struct. pub struct TripleAllocator { incomplete_stack: Vec>, incomplete_len: usize, #[allow(clippy::vec_box)] complete_stack: Vec>>, complete_len: usize, string_stack: StringBufferStack, } impl TripleAllocator { pub fn new() -> TripleAllocator { TripleAllocator { incomplete_stack: Vec::with_capacity(1), incomplete_len: 0, complete_stack: Vec::with_capacity(1), complete_len: 0, string_stack: StringBufferStack::with_capacity(4), } } pub fn complete_len(&self) -> usize { self.complete_len } pub fn incomplete_len(&self) -> usize { self.incomplete_len } pub fn top(&self) -> &Triple<'_> { debug_assert!(self.complete_len > 0); &self.complete_stack[self.complete_len - 1] } pub fn top_quad<'s>(&'s self, graph_name: Option>) -> Quad<'s> { debug_assert!(self.complete_len > 0); let Triple { subject, predicate, object, } = *self.top(); Quad { subject, predicate, object, graph_name, } } pub fn push_triple_start(&mut self) { if self.incomplete_len == self.incomplete_stack.len() { self.incomplete_stack.push(Triple { subject: DUMMY_IRI.into(), predicate: DUMMY_IRI, object: DUMMY_IRI.into(), }) } #[cfg(debug_assertions)] // to ensure that dummy() assertions work { self.incomplete_stack[self.incomplete_len] = Triple { subject: DUMMY_IRI.into(), predicate: DUMMY_IRI, object: DUMMY_IRI.into(), } } self.incomplete_len += 1; } /// Push an atomic term, produced by `subject_factory`, as the subject of the current triple. /// /// # Pre-condition /// In standard RDF, any subject is acceptable. /// In RDF-star quoted triples [`Subject::Triple`] are *not allowed*. /// For adding an quoted triple, use [`TripleAllocator::push_subject_triple`] instead. pub fn try_push_subject(&mut self, subject_factory: F) -> Result<(), E> where F: FnOnce(&mut String) -> Result, E>, { debug_assert!(dummy(self.current().subject)); let buffer = self.string_stack.push(); let subject = subject_factory(buffer)?; debug_assert!(matches!( subject, Subject::NamedNode(_) | Subject::BlankNode(_) )); let subject: Subject<'static> = unsafe { transmute(subject) }; // The unsafe code above changes the lifetime parameter of subject to `'static`. // This is ok because: // * we will only expose it with a shorter lifetime, and // * this implementation guarantees that the pointed `str` lives as long as the subject self.current().subject = subject; Ok(()) } /// Push an atomic term, produced by `predicate_factory`, as the predicate of the current triple. pub fn try_push_predicate(&mut self, predicate_factory: F) -> Result<(), E> where F: FnOnce(&mut String) -> Result, E>, { debug_assert!(!dummy(self.current().subject)); debug_assert!(dummy(self.current().predicate)); let buffer = self.string_stack.push(); let predicate = predicate_factory(buffer)?; let predicate: NamedNode<'static> = unsafe { transmute(predicate) }; // The unsafe code above changes the lifetime parameter of predicate to `'static`. // This is ok because: // * we will only expose it with a shorter lifetime, and // * this implementation guarantees that the pointed `str` lives as long as the predicate self.current().predicate = predicate; Ok(()) } /// Push an atomic term, produced by `object_factory`, as the object of the current triple. /// /// # Pre-condition /// In standard RDF, any object is acceptable. /// In RDF-star quoted triples [`Subject::Triple`] are *not allowed*. /// For adding an quoted triple, use [`TripleAllocator::push_object_triple`] instead. pub fn try_push_object(&mut self, object_factory: F) -> Result<(), E> where F: for<'x> FnOnce(&'x mut String, &'x mut String) -> Result, E>, { debug_assert!(!dummy(self.current().predicate)); debug_assert!(dummy(self.current().object)); let buffers = self.string_stack.push2(); let object = object_factory(buffers.0, buffers.1)?; debug_assert!(matches!( object, Term::NamedNode(_) | Term::BlankNode(_) | Term::Literal(_) )); let object: Term<'static> = unsafe { transmute(object) }; // The unsafe code above changes the lifetime parameter of object to `'static`. // This is ok because: // * we will only expose it with a shorter lifetime, and // * this implementation guarantees that the pointed `str` lives as long as the object self.complete_triple(object); Ok(()) } /// Use the [top](TripleAllocator::top) triple of this stash as the subject of the current triple. pub fn push_subject_triple(&mut self) { debug_assert!(dummy(self.current().subject)); debug_assert!(self.complete_len > 0); let triple = &*self.complete_stack[self.complete_len - 1]; let triple: &'static Triple<'static> = unsafe { transmute(triple) }; // The unsafe code above changes the lifetime of the ref to `'static`. // This is ok because: // * we will only expose it with a shorter lifetime, and // * this implementation guarantees that the pointed `Triple` lives as long as the `Term` embedding it self.current().subject = Subject::Triple(triple); } /// Use the [top](TripleAllocator::top) triple of this stash as the object of the current triple. /// /// # Pre-condition /// The top triple must not have been pushed already as the subject. pub fn push_object_triple(&mut self) { debug_assert!(!dummy(self.current().predicate)); debug_assert!(dummy(self.current().object)); debug_assert!(self.complete_len > 0); let triple = &*self.complete_stack[self.complete_len - 1]; #[cfg(debug_assertions)] // the subject triple, if any, must not be top() debug_assert!( match self.incomplete_stack[self.incomplete_len - 1].subject { Subject::Triple(s) => { let ptr_s: *const _ = s; ptr_s != triple } _ => true, } ); let triple: &'static Triple<'static> = unsafe { transmute(triple) }; // The unsafe code above changes the lifetime of the ref to `'static`. // This is ok because: // * we will only expose it with a shorter lifetime, and // * this implementation guarantees that the pointed `Triple` lives as long as the `Term` embedding it self.complete_triple(Term::Triple(triple)); } pub fn pop_object(&mut self) { debug_assert!(self.complete_len > 0); self.complete_len -= 1; let inc_triple = *self.complete_stack[self.complete_len]; if self.incomplete_len == self.incomplete_stack.len() { self.incomplete_stack.push(inc_triple) } else { self.incomplete_stack[self.incomplete_len] = inc_triple; } self.incomplete_len += 1; match inc_triple.object { Term::NamedNode(_) | Term::BlankNode(_) | Term::Literal(_) => { // we allocate two buffers for any atomic object, even named or blank node self.string_stack.pop(); self.string_stack.pop() } Term::Triple(_) => self.pop_top_triple(), } #[cfg(debug_assertions)] // to ensure that dummy() assertions work { self.current().object = DUMMY_IRI.into(); } } pub fn pop_predicate(&mut self) { debug_assert!(dummy(self.current().object)); debug_assert!(!dummy(self.current().predicate)); self.string_stack.pop(); #[cfg(debug_assertions)] // to ensure that dummy() assertions work { self.current().predicate = DUMMY_IRI; } } pub fn pop_subject(&mut self) { debug_assert!(dummy(self.current().predicate)); debug_assert!(!dummy(self.current().subject)); match self.current().subject { Subject::NamedNode(_) | Subject::BlankNode(_) => self.string_stack.pop(), Subject::Triple(_) => self.pop_top_triple(), } #[cfg(debug_assertions)] // to ensure that dummy() assertions work { self.current().subject = DUMMY_IRI.into(); } } #[inline(always)] /// Pops the latest complete triple, and recursively pops all its constituent triples. /// Equivalent to pop_object, pop_predicate, pop_subject, pop_empty_triple pub fn pop_top_triple(&mut self) { self.pop_object(); self.pop_predicate(); self.pop_subject(); self.incomplete_len -= 1; } /// Pops the top-most empty triple, created with push_triple_start, /// but with all its components having been popped (or never pushed) #[inline(always)] pub fn pop_top_empty_triple(&mut self) { debug_assert!(self.incomplete_len > 0); debug_assert!(dummy(self.current().predicate)); debug_assert!(dummy(self.current().subject)); self.incomplete_len -= 1; } /// Pops the top-most annotation triple, i.e. /// a triple on the incomplete stack with only its subject pushed, /// and that subject is an quoted triple. /// /// The goal is to remove this triple *without* freeing the subject triple. #[inline(always)] pub fn pop_annotation_triple(&mut self) { debug_assert!(self.incomplete_len > 0); debug_assert!(dummy(self.current().predicate)); debug_assert!(!dummy(self.current().subject)); debug_assert!(matches!(self.current().subject, Subject::Triple(_))); self.incomplete_len -= 1; } pub fn clear(&mut self) { self.incomplete_len = 0; self.incomplete_stack.clear(); self.complete_len = 0; self.complete_stack.clear(); self.string_stack.clear(); } fn complete_triple(&mut self, object: Term<'static>) { self.incomplete_len -= 1; let mut triple = self.incomplete_stack[self.incomplete_len]; triple.object = object; if self.complete_len == self.complete_stack.len() { self.complete_stack.push(Box::new(triple)) } else { *self.complete_stack[self.complete_len] = triple; } self.complete_len += 1; } fn current(&mut self) -> &mut Triple<'static> { debug_assert!(self.incomplete_len > 0); &mut self.incomplete_stack[self.incomplete_len - 1] } } #[cfg(debug_assertions)] // debug assertions need DUMMY to have a static address static DUMMY_IRI: NamedNode<'static> = NamedNode { iri: "" }; #[cfg(not(debug_assertions))] // otherwise, a const is sufficient const DUMMY_IRI: NamedNode<'static> = NamedNode { iri: "" }; fn dummy<'a, T: std::fmt::Debug + Into>>(t: T) -> bool { match t.into() { Term::NamedNode(n) => { let ptr_iri: *const str = n.iri; ptr_iri == DUMMY_IRI.iri } _ => false, } } #[cfg(test)] mod test { use super::*; use std::convert::Infallible; #[cfg(debug_assertions)] #[test] fn dummy_works() { assert!(dummy(DUMMY_IRI)); let b = "foo".to_string(); let n = NamedNode { iri: &b[..0] }; assert!(DUMMY_IRI.iri == n.iri); // and yet: assert!(!dummy(n)); } fn iri<'a, T: From>>( buffer: &'a mut String, value: &str, ) -> Result { buffer.push_str(value); Ok(NamedNode { iri: &*buffer }.into()) } fn bn<'a, T: From>>( buffer: &'a mut String, value: &str, ) -> Result { buffer.push_str(value); Ok(BlankNode { id: &*buffer }.into()) } fn sl<'a, T: From>>(buffer: &'a mut String, value: &str) -> Result { buffer.push_str(value); Ok(Literal::Simple { value: &*buffer }.into()) } fn lt<'a, T: From>>( buffer1: &'a mut String, buffer2: &'a mut String, value: &str, tag: &str, ) -> Result { buffer1.push_str(value); buffer2.push_str(tag); Ok(Literal::LanguageTaggedString { value: &*buffer1, language: &*buffer2, } .into()) } fn dt<'a, T: From>>( buffer1: &'a mut String, buffer2: &'a mut String, value: &str, dt: &str, ) -> Result { buffer1.push_str(value); buffer2.push_str(dt); Ok(Literal::Typed { value: &*buffer1, datatype: NamedNode { iri: &*buffer2 }, } .into()) } #[test] fn simple_triple_w_named() -> Result<(), Infallible> { let mut ta = TripleAllocator::new(); ta.push_triple_start(); ta.try_push_subject(|b| iri(b, "a"))?; ta.try_push_predicate(|b| iri(b, "b"))?; ta.try_push_object(|b, _| iri(b, "c"))?; assert_eq!(format!("{}", ta.top()), r#" "#); Ok(()) } #[test] fn simple_triple_w_blank() -> Result<(), Infallible> { let mut ta = TripleAllocator::new(); ta.push_triple_start(); ta.try_push_subject(|b| bn(b, "a"))?; ta.try_push_predicate(|b| iri(b, "b"))?; ta.try_push_object(|b, _| bn(b, "c"))?; assert_eq!(format!("{}", ta.top()), r#"_:a _:c"#); Ok(()) } #[test] fn simple_triple_w_simple_lit() -> Result<(), Infallible> { let mut ta = TripleAllocator::new(); ta.push_triple_start(); ta.try_push_subject(|b| bn(b, "a"))?; ta.try_push_predicate(|b| iri(b, "b"))?; ta.try_push_object(|b, _| sl(b, "c"))?; assert_eq!(format!("{}", ta.top()), r#"_:a "c""#); Ok(()) } #[test] fn simple_triple_w_lang_lit() -> Result<(), Infallible> { let mut ta = TripleAllocator::new(); ta.push_triple_start(); ta.try_push_subject(|b| bn(b, "a"))?; ta.try_push_predicate(|b| iri(b, "b"))?; ta.try_push_object(|b1, b2| lt(b1, b2, "c", "en"))?; assert_eq!(format!("{}", ta.top()), r#"_:a "c"@en"#); Ok(()) } #[test] fn simple_triple_w_typed_lit() -> Result<(), Infallible> { let mut ta = TripleAllocator::new(); ta.push_triple_start(); ta.try_push_subject(|b| bn(b, "a"))?; ta.try_push_predicate(|b| iri(b, "b"))?; ta.try_push_object(|b1, b2| dt(b1, b2, "c", "d"))?; assert_eq!(format!("{}", ta.top()), r#"_:a "c"^^"#); Ok(()) } #[test] fn simple_triples_pop() -> Result<(), Infallible> { let mut ta = TripleAllocator::new(); ta.push_triple_start(); ta.try_push_subject(|b| iri(b, "a"))?; ta.try_push_predicate(|b| iri(b, "b"))?; ta.try_push_object(|b, _| iri(b, "c"))?; assert_eq!(format!("{}", ta.top()), r#" "#); ta.pop_object(); ta.try_push_object(|b, _| iri(b, "d"))?; assert_eq!(format!("{}", ta.top()), r#" "#); ta.pop_object(); ta.pop_predicate(); ta.try_push_predicate(|b| iri(b, "e"))?; ta.try_push_object(|b, _| iri(b, "f"))?; assert_eq!(format!("{}", ta.top()), r#" "#); ta.pop_object(); ta.try_push_object(|b, _| iri(b, "g"))?; assert_eq!(format!("{}", ta.top()), r#" "#); ta.pop_object(); ta.pop_predicate(); ta.pop_subject(); ta.try_push_subject(|b| iri(b, "h"))?; ta.try_push_predicate(|b| iri(b, "i"))?; ta.try_push_object(|b, _| iri(b, "j"))?; assert_eq!(format!("{}", ta.top()), r#" "#); Ok(()) } #[test] fn simple_triples_stacked() -> Result<(), Infallible> { let mut ta = TripleAllocator::new(); ta.push_triple_start(); ta.try_push_subject(|b| iri(b, "a"))?; ta.try_push_predicate(|b| iri(b, "b"))?; ta.try_push_object(|b, _| iri(b, "c"))?; assert_eq!(format!("{}", ta.top()), r#" "#); ta.push_triple_start(); ta.try_push_subject(|b| iri(b, "d"))?; ta.try_push_predicate(|b| iri(b, "e"))?; ta.try_push_object(|b, _| iri(b, "f"))?; assert_eq!(format!("{}", ta.top()), r#" "#); ta.pop_top_triple(); assert_eq!(format!("{}", ta.top()), r#" "#); ta.pop_top_triple(); assert_eq!(ta.complete_len, 0); assert_eq!(ta.incomplete_len, 0); Ok(()) } #[test] fn quoted_triple_as_subject() -> Result<(), Infallible> { let mut ta = TripleAllocator::new(); ta.push_triple_start(); { ta.push_triple_start(); ta.try_push_subject(|b| bn(b, "a"))?; ta.try_push_predicate(|b| iri(b, "b"))?; ta.try_push_object(|b, _| sl(b, "c"))?; assert_eq!(format!("{}", ta.top()), r#"_:a "c""#); } ta.push_subject_triple(); ta.try_push_predicate(|b| iri(b, "d"))?; ta.try_push_object(|b, _| sl(b, "e"))?; assert_eq!(format!("{}", ta.top()), r#"<< _:a "c" >> "e""#); Ok(()) } #[test] fn quoted_triple_as_object() -> Result<(), Infallible> { let mut ta = TripleAllocator::new(); ta.push_triple_start(); ta.try_push_subject(|b| bn(b, "a"))?; ta.try_push_predicate(|b| iri(b, "b"))?; { ta.push_triple_start(); ta.try_push_subject(|b| bn(b, "c"))?; ta.try_push_predicate(|b| iri(b, "d"))?; ta.try_push_object(|b, _| sl(b, "e"))?; assert_eq!(format!("{}", ta.top()), r#"_:c "e""#); } ta.push_object_triple(); assert_eq!(format!("{}", ta.top()), r#"_:a << _:c "e" >>"#); Ok(()) } #[test] fn quoted_triple_as_both() -> Result<(), Infallible> { let mut ta = TripleAllocator::new(); ta.push_triple_start(); { ta.push_triple_start(); ta.try_push_subject(|b| bn(b, "a"))?; ta.try_push_predicate(|b| iri(b, "b"))?; ta.try_push_object(|b, _| sl(b, "c"))?; assert_eq!(format!("{}", ta.top()), r#"_:a "c""#); } ta.push_subject_triple(); ta.try_push_predicate(|b| iri(b, "d"))?; { ta.push_triple_start(); ta.try_push_subject(|b| bn(b, "e"))?; ta.try_push_predicate(|b| iri(b, "f"))?; ta.try_push_object(|b, _| sl(b, "g"))?; assert_eq!(format!("{}", ta.top()), r#"_:e "g""#); } ta.push_object_triple(); assert_eq!( format!("{}", ta.top()), r#"<< _:a "c" >> << _:e "g" >>"# ); Ok(()) } #[test] fn quoted_triple_deep() -> Result<(), Infallible> { let mut ta = TripleAllocator::new(); ta.push_triple_start(); { ta.push_triple_start(); ta.try_push_subject(|b| bn(b, "a"))?; ta.try_push_predicate(|b| iri(b, "b"))?; { ta.push_triple_start(); ta.try_push_subject(|b| bn(b, "c"))?; ta.try_push_predicate(|b| iri(b, "d"))?; ta.try_push_object(|b, _| sl(b, "e"))?; assert_eq!(format!("{}", ta.top()), r#"_:c "e""#); } ta.push_object_triple(); assert_eq!(format!("{}", ta.top()), r#"_:a << _:c "e" >>"#); } ta.push_subject_triple(); ta.try_push_predicate(|b| iri(b, "f"))?; { ta.push_triple_start(); { ta.push_triple_start(); ta.try_push_subject(|b| bn(b, "g"))?; ta.try_push_predicate(|b| iri(b, "h"))?; ta.try_push_object(|b, _| sl(b, "i"))?; assert_eq!(format!("{}", ta.top()), r#"_:g "i""#); } ta.push_subject_triple(); ta.try_push_predicate(|b| iri(b, "j"))?; ta.try_push_object(|b, _| sl(b, "k"))?; assert_eq!(format!("{}", ta.top()), r#"<< _:g "i" >> "k""#); } ta.push_object_triple(); assert_eq!( format!("{}", ta.top()), r#"<< _:a << _:c "e" >> >> << << _:g "i" >> "k" >>"# ); ta.pop_top_triple(); assert_eq!(ta.complete_len, 0); assert_eq!(ta.incomplete_len, 0); Ok(()) } } rio-0.8.5/turtle/src/turtle.rs000066400000000000000000001603761466265456300163460ustar00rootroot00000000000000//! Implementation of Turtle and Trig RDF syntax use crate::error::*; use crate::shared::*; use crate::triple_allocator::TripleAllocator; use crate::utils::*; use oxiri::Iri; use rio_api::model::*; use rio_api::parser::{QuadsParser, TriplesParser}; use std::collections::HashMap; use std::io::BufRead; use std::str; /// A [Turtle](https://www.w3.org/TR/turtle/) and [Turtle-star](https://w3c.github.io/rdf-star/cg-spec/#turtle-star) streaming parser. /// /// It implements the [`TriplesParser`] trait. /// /// /// Count the number of people using the [`TriplesParser`] API: /// ``` /// use rio_turtle::{TurtleParser, TurtleError}; /// use rio_api::parser::TriplesParser; /// use rio_api::model::NamedNode; /// /// let file = b"@prefix schema: . /// a schema:Person ; /// schema:name \"Foo\" . /// a schema:Person ; /// schema:name \"Bar\" ."; /// /// let rdf_type = NamedNode { iri: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" }; /// let schema_person = NamedNode { iri: "http://schema.org/Person" }; /// let mut count = 0; /// TurtleParser::new(file.as_ref(), None).parse_all(&mut |t| { /// if t.predicate == rdf_type && t.object == schema_person.into() { /// count += 1; /// } /// Ok(()) as Result<(), TurtleError> /// })?; /// assert_eq!(2, count); /// # Result::<_,rio_turtle::TurtleError>::Ok(()) /// ``` pub struct TurtleParser { read: LookAheadByteReader, base_iri: Option>, prefixes: HashMap, bnode_id_generator: BlankNodeIdGenerator, triple_alloc: TripleAllocator, temp_buf: String, } impl TurtleParser { /// Builds the parser from a `BufRead` implementation, and a base IRI for relative IRI resolution. pub fn new(reader: R, base_iri: Option>) -> Self { let mut triple_alloc = TripleAllocator::new(); triple_alloc.push_triple_start(); Self { read: LookAheadByteReader::new(reader), base_iri, prefixes: HashMap::default(), bnode_id_generator: BlankNodeIdGenerator::default(), triple_alloc, temp_buf: String::default(), } } /// The list of IRI prefixes considered at the current step of the parsing. /// /// This method returns the mapping from prefix name to prefix value. /// It is empty at the beginning of the parsing and gets updated when prefixes are encountered. /// It should be full at the end of the parsing (but if a prefix is overridden, only the latest version will be returned). /// /// ``` /// use std::collections::HashMap; /// use rio_api::model::NamedNode; /// use rio_api::parser::TriplesParser; /// use rio_turtle::{TurtleError, TurtleParser}; /// /// let file = b"@prefix schema: . /// @prefix ex: . /// ex: a schema:WebSite . /// @prefix ex: . /// ex: a schema:WebSite ."; /// /// let mut parser = TurtleParser::new(file.as_ref(), None); /// assert_eq!(parser.prefixes(), &HashMap::new()); // No prefix at the beginning /// /// let _: Result<_, TurtleError> = parser.parse_step(&mut |_| panic!("We read the first prefix")); /// assert_eq!(parser.prefixes().len(), 1); /// assert_eq!(parser.prefixes()["schema"], "http://schema.org/"); /// /// let _: Result<_, TurtleError> = parser.parse_step(&mut |_| panic!("We read the second prefix")); /// assert_eq!(parser.prefixes().len(), 2); /// assert_eq!(parser.prefixes()["schema"], "http://schema.org/"); /// assert_eq!(parser.prefixes()["ex"], "http://example.com/"); /// /// let _: Result<_, TurtleError> = parser.parse_step(&mut |t| { /// assert_eq!(t.subject, NamedNode { iri: "http://example.com/" }.into()); // We read the first triple /// Ok(()) /// }); /// /// let _: Result<_, TurtleError> = parser.parse_step(&mut |_| panic!("We read the new version of the ex: prefix")); /// assert_eq!(parser.prefixes().len(), 2); /// assert_eq!(parser.prefixes()["schema"], "http://schema.org/"); /// assert_eq!(parser.prefixes()["ex"], "http://example.org/"); /// /// let _: Result<_, TurtleError> = parser.parse_step(&mut |t| { /// assert_eq!(t.subject, NamedNode { iri: "http://example.org/" }.into()); // We read the second triple /// Ok(()) /// }); /// /// # Result::<_,TurtleError>::Ok(()) /// ``` pub fn prefixes(&self) -> &HashMap { &self.prefixes } } impl TriplesParser for TurtleParser { type Error = TurtleError; fn parse_step>( &mut self, on_triple: &mut impl FnMut(Triple<'_>) -> Result<(), E>, ) -> Result<(), E> { parse_statement(self, on_triple) } fn is_end(&self) -> bool { self.read.current().is_none() } } /// A [TriG](https://www.w3.org/TR/trig/) and [TriG-star](https://w3c.github.io/rdf-star/cg-spec/#trig-star) streaming parser. /// /// It implements the `QuadsParser` trait. /// /// /// Count the number of people using the `QuadsParser` API: /// ``` /// use rio_turtle::{TriGParser, TurtleError}; /// use rio_api::parser::QuadsParser; /// use rio_api::model::NamedNode; /// /// let file = b"@prefix schema: . /// { /// a schema:Person ; /// schema:name \"Foo\" . /// a schema:Person ; /// schema:name \"Bar\" . /// }"; /// /// let rdf_type = NamedNode { iri: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" }; /// let schema_person = NamedNode { iri: "http://schema.org/Person" }; /// let mut count = 0; /// TriGParser::new(file.as_ref(), None).parse_all(&mut |t| { /// if t.predicate == rdf_type && t.object == schema_person.into() { /// count += 1; /// } /// Ok(()) as Result<(), TurtleError> /// })?; /// assert_eq!(2, count); /// # Result::<_, TurtleError>::Ok(()) /// ``` pub struct TriGParser { inner: TurtleParser, graph_name_buf: String, } impl TriGParser { /// Builds the parser from a `BufRead` implementation, and a base IRI for relative IRI resolution. pub fn new(reader: R, base_iri: Option>) -> Self { Self { inner: TurtleParser::new(reader, base_iri), graph_name_buf: String::default(), } } /// The list of IRI prefixes considered at the current step of the parsing. /// /// This method returns the mapping from prefix name to prefix value. /// It is empty at the beginning of the parsing and gets updated when prefixes are encountered. /// It should be full at the end of the parsing (but if a prefix is overridden, only the latest version will be returned). /// /// ``` /// use std::collections::HashMap; /// use rio_api::model::NamedNode; /// use rio_api::parser::QuadsParser; /// use rio_turtle::{TurtleError, TriGParser}; /// /// let file = b"@prefix schema: . /// @prefix ex: . /// ex: a schema:WebSite . /// @prefix ex: . /// ex: a schema:WebSite ."; /// /// let mut parser = TriGParser::new(file.as_ref(), None); /// assert_eq!(parser.prefixes(), &HashMap::new()); // No prefix at the beginning /// /// let _: Result<_, TurtleError> = parser.parse_step(&mut |_| panic!("We read the first prefix")); /// assert_eq!(parser.prefixes().len(), 1); /// assert_eq!(parser.prefixes()["schema"], "http://schema.org/"); /// /// let _: Result<_, TurtleError> = parser.parse_step(&mut |_| panic!("We read the second prefix")); /// assert_eq!(parser.prefixes().len(), 2); /// assert_eq!(parser.prefixes()["schema"], "http://schema.org/"); /// assert_eq!(parser.prefixes()["ex"], "http://example.com/"); /// /// let _: Result<_, TurtleError> = parser.parse_step(&mut |t| { /// assert_eq!(t.subject, NamedNode { iri: "http://example.com/" }.into()); // We read the first triple /// Ok(()) /// }); /// /// let _: Result<_, TurtleError> = parser.parse_step(&mut |_| panic!("We read the new version of the ex: prefix")); /// assert_eq!(parser.prefixes().len(), 2); /// assert_eq!(parser.prefixes()["schema"], "http://schema.org/"); /// assert_eq!(parser.prefixes()["ex"], "http://example.org/"); /// /// let _: Result<_, TurtleError> = parser.parse_step(&mut |t| { /// assert_eq!(t.subject, NamedNode { iri: "http://example.org/" }.into()); // We read the second triple /// Ok(()) /// }); /// /// # Result::<_,TurtleError>::Ok(()) /// ``` pub fn prefixes(&self) -> &HashMap { &self.inner.prefixes } } impl QuadsParser for TriGParser { type Error = TurtleError; fn parse_step>( &mut self, on_quad: &mut impl FnMut(Quad<'_>) -> Result<(), E>, ) -> Result<(), E> { parse_block_or_directive(self, on_quad) } fn is_end(&self) -> bool { self.inner.read.current().is_none() } } pub(crate) const RDF_TYPE: &str = "http://www.w3.org/1999/02/22-rdf-syntax-ns#type"; pub(crate) const RDF_NIL: &str = "http://www.w3.org/1999/02/22-rdf-syntax-ns#nil"; pub(crate) const RDF_FIRST: &str = "http://www.w3.org/1999/02/22-rdf-syntax-ns#first"; pub(crate) const RDF_REST: &str = "http://www.w3.org/1999/02/22-rdf-syntax-ns#rest"; pub(crate) const XSD_BOOLEAN: &str = "http://www.w3.org/2001/XMLSchema#boolean"; pub(crate) const XSD_DECIMAL: &str = "http://www.w3.org/2001/XMLSchema#decimal"; pub(crate) const XSD_DOUBLE: &str = "http://www.w3.org/2001/XMLSchema#double"; pub(crate) const XSD_INTEGER: &str = "http://www.w3.org/2001/XMLSchema#integer"; fn parse_statement>( parser: &mut TurtleParser, on_triple: &mut impl FnMut(Triple<'_>) -> Result<(), E>, ) -> Result<(), E> { skip_whitespace(&mut parser.read)?; if parser.read.current().is_none() { Ok(()) } else if parser.read.starts_with(b"@prefix") { parse_prefix_id( &mut parser.read, &mut parser.prefixes, &parser.base_iri, &mut parser.temp_buf, ) .map_err(E::from) } else if parser.read.starts_with(b"@base") { parser.base_iri = Some(parse_base( &mut parser.read, &mut parser.temp_buf, &parser.base_iri, )?); Ok(()) } else if parser.read.starts_with_ignore_ascii_case(b"BASE") && parser .read .ahead(4)? .map_or(true, |c| c.is_ascii_whitespace() || c == b'<') { parser.base_iri = Some(parse_sparql_base( &mut parser.read, &mut parser.temp_buf, &parser.base_iri, )?); Ok(()) } else if parser.read.starts_with_ignore_ascii_case(b"PREFIX") && parser .read .ahead(6)? .map_or(true, |c| c.is_ascii_whitespace()) { parse_sparql_prefix( &mut parser.read, &mut parser.prefixes, &parser.base_iri, &mut parser.temp_buf, ) .map_err(E::from) } else { parse_triples(parser, on_triple)?; debug_assert_eq!(parser.triple_alloc.complete_len(), 0); debug_assert_eq!(parser.triple_alloc.incomplete_len(), 1); parser.read.check_is_current(b'.')?; parser.read.consume()?; Ok(()) } } fn parse_block_or_directive>( parser: &mut TriGParser, on_quad: &mut impl FnMut(Quad<'_>) -> Result<(), E>, ) -> Result<(), E> { // [1g] trigDoc ::= (directive | block)* // [2g] block ::= triplesOrGraph | wrappedGraph | triples2 | "GRAPH" labelOrSubject wrappedGraph skip_whitespace(&mut parser.inner.read)?; if parser.inner.read.current().is_none() { Ok(()) } else if parser.inner.read.starts_with(b"@prefix") { parse_prefix_id( &mut parser.inner.read, &mut parser.inner.prefixes, &parser.inner.base_iri, &mut parser.inner.temp_buf, )?; Ok(()) } else if parser.inner.read.starts_with(b"@base") { parser.inner.base_iri = Some(parse_base( &mut parser.inner.read, &mut parser.inner.temp_buf, &parser.inner.base_iri, )?); Ok(()) } else if parser.inner.read.starts_with_ignore_ascii_case(b"BASE") && parser .inner .read .ahead(4)? .map_or(true, |c| c.is_ascii_whitespace() || c == b'<') { parser.inner.base_iri = Some(parse_sparql_base( &mut parser.inner.read, &mut parser.inner.temp_buf, &parser.inner.base_iri, )?); Ok(()) } else if parser.inner.read.starts_with_ignore_ascii_case(b"PREFIX") && parser .inner .read .ahead(6)? .map_or(true, |c| c.is_ascii_whitespace()) { parse_sparql_prefix( &mut parser.inner.read, &mut parser.inner.prefixes, &parser.inner.base_iri, &mut parser.inner.temp_buf, )?; Ok(()) } else if parser.inner.read.starts_with_ignore_ascii_case(b"GRAPH") && parser .inner .read .ahead(5)? .map_or(true, |c| c.is_ascii_whitespace() || c == b'<') { parser.inner.read.consume_many("GRAPH".len())?; skip_whitespace(&mut parser.inner.read)?; let graph_name = parse_label_or_subject(&mut parser.graph_name_buf, &mut parser.inner)?; skip_whitespace(&mut parser.inner.read)?; parse_wrapped_graph( &mut parser.inner, &mut on_triple_in_graph(on_quad, Some(graph_name)), )?; parser.graph_name_buf.clear(); Ok(()) } else if parser.inner.read.current() == Some(b'{') { parse_wrapped_graph(&mut parser.inner, &mut on_triple_in_graph(on_quad, None)) } else if parser.inner.read.current() == Some(b'[') && !is_followed_by_space_and_closing_bracket(&mut parser.inner.read)? || parser.inner.read.current() == Some(b'(') { parse_triples2(&mut parser.inner, &mut on_triple_in_graph(on_quad, None)) } else { parse_triples_or_graph(parser, on_quad) } } fn parse_triples_or_graph>( parser: &mut TriGParser, on_quad: &mut impl FnMut(Quad<'_>) -> Result<(), E>, ) -> Result<(), E> { // [3g] triplesOrGraph ::= labelOrSubject ( wrappedGraph | predicateObjectList '.' ) | embTriple predicateObjectList '.' if parser.inner.read.starts_with(b"<<") { parse_quoted_triple(&mut parser.inner)?; parser.inner.triple_alloc.push_subject_triple(); skip_whitespace(&mut parser.inner.read)?; parse_predicate_object_list(&mut parser.inner, &mut on_triple_in_graph(on_quad, None))?; parser.inner.read.check_is_current(b'.')?; parser.inner.read.consume()?; parser.inner.triple_alloc.pop_subject(); return Ok(()); } let TriGParser { inner, graph_name_buf, } = parser; let graph_name = parse_label_or_subject(graph_name_buf, inner)?; skip_whitespace(&mut inner.read)?; if inner.read.current() == Some(b'{') { parse_wrapped_graph( &mut parser.inner, &mut on_triple_in_graph(on_quad, Some(graph_name)), )?; } else { let blank = matches!(graph_name, GraphName::BlankNode(_)); inner.triple_alloc.try_push_subject(|b| { b.push_str(graph_name_buf); if blank { Ok(Subject::BlankNode(BlankNode { id: b })) } else { Ok(Subject::NamedNode(NamedNode { iri: b })) } })?; parse_predicate_object_list(&mut parser.inner, &mut on_triple_in_graph(on_quad, None))?; parser.inner.read.check_is_current(b'.')?; parser.inner.read.consume()?; parser.inner.triple_alloc.pop_subject(); debug_assert_eq!(parser.inner.triple_alloc.complete_len(), 0); debug_assert_eq!(parser.inner.triple_alloc.incomplete_len(), 1); } parser.graph_name_buf.clear(); Ok(()) } fn parse_triples2>( parser: &mut TurtleParser, on_triple: &mut impl FnMut(Triple<'_>) -> Result<(), E>, ) -> Result<(), E> { // [4g] triples2 ::= blankNodePropertyList predicateObjectList? '.' | collection predicateObjectList '.' match parser.read.current() { Some(b'[') if !is_followed_by_space_and_closing_bracket(&mut parser.read)? => { let id = parse_blank_node_property_list(parser, on_triple)?; parser.triple_alloc.try_push_subject(|b| { b.push_str(id.as_ref()); Ok(Subject::from(BlankNode { id: b })) })?; skip_whitespace(&mut parser.read)?; if parser.read.current() != Some(b'.') { parse_predicate_object_list(parser, on_triple)?; } } _ => { let collec = parse_collection(parser, on_triple)?; parser .triple_alloc .try_push_subject(|b| allocate_collection(collec, b))?; skip_whitespace(&mut parser.read)?; parse_predicate_object_list(parser, on_triple)?; } } parser.triple_alloc.pop_subject(); debug_assert_eq!(parser.triple_alloc.complete_len(), 0); debug_assert_eq!(parser.triple_alloc.incomplete_len(), 1); parser.read.check_is_current(b'.')?; parser.read.consume()?; Ok(()) } fn parse_wrapped_graph>( parser: &mut TurtleParser, on_triple: &mut impl FnMut(Triple<'_>) -> Result<(), E>, ) -> Result<(), E> { // [5g] wrappedGraph ::= '{' triplesBlock? '}' // [6g] triplesBlock ::= triples ('.' triplesBlock?)? parser.read.check_is_current(b'{')?; parser.read.consume()?; skip_whitespace(&mut parser.read)?; loop { if parser.read.current() == Some(b'}') { parser.read.consume()?; break; } parse_triples(parser, on_triple)?; debug_assert_eq!(parser.triple_alloc.complete_len(), 0); debug_assert_eq!(parser.triple_alloc.incomplete_len(), 1); match parser.read.current() { Some(b'.') => { parser.read.consume()?; skip_whitespace(&mut parser.read)?; } Some(b'}') => { parser.read.consume()?; break; } _ => parser.read.unexpected_char_error()?, } } Ok(()) } fn parse_label_or_subject<'a>( buffer: &'a mut String, parser: &mut TurtleParser, ) -> Result, TurtleError> { //[7g] labelOrSubject ::= iri | BlankNode // (split in two for the case of TriG*) let TurtleParser { read, base_iri, prefixes, bnode_id_generator, temp_buf, .. } = parser; Ok(match read.current() { Some(b'_') | Some(b'[') => parse_blank_node(read, buffer, bnode_id_generator)?.into(), _ => parse_iri(read, buffer, temp_buf, base_iri, prefixes)?.into(), }) } fn parse_prefix_id( read: &mut LookAheadByteReader, prefixes: &mut HashMap, base_iri: &Option>, temp_buffer: &mut String, ) -> Result<(), TurtleError> { // [4] prefixID ::= '@prefix' PNAME_NS IRIREF '.' read.consume_many("@prefix".len())?; skip_whitespace(read)?; let mut prefix = String::default(); parse_pname_ns(read, &mut prefix)?; skip_whitespace(read)?; let mut value = String::default(); parse_iriref_relative(read, &mut value, temp_buffer, base_iri)?; skip_whitespace(read)?; read.check_is_current(b'.')?; read.consume()?; prefixes.insert(prefix, value); Ok(()) } pub(crate) fn parse_base( read: &mut LookAheadByteReader, buffer: &mut String, base_iri: &Option>, ) -> Result, TurtleError> { // [5] base ::= '@base' IRIREF '.' read.consume_many("@base".len())?; skip_whitespace(read)?; let result = parse_base_iriref(read, buffer, base_iri)?; skip_whitespace(read)?; read.check_is_current(b'.')?; read.consume()?; Ok(result) } pub(crate) fn parse_sparql_base( read: &mut LookAheadByteReader, buffer: &mut String, base_iri: &Option>, ) -> Result, TurtleError> { // [5s] sparqlBase ::= "BASE" IRIREF read.consume_many("BASE".len())?; skip_whitespace(read)?; parse_base_iriref(read, buffer, base_iri) } fn parse_base_iriref( read: &mut LookAheadByteReader, temp_buffer: &mut String, base_iri: &Option>, ) -> Result, TurtleError> { //TODO: avoid double parsing let mut buffer = String::default(); parse_iriref_relative(read, &mut buffer, temp_buffer, base_iri)?; let result = Iri::parse(buffer.clone()) .map_err(|error| read.parse_error(TurtleErrorKind::InvalidIri { iri: buffer, error }))?; temp_buffer.clear(); Ok(result) } fn parse_sparql_prefix( read: &mut LookAheadByteReader, prefixes: &mut HashMap, base_iri: &Option>, temp_buffer: &mut String, ) -> Result<(), TurtleError> { // [6s] sparqlPrefix ::= "PREFIX" PNAME_NS IRIREF read.consume_many("PREFIX".len())?; skip_whitespace(read)?; let mut prefix = String::default(); parse_pname_ns(read, &mut prefix)?; skip_whitespace(read)?; let mut value = String::default(); parse_iriref_relative(read, &mut value, temp_buffer, base_iri)?; skip_whitespace(read)?; prefixes.insert(prefix, value); Ok(()) } fn parse_triples>( parser: &mut TurtleParser, on_triple: &mut impl FnMut(Triple<'_>) -> Result<(), E>, ) -> Result<(), E> { // [6] triples ::= subject predicateObjectList | blankNodePropertyList predicateObjectList? match parser.read.current() { Some(b'[') if !is_followed_by_space_and_closing_bracket(&mut parser.read)? => { let id = parse_blank_node_property_list(parser, on_triple)?; parser.triple_alloc.try_push_subject(|b| { b.push_str(id.as_ref()); Ok(Subject::from(BlankNode { id: b })) })?; skip_whitespace(&mut parser.read)?; if parser.read.current() != Some(b'.') && parser.read.current() != Some(b'}') { parse_predicate_object_list(parser, on_triple)?; } } _ => { parse_subject(parser, on_triple)?; skip_whitespace(&mut parser.read)?; parse_predicate_object_list(parser, on_triple)?; } } parser.triple_alloc.pop_subject(); Ok(()) } fn parse_predicate_object_list>( parser: &mut TurtleParser, on_triple: &mut impl FnMut(Triple<'_>) -> Result<(), E>, ) -> Result<(), E> { // [7] predicateObjectList ::= verb objectList (';' (verb objectList)?)* loop { parse_verb(parser)?; skip_whitespace(&mut parser.read)?; parse_object_list(parser, on_triple)?; skip_whitespace(&mut parser.read)?; parser.triple_alloc.pop_predicate(); if parser.read.current() != Some(b';') { return Ok(()); } while parser.read.current() == Some(b';') { parser.read.consume()?; skip_whitespace(&mut parser.read)?; } match parser.read.current() { Some(b'.') | Some(b']') | Some(b'}') | None => return Ok(()), Some(b'|') => return Ok(()), _ => (), //continue } } } fn parse_object_list>( parser: &mut TurtleParser, on_triple: &mut impl FnMut(Triple<'_>) -> Result<(), E>, ) -> Result<(), E> { // [8] objectList ::= object (',' object)* // or, for RDF-star // [8] objectList ::= object annotation? ( ',' object annotation? )* // [30t] annotation ::= '{|' predicateObjectList '|}' loop { parse_object(parser, on_triple)?; skip_whitespace(&mut parser.read)?; if parser.read.current() == Some(b'{') { parser.read.check_is_next(b'|')?; parser.read.consume_many(2)?; skip_whitespace(&mut parser.read)?; parser.triple_alloc.push_triple_start(); parser.triple_alloc.push_subject_triple(); parse_predicate_object_list(parser, on_triple)?; parser.read.check_is_current(b'|')?; parser.read.check_is_next(b'}')?; parser.read.consume_many(2)?; skip_whitespace(&mut parser.read)?; parser.triple_alloc.pop_annotation_triple(); } parser.triple_alloc.pop_object(); if parser.read.current() != Some(b',') { return Ok(()); } parser.read.consume()?; skip_whitespace(&mut parser.read)?; } } fn parse_verb(parser: &mut TurtleParser) -> Result<(), TurtleError> { // [9] verb ::= predicate | 'a' if parser.read.current() == Some(b'a') { match parser.read.next()? { // We check that it is not a prefixed URI Some(c) if is_possible_pn_chars_ascii(c) || c == b'.' || c == b':' || c > MAX_ASCII => { parse_predicate(parser) } _ => { parser.read.consume()?; parser .triple_alloc .try_push_predicate(|_| Ok(NamedNode { iri: RDF_TYPE })) } } } else { parse_predicate(parser) } } fn parse_subject>( parser: &mut TurtleParser, on_triple: &mut impl FnMut(Triple<'_>) -> Result<(), E>, ) -> Result<(), E> { //[10] subject ::= iri | BlankNode | collection match parser.read.current() { Some(b'_') | Some(b'[') => { let TurtleParser { read, bnode_id_generator, triple_alloc, .. } = parser; triple_alloc.try_push_subject(|b| { parse_blank_node(read, b, bnode_id_generator).map(Subject::from) })?; } Some(b'(') => { let collec = parse_collection(parser, on_triple)?; parser .triple_alloc .try_push_subject(|b| allocate_collection(collec, b))?; } _ => { if parser.read.required_current()? == b'<' && parser.read.required_next()? == b'<' { parse_quoted_triple(parser)?; parser.triple_alloc.push_subject_triple(); } else { let TurtleParser { read, base_iri, prefixes, triple_alloc, temp_buf, .. } = parser; triple_alloc.try_push_subject(|b| { parse_iri(read, b, temp_buf, base_iri, prefixes).map(Subject::from) })?; } } }; Ok(()) } fn parse_predicate(parser: &mut TurtleParser) -> Result<(), TurtleError> { //[11] predicate ::= iri let TurtleParser { read, base_iri, prefixes, triple_alloc, temp_buf, .. } = parser; triple_alloc.try_push_predicate(|b| parse_iri(read, b, temp_buf, base_iri, prefixes)) } fn parse_object>( parser: &mut TurtleParser, on_triple: &mut impl FnMut(Triple<'_>) -> Result<(), E>, ) -> Result<(), E> { //[12] object ::= iri | BlankNode | collection | blankNodePropertyList | literal match parser.read.required_current()? { b'<' => { if parser.read.required_next()? == b'<' { parse_quoted_triple(parser)?; parser.triple_alloc.push_object_triple(); } else { let TurtleParser { read, base_iri, triple_alloc, temp_buf, .. } = parser; triple_alloc.try_push_object(|b, _| { parse_iriref_relative(read, b, temp_buf, base_iri).map(Term::from) })?; } } b'(' => { let collec = parse_collection(parser, on_triple)?; parser .triple_alloc .try_push_object(|b, _| allocate_collection(collec, b).map(Term::from))?; } b'[' if !is_followed_by_space_and_closing_bracket(&mut parser.read)? => { let id = parse_blank_node_property_list(parser, on_triple)?; parser.triple_alloc.try_push_object(|b, _| { b.push_str(id.as_ref()); Ok(Term::from(BlankNode { id: b })) })?; } b'_' | b'[' => { let TurtleParser { read, bnode_id_generator, triple_alloc, .. } = parser; triple_alloc.try_push_object(|b, _| { parse_blank_node(read, b, bnode_id_generator).map(Term::from) })?; } b'"' | b'\'' => { let TurtleParser { read, base_iri, prefixes, triple_alloc, temp_buf, .. } = parser; triple_alloc.try_push_object(|b1, b2| { parse_rdf_literal(read, b1, b2, temp_buf, base_iri, prefixes).map(Term::from) })?; } b'+' | b'-' | b'.' | b'0'..=b'9' => { let TurtleParser { read, triple_alloc, .. } = parser; triple_alloc.try_push_object(|b, _| parse_numeric_literal(read, b).map(Term::from))?; } _ => { let TurtleParser { read, triple_alloc, .. } = parser; if read.starts_with(b"true") && read.ahead(4)?.map_or(true, |c| { c < MAX_ASCII && !is_possible_pn_chars_ascii(c) && c != b':' }) || read.starts_with(b"false") && read.ahead(5)?.map_or(true, |c| { c < MAX_ASCII && !is_possible_pn_chars_ascii(c) && c != b':' }) { triple_alloc .try_push_object(|b, _| parse_boolean_literal(read, b).map(Term::from))?; } else { let TurtleParser { read, prefixes, triple_alloc, .. } = parser; triple_alloc.try_push_object(|b, _| { parse_prefixed_name(read, b, prefixes).map(Term::from) })?; } } }; on_triple(*parser.triple_alloc.top()) } fn parse_blank_node_property_list>( parser: &mut TurtleParser, on_triple: &mut impl FnMut(Triple<'_>) -> Result<(), E>, ) -> Result { // [14] blankNodePropertyList ::= '[' predicateObjectList ']' parser.read.increment_stack_size()?; parser.read.check_is_current(b'[')?; parser.read.consume()?; skip_whitespace(&mut parser.read)?; let id = parser.bnode_id_generator.generate(); parser.triple_alloc.push_triple_start(); parser.triple_alloc.try_push_subject(|b| { b.push_str(id.as_ref()); Ok(Subject::from(BlankNode { id: b })) })?; loop { parse_predicate_object_list(parser, on_triple)?; skip_whitespace(&mut parser.read)?; if parser.read.current() == Some(b']') { parser.read.consume()?; break; } } parser.triple_alloc.pop_subject(); parser.triple_alloc.pop_top_empty_triple(); parser.read.decrement_stack_size(); Ok(id) } fn parse_collection>( parser: &mut TurtleParser, on_triple: &mut impl FnMut(Triple<'_>) -> Result<(), E>, ) -> Result, E> { // [15] collection ::= '(' object* ')' parser.read.increment_stack_size()?; parser.read.check_is_current(b'(')?; parser.read.consume()?; let mut root: Option = None; loop { skip_whitespace(&mut parser.read)?; if parser.read.current().is_none() { return Ok(parser.read.unexpected_char_error()?); } else if parser.read.current() != Some(b')') { let new = parser.bnode_id_generator.generate(); if root.is_none() { root = Some(new); parser.triple_alloc.push_triple_start(); } else { parser .triple_alloc .try_push_predicate(|_| Ok(NamedNode { iri: RDF_REST }))?; parser.triple_alloc.try_push_object(|b, _| { b.push_str(new.as_ref()); Ok(Term::from(BlankNode { id: b })) })?; on_triple(*parser.triple_alloc.top())?; parser.triple_alloc.pop_object(); parser.triple_alloc.pop_predicate(); parser.triple_alloc.pop_subject(); } parser.triple_alloc.try_push_subject(|b| { b.push_str(new.as_ref()); Ok(Subject::from(BlankNode { id: b })) })?; parser .triple_alloc .try_push_predicate(|_| Ok(NamedNode { iri: RDF_FIRST }))?; parse_object(parser, on_triple)?; parser.triple_alloc.pop_object(); parser.triple_alloc.pop_predicate(); } else { // trailing ')' parser.read.consume()?; if root.is_some() { parser .triple_alloc .try_push_predicate(|_| Ok(NamedNode { iri: RDF_REST }))?; parser .triple_alloc .try_push_object(|_, _| Ok(Term::from(NamedNode { iri: RDF_NIL })))?; on_triple(*parser.triple_alloc.top())?; parser.triple_alloc.pop_top_triple(); } parser.read.decrement_stack_size(); return Ok(root); } } } #[allow(clippy::unnecessary_wraps)] fn allocate_collection( collection: Option, buffer: &mut String, ) -> Result, TurtleError> { match collection { Some(id) => { buffer.push_str(id.as_ref()); Ok(BlankNode { id: buffer }.into()) } None => Ok(NamedNode { iri: RDF_NIL }.into()), } } pub(crate) fn parse_numeric_literal<'a>( read: &mut LookAheadByteReader, buffer: &'a mut String, ) -> Result, TurtleError> { // [16] NumericLiteral ::= INTEGER | DECIMAL | DOUBLE // [19] INTEGER ::= [+-]? [0-9]+ // [20] DECIMAL ::= [+-]? [0-9]* '.' [0-9]+ // [21] DOUBLE ::= [+-]? ([0-9]+ '.' [0-9]* EXPONENT | '.' [0-9]+ EXPONENT | [0-9]+ EXPONENT) // merged [+-] [0-9]* ('.' [0-9]*)? EXPONENT? let c = read.required_current()?; match c { b'+' | b'-' => { buffer.push(char::from(c)); read.consume()? } _ => (), } // We read the digits before . let mut count_before: usize = 0; while let Some(c) = read.current() { match c { b'0'..=b'9' => { buffer.push(char::from(c)); read.consume()?; count_before += 1; } _ => break, } } // We read the digits after . let count_after = if read.current() == Some(b'.') { //We check if it is not the end of a statement let stop = match read.next()? { Some(c) => !matches!(c, b'0'..=b'9' | b'e' | b'E'), None => true, }; if stop { return if count_before > 0 { Ok(Literal::Typed { value: buffer, datatype: NamedNode { iri: XSD_INTEGER }, }) } else { read.unexpected_char_error() }; } buffer.push('.'); let mut count_after = 0; read.consume()?; while let Some(c) = read.current() { match c { b'0'..=b'9' => { buffer.push(char::from(c)); read.consume()?; count_after += 1; } _ => break, } } Some(count_after) } else { None }; // End let datatype = match read.current() { Some(b'e') | Some(b'E') => { if count_before > 0 || count_after.unwrap_or(0) > 0 { parse_exponent(read, buffer)?; XSD_DOUBLE } else { return read.unexpected_char_error(); } } _ => { if count_after.is_none() && count_before > 0 { XSD_INTEGER } else if count_after.is_some() && count_after != Some(0) { XSD_DECIMAL } else { return read.unexpected_char_error(); } } }; Ok(Literal::Typed { value: buffer, datatype: NamedNode { iri: datatype }, }) } #[allow(clippy::ptr_arg)] pub(crate) fn parse_rdf_literal<'a>( read: &mut LookAheadByteReader, buffer: &'a mut String, annotation_buffer: &'a mut String, temp_buffer: &mut String, base_iri: &Option>, prefixes: &HashMap, ) -> Result, TurtleError> { // [128s] RDFLiteral ::= String (LANGTAG | '^^' iri)? parse_string(read, buffer)?; skip_whitespace(read)?; match read.current() { Some(b'@') => { parse_langtag(read, annotation_buffer)?; Ok(Literal::LanguageTaggedString { value: buffer, language: annotation_buffer, }) } Some(b'^') => { read.consume()?; read.check_is_current(b'^')?; read.consume()?; skip_whitespace(read)?; parse_iri(read, annotation_buffer, temp_buffer, base_iri, prefixes)?; Ok(Literal::Typed { value: buffer, datatype: NamedNode { iri: annotation_buffer, }, }) } _ => Ok(Literal::Simple { value: buffer }), } } pub(crate) fn parse_boolean_literal<'a>( read: &mut LookAheadByteReader, buffer: &'a mut String, ) -> Result, TurtleError> { if read.starts_with(b"true") { read.consume_many("true".len())?; buffer.push_str("true"); } else if read.starts_with(b"false") { read.consume_many("false".len())?; buffer.push_str("false"); } else { return read.unexpected_char_error(); } Ok(Literal::Typed { value: buffer, datatype: NamedNode { iri: XSD_BOOLEAN }, }) } fn parse_string( read: &mut LookAheadByteReader, buffer: &mut String, ) -> Result<(), TurtleError> { match read.current() { Some(b'"') => { if read.starts_with(b"\"\"\"") { parse_string_literal_long_quote(read, buffer) } else { parse_string_literal_quote(read, buffer) } } Some(b'\'') => { if read.starts_with(b"'''") { parse_string_literal_long_single_quote(read, buffer) } else { parse_string_literal_single_quote(read, buffer) } } _ => read.unexpected_char_error(), } } pub(crate) fn parse_iri<'a>( read: &mut LookAheadByteReader, buffer: &'a mut String, temp_buffer: &mut String, base_iri: &Option>, prefixes: &HashMap, ) -> Result, TurtleError> { // [135s] iri ::= IRIREF | PrefixedName if read.current() == Some(b'<') { parse_iriref_relative(read, buffer, temp_buffer, base_iri) } else { parse_prefixed_name(read, buffer, prefixes) } } pub(crate) fn parse_prefixed_name<'a>( read: &mut LookAheadByteReader, buffer: &'a mut String, prefixes: &HashMap, ) -> Result, TurtleError> { // [136s] PrefixedName ::= PNAME_LN | PNAME_NS // It could be written: PNAME_NS PN_LOCAL? // PNAME_NS parse_pname_ns(read, buffer)?; if let Some(value) = prefixes.get(buffer.as_str()) { buffer.clear(); buffer.push_str(value); } else { return Err(read.parse_error(TurtleErrorKind::UnknownPrefix(buffer.clone()))); } // [168s] PN_LOCAL ::= (PN_CHARS_U | ':' | [0-9] | PLX) ((PN_CHARS | '.' | ':' | PLX)* (PN_CHARS | ':' | PLX))? if let Some(c) = read.current() { match c { b'\\' => parse_pn_local_esc(read, buffer)?, b'%' => parse_percent(read, buffer)?, b':' | b'0'..=b'9' => buffer.push(char::from(c)), c if is_possible_pn_chars_u_ascii(c) => buffer.push(char::from(c)), _ => { let c = read_utf8_char(read)?; if is_possible_pn_chars_u_unicode(c) { buffer.push(c) } else { return Ok(NamedNode { iri: buffer }); } } } } else { return Ok(NamedNode { iri: buffer }); } loop { read.consume()?; match read.current() { Some(b'.') => { if has_future_char_valid_pname_local(read)? { buffer.push('.') } else { break; } } Some(b'\\') => parse_pn_local_esc(read, buffer)?, Some(b'%') => parse_percent(read, buffer)?, Some(b':') => buffer.push(':'), Some(c) if is_possible_pn_chars_ascii(c) => buffer.push(char::from(c)), _ => { let c = read_utf8_char(read)?; if is_possible_pn_chars_unicode(c) { buffer.push(c) } else { break; } } } } Ok(NamedNode { iri: buffer }) } fn has_future_char_valid_pname_local( read: &mut LookAheadByteReader, ) -> Result { let mut i = 1; loop { match read.ahead(i)? { Some(b':') | Some(b'%') | Some(b'\\') => return Ok(true), Some(c) if c > MAX_ASCII || is_possible_pn_chars_ascii(c) => return Ok(true), Some(b'.') => (), _ => return Ok(false), } i += 1; } } pub(crate) fn parse_blank_node<'a>( read: &mut LookAheadByteReader, buffer: &'a mut String, bnode_id_generator: &mut BlankNodeIdGenerator, ) -> Result, TurtleError> { // [137s] BlankNode ::= BLANK_NODE_LABEL | ANON match read.current() { Some(b'_') => { parse_blank_node_label(read, buffer)?; bnode_id_generator.disambiguate(buffer); } Some(b'[') => { parse_anon(read, buffer, bnode_id_generator)?; } _ => read.unexpected_char_error()?, } Ok(BlankNode { id: buffer }) } pub(crate) fn parse_pname_ns( read: &mut LookAheadByteReader, buffer: &mut String, ) -> Result<(), TurtleError> { // [139s] PNAME_NS ::= PN_PREFIX? ':' parse_pn_prefix(read, buffer)?; if read.current() == Some(b':') { read.consume()?; Ok(()) } else { read.unexpected_char_error() } } fn parse_exponent( read: &mut LookAheadByteReader, buffer: &mut String, ) -> Result<(), TurtleError> { // [154s] EXPONENT ::= [eE] [+-]? [0-9]+ let c = read.required_current()?; match c { b'e' | b'E' => buffer.push(char::from(c)), _ => read.unexpected_char_error()?, }; read.consume()?; if let Some(c) = read.current() { match c { b'+' | b'-' => { buffer.push(char::from(c)); read.consume()? } _ => (), } } match read.required_current()? { c @ b'0'..=b'9' => buffer.push(char::from(c)), _ => read.unexpected_char_error()?, } loop { read.consume()?; if let Some(c) = read.current() { match c { b'0'..=b'9' => buffer.push(char::from(c)), _ => return Ok(()), } } else { return Ok(()); } } } fn parse_string_literal_single_quote( read: &mut LookAheadByteReader, buffer: &mut String, ) -> Result<(), TurtleError> { // [23] STRING_LITERAL_SINGLE_QUOTE ::= "'" ([^#x27#x5C#xA#xD] | ECHAR | UCHAR)* "'" /* #x27=' #x5C=\ #xA=new line #xD=carriage return */ parse_string_literal_quote_inner(read, buffer, b'\'') } fn parse_string_literal_long_single_quote( read: &mut LookAheadByteReader, buffer: &mut String, ) -> Result<(), TurtleError> { // [24] STRING_LITERAL_LONG_SINGLE_QUOTE ::= "'''" (("'" | "''")? ([^'\] | ECHAR | UCHAR))* "'''" parse_string_literal_long_quote_inner(read, buffer, b'\'') } fn parse_string_literal_long_quote( read: &mut LookAheadByteReader, buffer: &mut String, ) -> Result<(), TurtleError> { // [25] STRING_LITERAL_LONG_QUOTE ::= '"""' (('"' | '""')? ([^"\] | ECHAR | UCHAR))* '"""' parse_string_literal_long_quote_inner(read, buffer, b'"') } fn parse_string_literal_long_quote_inner( read: &mut LookAheadByteReader, buffer: &mut String, quote: u8, ) -> Result<(), TurtleError> { let prefix = [quote; 3]; read.consume_many(2)?; loop { read.consume()?; match read.required_current()? { c if c == quote && read.starts_with(&prefix) => { read.consume_many(3)?; return Ok(()); } b'\\' => parse_echar_or_uchar(read, buffer)?, c => buffer.push(if c <= 0x7F { char::from(c) //optimization to avoid UTF-8 decoding } else { read_utf8_char(read)? }), } } } fn parse_anon( read: &mut LookAheadByteReader, buffer: &mut String, bnode_id_generator: &mut BlankNodeIdGenerator, ) -> Result<(), TurtleError> { read.check_is_current(b'[')?; read.consume()?; skip_whitespace(read)?; read.check_is_current(b']')?; read.consume()?; buffer.push_str(bnode_id_generator.generate().as_ref()); Ok(()) } fn parse_pn_prefix( read: &mut LookAheadByteReader, buffer: &mut String, ) -> Result<(), TurtleError> { // [167s] PN_PREFIX ::= PN_CHARS_BASE ((PN_CHARS | '.')* PN_CHARS)? match read.current() { Some(c) if c <= MAX_ASCII && is_possible_pn_chars_base_ascii(c) => { buffer.push(char::from(c)) } _ => { let c = read_utf8_char(read)?; if is_possible_pn_chars_base_unicode(c) { buffer.push(c) } else { return Ok(()); //PN_PREFIX is always optional } } } loop { read.consume()?; match read.current() { Some(b'.') => match read.next()? { Some(c) if is_possible_pn_chars_ascii(c) || c > MAX_ASCII => buffer.push('.'), _ => { return Ok(()); } }, Some(c) if c <= MAX_ASCII && is_possible_pn_chars_ascii(c) => { buffer.push(char::from(c)) } _ => { let c = read_utf8_char(read)?; if is_possible_pn_chars_unicode(c) { buffer.push(c) } else { return Ok(()); } } } } } fn parse_percent( read: &mut LookAheadByteReader, buffer: &mut String, ) -> Result<(), TurtleError> { // [170s] PERCENT ::= '%' HEX HEX read.check_is_current(b'%')?; buffer.push('%'); read.consume()?; parse_hex(read, buffer)?; read.consume()?; parse_hex(read, buffer)?; Ok(()) } fn parse_hex( read: &mut LookAheadByteReader, buffer: &mut String, ) -> Result<(), TurtleError> { // [171s] HEX ::= [0-9] | [A-F] | [a-f] let c = read.required_current()?; match c { b'0'..=b'9' | b'a'..=b'f' | b'A'..=b'F' => { buffer.push(char::from(c)); Ok(()) } _ => read.unexpected_char_error(), } } fn parse_pn_local_esc( read: &mut LookAheadByteReader, buffer: &mut String, ) -> Result<(), TurtleError> { // [172s] PN_LOCAL_ESC ::= '\' ('_' | '~' | '.' | '-' | '!' | '$' | '&' | "'" | '(' | ')' | '*' | '+' | ',' | ';' | '=' | '/' | '?' | '#' | '@' | '%') read.check_is_current(b'\\')?; read.consume()?; let c = read.required_current()?; match c { b'_' | b'~' | b'.' | b'-' | b'!' | b'$' | b'&' | b'\'' | b'(' | b')' | b'*' | b'+' | b',' | b';' | b'=' | b'/' | b'?' | b'#' | b'@' | b'%' => { buffer.push(char::from(c)); Ok(()) } _ => read.unexpected_char_error(), } } pub(crate) fn skip_whitespace( read: &mut LookAheadByteReader, ) -> Result<(), TurtleError> { loop { match read.current() { Some(b' ') | Some(b'\t') | Some(b'\n') | Some(b'\r') => read.consume()?, Some(b'#') => { while read.current() != Some(b'\r') && read.current() != Some(b'\n') && read.current().is_some() { read.consume()?; } } _ => return Ok(()), } } } pub(crate) fn is_followed_by_space_and_closing_bracket( read: &mut LookAheadByteReader, ) -> Result { for i in 1.. { match read.ahead(i)? { Some(b' ') | Some(b'\t') | Some(b'\n') | Some(b'\r') => (), Some(b']') => return Ok(true), _ => return Ok(false), } } Ok(false) } fn on_triple_in_graph<'a, E>( on_quad: &'a mut impl FnMut(Quad<'_>) -> Result<(), E>, graph_name: Option>, ) -> impl FnMut(Triple<'_>) -> Result<(), E> + 'a { move |t: Triple<'_>| { on_quad(Quad { subject: t.subject, predicate: t.predicate, object: t.object, graph_name, }) } } pub(crate) fn parse_quoted_triple( parser: &mut TurtleParser, ) -> Result<(), TurtleError> { // [27t] embTriple ::= '<<' embSubject verb embObject '>>' parser.read.increment_stack_size()?; parser.read.consume_many(2)?; skip_whitespace(&mut parser.read)?; parser.triple_alloc.push_triple_start(); parse_emb_subject(parser)?; skip_whitespace(&mut parser.read)?; parse_verb(parser)?; skip_whitespace(&mut parser.read)?; parse_emb_object(parser)?; skip_whitespace(&mut parser.read)?; parser.read.check_is_current(b'>')?; parser.read.check_is_next(b'>')?; parser.read.consume_many(2)?; parser.read.decrement_stack_size(); Ok(()) } pub(crate) fn parse_emb_subject( parser: &mut TurtleParser, ) -> Result<(), TurtleError> { // [28t] embSubject ::= iri | BlankNode | embTriple match parser.read.current() { Some(b'<') => { if parser.read.required_next()? == b'<' { parse_quoted_triple(parser)?; parser.triple_alloc.push_subject_triple(); Ok(()) } else { let TurtleParser { read, base_iri, triple_alloc, temp_buf, .. } = parser; triple_alloc.try_push_subject(|b| { parse_iriref_relative(read, b, temp_buf, base_iri).map(Subject::from) }) } } Some(b'_') | Some(b'[') => { let TurtleParser { read, bnode_id_generator, triple_alloc, .. } = parser; triple_alloc.try_push_subject(|b| { parse_blank_node(read, b, bnode_id_generator).map(Subject::from) }) } _ => { let TurtleParser { read, prefixes, triple_alloc, .. } = parser; triple_alloc .try_push_subject(|b| parse_prefixed_name(read, b, prefixes).map(Subject::from)) } } } pub(crate) fn parse_emb_object(parser: &mut TurtleParser) -> Result<(), TurtleError> { // [29t] embObject ::= iri | BlankNode | literal | embTriple match parser.read.required_current()? { b'<' => { if parser.read.required_next()? == b'<' { parse_quoted_triple(parser)?; parser.triple_alloc.push_object_triple(); Ok(()) } else { let TurtleParser { read, base_iri, triple_alloc, temp_buf, .. } = parser; triple_alloc.try_push_object(|b, _| { parse_iriref_relative(read, b, temp_buf, base_iri).map(Term::from) }) } } b'_' | b'[' => { let TurtleParser { read, bnode_id_generator, triple_alloc, .. } = parser; triple_alloc.try_push_object(|b, _| { parse_blank_node(read, b, bnode_id_generator).map(Term::from) }) } b'"' | b'\'' => { let TurtleParser { read, base_iri, prefixes, triple_alloc, temp_buf, .. } = parser; triple_alloc.try_push_object(|b1, b2| { parse_rdf_literal(read, b1, b2, temp_buf, base_iri, prefixes).map(Term::from) }) } b'+' | b'-' | b'.' | b'0'..=b'9' => { let TurtleParser { read, triple_alloc, .. } = parser; triple_alloc.try_push_object(|b, _| parse_numeric_literal(read, b).map(Term::from)) } _ => { let TurtleParser { read, triple_alloc, .. } = parser; if read.starts_with(b"true") && read.ahead(4)?.map_or(true, |c| { c < MAX_ASCII && !is_possible_pn_chars_ascii(c) && c != b':' }) || read.starts_with(b"false") && read.ahead(5)?.map_or(true, |c| { c < MAX_ASCII && !is_possible_pn_chars_ascii(c) && c != b':' }) { triple_alloc.try_push_object(|b, _| parse_boolean_literal(read, b).map(Term::from)) } else { let TurtleParser { read, prefixes, triple_alloc, .. } = parser; triple_alloc .try_push_object(|b, _| parse_prefixed_name(read, b, prefixes).map(Term::from)) } } } } #[cfg(test)] mod test { use super::*; #[test] fn issue_46() -> Result<(), TurtleError> { let bnid = crate::utils::BlankNodeIdGenerator::default().generate(); let ttl = format!( r#"PREFIX : :alice :knows [ :name "bob" ]. _:{} :name "charlie". "#, bnid.as_ref() ); let mut blank_subjects = vec![]; TurtleParser::new(std::io::Cursor::new(&ttl), None).parse_all(&mut |t| -> Result< (), TurtleError, > { if let Subject::BlankNode(b) = t.subject { blank_subjects.push(b.id.to_string()); } Ok(()) })?; assert_eq!(blank_subjects.len(), 2); assert_ne!(&blank_subjects[0], &blank_subjects[1]); Ok(()) } } rio-0.8.5/turtle/src/utils.rs000066400000000000000000000214041466265456300161530ustar00rootroot00000000000000use crate::error::*; use crate::MAX_STACK_SIZE; use rio_api::parser::LineBytePosition; use std::collections::VecDeque; use std::io::{BufRead, ErrorKind, Read}; use std::str; /// Reads the file in streaming pub struct LookAheadByteReader { inner: R, buffer: VecDeque, current: Option, line_number: u64, byte_number: u64, stack_size: usize, } const DEFAULT_CAPACITY: usize = 8 * 1024; impl LookAheadByteReader { pub fn new(inner: R) -> Self { let mut buffer = VecDeque::with_capacity(DEFAULT_CAPACITY); buffer.push_back(b'\n'); Self { inner, buffer, current: Some(b'\n'), line_number: 0, byte_number: 1, stack_size: 0, } } /// Returns the current byte if it exists pub fn current(&self) -> Option { self.current } /// Returns the current byte if it exists or fail if it does not pub fn required_current(&self) -> Result { self.current() .ok_or_else(|| self.parse_error(TurtleErrorKind::PrematureEof)) } /// Returns the next byte if it exists pub fn next(&mut self) -> Result, TurtleError> { self.ahead(1) } /// Returns the next byte if it exists or fail if it does not pub fn required_next(&mut self) -> Result { self.ahead(1)? .ok_or_else(|| self.parse_error(TurtleErrorKind::PrematureEof)) } /// Returns a future byte if it exists pub fn ahead(&mut self, count: usize) -> Result, TurtleError> { loop { let mut position = count; let (first, second) = self.buffer.as_slices(); if position < first.len() { return Ok(Some(first[position])); } position -= first.len(); if position < second.len() { return Ok(Some(second[position])); } if self.fill_and_is_end()? { return Ok(None); } } } /// Consumes the current char and moves to the next one pub fn consume(&mut self) -> Result<(), TurtleError> { self.consume_many(1) } /// Consumes the many chars and moves to the next one pub fn consume_many(&mut self, count: usize) -> Result<(), TurtleError> { for _ in 0..count { if self.buffer.is_empty() { self.fill_and_is_end()?; } if let Some(c) = self.buffer.pop_front() { if c == b'\n' { self.line_number += 1; self.byte_number = 1; } else { self.byte_number += 1; } } else { return Err(self.parse_error(TurtleErrorKind::PrematureEof)); } } if self.buffer.is_empty() { self.fill_and_is_end()?; } self.current = self.buffer.front().cloned(); Ok(()) } /// Returns the line number of the current byte starting at 1 pub fn line_number(&self) -> u64 { self.line_number } /// Returns the byte number of the current byte in the line starting at 1 pub fn byte_number(&self) -> u64 { self.byte_number } /// Returns if the current buffer starts with a given byte string. Does not work cross line boundaries pub fn starts_with(&mut self, prefix: &[u8]) -> bool { self.starts_with_with_eq(prefix, |a, b| a == b) } /// Returns if the current buffer starts with a given byte string in an ASCII case insensitive manner. /// Does not work cross line boundaries pub fn starts_with_ignore_ascii_case(&mut self, prefix: &[u8]) -> bool { self.starts_with_with_eq(prefix, |a, b| a.eq_ignore_ascii_case(b)) } pub fn unexpected_char_error(&self) -> Result { Err(self.parse_error(match self.current() { Some(c) => TurtleErrorKind::UnexpectedByte(c), None => TurtleErrorKind::PrematureEof, })) } pub fn check_is_current(&self, expected: u8) -> Result<(), TurtleError> { if self.current() == Some(expected) { Ok(()) } else { self.unexpected_char_error() } } pub fn check_is_next(&mut self, expected: u8) -> Result<(), TurtleError> { if self.next()? == Some(expected) { Ok(()) } else { self.unexpected_char_error() } } pub fn parse_error(&self, kind: TurtleErrorKind) -> TurtleError { TurtleError { kind, position: Some(LineBytePosition::new( self.line_number(), self.byte_number(), )), } } pub fn consume_line_end(&mut self) -> Result<(), TurtleError> { loop { match self.current() { None => return Ok(()), Some(b'\n') => return self.consume(), _ => self.consume()?, } } } fn fill_and_is_end(&mut self) -> Result { loop { let mut buf = [0; DEFAULT_CAPACITY]; //TODO: increase? match self.inner.read(&mut buf) { Ok(0) => return Ok(true), Ok(read) => { self.buffer.extend(buf[..read].iter()); return Ok(false); } Err(e) if e.kind() == ErrorKind::Interrupted => {} Err(e) => return Err(e.into()), } } } fn starts_with_with_eq(&mut self, prefix: &[u8], eq: impl Fn(&[u8], &[u8]) -> bool) -> bool { loop { let (first, second) = self.buffer.as_slices(); if prefix.len() <= first.len() { return eq(&first[..prefix.len()], prefix); } else if prefix.len() <= first.len() + second.len() { return eq(first, &prefix[..first.len()]) && eq( &second[..prefix.len() - first.len()], &prefix[first.len()..], ); } if let Ok(true) | Err(_) = self.fill_and_is_end() { return false; } } } pub fn increment_stack_size(&mut self) -> Result<(), TurtleError> { self.stack_size += 1; if self.stack_size > MAX_STACK_SIZE { Err(self.parse_error(TurtleErrorKind::StackOverflow)) } else { Ok(()) } } pub fn decrement_stack_size(&mut self) { self.stack_size -= 1; } } #[derive(Default)] pub struct StringBufferStack { inner: Vec, len: usize, } impl StringBufferStack { pub fn with_capacity(cap: usize) -> Self { StringBufferStack { inner: Vec::with_capacity(cap), len: 0, } } pub fn push(&mut self) -> &mut String { self.len += 1; if self.len > self.inner.len() { self.inner.push(String::default()) } &mut self.inner[self.len - 1] } pub fn push2(&mut self) -> (&mut String, &mut String) { self.push(); self.push(); let (a1, a2) = self.inner.split_at_mut(self.len - 1); (&mut a1[a1.len() - 1], &mut a2[0]) } pub fn pop(&mut self) { self.inner[self.len - 1].clear(); self.len -= 1; } pub fn clear(&mut self) { self.inner.clear(); self.len = 0; } } #[derive(Default)] pub struct BlankNodeIdGenerator { //TODO: avoid collisions counter: u64, } impl BlankNodeIdGenerator { pub fn generate(&mut self) -> BlankNodeId { let mut id: [u8; 12] = [ // IMPORTANT: if this is modified, disambiguate must be updated accordingly b'r', b'i', b'o', b'g', b'0', b'0', b'0', b'0', b'0', b'0', b'0', b'0', ]; self.counter += 1; write_u64_to_slice(self.counter, &mut id[4..]); BlankNodeId { id } } /// If label could have been generated by self, turn it into a label that could not. pub fn disambiguate(&self, label: &mut String) { const SUFFIX: u8 = b'd'; let bytes = label.as_bytes(); if bytes.len() >= 12 && &bytes[..4] == b"riog" && bytes[4..12].iter().all(u8::is_ascii_digit) && bytes[12..].iter().all(|b| b == &SUFFIX) { label.push(SUFFIX as char) } } } fn write_u64_to_slice(mut v: u64, s: &mut [u8]) { for i in (0..s.len()).rev() { s[i] = b'0' + (v % 10) as u8; v /= 10; } } #[derive(Eq, PartialEq, Copy, Clone, Hash)] pub struct BlankNodeId { id: [u8; 12], } impl AsRef for BlankNodeId { fn as_ref(&self) -> &str { // We know what id is and it's always valid UTF8 str::from_utf8(&self.id).unwrap() } } rio-0.8.5/turtle/tests/000077500000000000000000000000001466265456300150175ustar00rootroot00000000000000rio-0.8.5/turtle/tests/recovery.rs000066400000000000000000000030051466265456300172210ustar00rootroot00000000000000use rio_api::parser::*; use rio_turtle::*; use std::io::Cursor; #[test] fn ntriples_error_recovery() { let data = " .\n < .\n .\n .\n ."; let mut count = 0; let mut count_err = 0; let mut parser = NTriplesParser::new(Cursor::new(&data)); while !parser.is_end() { let step = parser.parse_step(&mut |_| { count += 1; Ok(()) as Result<(), TurtleError> }); if step.is_err() { count_err += 1; } } assert_eq!(count, 3); assert_eq!(count_err, 2); } #[test] fn nquads_error_recovery() { let data = " .\n < .\n .\n .\n ."; let mut count = 0; let mut count_err = 0; let mut parser = NQuadsParser::new(Cursor::new(&data)); while !parser.is_end() { let step = parser.parse_step(&mut |_| { count += 1; Ok(()) as Result<(), TurtleError> }); if step.is_err() { count_err += 1; } } assert_eq!(count, 3); assert_eq!(count_err, 2); } rio-0.8.5/turtle/tests/roundtrip.rs000066400000000000000000000123751466265456300174230ustar00rootroot00000000000000use rio_api::formatter::{QuadsFormatter, TriplesFormatter}; use rio_api::model::*; use rio_api::parser::*; use rio_turtle::*; use std::io::Cursor; #[test] fn ntriples_roundtrip() -> Result<(), TurtleError> { let graph = example_graph(true); let mut formatter = NTriplesFormatter::new(Vec::default()); for t in &graph { formatter.format(t)?; } let nt = formatter.finish()?; let mut count = 0; NTriplesParser::new(Cursor::new(&nt)).parse_all(&mut |_| { count += 1; Ok(()) as Result<(), TurtleError> })?; assert_eq!(count, graph.len()); Ok(()) } #[test] fn nquads_roundtrip() -> Result<(), TurtleError> { let dataset = example_dataset(true); let mut formatter = NQuadsFormatter::new(Vec::default()); for q in &dataset { formatter.format(q)?; } let nt = formatter.finish()?; let mut count = 0; NQuadsParser::new(Cursor::new(&nt)).parse_all(&mut |_| { count += 1; Ok(()) as Result<(), TurtleError> })?; assert_eq!(count, dataset.len()); Ok(()) } #[test] fn turtle_roundtrip() -> Result<(), TurtleError> { let graph = example_graph(true); let mut formatter = TurtleFormatter::new(Vec::default()); for t in &graph { formatter.format(t)?; } let turtle = formatter.finish()?; let mut count = 0; TurtleParser::new(Cursor::new(&turtle), None).parse_all(&mut |_| { count += 1; Ok(()) as Result<(), TurtleError> })?; assert_eq!(count, graph.len()); Ok(()) } #[test] fn trig_roundtrip() -> Result<(), TurtleError> { let dataset = example_dataset(true); let mut formatter = TriGFormatter::new(Vec::default()); for q in &dataset { formatter.format(q)?; } let trig = formatter.finish()?; let mut count = 0; TriGParser::new(Cursor::new(&trig), None).parse_all(&mut |_| { count += 1; Ok(()) as Result<(), TurtleError> })?; assert_eq!(count, dataset.len()); Ok(()) } #[cfg(feature = "generalized")] #[test] fn gtrig_roundtrip() -> Result<(), TurtleError> { let dataset = example_dataset(false); let mut formatter = TriGFormatter::new(Vec::default()); for q in &dataset { formatter.format(q)?; } let trig = formatter.finish()?; let mut count = 0; GTriGParser::new(Cursor::new(&trig), None).parse_all(&mut |_| { count += 1; Ok(()) as Result<(), TurtleError> })?; assert_eq!(count, dataset.len()); Ok(()) } const TRIPLE: Triple<'static> = Triple { subject: Subject::NamedNode(NamedNode { iri: "http://example.com/s", }), predicate: NamedNode { iri: "http://example.com/p", }, object: Term::NamedNode(NamedNode { iri: "http://example.com/o", }), }; fn example_graph(rdf_star: bool) -> Vec> { let foo_node = NamedNode { iri: "http://example.com/foo", }; let bar_node = NamedNode { iri: "http://example.com/bar", }; let bnode = BlankNode { id: "foobar" }; let simple = Literal::Simple { value: "simp\"le" }; let language = Literal::LanguageTaggedString { value: "sim\"le", language: "en", }; let datatype = Literal::Typed { value: "sim\"le", datatype: NamedNode { iri: "http://example.com/dt", }, }; let mut triples = vec![ Triple { subject: foo_node.into(), predicate: bar_node, object: bar_node.into(), }, Triple { subject: foo_node.into(), predicate: bar_node, object: bnode.into(), }, Triple { subject: foo_node.into(), predicate: bar_node, object: simple.into(), }, Triple { subject: foo_node.into(), predicate: bar_node, object: language.into(), }, Triple { subject: foo_node.into(), predicate: foo_node, object: datatype.into(), }, Triple { subject: bar_node.into(), predicate: bar_node, object: bar_node.into(), }, ]; if rdf_star { triples.push(Triple { subject: (&TRIPLE).into(), predicate: bar_node, object: simple.into(), }); triples.push(Triple { subject: foo_node.into(), predicate: bar_node, object: (&TRIPLE).into(), }); } triples } fn example_dataset(rdf_star: bool) -> Vec> { example_graph(rdf_star) .into_iter() .flat_map(|t| { vec![ Quad { subject: t.subject, predicate: t.predicate, object: t.object, graph_name: None, }, Quad { subject: t.subject, predicate: t.predicate, object: t.object, graph_name: Some( NamedNode { iri: "http://example/", } .into(), ), }, ] .into_iter() }) .collect() } rio-0.8.5/typos.toml000066400000000000000000000001601466265456300144060ustar00rootroot00000000000000[files] extend-exclude = ["**/*.svg"] [default.extend-words] pn = "pn" # Common abbreviation in Turtle grammar rio-0.8.5/xml/000077500000000000000000000000001466265456300131365ustar00rootroot00000000000000rio-0.8.5/xml/Cargo.toml000066400000000000000000000007651466265456300150760ustar00rootroot00000000000000[package] name = "rio_xml" version = "0.8.5" authors = ["Tpt "] license = "Apache-2.0" readme = "../README.md" keywords = ["RDF", "XML", "parser"] repository = "https://github.com/oxigraph/rio" description = """ RDF/XML parser and serializer """ edition = "2021" rust-version = "1.75" [package.metadata.docs.rs] all-features = true [features] default = [] [dependencies] oxilangtag = "0.1" oxiri = "0.2" rio_api = { version = "0.8", path = "../api" } quick-xml = "0.36" rio-0.8.5/xml/src/000077500000000000000000000000001466265456300137255ustar00rootroot00000000000000rio-0.8.5/xml/src/error.rs000066400000000000000000000061761466265456300154360ustar00rootroot00000000000000use oxilangtag::LanguageTagParseError; use oxiri::IriParseError; use rio_api::parser::{LineBytePosition, ParseError}; use std::error::Error; use std::sync::Arc; use std::{fmt, io}; /// Error that might be returned during parsing. /// /// It might wrap an IO error or be a parsing error. #[derive(Debug)] pub struct RdfXmlError { pub(crate) kind: RdfXmlErrorKind, } #[derive(Debug)] pub(crate) enum RdfXmlErrorKind { Xml(quick_xml::Error), XmlAttribute(quick_xml::events::attributes::AttrError), InvalidIri { iri: String, error: IriParseError, }, InvalidLanguageTag { tag: String, error: LanguageTagParseError, }, Other(String), } impl RdfXmlError { pub(crate) fn msg(msg: impl Into) -> Self { Self { kind: RdfXmlErrorKind::Other(msg.into()), } } } impl fmt::Display for RdfXmlError { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match &self.kind { RdfXmlErrorKind::Xml(error) => error.fmt(f), RdfXmlErrorKind::XmlAttribute(error) => error.fmt(f), RdfXmlErrorKind::InvalidIri { iri, error } => { write!(f, "error while parsing IRI '{}': {}", iri, error) } RdfXmlErrorKind::InvalidLanguageTag { tag, error } => { write!(f, "error while parsing language tag '{}': {}", tag, error) } RdfXmlErrorKind::Other(message) => write!(f, "{}", message), } } } impl Error for RdfXmlError { fn source(&self) -> Option<&(dyn Error + 'static)> { match &self.kind { RdfXmlErrorKind::Xml(error) => Some(error), RdfXmlErrorKind::XmlAttribute(error) => Some(error), RdfXmlErrorKind::InvalidIri { error, .. } => Some(error), RdfXmlErrorKind::InvalidLanguageTag { error, .. } => Some(error), RdfXmlErrorKind::Other(_) => None, } } } impl ParseError for RdfXmlError { fn textual_position(&self) -> Option { None } } impl From for RdfXmlError { fn from(error: quick_xml::Error) -> Self { Self { kind: RdfXmlErrorKind::Xml(error), } } } impl From for RdfXmlError { fn from(error: quick_xml::events::attributes::AttrError) -> Self { Self { kind: RdfXmlErrorKind::XmlAttribute(error), } } } impl From for RdfXmlError { fn from(error: io::Error) -> Self { Self { kind: RdfXmlErrorKind::Xml(quick_xml::Error::Io(Arc::new(error))), } } } impl From for io::Error { fn from(error: RdfXmlError) -> Self { match error.kind { RdfXmlErrorKind::Xml(error) => match error { quick_xml::Error::Io(error) => io::Error::new(error.kind(), error), error => io::Error::new(io::ErrorKind::InvalidData, error), }, RdfXmlErrorKind::Other(error) => io::Error::new(io::ErrorKind::InvalidData, error), _ => io::Error::new(io::ErrorKind::InvalidData, error), } } } rio-0.8.5/xml/src/formatter.rs000066400000000000000000000167121466265456300163050ustar00rootroot00000000000000use crate::model::OwnedSubject; use crate::utils::*; use quick_xml::events::*; use quick_xml::Writer; use rio_api::formatter::TriplesFormatter; use rio_api::model::*; use std::convert::TryInto; use std::io; use std::io::Write; /// A [RDF/XML](https://www.w3.org/TR/rdf-syntax-grammar/) formatter. /// /// It implements the `TriplesFormatter` trait. /// /// Write some triples using the `TriplesFormatter` API into a `Vec` buffer: /// ``` /// use rio_xml::RdfXmlFormatter; /// use rio_api::formatter::TriplesFormatter; /// use rio_api::model::{NamedNode, Triple}; /// /// let mut formatter = RdfXmlFormatter::new(Vec::default())?; /// formatter.format(&Triple { /// subject: NamedNode { iri: "http://example.com/foo" }.into(), /// predicate: NamedNode { iri: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" }.into(), /// object: NamedNode { iri: "http://schema.org/Person" }.into() /// })?; /// let _xml = formatter.finish()?; /// # std::io::Result::Ok(()) /// ``` pub struct RdfXmlFormatter { writer: Writer, current_subject: Option, } impl RdfXmlFormatter { /// Builds a new formatter from a `Write` implementation and starts writing pub fn new(write: W) -> io::Result { Self { writer: Writer::new(write), current_subject: None, } .write_start() } /// Builds a new formatter from a `Write` implementation and starts writing. /// /// The output is indented with `indentation_size` spaces. pub fn with_indentation(write: W, indentation_size: usize) -> io::Result { Self { writer: Writer::new_with_indent(write, b' ', indentation_size), current_subject: None, } .write_start() } fn write_start(mut self) -> io::Result { self.writer .write_event(Event::Decl(BytesDecl::new("1.0", Some("UTF-8"), None))) .map_err(map_err)?; let mut rdf_open = BytesStart::new("rdf:RDF"); rdf_open.push_attribute(("xmlns:rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#")); self.writer .write_event(Event::Start(rdf_open)) .map_err(map_err)?; Ok(self) } /// Finishes writing and returns the underlying `Write` pub fn finish(mut self) -> io::Result { if self.current_subject.is_some() { self.writer .write_event(Event::End(BytesEnd::new("rdf:Description"))) .map_err(map_err)?; } self.writer .write_event(Event::End(BytesEnd::new("rdf:RDF"))) .map_err(map_err)?; let mut inner = self.writer.into_inner(); inner.flush()?; Ok(inner) } } impl TriplesFormatter for RdfXmlFormatter { type Error = io::Error; fn format(&mut self, triple: &Triple<'_>) -> io::Result<()> { // We open a new rdf:Description if useful if self.current_subject.as_ref().map(|v| v.into()) != Some(triple.subject) { if self.current_subject.is_some() { self.writer .write_event(Event::End(BytesEnd::new("rdf:Description"))) .map_err(map_err)?; } let mut description_open = BytesStart::new("rdf:Description"); match triple.subject { Subject::NamedNode(n) => description_open.push_attribute(("rdf:about", n.iri)), Subject::BlankNode(n) => description_open.push_attribute(("rdf:nodeID", n.id)), _ => { return Err(io::Error::new( io::ErrorKind::InvalidInput, "RDF/XML only supports named or blank subject", )) } } self.writer .write_event(Event::Start(description_open)) .map_err(map_err)?; } let (prop_prefix, prop_value) = split_iri(triple.predicate.iri); let (prop_qname, prop_xmlns) = if prop_value.is_empty() { ("prop:", ("xmlns:prop", prop_prefix)) } else { (prop_value, ("xmlns", prop_prefix)) }; let mut property_open = BytesStart::new(prop_qname); property_open.push_attribute(prop_xmlns); let content = match triple.object { Term::NamedNode(n) => { property_open.push_attribute(("rdf:resource", n.iri)); None } Term::BlankNode(n) => { property_open.push_attribute(("rdf:nodeID", n.id)); None } Term::Literal(l) => match l { Literal::Simple { value } => Some(value), Literal::LanguageTaggedString { value, language } => { property_open.push_attribute(("xml:lang", language)); Some(value) } Literal::Typed { value, datatype } => { property_open.push_attribute(("rdf:datatype", datatype.iri)); Some(value) } }, _ => { return Err(io::Error::new( io::ErrorKind::InvalidInput, "RDF/XML only supports named, blank or literal object", )) } }; if let Some(content) = content { self.writer .write_event(Event::Start(property_open)) .map_err(map_err)?; self.writer .write_event(Event::Text(BytesText::new(content))) .map_err(map_err)?; self.writer .write_event(Event::End(BytesEnd::new(prop_qname))) .map_err(map_err)?; } else { self.writer .write_event(Event::Empty(property_open)) .map_err(map_err)?; } self.current_subject = Some(triple.subject.try_into()?); Ok(()) } } fn map_err(error: quick_xml::Error) -> io::Error { if let quick_xml::Error::Io(error) = error { io::Error::new(error.kind(), error) } else { io::Error::new(io::ErrorKind::Other, error) } } fn split_iri(iri: &str) -> (&str, &str) { if let Some(position_base) = iri.rfind(|c| !is_name_char(c) || c == ':') { if let Some(position_add) = iri[position_base..].find(|c| is_name_start_char(c) && c != ':') { ( &iri[..position_base + position_add], &iri[position_base + position_add..], ) } else { (iri, "") } } else { (iri, "") } } #[cfg(test)] mod test { use super::*; #[test] fn test_split_iri() { assert_eq!( split_iri("http://schema.org/Person"), ("http://schema.org/", "Person") ); assert_eq!(split_iri("http://schema.org/"), ("http://schema.org/", "")); } #[cfg(feature = "rio_api/star")] #[test] fn formatting_rdf_star_fails_cleanly() { use rio_api::formatter::TriplesFormatter; let iri = NamedNode { iri: "tag:iri" }; let triple = Triple { subject: Triple { subject: iri.into(), predicate: iri, object: iri.into(), } .into(), predicate: iri, object: iri.into(), }; let mut fmt = RdfXmlFormatter::new(std::io::sink()).unwrap(); let res = fmt.format(&triple).and_then(|_| fmt.finish()); assert!(res.is_err()); } } rio-0.8.5/xml/src/lib.rs000066400000000000000000000035111466265456300150410ustar00rootroot00000000000000//! Implementation of an [RDF/XML](https://www.w3.org/TR/rdf-syntax-grammar/) streaming parser. //! //! //! //! This library is going to be deprecated. //! [oxrdfxml](https://crates.io/crates/oxrdfxml) is currently in development to replace it. //! //! //! How to read a file `foo.rdf` and count the number of `rdf:type` triples: //! ```no_run //! use rio_xml::{RdfXmlParser, RdfXmlError}; //! use rio_api::parser::TriplesParser; //! use rio_api::model::NamedNode; //! use std::io::BufReader; //! use std::fs::File; //! use oxiri::Iri; //! //! let rdf_type = NamedNode { iri: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" }; //! let mut count = 0; //! RdfXmlParser::new(BufReader::new(File::open("foo.rdf")?), Some(Iri::parse("file:foo.rdf".to_owned()).unwrap())).parse_all(&mut |t| { //! if t.predicate == rdf_type { //! count += 1; //! } //! Ok(()) as Result<(), RdfXmlError> //! })?; //! # Result::<_,RdfXmlError>::Ok(()) //! ``` //! //! Write some triples in RDF/XML into a `Vec` buffer: //! ``` //! use rio_xml::RdfXmlFormatter; //! use rio_api::formatter::TriplesFormatter; //! use rio_api::model::{NamedNode, Triple}; //! //! let mut formatter = RdfXmlFormatter::new(Vec::default())?; //! formatter.format(&Triple { //! subject: NamedNode { iri: "http://example.com/foo" }.into(), //! predicate: NamedNode { iri: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" }.into(), //! object: NamedNode { iri: "http://schema.org/Person" }.into() //! })?; //! let _xml = formatter.finish()?; //! # std::io::Result::Ok(()) //! ``` #![deny(unsafe_code)] #![cfg_attr(docsrs, feature(doc_auto_cfg))] #![doc(test(attr(deny(warnings))))] mod error; mod formatter; mod model; mod parser; mod utils; pub use error::RdfXmlError; pub use formatter::RdfXmlFormatter; pub use parser::RdfXmlParser; rio-0.8.5/xml/src/model.rs000066400000000000000000000107741466265456300154040ustar00rootroot00000000000000use rio_api::model::*; #[derive(Eq, PartialEq, Ord, PartialOrd, Debug, Clone, Hash)] pub struct OwnedNamedNode { pub iri: String, } impl From> for OwnedNamedNode { fn from(n: NamedNode<'_>) -> Self { Self { iri: n.iri.to_owned(), } } } impl<'a> From<&'a OwnedNamedNode> for NamedNode<'a> { fn from(n: &'a OwnedNamedNode) -> Self { Self { iri: &n.iri } } } #[derive(Eq, PartialEq, Ord, PartialOrd, Debug, Clone, Hash)] pub struct OwnedBlankNode { pub id: String, } impl From> for OwnedBlankNode { fn from(n: BlankNode<'_>) -> Self { Self { id: n.id.to_owned(), } } } impl<'a> From<&'a OwnedBlankNode> for BlankNode<'a> { fn from(n: &'a OwnedBlankNode) -> Self { Self { id: &n.id } } } #[derive(Eq, PartialEq, Ord, PartialOrd, Debug, Clone, Hash)] enum OwnedLiteral { Simple { value: String, }, LanguageTaggedString { value: String, language: String, }, Typed { value: String, datatype: OwnedNamedNode, }, } impl From> for OwnedLiteral { fn from(n: Literal<'_>) -> Self { match n { Literal::Simple { value } => OwnedLiteral::Simple { value: value.to_owned(), }, Literal::LanguageTaggedString { value, language } => { OwnedLiteral::LanguageTaggedString { value: value.to_owned(), language: language.to_owned(), } } Literal::Typed { value, datatype } => OwnedLiteral::Typed { value: value.to_owned(), datatype: datatype.into(), }, } } } impl<'a> From<&'a OwnedLiteral> for Literal<'a> { fn from(n: &'a OwnedLiteral) -> Self { match n { OwnedLiteral::Simple { value } => Literal::Simple { value }, OwnedLiteral::LanguageTaggedString { value, language } => { Literal::LanguageTaggedString { value, language } } OwnedLiteral::Typed { value, datatype } => Literal::Typed { value, datatype: datatype.into(), }, } } } #[derive(Eq, PartialEq, Ord, PartialOrd, Debug, Clone, Hash)] pub enum OwnedSubject { NamedNode(OwnedNamedNode), BlankNode(OwnedBlankNode), } impl std::convert::TryFrom> for OwnedSubject { type Error = crate::RdfXmlError; fn try_from(t: Subject<'_>) -> Result { match t { Subject::NamedNode(n) => Ok(OwnedSubject::NamedNode(n.into())), Subject::BlankNode(n) => Ok(OwnedSubject::BlankNode(n.into())), _ => Err(crate::RdfXmlError::msg( "RDF/XML only supports named or blank subject", )), } } } impl<'a> From<&'a OwnedSubject> for Subject<'a> { fn from(t: &'a OwnedSubject) -> Self { match t { OwnedSubject::NamedNode(n) => Subject::NamedNode(n.into()), OwnedSubject::BlankNode(n) => Subject::BlankNode(n.into()), } } } impl From for OwnedSubject { fn from(node: OwnedNamedNode) -> Self { OwnedSubject::NamedNode(node) } } impl From for OwnedSubject { fn from(node: OwnedBlankNode) -> Self { OwnedSubject::BlankNode(node) } } #[derive(Eq, PartialEq, Ord, PartialOrd, Debug, Clone, Hash)] enum OwnedTerm { NamedNode(OwnedNamedNode), BlankNode(OwnedBlankNode), Literal(OwnedLiteral), } impl<'a> From<&'a OwnedTerm> for Term<'a> { fn from(t: &'a OwnedTerm) -> Self { match t { OwnedTerm::NamedNode(n) => Term::NamedNode(n.into()), OwnedTerm::BlankNode(n) => Term::BlankNode(n.into()), OwnedTerm::Literal(n) => Term::Literal(n.into()), } } } impl From for OwnedTerm { fn from(node: OwnedNamedNode) -> Self { OwnedTerm::NamedNode(node) } } impl From for OwnedTerm { fn from(node: OwnedBlankNode) -> Self { OwnedTerm::BlankNode(node) } } impl From for OwnedTerm { fn from(literal: OwnedLiteral) -> Self { OwnedTerm::Literal(literal) } } impl From for OwnedTerm { fn from(resource: OwnedSubject) -> Self { match resource { OwnedSubject::NamedNode(node) => OwnedTerm::NamedNode(node), OwnedSubject::BlankNode(node) => OwnedTerm::BlankNode(node), } } } rio-0.8.5/xml/src/parser.rs000066400000000000000000001221051466265456300155700ustar00rootroot00000000000000use crate::error::{RdfXmlError, RdfXmlErrorKind}; use crate::model::*; use crate::utils::*; use oxilangtag::LanguageTag; use oxiri::Iri; use quick_xml::escape::resolve_xml_entity; use quick_xml::escape::unescape_with; use quick_xml::events::attributes::Attribute; use quick_xml::events::*; use quick_xml::name::{LocalName, QName, ResolveResult}; use quick_xml::{NsReader, Writer}; use rio_api::model::*; use rio_api::parser::TriplesParser; use std::collections::{HashMap, HashSet}; use std::convert::TryInto; use std::io::BufRead; use std::str; /// A [RDF/XML](https://www.w3.org/TR/rdf-syntax-grammar/) streaming parser. /// /// It implements the [`TriplesParser`] trait. /// It reads the file in streaming. /// It does not keep data in memory except a stack for handling nested XML tags, and a set of all /// seen `rdf:ID`s to detect duplicate ids and fail according to the specification. /// /// Its performances are not optimized yet and hopefully could be significantly enhanced by reducing the /// number of allocations and copies done by the parser. /// /// Count the number of people using the [`TriplesParser`] API without proper error management: /// ``` /// use rio_xml::{RdfXmlParser, RdfXmlError}; /// use rio_api::parser::TriplesParser; /// use rio_api::model::NamedNode; /// /// let file = b" /// /// /// /// Foo /// /// /// "; /// /// let rdf_type = NamedNode { iri: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" }; /// let schema_person = NamedNode { iri: "http://schema.org/Person" }; /// let mut count = 0; /// RdfXmlParser::new(file.as_ref(), None).parse_all(&mut |t| { /// if t.predicate == rdf_type && t.object == schema_person.into() { /// count += 1; /// } /// Ok(()) as Result<(), RdfXmlError> /// })?; /// assert_eq!(2, count); /// # Result::<_,RdfXmlError>::Ok(()) /// ``` pub struct RdfXmlParser { reader: RdfXmlReader, reader_buffer: Vec, is_end: bool, } impl RdfXmlParser { /// Builds the parser from a `BufRead` implementation, and a base IRI for relative IRI resolution. pub fn new(reader: R, base_iri: Option>) -> Self { let mut reader = NsReader::from_reader(reader); reader.config_mut().expand_empty_elements = true; Self { reader: RdfXmlReader { reader, state: vec![RdfXmlState::Doc { base_iri }], bnode_id_generator: BlankNodeIdGenerator::default(), custom_entities: HashMap::default(), in_literal_depth: 0, known_rdf_id: HashSet::default(), }, reader_buffer: Vec::default(), is_end: false, } } /// The current byte position in the input data. pub fn buffer_position(&self) -> usize { self.reader.reader.buffer_position().try_into().unwrap() } } impl TriplesParser for RdfXmlParser { type Error = RdfXmlError; fn parse_step>( &mut self, on_triple: &mut impl FnMut(Triple<'_>) -> Result<(), E>, ) -> Result<(), E> { let event = self .reader .reader .read_event_into(&mut self.reader_buffer) .map_err(RdfXmlError::from)?; match event { Event::DocType(dt) => self.reader.parse_doctype(dt)?, Event::Start(event) => self.reader.parse_start_event(event, on_triple)?, Event::Text(event) => self.reader.parse_text_event(event)?, Event::End(event) => self.reader.parse_end_event(event, on_triple)?, Event::Eof => { self.is_end = true; } _ => {} }; self.reader_buffer.clear(); Ok(()) } fn is_end(&self) -> bool { self.is_end } } const RDF_ABOUT: &str = "http://www.w3.org/1999/02/22-rdf-syntax-ns#about"; const RDF_ABOUT_EACH: &str = "http://www.w3.org/1999/02/22-rdf-syntax-ns#aboutEach"; const RDF_ABOUT_EACH_PREFIX: &str = "http://www.w3.org/1999/02/22-rdf-syntax-ns#aboutEachPrefix"; const RDF_BAG_ID: &str = "http://www.w3.org/1999/02/22-rdf-syntax-ns#bagID"; const RDF_DATATYPE: &str = "http://www.w3.org/1999/02/22-rdf-syntax-ns#datatype"; const RDF_DESCRIPTION: &str = "http://www.w3.org/1999/02/22-rdf-syntax-ns#Description"; const RDF_FIRST: &str = "http://www.w3.org/1999/02/22-rdf-syntax-ns#first"; const RDF_ID: &str = "http://www.w3.org/1999/02/22-rdf-syntax-ns#ID"; const RDF_LI: &str = "http://www.w3.org/1999/02/22-rdf-syntax-ns#li"; const RDF_NIL: &str = "http://www.w3.org/1999/02/22-rdf-syntax-ns#nil"; const RDF_NODE_ID: &str = "http://www.w3.org/1999/02/22-rdf-syntax-ns#nodeID"; const RDF_OBJECT: &str = "http://www.w3.org/1999/02/22-rdf-syntax-ns#object"; const RDF_PARSE_TYPE: &str = "http://www.w3.org/1999/02/22-rdf-syntax-ns#parseType"; const RDF_PREDICATE: &str = "http://www.w3.org/1999/02/22-rdf-syntax-ns#predicate"; const RDF_RDF: &str = "http://www.w3.org/1999/02/22-rdf-syntax-ns#RDF"; const RDF_REST: &str = "http://www.w3.org/1999/02/22-rdf-syntax-ns#rest"; const RDF_RESOURCE: &str = "http://www.w3.org/1999/02/22-rdf-syntax-ns#resource"; const RDF_STATEMENT: &str = "http://www.w3.org/1999/02/22-rdf-syntax-ns#Statement"; const RDF_SUBJECT: &str = "http://www.w3.org/1999/02/22-rdf-syntax-ns#subject"; const RDF_TYPE: &str = "http://www.w3.org/1999/02/22-rdf-syntax-ns#type"; const RDF_XML_LITERAL: &str = "http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral"; const RESERVED_RDF_ELEMENTS: [&str; 11] = [ RDF_ABOUT, RDF_ABOUT_EACH, RDF_ABOUT_EACH_PREFIX, RDF_BAG_ID, RDF_DATATYPE, RDF_ID, RDF_LI, RDF_NODE_ID, RDF_PARSE_TYPE, RDF_RDF, RDF_RESOURCE, ]; const RESERVED_RDF_ATTRIBUTES: [&str; 5] = [ RDF_ABOUT_EACH, RDF_ABOUT_EACH_PREFIX, RDF_LI, RDF_RDF, RDF_RESOURCE, ]; #[derive(Clone, Debug)] enum NodeOrText { Node(OwnedSubject), Text(String), } enum RdfXmlState { Doc { base_iri: Option>, }, Rdf { base_iri: Option>, language: Option>, }, NodeElt { base_iri: Option>, language: Option>, subject: OwnedSubject, li_counter: u64, }, PropertyElt { //Resource, Literal or Empty property element iri: String, base_iri: Option>, language: Option>, subject: OwnedSubject, object: Option, id_attr: Option, datatype_attr: Option, }, ParseTypeCollectionPropertyElt { iri: String, base_iri: Option>, language: Option>, subject: OwnedSubject, objects: Vec, id_attr: Option, }, ParseTypeLiteralPropertyElt { iri: String, base_iri: Option>, language: Option>, subject: OwnedSubject, writer: Writer>, id_attr: Option, emit: bool, //false for parseTypeOtherPropertyElt support }, } impl RdfXmlState { fn base_iri(&self) -> Option<&Iri> { match self { RdfXmlState::Doc { base_iri, .. } => base_iri, RdfXmlState::Rdf { base_iri, .. } => base_iri, RdfXmlState::NodeElt { base_iri, .. } => base_iri, RdfXmlState::PropertyElt { base_iri, .. } => base_iri, RdfXmlState::ParseTypeCollectionPropertyElt { base_iri, .. } => base_iri, RdfXmlState::ParseTypeLiteralPropertyElt { base_iri, .. } => base_iri, } .as_ref() } fn language(&self) -> Option<&LanguageTag> { match self { RdfXmlState::Doc { .. } => None, RdfXmlState::Rdf { language, .. } => language.as_ref(), RdfXmlState::NodeElt { language, .. } => language.as_ref(), RdfXmlState::PropertyElt { language, .. } => language.as_ref(), RdfXmlState::ParseTypeCollectionPropertyElt { language, .. } => language.as_ref(), RdfXmlState::ParseTypeLiteralPropertyElt { language, .. } => language.as_ref(), } } } struct RdfXmlReader { reader: NsReader, state: Vec, bnode_id_generator: BlankNodeIdGenerator, custom_entities: HashMap, in_literal_depth: usize, known_rdf_id: HashSet, } impl RdfXmlReader { fn parse_doctype(&mut self, dt: BytesText<'_>) -> Result<(), RdfXmlError> { // we extract entities for input in self .reader .decoder() .decode(dt.as_ref())? .split('<') .skip(1) { if let Some(input) = input.strip_prefix("!ENTITY") { let input = input.trim_start().strip_prefix('%').unwrap_or(input); let (entity_name, input) = input.trim_start().split_once(|c: char| c.is_ascii_whitespace()).ok_or_else(|| { RdfXmlError::msg( "').ok_or_else(|| { RdfXmlError::msg("") })?; // Resolves custom entities within the current entity definition. let entity_value = unescape_with(entity_value, |e| self.resolve_entity(e)) .map_err(quick_xml::Error::EscapeError)?; self.custom_entities .insert(entity_name.to_string(), entity_value.to_string()); } } Ok(()) } fn parse_start_event>( &mut self, event: BytesStart<'_>, on_triple: &mut impl FnMut(Triple<'_>) -> Result<(), E>, ) -> Result<(), E> { //Literal case if let Some(RdfXmlState::ParseTypeLiteralPropertyElt { writer, .. }) = self.state.last_mut() { let mut clean_event = BytesStart::new( self.reader .decoder() .decode(event.name().as_ref()) .map_err(RdfXmlError::from)? .to_string(), ); for attr in event.attributes() { clean_event.push_attribute(attr.map_err(RdfXmlError::from)?); } writer .write_event(Event::Start(clean_event)) .map_err(RdfXmlError::from)?; self.in_literal_depth += 1; return Ok(()); } #[derive(PartialEq, Eq)] enum RdfXmlParseType { Default, Collection, Literal, Resource, Other, } #[derive(PartialEq, Eq)] enum RdfXmlNextProduction { Rdf, NodeElt, PropertyElt { subject: OwnedSubject }, } let iri = self.resolve_tag_name(event.name())?; //We read attributes let (mut language, mut base_iri) = if let Some(current_state) = self.state.last() { ( current_state.language().cloned(), current_state.base_iri().cloned(), ) } else { (None, None) }; let mut id_attr = None; let mut node_id_attr = None; let mut about_attr = None; let mut property_attrs = Vec::default(); let mut resource_attr = None; let mut datatype_attr = None; let mut parse_type = RdfXmlParseType::Default; let mut type_attr = None; for attribute in event.attributes() { let attribute = attribute.map_err(RdfXmlError::from)?; if attribute.key.as_ref().starts_with(b"xml") { if attribute.key.as_ref() == b"xml:lang" { let tag = self.convert_attribute(attribute)?; language = Some(LanguageTag::parse(tag.to_ascii_lowercase()).map_err( |error| RdfXmlError { kind: RdfXmlErrorKind::InvalidLanguageTag { tag, error }, }, )?); } else if attribute.key.as_ref() == b"xml:base" { let iri = self.convert_attribute(attribute)?; base_iri = Some( Iri::parse(iri.clone()) .map_err(|error| RdfXmlError { kind: RdfXmlErrorKind::InvalidIri { iri, error }, })? .to_owned(), ) } else { // We ignore other xml attributes } } else { let attribute_url = self.resolve_attribute_name(attribute.key)?; if *attribute_url == *RDF_ID { let mut id = self.convert_attribute(attribute)?; if !is_nc_name(&id) { return Err(RdfXmlError::msg(format!( "{} is not a valid rdf:ID value", &id )) .into()); } id.insert(0, '#'); id_attr = Some(id); } else if *attribute_url == *RDF_BAG_ID { let bag_id = self.convert_attribute(attribute)?; if !is_nc_name(&bag_id) { return Err(RdfXmlError::msg(format!( "{} is not a valid rdf:bagID value", &bag_id )) .into()); } } else if *attribute_url == *RDF_NODE_ID { let id = self.convert_attribute(attribute)?; if !is_nc_name(&id) { return Err(RdfXmlError::msg(format!( "{} is not a valid rdf:nodeID value", &id )) .into()); } node_id_attr = Some(OwnedBlankNode { id }); } else if *attribute_url == *RDF_ABOUT { about_attr = Some(attribute); } else if *attribute_url == *RDF_RESOURCE { resource_attr = Some(attribute); } else if *attribute_url == *RDF_DATATYPE { datatype_attr = Some(attribute); } else if *attribute_url == *RDF_PARSE_TYPE { parse_type = match attribute.value.as_ref() { b"Collection" => RdfXmlParseType::Collection, b"Literal" => RdfXmlParseType::Literal, b"Resource" => RdfXmlParseType::Resource, _ => RdfXmlParseType::Other, }; } else if *attribute_url == *RDF_TYPE { type_attr = Some(attribute); } else if RESERVED_RDF_ATTRIBUTES.contains(&&*attribute_url) { return Err(RdfXmlError::msg(format!( "{} is not a valid attribute", &attribute_url )) .into()); } else { property_attrs.push(( OwnedNamedNode { iri: attribute_url }, self.convert_attribute(attribute)?, )); } } } //Parsing with the base URI let id_attr = match id_attr { Some(iri) => { let iri = resolve(&base_iri, iri)?; if self.known_rdf_id.contains(&iri) { return Err(RdfXmlError::msg(format!( "{} has already been used as rdf:ID value", &iri )) .into()); } self.known_rdf_id.insert(iri.clone()); Some(OwnedNamedNode { iri }) } None => None, }; let about_attr = match about_attr { Some(attr) => Some(self.convert_iri_attribute(&base_iri, attr)?), None => None, }; let resource_attr = match resource_attr { Some(attr) => Some(self.convert_iri_attribute(&base_iri, attr)?), None => None, }; let datatype_attr = match datatype_attr { Some(attr) => Some(self.convert_iri_attribute(&base_iri, attr)?), None => None, }; let type_attr = match type_attr { Some(attr) => Some(self.convert_iri_attribute(&base_iri, attr)?), None => None, }; let expected_production = match self.state.last() { Some(RdfXmlState::Doc { .. }) => RdfXmlNextProduction::Rdf, Some(RdfXmlState::Rdf { .. }) => RdfXmlNextProduction::NodeElt, Some(RdfXmlState::NodeElt { subject, .. }) => RdfXmlNextProduction::PropertyElt { subject: subject.clone(), }, Some(RdfXmlState::PropertyElt { .. }) => RdfXmlNextProduction::NodeElt, Some(RdfXmlState::ParseTypeCollectionPropertyElt { .. }) => { RdfXmlNextProduction::NodeElt } Some(RdfXmlState::ParseTypeLiteralPropertyElt { .. }) => { panic!("ParseTypeLiteralPropertyElt production children should never be considered as a RDF/XML content") } None => { return Err( RdfXmlError::msg("No state in the stack: the XML is not balanced").into(), ); } }; let new_state = match expected_production { RdfXmlNextProduction::Rdf => { if *iri == *RDF_RDF { RdfXmlState::Rdf { base_iri, language } } else if RESERVED_RDF_ELEMENTS.contains(&&*iri) { return Err(RdfXmlError::msg(format!( "Invalid node element tag name: {}", &iri )) .into()); } else { self.build_node_elt( OwnedNamedNode { iri }, base_iri, language, id_attr, node_id_attr, about_attr, type_attr, property_attrs, on_triple, )? } } RdfXmlNextProduction::NodeElt => { if RESERVED_RDF_ELEMENTS.contains(&&*iri) { return Err(RdfXmlError::msg(format!( "Invalid property element tag name: {}", &iri )) .into()); } self.build_node_elt( OwnedNamedNode { iri }, base_iri, language, id_attr, node_id_attr, about_attr, type_attr, property_attrs, on_triple, )? } RdfXmlNextProduction::PropertyElt { subject } => { let iri = if *iri == *RDF_LI { if let Some(RdfXmlState::NodeElt { li_counter, .. }) = self.state.last_mut() { *li_counter += 1; format!("http://www.w3.org/1999/02/22-rdf-syntax-ns#_{}", li_counter) } else { return Err(RdfXmlError::msg(format!( "Invalid property element tag name: {}", &iri )) .into()); } } else if RESERVED_RDF_ELEMENTS.contains(&&*iri) || *iri == *RDF_DESCRIPTION { return Err(RdfXmlError::msg(format!( "Invalid property element tag name: {}", &iri )) .into()); } else { iri }; match parse_type { RdfXmlParseType::Default => { if resource_attr.is_some() || node_id_attr.is_some() || !property_attrs.is_empty() { let object: OwnedSubject = match (resource_attr, node_id_attr) { (Some(resource_attr), None) => resource_attr.into(), (None, Some(node_id_attr)) => node_id_attr.into(), (None, None) => OwnedBlankNode { id: self.bnode_id_generator.generate().as_ref().to_owned(), }.into(), (Some(_), Some(_)) => return Err(RdfXmlError::msg("Not both rdf:resource and rdf:nodeID could be set at the same time").into()) }; self.emit_property_attrs( (&object).into(), property_attrs, &language, on_triple, )?; if let Some(type_attr) = type_attr { on_triple(Triple { subject: (&object).into(), predicate: NamedNode { iri: RDF_TYPE }, object: NamedNode::from(&type_attr).into(), })?; } RdfXmlState::PropertyElt { iri, base_iri, language, subject, object: Some(NodeOrText::Node(object)), id_attr, datatype_attr, } } else { RdfXmlState::PropertyElt { iri, base_iri, language, subject, object: None, id_attr, datatype_attr, } } } RdfXmlParseType::Literal => RdfXmlState::ParseTypeLiteralPropertyElt { iri, base_iri, language, subject, writer: Writer::new(Vec::default()), id_attr, emit: true, }, RdfXmlParseType::Resource => self.build_parse_type_resource_property_elt( OwnedNamedNode { iri }, base_iri, language, subject, id_attr, on_triple, )?, RdfXmlParseType::Collection => RdfXmlState::ParseTypeCollectionPropertyElt { iri, base_iri, language, subject, objects: Vec::default(), id_attr, }, RdfXmlParseType::Other => RdfXmlState::ParseTypeLiteralPropertyElt { iri, base_iri, language, subject, writer: Writer::new(Vec::default()), id_attr, emit: false, }, } } }; self.state.push(new_state); Ok(()) } fn parse_end_event>( &mut self, event: BytesEnd<'_>, on_triple: &mut impl FnMut(Triple<'_>) -> Result<(), E>, ) -> Result<(), E> { //Literal case if self.in_literal_depth > 0 { if let Some(RdfXmlState::ParseTypeLiteralPropertyElt { writer, .. }) = self.state.last_mut() { writer .write_event(Event::End(BytesEnd::new( self.reader .decoder() .decode(event.name().as_ref()) .map_err(RdfXmlError::from)?, ))) .map_err(RdfXmlError::from)?; self.in_literal_depth -= 1; return Ok(()); } } if let Some(current_state) = self.state.pop() { self.end_state(current_state, on_triple)?; } Ok(()) } fn parse_text_event(&mut self, event: BytesText<'_>) -> Result<(), RdfXmlError> { let text = event.unescape_with(|e| self.resolve_entity(e))?.to_string(); match self.state.last_mut() { Some(RdfXmlState::PropertyElt { object, .. }) => { if !event.iter().all(is_whitespace) { *object = Some(NodeOrText::Text(text)); } Ok(()) } Some(RdfXmlState::ParseTypeLiteralPropertyElt { writer, .. }) => { writer.write_event(Event::Text(BytesText::new(&text)))?; Ok(()) } _ => { if event.iter().all(is_whitespace) { Ok(()) } else { Err(RdfXmlError::msg(format!( "Unexpected text event: '{}'", text ))) } } } } fn resolve_tag_name(&self, qname: QName<'_>) -> Result { let (namespace, local_name) = self.reader.resolve_element(qname); self.resolve_ns_name(namespace, local_name) } fn resolve_attribute_name(&self, qname: QName<'_>) -> Result { let (namespace, local_name) = self.reader.resolve_attribute(qname); self.resolve_ns_name(namespace, local_name) } fn resolve_ns_name( &self, namespace: ResolveResult, local_name: LocalName<'_>, ) -> Result { match namespace { ResolveResult::Bound(ns) => { let mut value = Vec::with_capacity(ns.as_ref().len() + local_name.as_ref().len()); value.extend_from_slice(ns.as_ref()); value.extend_from_slice(local_name.as_ref()); Ok(unescape_with(&self.reader.decoder().decode(&value)?, |e| { self.resolve_entity(e) }) .map_err(quick_xml::Error::from)? .to_string()) } ResolveResult::Unbound => { Err(RdfXmlError::msg("XML namespaces are required in RDF/XML")) } ResolveResult::Unknown(v) => Err(RdfXmlError::msg(format!( "Unknown prefix {}:", self.reader.decoder().decode(&v)? ))), } } #[allow(clippy::too_many_arguments)] fn build_node_elt>( &mut self, iri: OwnedNamedNode, base_iri: Option>, language: Option>, id_attr: Option, node_id_attr: Option, about_attr: Option, type_attr: Option, property_attrs: Vec<(OwnedNamedNode, String)>, on_triple: &mut impl FnMut(Triple<'_>) -> Result<(), E>, ) -> Result { let subject_id = self.bnode_id_generator.generate(); //TODO: avoid to run it everytime let subject: Subject<'_> = match (&id_attr, &node_id_attr, &about_attr) { (Some(id_attr), None, None) => NamedNode::from(id_attr).into(), (None, Some(node_id_attr), None) => BlankNode::from(node_id_attr).into(), (None, None, Some(about_attr)) => NamedNode::from(about_attr).into(), (None, None, None) => BlankNode { id: subject_id.as_ref(), } .into(), (Some(_), Some(_), _) => { return Err(RdfXmlError::msg( "Not both rdf:ID and rdf:nodeID could be set at the same time", ) .into()) } (_, Some(_), Some(_)) => { return Err(RdfXmlError::msg( "Not both rdf:nodeID and rdf:resource could be set at the same time", ) .into()) } (Some(_), _, Some(_)) => { return Err(RdfXmlError::msg( "Not both rdf:ID and rdf:resource could be set at the same time", ) .into()) } }; self.emit_property_attrs(subject, property_attrs, &language, on_triple)?; if let Some(type_attr) = type_attr { on_triple(Triple { subject, predicate: NamedNode { iri: RDF_TYPE }, object: NamedNode::from(&type_attr).into(), })?; } if *iri.iri != *RDF_DESCRIPTION { on_triple(Triple { subject, predicate: NamedNode { iri: RDF_TYPE }, object: NamedNode::from(&iri).into(), })?; } Ok(RdfXmlState::NodeElt { base_iri, language, subject: subject.try_into()?, li_counter: 0, }) } fn build_parse_type_resource_property_elt>( &mut self, iri: OwnedNamedNode, base_iri: Option>, language: Option>, subject: OwnedSubject, id_attr: Option, on_triple: &mut impl FnMut(Triple<'_>) -> Result<(), E>, ) -> Result { let object_id = self.bnode_id_generator.generate(); let object = BlankNode { id: object_id.as_ref(), }; let triple = Triple { subject: (&subject).into(), predicate: (&iri).into(), object: object.into(), }; if let Some(id_attr) = &id_attr { self.reify(&triple, NamedNode::from(id_attr).into(), on_triple)?; } on_triple(triple)?; Ok(RdfXmlState::NodeElt { base_iri, language, subject: OwnedBlankNode::from(object).into(), li_counter: 0, }) } fn end_state>( &mut self, state: RdfXmlState, on_triple: &mut impl FnMut(Triple<'_>) -> Result<(), E>, ) -> Result<(), E> { match state { RdfXmlState::PropertyElt { iri, language, subject, id_attr, datatype_attr, object, .. } => { let object: Term<'_> = match &object { Some(NodeOrText::Node(node)) => Subject::from(node).into(), Some(NodeOrText::Text(text)) => { self.new_literal(text, &language, &datatype_attr).into() } None => self.new_literal("", &language, &datatype_attr).into(), }; let triple = Triple { subject: (&subject).into(), predicate: NamedNode { iri: &iri }, object, }; if let Some(id_attr) = &id_attr { self.reify(&triple, NamedNode::from(id_attr).into(), on_triple)?; } on_triple(triple)?; } RdfXmlState::ParseTypeCollectionPropertyElt { iri, subject, id_attr, objects, .. } => { let mut current_node: OwnedSubject = OwnedNamedNode { iri: RDF_NIL.to_owned(), } .into(); for object in objects.iter().rev() { let subject: OwnedSubject = OwnedBlankNode { id: self.bnode_id_generator.generate().as_ref().to_owned(), } .into(); on_triple(Triple { subject: (&subject).into(), predicate: NamedNode { iri: RDF_FIRST }, object: Subject::from(object).into(), })?; on_triple(Triple { subject: (&subject).into(), predicate: NamedNode { iri: RDF_REST }, object: Subject::from(¤t_node).into(), })?; current_node = subject; } let triple = Triple { subject: (&subject).into(), predicate: NamedNode { iri: &iri }, object: Subject::from(¤t_node).into(), }; if let Some(id_attr) = &id_attr { self.reify(&triple, NamedNode::from(id_attr).into(), on_triple)?; } on_triple(triple)?; } RdfXmlState::ParseTypeLiteralPropertyElt { iri, subject, id_attr, writer, emit, .. } => { if emit { let object = writer.into_inner(); if object.is_empty() { return Err(RdfXmlError::msg(format!( "No value found for rdf:XMLLiteral value of property {}", iri )) .into()); } let triple = Triple { subject: (&subject).into(), predicate: NamedNode { iri: &iri }, object: Literal::Typed { value: str::from_utf8(&object).map_err(|_| { RdfXmlError::msg("The XML literal is not in valid UTF-8".to_owned()) })?, datatype: NamedNode { iri: RDF_XML_LITERAL, }, } .into(), }; if let Some(id_attr) = &id_attr { self.reify(&triple, NamedNode::from(id_attr).into(), on_triple)?; } on_triple(triple)?; } } RdfXmlState::NodeElt { subject, .. } => match self.state.last_mut() { Some(RdfXmlState::PropertyElt { object, .. }) => { *object = Some(NodeOrText::Node(subject)) } Some(RdfXmlState::ParseTypeCollectionPropertyElt { objects, .. }) => { objects.push(subject) } _ => (), }, _ => (), } Ok(()) } fn new_literal<'a>( &self, value: &'a str, language: &'a Option>, datatype: &'a Option, ) -> Literal<'a> { if let Some(datatype) = datatype { Literal::Typed { value, datatype: datatype.into(), } } else if let Some(language) = language { Literal::LanguageTaggedString { value, language: language.as_str(), } } else { Literal::Simple { value } } } fn reify>( &self, triple: &Triple<'_>, statement_id: Subject<'_>, on_triple: &mut impl FnMut(Triple<'_>) -> Result<(), E>, ) -> Result<(), E> { on_triple(Triple { subject: statement_id, predicate: NamedNode { iri: RDF_TYPE }, object: NamedNode { iri: RDF_STATEMENT }.into(), })?; on_triple(Triple { subject: statement_id, predicate: NamedNode { iri: RDF_SUBJECT }, object: triple.subject.into(), })?; on_triple(Triple { subject: statement_id, predicate: NamedNode { iri: RDF_PREDICATE }, object: triple.predicate.into(), })?; on_triple(Triple { subject: statement_id, predicate: NamedNode { iri: RDF_OBJECT }, object: triple.object, })?; Ok(()) } fn emit_property_attrs>( &self, subject: Subject<'_>, literal_attributes: Vec<(OwnedNamedNode, String)>, language: &Option>, on_triple: &mut impl FnMut(Triple<'_>) -> Result<(), E>, ) -> Result<(), E> { for (literal_predicate, literal_value) in literal_attributes { on_triple(Triple { subject, predicate: (&literal_predicate).into(), object: if let Some(language) = language { Literal::LanguageTaggedString { value: &literal_value, language: language.as_str(), } } else { Literal::Simple { value: &literal_value, } } .into(), })?; } Ok(()) } fn convert_attribute(&self, attribute: Attribute) -> Result { Ok(attribute .decode_and_unescape_value_with(self.reader.decoder(), |e| self.resolve_entity(e))? .to_string()) } fn convert_iri_attribute( &self, base_iri: &Option>, attribute: Attribute<'_>, ) -> Result { Ok(OwnedNamedNode { iri: resolve(base_iri, self.convert_attribute(attribute)?)?, }) } fn resolve_entity(&self, e: &str) -> Option<&str> { resolve_xml_entity(e).or_else(|| self.custom_entities.get(e).map(String::as_str)) } } fn resolve( base_iri: &Option>, relative_iri: impl AsRef + Into + Clone, ) -> Result { Ok(if let Some(base_iri) = base_iri { base_iri .resolve(relative_iri.as_ref()) .map_err(|error| RdfXmlError { kind: RdfXmlErrorKind::InvalidIri { iri: relative_iri.into(), error, }, }) } else { Iri::parse(relative_iri.clone().into()).map_err(|error| RdfXmlError { kind: RdfXmlErrorKind::InvalidIri { iri: relative_iri.into(), error, }, }) }? .into_inner()) } fn is_nc_name(name: &str) -> bool { // Name - (Char* ':' Char*) is_name(name) && name.chars().all(|c| c != ':') } fn is_name(name: &str) -> bool { // NameStartChar (NameChar)* let mut c = name.chars(); match c.next() { Some(c) if is_name_start_char(c) => (), _ => return false, }; c.all(is_name_char) } #[derive(Default)] pub struct BlankNodeIdGenerator { //TODO: avoid collisions counter: u64, } impl BlankNodeIdGenerator { pub fn generate(&mut self) -> BlankNodeId { let mut id: [u8; 12] = [ b'r', b'i', b'o', b'g', b'0', b'0', b'0', b'0', b'0', b'0', b'0', b'0', ]; self.counter += 1; write_u64_to_slice(self.counter, &mut id[4..]); BlankNodeId { id } } } fn write_u64_to_slice(mut v: u64, s: &mut [u8]) { for i in (0..s.len()).rev() { s[i] = b'0' + (v % 10) as u8; v /= 10; } } pub struct BlankNodeId { id: [u8; 12], } impl AsRef for BlankNodeId { fn as_ref(&self) -> &str { // We know what id is and it's always valid UTF8 str::from_utf8(&self.id).unwrap() } } fn is_whitespace(c: &u8) -> bool { matches!(c, b' ' | b'\t' | b'\n' | b'\r') } rio-0.8.5/xml/src/utils.rs000066400000000000000000000020011466265456300154240ustar00rootroot00000000000000pub fn is_name_start_char(c: char) -> bool { // ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF] matches!(c, ':' | 'A'..='Z' | '_' | 'a'..='z' | '\u{C0}'..='\u{D6}' | '\u{D8}'..='\u{F6}' | '\u{F8}'..='\u{2FF}' | '\u{370}'..='\u{37D}' | '\u{37F}'..='\u{1FFF}' | '\u{200C}'..='\u{200D}' | '\u{2070}'..='\u{218F}' | '\u{2C00}'..='\u{2FEF}' | '\u{3001}'..='\u{D7FF}' | '\u{F900}'..='\u{FDCF}' | '\u{FDF0}'..='\u{FFFD}' | '\u{10000}'..='\u{EFFFF}') } pub fn is_name_char(c: char) -> bool { // NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040] is_name_start_char(c) || matches!(c, '-' | '.' | '0'..='9' | '\u{B7}' | '\u{0300}'..='\u{036F}' | '\u{203F}'..='\u{2040}') } rio-0.8.5/xml/tests/000077500000000000000000000000001466265456300143005ustar00rootroot00000000000000rio-0.8.5/xml/tests/roundtrip.rs000066400000000000000000000044141466265456300166770ustar00rootroot00000000000000use rio_api::formatter::TriplesFormatter; use rio_api::model::*; use rio_api::parser::TriplesParser; use rio_xml::{RdfXmlError, RdfXmlFormatter, RdfXmlParser}; use std::io::Cursor; #[test] fn simple_roundtrip() -> Result<(), RdfXmlError> { let foo_node = NamedNode { iri: "http://example.com/foo", }; let bar_node = NamedNode { iri: "http://example.com/b%adar", }; let bad = NamedNode { iri: "http://example.org/properties:p", }; let bnode = BlankNode { id: "foobar" }; let simple = Literal::Simple { value: "sim\"le" }; let language = Literal::LanguageTaggedString { value: "sim\"le", language: "en", }; let datatype = Literal::Typed { value: "sim\"le", datatype: NamedNode { iri: "http://example.com/dð“€€t", }, }; let graph = vec![ Triple { subject: foo_node.into(), predicate: bar_node, object: bar_node.into(), }, Triple { subject: foo_node.into(), predicate: bar_node, object: bnode.into(), }, Triple { subject: foo_node.into(), predicate: bar_node, object: simple.into(), }, Triple { subject: foo_node.into(), predicate: bar_node, object: language.into(), }, Triple { subject: foo_node.into(), predicate: bar_node, object: datatype.into(), }, Triple { subject: bar_node.into(), predicate: bar_node, object: bar_node.into(), }, Triple { subject: bnode.into(), predicate: bar_node, object: bar_node.into(), }, Triple { subject: bnode.into(), predicate: bad, object: foo_node.into(), }, ]; let mut formatter = RdfXmlFormatter::new(Vec::default())?; for t in &graph { formatter.format(t)?; } let xml = formatter.finish()?; let mut count = 0; RdfXmlParser::new(Cursor::new(&xml), None).parse_all(&mut |_| { count += 1; Ok(()) as Result<(), RdfXmlError> })?; assert_eq!(count, graph.len()); Ok(()) }