From bbacda38c31c88e0604843c137fcb1117cf2fbf9 Mon Sep 17 00:00:00 2001 From: bennett Date: Sun, 3 May 2009 10:17:27 +0900 Subject: [PATCH] Initial commit. --- .hgignore | 13 + LICENSE | 196 + MAKETESTS.sh | 78 + README.txt | 144 + REPLACE.sh | 35 + TODO.pdf | Bin 0 -> 64109 bytes TODO.txt | 81 + bundle.sh | 90 + data/ambigs-1.txt | 14 + data/ambigs-10.txt | 10 + data/ambigs-12.txt | 11 + data/ambigs-13.txt | 11 + data/ambigs-14.txt | 11 + data/ambigs-2.txt | 14 + data/ambigs-3.txt | 14 + data/ambigs-4.txt | 11 + data/ambigs-5.txt | 11 + data/ambigs-6.txt | 14 + data/ambigs-7.txt | 10 + data/ambigs-8.txt | 10 + data/ambigs-9.txt | 10 + data/editor-translator-1.txt | 16 + data/editor-translator-2.txt | 16 + data/institution-name-1.txt | 9 + data/seven-names-1.txt | 14 + data/seven-names-plus-two-1.txt | 19 + data/simple-japanese-name-1.txt | 8 + data/simple-mongolian-name-1.txt | 9 + data/simple-sticky-name-1.txt | 9 + data/simple-western-editor-1.txt | 8 + data/simple-western-editor-2.txt | 8 + data/simple-western-name-1.txt | 9 + data/simple-western-name-2.txt | 9 + data/simple-western-name-3.txt | 9 + data/two-simple-western-editors-1.txt | 9 + data/two-simple-western-names-1.txt | 10 + data/western-name-with-articular-1.txt | 9 + data/western-name-with-comma-suffix-1.txt | 8 + data/western-name-with-space-suffix-1.txt | 9 + data/western-name-with-space-suffix-2.txt | 9 + data/year-suffixes-1.txt | 9 + data/year-suffixes-2.txt | 9 + data/year-suffixes-3.txt | 9 + dojo/LICENSE | 195 + dojo/dojo/LICENSE | 195 + dojo/dojo/dojo.js | 16 + dojo/dojo/string.js | 148 + dojo/dojox/LICENSE | 195 + dojo/dojox/testing/DocTest.js | 288 ++ dojo/util/doh/LICENSE | 195 + dojo/util/doh/_rhinoRunner.js | 17 + dojo/util/doh/runner.js | 1054 +++++ locale/locales-af-AZ.xml | 147 + locale/locales-af-ZA.xml | 207 + locale/locales-ar-AR.xml | 207 + locale/locales-bg-BG.xml | 207 + locale/locales-ca-AD.xml | 207 + locale/locales-cs-CZ.xml | 207 + locale/locales-da-DK.xml | 207 + locale/locales-de-AT.xml | 207 + locale/locales-de-CH.xml | 207 + locale/locales-de-DE.xml | 207 + locale/locales-el-GR.xml | 207 + locale/locales-en-US.xml | 230 + locale/locales-es-ES.xml | 207 + locale/locales-et-EE.xml | 207 + locale/locales-fr-FR.xml | 207 + locale/locales-he-IL.xml | 207 + locale/locales-hu-HU.xml | 207 + locale/locales-is-IS.xml | 207 + locale/locales-it-IT.xml | 207 + locale/locales-ja-JP.xml | 207 + locale/locales-ko-KR.xml | 207 + locale/locales-mn-MN.xml | 207 + locale/locales-nb-NO.xml | 207 + locale/locales-nl-NL.xml | 207 + locale/locales-pl-PL.xml | 207 + locale/locales-pt-BR.xml | 207 + locale/locales-pt-PT.xml | 207 + locale/locales-ro-RO.xml | 207 + locale/locales-ru-RU.xml | 207 + locale/locales-sk-SK.xml | 207 + locale/locales-sl-SI.xml | 207 + locale/locales-sr-RS.xml | 207 + locale/locales-sv-SE.xml | 207 + locale/locales-th-TH.xml | 207 + locale/locales-tr-TR.xml | 207 + locale/locales-uk-UA.xml | 207 + locale/locales-vi-VN.xml | 207 + locale/locales-zh-CN.xml | 207 + locale/locales-zh-TW.xml | 207 + names_nesting.txt | 40 + ref/FLIP-FLOP.txt | 7 + ref/cite2.js | 234 + ref/collapse_JoinPrefix.txt | 98 + ref/hetzner.pdf | Bin 0 -> 69619 bytes ref/locators.txt | 54 + ref/sort_NumberOfAuthorsAsKeyCountMinMax.txt | 134 + ref/speed.sh | 12 + rhino/js-1.7R1.jar | Bin 0 -> 756883 bytes rpc-stuff/README.txt | 78 + rpc-stuff/citeproc-js-combined.js | 3957 +++++++++++++++++ rpc-stuff/citeproc-js-rpc.py | 329 ++ rpc-stuff/citeproc-js.py | 17 + rpc-stuff/gen_set_style_json.py | 16 + rpc-stuff/insert_items.json | 23 + rpc-stuff/make_bibliography.json | 4 + rpc-stuff/make_citation_cluster.json | 25 + rpc-stuff/set_style.csl | 61 + rpc-stuff/set_style.json | 1 + rpc-stuff/wgetdemo.sh | 76 + runtests.bat | 19 + runtests.sh | 28 + src/ambigconfig.js | 17 + src/attributes.js | 430 ++ src/blob.js | 16 + src/build.js | 258 ++ src/commands.js | 96 + src/configure.js | 62 + src/core.js | 14 + src/disambiguate.js | 429 ++ src/elements.js | 1138 +++++ src/factory.js | 293 ++ src/formats.js | 42 + src/formatters.js | 156 + src/lib.js | 12 + src/libnames.js | 287 ++ src/output.js | 13 + src/queue.js | 248 ++ src/range.js | 69 + src/registry.js | 310 ++ src/render.js | 265 ++ src/retrieval.js | 304 ++ src/stack.js | 87 + src/state.js | 402 ++ src/system.js | 13 + src/tests.js | 99 + src/token.js | 105 + src/util.js | 10 + src/util_dates.js | 140 + src/util_disambiguate.js | 97 + src/util_names.js | 245 + src/util_sort.js | 23 + src/util_token.js | 3 + src/xml.js | 13 + src/xmle4x.js | 69 + src/xmljs.js | 228 + std/README.txt | 132 + std/grind.sh | 58 + ...llapse_CitationNumberRangesWithAffixes.txt | 52 + std/humans/collapse_YearSuffixCollapse.txt | 92 + std/humans/condition_RefTypeBranching.txt | 162 + std/humans/date_YearSuffixDelimiter.txt | 136 + ...ameCountOnFailureIfYearSuffixAvailable.txt | 86 + .../disambiguate_BasedOnEtAlSubsequent.txt | 118 + .../disambiguate_DisambiguateCondition.txt | 70 + ...iguate_GivennameExpandCrossNestedNames.txt | 66 + ...ate_MinimalGivennameExpandMinimalNames.txt | 60 + ...NamesOnFailureIfYearSuffixNotAvailable.txt | 85 + std/humans/disambiguate_YearSuffixAndSort.txt | 191 + std/humans/name_ArticularPlain.txt | 38 + std/humans/name_ArticularWithComma.txt | 38 + std/humans/name_Asian.txt | 38 + std/humans/name_AsianGlyphs.txt | 38 + std/humans/name_AuthorCount.txt | 76 + std/humans/name_CollapseRoleLabels.txt | 56 + std/humans/name_Delimiter.txt | 40 + std/humans/name_Institution.txt | 38 + std/humans/name_LabelAfterPlural.txt | 40 + .../name_LabelAfterPluralDecorations.txt | 42 + std/humans/name_LongAbbreviation.txt | 38 + ...InitialSortOrderAllWithDecorationsEtAl.txt | 47 + ...itialSortOrderFirstWithDecorationsEtAl.txt | 47 + ...ixedFormatsInitialsWithDecorationsEtAl.txt | 47 + .../name_MixedFormatsPrimaryDecorations.txt | 45 + .../name_MixedFormatsWithDecorationsEtAl.txt | 47 + ...ecorationsPlusAlternateEtAlDecorations.txt | 48 + ...matsWithDecorationsPlusEtAlDecorations.txt | 48 + std/humans/name_SubsituteName.txt | 41 + std/humans/name_SubstituteInheritLabel.txt | 51 + ...name_SubstituteMacroInheritDecorations.txt | 45 + ...woRolesSameRenderingSeparateRoleLabels.txt | 56 + std/humans/name_WesternArticularLowercase.txt | 38 + std/humans/name_WesternPrimaryFontStyle.txt | 39 + ...name_WesternPrimaryFontStyleTwoAuthors.txt | 40 + std/humans/name_WesternSimple.txt | 38 + std/humans/name_WesternTwoAuthors.txt | 39 + std/humans/sort_AguStyle.txt | 175 + std/humans/sort_AguStyleReverseGroups.txt | 175 + std/humans/sort_Citation.txt | 56 + std/humans/sort_NumberOfAuthorsAsKey.txt | 96 + std/humans/term_MagicCapitalization.txt | 32 + style/ama.csl | 184 + style/apa.csl | 254 ++ style/apsa.csl | 175 + style/asa.csl | 215 + style/bluebook_lawrev.csl | 1150 +++++ style/chicago-author-date.csl | 369 ++ style/chicago-fullnote-bibliography.csl | 666 +++ style/chicago-note-bibliography.csl | 446 ++ style/chicago-note.csl | 387 ++ style/harvard1.csl | 192 + style/ieee.csl | 135 + style/mhra.csl | 317 ++ style/mhra_note_without_bibliography.csl | 337 ++ style/mla.csl | 188 + style/nature.csl | 87 + style/nlm.csl | 116 + style/schemas.xml | 4 + tests/run.js | 65 + tests/std_collapse.js | 14 + tests/std_condition.js | 10 + tests/std_date.js | 10 + tests/std_disambiguate.js | 34 + tests/std_name.js | 114 + tests/std_sort.js | 22 + tests/std_term.js | 10 + tests/test_build.js | 134 + tests/test_build_integration.js | 27 + tests/test_build_internals.js | 177 + tests/test_commands.js | 14 + tests/test_compiler.js | 19 + tests/test_conditions.js | 175 + tests/test_configure.js | 110 + tests/test_csl.js | 22 + tests/test_dates.js | 213 + tests/test_factory.js | 51 + tests/test_failing.js | 37 + tests/test_formatters.js | 42 + tests/test_groups.js | 83 + tests/test_list.js | 90 + tests/test_load_styles.js | 79 + tests/test_locale.js | 56 + tests/test_names_import.js | 65 + tests/test_output.js | 23 + tests/test_range.js | 94 + tests/test_registry.js | 444 ++ tests/test_render.js | 25 + tests/test_retrieval.js | 31 + tests/test_sequence.js | 23 + tests/test_sort.js | 61 + tests/test_speed.js | 176 + tests/test_term.js | 73 + tests/test_util_names.js | 114 + tests/test_xmle4x.js | 30 + tests/test_xmljs.js | 200 + 246 files changed, 33786 insertions(+) create mode 100644 .hgignore create mode 100644 LICENSE create mode 100755 MAKETESTS.sh create mode 100644 README.txt create mode 100755 REPLACE.sh create mode 100644 TODO.pdf create mode 100644 TODO.txt create mode 100755 bundle.sh create mode 100644 data/ambigs-1.txt create mode 100644 data/ambigs-10.txt create mode 100644 data/ambigs-12.txt create mode 100644 data/ambigs-13.txt create mode 100644 data/ambigs-14.txt create mode 100644 data/ambigs-2.txt create mode 100644 data/ambigs-3.txt create mode 100644 data/ambigs-4.txt create mode 100644 data/ambigs-5.txt create mode 100644 data/ambigs-6.txt create mode 100644 data/ambigs-7.txt create mode 100644 data/ambigs-8.txt create mode 100644 data/ambigs-9.txt create mode 100644 data/editor-translator-1.txt create mode 100644 data/editor-translator-2.txt create mode 100644 data/institution-name-1.txt create mode 100644 data/seven-names-1.txt create mode 100644 data/seven-names-plus-two-1.txt create mode 100644 data/simple-japanese-name-1.txt create mode 100644 data/simple-mongolian-name-1.txt create mode 100644 data/simple-sticky-name-1.txt create mode 100644 data/simple-western-editor-1.txt create mode 100644 data/simple-western-editor-2.txt create mode 100644 data/simple-western-name-1.txt create mode 100644 data/simple-western-name-2.txt create mode 100644 data/simple-western-name-3.txt create mode 100644 data/two-simple-western-editors-1.txt create mode 100644 data/two-simple-western-names-1.txt create mode 100644 data/western-name-with-articular-1.txt create mode 100644 data/western-name-with-comma-suffix-1.txt create mode 100644 data/western-name-with-space-suffix-1.txt create mode 100644 data/western-name-with-space-suffix-2.txt create mode 100644 data/year-suffixes-1.txt create mode 100644 data/year-suffixes-2.txt create mode 100644 data/year-suffixes-3.txt create mode 100644 dojo/LICENSE create mode 100644 dojo/dojo/LICENSE create mode 100644 dojo/dojo/dojo.js create mode 100644 dojo/dojo/string.js create mode 100644 dojo/dojox/LICENSE create mode 100644 dojo/dojox/testing/DocTest.js create mode 100644 dojo/util/doh/LICENSE create mode 100644 dojo/util/doh/_rhinoRunner.js create mode 100644 dojo/util/doh/runner.js create mode 100644 locale/locales-af-AZ.xml create mode 100644 locale/locales-af-ZA.xml create mode 100644 locale/locales-ar-AR.xml create mode 100644 locale/locales-bg-BG.xml create mode 100644 locale/locales-ca-AD.xml create mode 100644 locale/locales-cs-CZ.xml create mode 100644 locale/locales-da-DK.xml create mode 100644 locale/locales-de-AT.xml create mode 100644 locale/locales-de-CH.xml create mode 100644 locale/locales-de-DE.xml create mode 100644 locale/locales-el-GR.xml create mode 100644 locale/locales-en-US.xml create mode 100644 locale/locales-es-ES.xml create mode 100644 locale/locales-et-EE.xml create mode 100644 locale/locales-fr-FR.xml create mode 100644 locale/locales-he-IL.xml create mode 100644 locale/locales-hu-HU.xml create mode 100644 locale/locales-is-IS.xml create mode 100644 locale/locales-it-IT.xml create mode 100644 locale/locales-ja-JP.xml create mode 100644 locale/locales-ko-KR.xml create mode 100644 locale/locales-mn-MN.xml create mode 100644 locale/locales-nb-NO.xml create mode 100644 locale/locales-nl-NL.xml create mode 100644 locale/locales-pl-PL.xml create mode 100644 locale/locales-pt-BR.xml create mode 100644 locale/locales-pt-PT.xml create mode 100644 locale/locales-ro-RO.xml create mode 100644 locale/locales-ru-RU.xml create mode 100644 locale/locales-sk-SK.xml create mode 100644 locale/locales-sl-SI.xml create mode 100644 locale/locales-sr-RS.xml create mode 100644 locale/locales-sv-SE.xml create mode 100644 locale/locales-th-TH.xml create mode 100644 locale/locales-tr-TR.xml create mode 100644 locale/locales-uk-UA.xml create mode 100644 locale/locales-vi-VN.xml create mode 100644 locale/locales-zh-CN.xml create mode 100644 locale/locales-zh-TW.xml create mode 100644 names_nesting.txt create mode 100644 ref/FLIP-FLOP.txt create mode 100644 ref/cite2.js create mode 100644 ref/collapse_JoinPrefix.txt create mode 100644 ref/hetzner.pdf create mode 100644 ref/locators.txt create mode 100644 ref/sort_NumberOfAuthorsAsKeyCountMinMax.txt create mode 100755 ref/speed.sh create mode 100644 rhino/js-1.7R1.jar create mode 100644 rpc-stuff/README.txt create mode 100644 rpc-stuff/citeproc-js-combined.js create mode 100755 rpc-stuff/citeproc-js-rpc.py create mode 100755 rpc-stuff/citeproc-js.py create mode 100755 rpc-stuff/gen_set_style_json.py create mode 100644 rpc-stuff/insert_items.json create mode 100644 rpc-stuff/make_bibliography.json create mode 100644 rpc-stuff/make_citation_cluster.json create mode 100644 rpc-stuff/set_style.csl create mode 100644 rpc-stuff/set_style.json create mode 100755 rpc-stuff/wgetdemo.sh create mode 100644 runtests.bat create mode 100755 runtests.sh create mode 100644 src/ambigconfig.js create mode 100644 src/attributes.js create mode 100644 src/blob.js create mode 100644 src/build.js create mode 100644 src/commands.js create mode 100644 src/configure.js create mode 100644 src/core.js create mode 100644 src/disambiguate.js create mode 100644 src/elements.js create mode 100644 src/factory.js create mode 100644 src/formats.js create mode 100644 src/formatters.js create mode 100644 src/lib.js create mode 100644 src/libnames.js create mode 100644 src/output.js create mode 100644 src/queue.js create mode 100644 src/range.js create mode 100644 src/registry.js create mode 100644 src/render.js create mode 100644 src/retrieval.js create mode 100644 src/stack.js create mode 100644 src/state.js create mode 100644 src/system.js create mode 100644 src/tests.js create mode 100644 src/token.js create mode 100644 src/util.js create mode 100644 src/util_dates.js create mode 100644 src/util_disambiguate.js create mode 100644 src/util_names.js create mode 100644 src/util_sort.js create mode 100644 src/util_token.js create mode 100644 src/xml.js create mode 100644 src/xmle4x.js create mode 100644 src/xmljs.js create mode 100644 std/README.txt create mode 100755 std/grind.sh create mode 100644 std/humans/collapse_CitationNumberRangesWithAffixes.txt create mode 100644 std/humans/collapse_YearSuffixCollapse.txt create mode 100644 std/humans/condition_RefTypeBranching.txt create mode 100644 std/humans/date_YearSuffixDelimiter.txt create mode 100644 std/humans/disambiguate_BaseNameCountOnFailureIfYearSuffixAvailable.txt create mode 100644 std/humans/disambiguate_BasedOnEtAlSubsequent.txt create mode 100644 std/humans/disambiguate_DisambiguateCondition.txt create mode 100644 std/humans/disambiguate_GivennameExpandCrossNestedNames.txt create mode 100644 std/humans/disambiguate_MinimalGivennameExpandMinimalNames.txt create mode 100644 std/humans/disambiguate_RetainNamesOnFailureIfYearSuffixNotAvailable.txt create mode 100644 std/humans/disambiguate_YearSuffixAndSort.txt create mode 100644 std/humans/name_ArticularPlain.txt create mode 100644 std/humans/name_ArticularWithComma.txt create mode 100644 std/humans/name_Asian.txt create mode 100644 std/humans/name_AsianGlyphs.txt create mode 100644 std/humans/name_AuthorCount.txt create mode 100644 std/humans/name_CollapseRoleLabels.txt create mode 100644 std/humans/name_Delimiter.txt create mode 100644 std/humans/name_Institution.txt create mode 100644 std/humans/name_LabelAfterPlural.txt create mode 100644 std/humans/name_LabelAfterPluralDecorations.txt create mode 100644 std/humans/name_LongAbbreviation.txt create mode 100644 std/humans/name_MixedFormatsInitialSortOrderAllWithDecorationsEtAl.txt create mode 100644 std/humans/name_MixedFormatsInitialSortOrderFirstWithDecorationsEtAl.txt create mode 100644 std/humans/name_MixedFormatsInitialsWithDecorationsEtAl.txt create mode 100644 std/humans/name_MixedFormatsPrimaryDecorations.txt create mode 100644 std/humans/name_MixedFormatsWithDecorationsEtAl.txt create mode 100644 std/humans/name_MixedFormatsWithDecorationsPlusAlternateEtAlDecorations.txt create mode 100644 std/humans/name_MixedFormatsWithDecorationsPlusEtAlDecorations.txt create mode 100644 std/humans/name_SubsituteName.txt create mode 100644 std/humans/name_SubstituteInheritLabel.txt create mode 100644 std/humans/name_SubstituteMacroInheritDecorations.txt create mode 100644 std/humans/name_TwoRolesSameRenderingSeparateRoleLabels.txt create mode 100644 std/humans/name_WesternArticularLowercase.txt create mode 100644 std/humans/name_WesternPrimaryFontStyle.txt create mode 100644 std/humans/name_WesternPrimaryFontStyleTwoAuthors.txt create mode 100644 std/humans/name_WesternSimple.txt create mode 100644 std/humans/name_WesternTwoAuthors.txt create mode 100644 std/humans/sort_AguStyle.txt create mode 100644 std/humans/sort_AguStyleReverseGroups.txt create mode 100644 std/humans/sort_Citation.txt create mode 100644 std/humans/sort_NumberOfAuthorsAsKey.txt create mode 100644 std/humans/term_MagicCapitalization.txt create mode 100644 style/ama.csl create mode 100644 style/apa.csl create mode 100644 style/apsa.csl create mode 100644 style/asa.csl create mode 100644 style/bluebook_lawrev.csl create mode 100644 style/chicago-author-date.csl create mode 100644 style/chicago-fullnote-bibliography.csl create mode 100644 style/chicago-note-bibliography.csl create mode 100644 style/chicago-note.csl create mode 100644 style/harvard1.csl create mode 100644 style/ieee.csl create mode 100644 style/mhra.csl create mode 100644 style/mhra_note_without_bibliography.csl create mode 100644 style/mla.csl create mode 100644 style/nature.csl create mode 100644 style/nlm.csl create mode 100644 style/schemas.xml create mode 100644 tests/run.js create mode 100644 tests/std_collapse.js create mode 100644 tests/std_condition.js create mode 100644 tests/std_date.js create mode 100644 tests/std_disambiguate.js create mode 100644 tests/std_name.js create mode 100644 tests/std_sort.js create mode 100644 tests/std_term.js create mode 100644 tests/test_build.js create mode 100644 tests/test_build_integration.js create mode 100644 tests/test_build_internals.js create mode 100644 tests/test_commands.js create mode 100644 tests/test_compiler.js create mode 100644 tests/test_conditions.js create mode 100644 tests/test_configure.js create mode 100644 tests/test_csl.js create mode 100644 tests/test_dates.js create mode 100644 tests/test_factory.js create mode 100644 tests/test_failing.js create mode 100644 tests/test_formatters.js create mode 100644 tests/test_groups.js create mode 100644 tests/test_list.js create mode 100644 tests/test_load_styles.js create mode 100644 tests/test_locale.js create mode 100644 tests/test_names_import.js create mode 100644 tests/test_output.js create mode 100644 tests/test_range.js create mode 100644 tests/test_registry.js create mode 100644 tests/test_render.js create mode 100644 tests/test_retrieval.js create mode 100644 tests/test_sequence.js create mode 100644 tests/test_sort.js create mode 100644 tests/test_speed.js create mode 100644 tests/test_term.js create mode 100644 tests/test_util_names.js create mode 100644 tests/test_xmle4x.js create mode 100644 tests/test_xmljs.js diff --git a/.hgignore b/.hgignore new file mode 100644 index 000000000..3dfc510dc --- /dev/null +++ b/.hgignore @@ -0,0 +1,13 @@ +syntax: regexp + +^jsdoc.* +^stripped\.js +^REPLACE\.sh +^NAMES_ORIG.js +^\.emacs-desktop +(^|.*/)machines +(^|.*/)csl +\.*\.result +^HOLD +(^|.*/)\.svn +.*~$ diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..c701c7cc2 --- /dev/null +++ b/LICENSE @@ -0,0 +1,196 @@ +citeproc-js is available under *either* the terms of the modified BSD +license *or* the Academic Free License version 2.1. As a recipient of +citeproc-js, you may choose which license to receive this code under +(except as noted in per-module LICENSE files). citeproc-js modules +are not copyright the Dojo Foundation; this LICENSE applies to all +code in this archive not covered by the Dojo Foundation license. No +external contributions are allowed under licenses which are +fundamentally incompatible with the AFL or BSD licenses that Dojo is +distributed under. + +The text of the AFL and BSD licenses is reproduced below. + +------------------------------------------------------------------------------- +The "New" BSD License: +********************** + +Copyright (c) 2005-2008, The Dojo Foundation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of the Dojo Foundation nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------------- +The Academic Free License, v. 2.1: +********************************** + +This Academic Free License (the "License") applies to any original work of +authorship (the "Original Work") whose owner (the "Licensor") has placed the +following notice immediately following the copyright notice for the Original +Work: + +Licensed under the Academic Free License version 2.1 + +1) Grant of Copyright License. Licensor hereby grants You a world-wide, +royalty-free, non-exclusive, perpetual, sublicenseable license to do the +following: + +a) to reproduce the Original Work in copies; + +b) to prepare derivative works ("Derivative Works") based upon the Original +Work; + +c) to distribute copies of the Original Work and Derivative Works to the +public; + +d) to perform the Original Work publicly; and + +e) to display the Original Work publicly. + +2) Grant of Patent License. Licensor hereby grants You a world-wide, +royalty-free, non-exclusive, perpetual, sublicenseable license, under patent +claims owned or controlled by the Licensor that are embodied in the Original +Work as furnished by the Licensor, to make, use, sell and offer for sale the +Original Work and Derivative Works. + +3) Grant of Source Code License. The term "Source Code" means the preferred +form of the Original Work for making modifications to it and all available +documentation describing how to modify the Original Work. Licensor hereby +agrees to provide a machine-readable copy of the Source Code of the Original +Work along with each copy of the Original Work that Licensor distributes. +Licensor reserves the right to satisfy this obligation by placing a +machine-readable copy of the Source Code in an information repository +reasonably calculated to permit inexpensive and convenient access by You for as +long as Licensor continues to distribute the Original Work, and by publishing +the address of that information repository in a notice immediately following +the copyright notice that applies to the Original Work. + +4) Exclusions From License Grant. Neither the names of Licensor, nor the names +of any contributors to the Original Work, nor any of their trademarks or +service marks, may be used to endorse or promote products derived from this +Original Work without express prior written permission of the Licensor. Nothing +in this License shall be deemed to grant any rights to trademarks, copyrights, +patents, trade secrets or any other intellectual property of Licensor except as +expressly stated herein. No patent license is granted to make, use, sell or +offer to sell embodiments of any patent claims other than the licensed claims +defined in Section 2. No right is granted to the trademarks of Licensor even if +such marks are included in the Original Work. Nothing in this License shall be +interpreted to prohibit Licensor from licensing under different terms from this +License any Original Work that Licensor otherwise would have a right to +license. + +5) This section intentionally omitted. + +6) Attribution Rights. You must retain, in the Source Code of any Derivative +Works that You create, all copyright, patent or trademark notices from the +Source Code of the Original Work, as well as any notices of licensing and any +descriptive text identified therein as an "Attribution Notice." You must cause +the Source Code for any Derivative Works that You create to carry a prominent +Attribution Notice reasonably calculated to inform recipients that You have +modified the Original Work. + +7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that +the copyright in and to the Original Work and the patent rights granted herein +by Licensor are owned by the Licensor or are sublicensed to You under the terms +of this License with the permission of the contributor(s) of those copyrights +and patent rights. Except as expressly stated in the immediately proceeding +sentence, the Original Work is provided under this License on an "AS IS" BASIS +and WITHOUT WARRANTY, either express or implied, including, without limitation, +the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. +This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No +license to Original Work is granted hereunder except under this disclaimer. + +8) Limitation of Liability. Under no circumstances and under no legal theory, +whether in tort (including negligence), contract, or otherwise, shall the +Licensor be liable to any person for any direct, indirect, special, incidental, +or consequential damages of any character arising as a result of this License +or the use of the Original Work including, without limitation, damages for loss +of goodwill, work stoppage, computer failure or malfunction, or any and all +other commercial damages or losses. This limitation of liability shall not +apply to liability for death or personal injury resulting from Licensor's +negligence to the extent applicable law prohibits such limitation. Some +jurisdictions do not allow the exclusion or limitation of incidental or +consequential damages, so this exclusion and limitation may not apply to You. + +9) Acceptance and Termination. If You distribute copies of the Original Work or +a Derivative Work, You must make a reasonable effort under the circumstances to +obtain the express assent of recipients to the terms of this License. Nothing +else but this License (or another written agreement between Licensor and You) +grants You permission to create Derivative Works based upon the Original Work +or to exercise any of the rights granted in Section 1 herein, and any attempt +to do so except under the terms of this License (or another written agreement +between Licensor and You) is expressly prohibited by U.S. copyright law, the +equivalent laws of other countries, and by international treaty. Therefore, by +exercising any of the rights granted to You in Section 1 herein, You indicate +Your acceptance of this License and all of its terms and conditions. + +10) Termination for Patent Action. This License shall terminate automatically +and You may no longer exercise any of the rights granted to You by this License +as of the date You commence an action, including a cross-claim or counterclaim, +against Licensor or any licensee alleging that the Original Work infringes a +patent. This termination provision shall not apply for an action alleging +patent infringement by combinations of the Original Work with other software or +hardware. + +11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this +License may be brought only in the courts of a jurisdiction wherein the +Licensor resides or in which Licensor conducts its primary business, and under +the laws of that jurisdiction excluding its conflict-of-law provisions. The +application of the United Nations Convention on Contracts for the International +Sale of Goods is expressly excluded. Any use of the Original Work outside the +scope of this License or after its termination shall be subject to the +requirements and penalties of the U.S. Copyright Act, 17 U.S.C. § 101 et +seq., the equivalent laws of other countries, and international treaty. This +section shall survive the termination of this License. + +12) Attorneys Fees. In any action to enforce the terms of this License or +seeking damages relating thereto, the prevailing party shall be entitled to +recover its costs and expenses, including, without limitation, reasonable +attorneys' fees and costs incurred in connection with such action, including +any appeal of such action. This section shall survive the termination of this +License. + +13) Miscellaneous. This License represents the complete agreement concerning +the subject matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent necessary to +make it enforceable. + +14) Definition of "You" in This License. "You" throughout this License, whether +in upper or lower case, means an individual or a legal entity exercising rights +under, and complying with all of the terms of, this License. For legal +entities, "You" includes any entity that controls, is controlled by, or is +under common control with you. For 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. + +15) Right to Use. You may use the Original Work in all ways not otherwise +restricted or conditioned by this License or by law, and Licensor promises not +to interfere with or be responsible for such uses by You. + +This license is Copyright (C) 2003-2004 Lawrence E. Rosen. All rights reserved. +Permission is hereby granted to copy and distribute this license without +modification. This license may not be modified without the express written +permission of its copyright owner. diff --git a/MAKETESTS.sh b/MAKETESTS.sh new file mode 100755 index 000000000..284a95335 --- /dev/null +++ b/MAKETESTS.sh @@ -0,0 +1,78 @@ +#!/bin/bash + +set -e + +cd $(dirname $0) + +# +# Be sure the machine side of the test suite is up to date +# +std/grind.sh + + +# +# Start Gunk +# +OLDIFS=$IFS +IFS="" +HEADER=`cat< "tests/std_"${CATEGORY}".js" + IFS=$OLDIFS + fi +done + +for i in std/machines/*.json; do + BASE=$(basename $i .json) + CATEGORY=$(echo ${BASE} | sed -e "s/^\([^_]\+\)_.*/\\1/") + echo ' function(){' >> "tests/std_"${CATEGORY}".js" + echo ' var test = CSL.System.Tests.getTest("'${BASE}'");' >> "tests/std_"${CATEGORY}".js" + echo ' doh.assertEqual(test.result, test.run());' >> "tests/std_"${CATEGORY}".js" + echo ' },' >> "tests/std_"${CATEGORY}".js" +done + +for i in tests/std_*.js; do + OLDIFS=$IFS + IFS="" + echo $(footer) >> ${i} + IFS=$OLDIFS +done \ No newline at end of file diff --git a/README.txt b/README.txt new file mode 100644 index 000000000..f5c66b177 --- /dev/null +++ b/README.txt @@ -0,0 +1,144 @@ +citeproc-js: Yet Another CSL Processor + +Frank Bennett +Graduate School of Law, Nagoya University +2009.04.18 +========================================= + +This is an effort to implement a fast and robust CSL processor in +Javascript, for use by the Zotero project. + + +---------------- +The architecture +---------------- + +The following link has (dated but to be maintained) JsDoc documentation +that provides some guidance re how things fit together: + + http://gsl-nagoya-u.net/http/pub/citeproc-js-doc/index.html + +In rough outline, there is a two-stage compiler (Build and Configure) +that can be used to construct an object with a few methods useful for +loading CSL styles, and using them to render citations and bibliographies. + +The object has several sub-objects. The most important are "registry", +"citation", "bibliography", "citation_sort" and "bibliography_sort". +The latter four hold option containers and token lists for particular +renderings defined in a CSL style. The top-level methods on the main +object apply execution wrappers to the token lists to produce output +strings. The "registry" object provides a persistent store for +managing the bibliography sort order, disambiguation, and +back-references. + +Output is generated by passing data items to a wrapper function that +scans the appropriate token lists and renders strings based on the +functions registered in the tokens. The output queue is built as +a nested hierarchy which is then collapsed into a formatted string +for output. + + +-------------------- +Testing, testing ... +-------------------- + +As you can see from the sources, tests are kind of important here. +Javascript is notoriously unfriendly when it comes to debugging, +the processor is charged with and extremely complex formatting +task, and the target community is unforgiving. Things have to +work correctly, and the only way to assure that they do is to +test the code thoroughly as it is written. + +Test suites are useful to us in all sorts of ways. Standard tests +(housed under ./std) help to assure that the various CSL +implementations produce identical results. The internal tests +specific to citeproc-js provide insurance against unexpected +side-effects in the event of wholesale refactoring (of which +there has been more than I would like to remember). Tests +are not just about QA; they improve the clarity of program operation, +and reduce the resistance to rewrites that may be needed to reduce +overall complexity. The suites are an integral part of the +development process; if you modify or add code to the processor +(and contributions are welcome!), be sure to complement your changes +with tests. It's the right thing to do. + + +-------------- +Archive layout +-------------- + +The sources of the program are under ./src. The ./locale and ./style +directories contain standard files from the CSL distribution, for +use in testing. The tests are located under ./tests (for those +specific to citeproc-js) and ./std (for the standard CSL test +fixtures). + +The basic testing framework we use is DOH, from the Dojo project, +run via the Rhino JS interpreter that runs atop Java. If your +machine has Java installed, the ./dojo and ./rhino directories +provide the remaining infrastructure needed to run the tests; they +should work out of the box (see below). + +The ./data directory contains input files for running tests. Over +time, this material will be moved into the standard test suite +area, and the directory will go away. The ./ref directory +contains a grab-bag of documents and files stashed or shoved aside +during development. + + +------------- +Running tests +------------- + +After checkout or update, be sure to run the script ./std/grind.sh. +This will generate the machine-readable version of the standard +test cases, required by the test runner. + +The script that runs all the tests is ./runtests.sh in the top-level +directory. Rintze Zelle has very kindly provided a ./runtests.bat file +as well, and the tests reportedly run (and we hope also break) equally +well on Windows boxes. + +If you have a Java interpreter installed and are on Linux (or possibly +a Mac), you can run the tests in a checkout from a terminal by +entering the top directory and just typing ./runtests.sh. + +On Windows, the ./runtests.bat file can be run from the command prompt, +the only caveat being that the command prompt should be set to the drive +harboring the SVN working copy, e.g. "D:\>D:\xbiblio\citeproc-js\ +trunk\runtests.bat" works whereas "C:\>D:\xbiblio\citeproc-js\ +trunk\runtests.bat" gives an error when executed. + + +------------------- +Running the program +------------------- + +While development is mainly aimed at supporting Zotero, the processor +contains no Zotero dependencies, and should work as a standalone +formatting engine. A sample is contained in the ./rpc-stuff directory. + + +---------- +Other info +---------- + +Information on writing tests using the DOH framework can be found here: + + http://www.ibm.com/developerworks/web/library/wa-aj-doh/index.html + +The DOH testing framework is part of the Dojo project. The dojo +framework files under ./dojo are from a release instance of the +product compiled from the original source. (Compiling from scratch +was necessary in order to run DOH from the command line as we do +here.) If you want to use DOH for your own projects, the sources for +Dojo are available here: + + http://download.dojotoolkit.org/ + +I had a small problem with timeouts on my (slow) machine, which +required commenting out one line of the DOH code. That change is +incorporated in the configured instance of DOH included in these +sources. + +Enjoy! diff --git a/REPLACE.sh b/REPLACE.sh new file mode 100755 index 000000000..3c93ea74a --- /dev/null +++ b/REPLACE.sh @@ -0,0 +1,35 @@ +#!/bin/bash + + +if [ "$1" == "--action" ]; then + ACTION="1" + shift +fi + +if [ "$2" == "" ]; then + echo Must give two values. First is the value to replace, the second is the replacement value. + exit 1 +fi +if [ "$3" != "" ]; then + echo Must give ONLY two values. First is the value to replace, the second is the replacement value. + exit 1 +fi + +if [ "$2" == "NOTHING" ]; then + ARG2="" +else + ARG2="$2" +fi +for i in tests/*.js src/*.js std/humans/*.txt; do + if [ $(grep -c "$1" $i) -gt 0 ]; then + if [ "$ACTION" == "1" ]; then + cat $i | sed -e "s~$1~${ARG2}~g" > $i.NEW + mv $i.NEW $i + else + echo "-----OLD-----" + grep "$1" $i + echo "-----NEW-----" + grep "$1" $i | sed -e "s~$1~${ARG2}~" + fi + fi +done diff --git a/TODO.pdf b/TODO.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5dc6dee0af4a8b1fb55eda376750d69a5e30c139 GIT binary patch literal 64109 zcmce-WmsKJvo?skdkC^2cyM-|JWZl?KW?e{CxOyKfe`pZ5`(D zRHB@jFIqkJvwDqq^nP_bOdF%(>Mp<7BGhhvXB92v(L>*R@47s-CIJ5lr;oaz1S%^g|NobIxA<;`Rk(>-sPqHY#aH{;?m~RRmPKY3y1a6*`1aY78(5? zk6KD{q@&b{@kyE1E91T8xin*{fmW{mJSCb+-QV_%8^5woYTCem--DmS0x^VlmHP=@ zQoqFHxcK6+?PVmXcv?IX((??GEZ`}7)i(8gVfW{YGf#!LYOCWcw#5yq(-F`@>B}$c zFEb^#Ai6n8(PTMm>?B8QRgc@F_v7Got7?YEAW5X6@izVc3?W&LZmq90r zP2yDV`)A>cL*@WVn{oPbCQNUD(IKGY^3CV%74^<`jlPS4_ z3w?*!Fp(_ILYgH5@sDERQt*BKuAM|b;st{JN0gnLqYPn}poTF;{!oBylq;D9e;h z=j2Od(n*GJFmZX@2v$&ktR&{}JEj~)Oo@mit|2HwFuMbPW7K(|n7>E;fWCLH;PaGS zP#1hgDm7KVj$D*cF2zy0jJpj}AN5dJxn5Wm*4j;wh)1<*6*v~;_w^Gwp7k;qde&FB zVs_=^T;96-k5%jD35P-v_p8#=Ts?5Bq&y1O_p#Q*+J$52i&BNB{~=M7 z1j)o(GV38X-7kzc!UReEiUpDzzVZB$NR_ z9woWF;57@(H72y3-~edCd|r&AN4Wx4!23AEj8TQdDy&79WH>&X4!O}5hn?h1TqjQ6 zUYTV9_N`N%6o>RhAZJOl1XE!FVP5J7ltT6g;oAaHH)V zn~WhS$)nQsTXHIITsbv-Dn#*HrYG_E{3>4HY4bNj5lp|)%OspK&Jif2AI0WXlC}A- zIru1J1Mhv+>Lo;sZ&yY7<_!JN09lbe1I)^3WE-Iy*hnCgMIzICf^_Znxo3RZ+qU$h z59qP5W}IxkCoO_2(Z_ydaHBQ`8A`Ar-k*G(*x%0csId=JkQ*#J8z65HBAP~j;fxb_ zfYD(he)-*_^4W+k>m_?W4#&FlJ7;au=o7<0ttZ5fbZD7=E@9*2&UuJcI^{mPFk0IA z10$SndN|tv2}pS>CY(7$XwW+)?CVj_%>zwiB9NQ3To_*9evAzXN$!z{1=rEfFnf^w z#3GZ?C#>Yn2ml8`zTky*5hiE;)*3o>uaUqA3;b@~e9dt4==*1@W5(R>1Mjg82+$!m4yjdvg1Mg$NbD%c5{Ms2fxJWzrJe8;jjo`C-znU`=6uSKQ@lu7_Y zmm2F(WuWc9uN=18c)k}s0^l@_3vx>@i>oXAh z*dj8}*GQLh-T_~hBq}##9Q*qcW38nhkw!~PKS0q?!UAMibZ4rt4is{GtZ~IJZ-;<^ zu}hzOO-NI7ZUzf<*&luRLVd<2Jz#F4HTis9cZPJ!)%z?yN*)8l!o&~NyVw=7`D6?qi3?;55=~gC&#^u~Al-Y?DF^ z%0A-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%0A+w`$SNdd%1?1}BWf*e(F~_3JI*v; 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 G!})(w?*qvI literal 0 HcmV?d00001 diff --git a/TODO.txt b/TODO.txt new file mode 100644 index 000000000..7e39afd94 --- /dev/null +++ b/TODO.txt @@ -0,0 +1,81 @@ +# TODO + +- Flip-flops to be cleared with Bruce D'Arcus and CSL group and + implemented. + (pending. fbennett 2009-04-11) + +- Numbers. First off, the current stuff needs to be + implemented, with extensions for ranging. + (pending. fbennett 2009-04-17) + +- Numbers to be handled as rangeable objects in the + output queue. Rintze Zelle's tests of year-suffix + collapsing need to pass. Formatting of number elements + to be implemented somehow. + (pending. fbennett 2009-04-11) + +- Aspiring beyond that, there are CSL issues with numbers to be + proposed. Number could be a span element with per-atom formatting, + as has been done with names. This will allow superscripting + or ordinal suffixes, and maybe some other useful things. + (pending. fbennett 2009-04-13) + +- Handle position evaluation and back-references inside the + processor via the registry. Zotero's own position evaluation + is currently broken, and although it may be fixed soon, demanding + complex evaluation like this is likely to lead to further trouble + in other applications. If the processor receives the note number + from the application, the CSL processor can take care of the rest. + First step will be to draw my positioning patches to + integration.js into the citeproc-js code base, and figure out + how to stitch it in via an extension to the registry. + (pending fbennett 2009-04-17) + +- Various options and special formatting attributes need to be + implemented. + (a very short list of these remain. fbennett 2009-04-11) + +- Deletion support for the registry. + (pending. fbennett 2009-04-11) + +- Processor to report the full list of fields required to render + any item in the compiled style, to permit the application to + optimize database fetches? + (pending. fbennett 2009-04-11) + +- Localized date formatting needs to be implemented? + Maybe implement a proposal, post to xbib list. + (pending. fbennett 2009-04-11) + +--------------- +(Working notes) +--------------- + +/* + * ATTRIBUTES TO COME + * position (pending) + * delimiter-precedes-last (stored, pending) + * plural (pending) + * locator (pending) + * include-period (pending) + * + * + * OPTIONS + * collapse + * citation-number (awaits range support) + * year (done) + * year-suffix (done) + * line-spacing + * [number] (pending) + * entry-spacing + * [number] (pending) + * hanging-indent + * [boolean] (pending) + * second-field-align + * [true/margin] (pending) + * subsequent-author-substitute + * [text] (pending) + * + * CONDITIONAL + * is-numeric (written, untested) + */ diff --git a/bundle.sh b/bundle.sh new file mode 100755 index 000000000..91c7397e5 --- /dev/null +++ b/bundle.sh @@ -0,0 +1,90 @@ +#!/bin/bash + +set -e + +cd $(dirname $0) + +if [ ! -d jsdoc ]; then + echo This script requires jsdoc, which is available here: + echo " http://code.google.com/p/jsdoc-toolkit/w/list" + exit 1 +fi + +if [ -d tmp ]; then + rm -fR tmp +fi +if [ -f stripped.js ]; then + rm stripped.js +fi +mkdir tmp + +cd src + +function makepaths (){ + filepaths="" + for f in $1; do + filepaths="$filepaths tmp/$f.js" + done +} + +files="csl core render build configure util util_token util_dates util_disambiguate util_names util_sort factory state commands blob token stack ambigconfig registry disambiguate lib elements libnames attributes output queue formatters formats range system xml xmle4x xmljs retrieval tests" + + + +makepaths "${files}" + +for i in $files; do + cat ${i}.js | sed -e "0,/^\(CSL\|\/\)/{/^\(CSL\|\/\)/p;d;}" > ../tmp/NEW + mv ../tmp/NEW ../tmp/${i}.js + cat ../tmp/${i}.js | sed -e "/^[[:space:]]*\/\*/,/^[[:space:]]*\*\//d" > ../tmp/NEW + mv ../tmp/NEW ../tmp/NEW.js + cat ../tmp/NEW.js | sed -e "/^[[:space:]]*load/d" > ../tmp/NEW + mv ../tmp/NEW ../tmp/NEW.js + cat ../tmp/NEW.js | sed -e "/^[[:space:]]*$/d" > ../tmp/NEW + mv ../tmp/NEW ../tmp/NEW.js + cat ../tmp/NEW.js | sed -e "/^[[:space:]]\/\/.*$/d" > ../tmp/NEW + mv ../tmp/NEW ../tmp/NEW.js + cat ../tmp/NEW.js | sed -e "/^\/\/SNIP-START/,/^\/\/SNIP-END/d" > ../tmp/NEW + mv ../tmp/NEW ../tmp/NEW.js + cat ../tmp/NEW.js >> ../stripped.js +done +rm ../tmp/NEW* + +cd .. +echo $(cat stripped.js | wc -l) lines in product + +cp stripped.js rpc-stuff/citeproc-js-combined.js + +#cd rpc-stuff +#./citeproc-js-rpc.py +#cd .. + +rm stripped.js + +## JSDoc toolkit is available from: http://code.google.com/p/jsdoc-toolkit/ + +if [ "$1" == "--upload" ]; then + + if [ -f jsdoc/jsdoc.log ]; then + rm jsdoc/jsdoc.log + fi + + if [ "--help" == "$1" ]; then + java -jar jsdoc/jsrun.jar jsdoc/app/run.js --help + else + java -jar jsdoc/jsrun.jar jsdoc/app/run.js \ + -p \ + --out=jsdoc/jsdoc.log \ + --directory=citeproc-js-doc \ + -t=jsdoc/templates/jsdoc \ + $filepaths + fi + + tar cfz citeproc-js-doc.tar.gz citeproc-js-doc + scp citeproc-js-doc.tar.gz gsl-nagoya-u.net:/http/pub + ssh gsl-nagoya-u.net ./citeproc-js-doc.sh + rm citeproc-js-doc.tar.gz + rm -fR citeproc-js-doc +fi + +rm -fR tmp diff --git a/data/ambigs-1.txt b/data/ambigs-1.txt new file mode 100644 index 000000000..12c1405ea --- /dev/null +++ b/data/ambigs-1.txt @@ -0,0 +1,14 @@ +{ + "id":"ambigs-1", + "type": "book", + "author": [ + { "name":"Asthma, Albert" }, + { "name":"Bronchitis, Bosworth" }, + { "name":"Cold, Crispin" }, + { "name":"Dropsy, David" }, + { "name":"Ebola, Elvin" }, + { "name":"Fever, Fergus" } + ], + "issued": {"year": "1990"}, + "title": "Book M" +} diff --git a/data/ambigs-10.txt b/data/ambigs-10.txt new file mode 100644 index 000000000..f2a723082 --- /dev/null +++ b/data/ambigs-10.txt @@ -0,0 +1,10 @@ +{ + "id":"ambigs-10", + "type": "book", + "author": [ + { "name":"Doe, John" }, + { "name":"Roe, Janet" } + ], + "issued": {"year": "1990"}, + "title": "Book D" +} diff --git a/data/ambigs-12.txt b/data/ambigs-12.txt new file mode 100644 index 000000000..899cce192 --- /dev/null +++ b/data/ambigs-12.txt @@ -0,0 +1,11 @@ +{ + "id":"ambigs-12", + "type": "book", + "author": [ + { "name":"Doe, John" }, + { "name":"Roe, Jane" }, + { "name":"Jones, Robert" } + ], + "issued": {"year": "1990"}, + "title": "Book C" +} diff --git a/data/ambigs-13.txt b/data/ambigs-13.txt new file mode 100644 index 000000000..a86210d66 --- /dev/null +++ b/data/ambigs-13.txt @@ -0,0 +1,11 @@ +{ + "id":"ambigs-13", + "type": "book", + "author": [ + { "name":"Doe, John" }, + { "name":"Roe, Josephine" }, + { "name":"Jones, Robert" } + ], + "issued": {"year": "1990"}, + "title": "Book B" +} diff --git a/data/ambigs-14.txt b/data/ambigs-14.txt new file mode 100644 index 000000000..f8c331710 --- /dev/null +++ b/data/ambigs-14.txt @@ -0,0 +1,11 @@ +{ + "id":"ambigs-14", + "type": "book", + "author": [ + { "name":"Doe, John" }, + { "name":"Roe, Jane" }, + { "name":"Jones, Richard" } + ], + "issued": {"year": "1990"}, + "title": "Book A" +} diff --git a/data/ambigs-2.txt b/data/ambigs-2.txt new file mode 100644 index 000000000..c9d5f953b --- /dev/null +++ b/data/ambigs-2.txt @@ -0,0 +1,14 @@ +{ + "id":"ambigs-2", + "type": "book", + "author": [ + { "name":"Asthma, Albert" }, + { "name":"Bronchitis, Bosworth" }, + { "name":"Cold, Crispin" }, + { "name":"Dropsy, David" }, + { "name":"Enteritis, Ernie" }, + { "name":"Fever, Fergus" } + ], + "issued": {"year": "1990"}, + "title": "Book L" +} diff --git a/data/ambigs-3.txt b/data/ambigs-3.txt new file mode 100644 index 000000000..9ad140b93 --- /dev/null +++ b/data/ambigs-3.txt @@ -0,0 +1,14 @@ +{ + "id":"ambigs-3", + "type": "book", + "author": [ + { "name":"Asthma, Albert" }, + { "name":"Bronchitis, Bosworth" }, + { "name":"Cold, Crispin" }, + { "name":"Dropsy, David" }, + { "name":"Ebola, Elvin" }, + { "name":"Fever, Fergus" } + ], + "issued": {"year": "1990"}, + "title": "Book K" +} diff --git a/data/ambigs-4.txt b/data/ambigs-4.txt new file mode 100644 index 000000000..4e16b24ff --- /dev/null +++ b/data/ambigs-4.txt @@ -0,0 +1,11 @@ +{ + "id":"ambigs-4", + "type": "book", + "author": [ + { "name":"Asthma, Albert" }, + { "name":"Bronchitis, Bosworth" }, + { "name":"Cold, Crispin" } + ], + "issued": {"year": "1990"}, + "title": "Book J" +} diff --git a/data/ambigs-5.txt b/data/ambigs-5.txt new file mode 100644 index 000000000..1657a35dc --- /dev/null +++ b/data/ambigs-5.txt @@ -0,0 +1,11 @@ +{ + "id":"ambigs-5", + "type": "book", + "author": [ + { "name":"Asthma, Albert" }, + { "name":"Bronchitis, Beauregarde" }, + { "name":"Cold, Crispin" } + ], + "issued": {"year": "1990"}, + "title": "Book I" +} diff --git a/data/ambigs-6.txt b/data/ambigs-6.txt new file mode 100644 index 000000000..11110d7b1 --- /dev/null +++ b/data/ambigs-6.txt @@ -0,0 +1,14 @@ +{ + "id":"ambigs-6", + "type": "book", + "author": [ + { "name":"Asthma, Alan" }, + { "name":"Bronchitis, Bosworth" }, + { "name":"Cold, Crispin" }, + { "name":"Dropsy, David" }, + { "name":"Ebola, Elvin" }, + { "name":"Fever, Fergus" } + ], + "issued": {"year": "1990"}, + "title": "Book H" +} diff --git a/data/ambigs-7.txt b/data/ambigs-7.txt new file mode 100644 index 000000000..4f4c58da3 --- /dev/null +++ b/data/ambigs-7.txt @@ -0,0 +1,10 @@ +{ + "id":"ambigs-7", + "type": "book", + "author": [ + { "name":"Doe, John" }, + { "name":"Roe, Janet" } + ], + "issued": {"year": "1990"}, + "title": "Book G" +} diff --git a/data/ambigs-8.txt b/data/ambigs-8.txt new file mode 100644 index 000000000..d2fbf97ba --- /dev/null +++ b/data/ambigs-8.txt @@ -0,0 +1,10 @@ +{ + "id":"ambigs-8", + "type": "book", + "author": [ + { "name":"Doe, John" }, + { "name":"Roe, Jane" } + ], + "issued": {"year": "1990"}, + "title": "Book F" +} diff --git a/data/ambigs-9.txt b/data/ambigs-9.txt new file mode 100644 index 000000000..0132f7105 --- /dev/null +++ b/data/ambigs-9.txt @@ -0,0 +1,10 @@ +{ + "id":"ambigs-9", + "type": "book", + "author": [ + { "name":"Doe, John" }, + { "name":"Roe, Jane" } + ], + "issued": {"year": "1990"}, + "title": "Book E" +} diff --git a/data/editor-translator-1.txt b/data/editor-translator-1.txt new file mode 100644 index 000000000..0329f60ba --- /dev/null +++ b/data/editor-translator-1.txt @@ -0,0 +1,16 @@ +{ + "id":"editor-translator-1", + "type": "book", + "editor": [ + { "name":"Asthma, Albert" }, + { "name":"Bronchitis, Bosworth" }, + { "name":"Cold, Crispin" }, + ], + "translator": [ + { "name":"Asthma, Albert" }, + { "name":"Bronchitis, Bosworth" }, + { "name":"Cold, Crispin" }, + ], + "issued": {"year": "1990"}, + "title": "Book One" +} diff --git a/data/editor-translator-2.txt b/data/editor-translator-2.txt new file mode 100644 index 000000000..55276c74d --- /dev/null +++ b/data/editor-translator-2.txt @@ -0,0 +1,16 @@ +{ + "id":"editor-translator-2", + "type": "book", + "editor": [ + { "name":"Asthma, Albert" }, + { "name":"Bronchitis, Bosworth" }, + { "name":"Cold, Crispin" }, + ], + "translator": [ + { "name":"Asthma, Albert" }, + { "name":"Bronchitis, Bosworth" }, + { "name":"Cold, Constantine" }, + ], + "issued": {"year": "1990"}, + "title": "Book One" +} diff --git a/data/institution-name-1.txt b/data/institution-name-1.txt new file mode 100644 index 000000000..769f209f0 --- /dev/null +++ b/data/institution-name-1.txt @@ -0,0 +1,9 @@ +{ + "id":"institution-name-1", + "type": "book", + "author": [ + { "name":"Ministry of Education, Sports, Culture, Science and Technology !!" } + ], + "issued": "2006", + "title": "White Paper on Education, Sports, Culture, Science and Technology" +} diff --git a/data/seven-names-1.txt b/data/seven-names-1.txt new file mode 100644 index 000000000..01eec3078 --- /dev/null +++ b/data/seven-names-1.txt @@ -0,0 +1,14 @@ +{ + "type": "book", + "author": [ + { "name":"Чайковский, Пётр Ильич" }, + { "name":"van Winkle, Rip" }, + { "name":"我妻, 栄" }, + { "name":"Thucydides, Carl, III" }, + { "name":"Tokugawa, Ieyasu !" }, + { "name":"Ministry of Fear, Loathing and Error !!" }, + { "name":"Prince" } + ], + "issued": "2000", + "title": "Our Story" +} diff --git a/data/seven-names-plus-two-1.txt b/data/seven-names-plus-two-1.txt new file mode 100644 index 000000000..077b02f1b --- /dev/null +++ b/data/seven-names-plus-two-1.txt @@ -0,0 +1,19 @@ +{ + "id":"seven-names-plus-two-1", + "type": "book", + "author": [ + { "name":"Чайковский, Пётр Ильич" }, + { "name":"van Winkle, Rip" }, + { "name":"我妻, 栄" }, + { "name":"Thucydides, Carl, III" }, + { "name":"Tokugawa, Ieyasu !" }, + { "name":"Ministry of Fear, Loathing and Error !!" }, + { "name":"Prince" } + ], + "editor":[ + { "name":"Doe, John" }, + { "name":"Roe, Jane" }, + ], + "issued": "2000", + "title": "Our Story" +} diff --git a/data/simple-japanese-name-1.txt b/data/simple-japanese-name-1.txt new file mode 100644 index 000000000..fe28d9ccc --- /dev/null +++ b/data/simple-japanese-name-1.txt @@ -0,0 +1,8 @@ +{ + "type": "book", + "author": [ + { "name":"我妻, 栄" } + ], + "issued": "1960", + "title": "民法" +} diff --git a/data/simple-mongolian-name-1.txt b/data/simple-mongolian-name-1.txt new file mode 100644 index 000000000..12e8427e0 --- /dev/null +++ b/data/simple-mongolian-name-1.txt @@ -0,0 +1,9 @@ +{ + "id":"simple-mongolian-name-1", + "type": "book", + "author": [ + { "name":"Tserendorj, Balingiin" } + ], + "issued": {"year": "1925", "month":"3", "day":"4"}, + "title": "An Altogether Unknown History of Soviet-Mongolian Relations" +} diff --git a/data/simple-sticky-name-1.txt b/data/simple-sticky-name-1.txt new file mode 100644 index 000000000..5b83bb67c --- /dev/null +++ b/data/simple-sticky-name-1.txt @@ -0,0 +1,9 @@ +{ + "id":"simple-sticky-name-1", + "type": "book", + "author": [ + { "name":"Miyamoto, Musashi !" } + ], + "issued": {"year": "1645", "month":"12", "day":"27"}, + "title": "A Book of Five Rings" +} diff --git a/data/simple-western-editor-1.txt b/data/simple-western-editor-1.txt new file mode 100644 index 000000000..fc8eccfb6 --- /dev/null +++ b/data/simple-western-editor-1.txt @@ -0,0 +1,8 @@ +{ + "type": "book", + "editor": [ + { "name":"Doe, John", "uri":"http://people.org/doej" } + ], + "issued": "2000", + "title": "His Anonymous Life" +} diff --git a/data/simple-western-editor-2.txt b/data/simple-western-editor-2.txt new file mode 100644 index 000000000..a1862ca4a --- /dev/null +++ b/data/simple-western-editor-2.txt @@ -0,0 +1,8 @@ +{ + "type": "book", + "editor": [ + { "name":"Roe, Jane" } + ], + "issued": "2000", + "title": "Her Anonymous Anthology" +} diff --git a/data/simple-western-name-1.txt b/data/simple-western-name-1.txt new file mode 100644 index 000000000..177981dad --- /dev/null +++ b/data/simple-western-name-1.txt @@ -0,0 +1,9 @@ +{ + "id":"simple-western-name-1", + "type": "book", + "author": [ + { "name":"Doe, John", "uri":"http://people.org/doej" } + ], + "issued": {"year": "1965", "month":"6", "day":"1"}, + "title": "His Anonymous Life" +} diff --git a/data/simple-western-name-2.txt b/data/simple-western-name-2.txt new file mode 100644 index 000000000..db9760813 --- /dev/null +++ b/data/simple-western-name-2.txt @@ -0,0 +1,9 @@ +{ + "id":"simple-western-name-2", + "type": "book", + "author": [ + { "name":"Roe, Jane", "uri":"http://people.org/roej" } + ], + "issued": {"year": "1980", "month":"10", "day":"2"}, + "title": "Her Anonymous Life" +} diff --git a/data/simple-western-name-3.txt b/data/simple-western-name-3.txt new file mode 100644 index 000000000..349ce8915 --- /dev/null +++ b/data/simple-western-name-3.txt @@ -0,0 +1,9 @@ +{ + "id":"simple-western-name-3", + "type": "book", + "author": [ + { "name":"Doe, Joseph", "uri":"http://people.org/doej" } + ], + "issued": {"year": "1900", "month":"1", "day":"3"}, + "title": "His Anonymous Life" +} diff --git a/data/two-simple-western-editors-1.txt b/data/two-simple-western-editors-1.txt new file mode 100644 index 000000000..2a4db9f3e --- /dev/null +++ b/data/two-simple-western-editors-1.txt @@ -0,0 +1,9 @@ +{ + "type": "book", + "editor": [ + { "name":"Doe, John", "uri":"http://people.org/doej" }, + { "name":"Roe, Jane", "uri":"http://people.org/doej" } + ], + "issued": "2000", + "title": "His Anonymous Life" +} diff --git a/data/two-simple-western-names-1.txt b/data/two-simple-western-names-1.txt new file mode 100644 index 000000000..644b42160 --- /dev/null +++ b/data/two-simple-western-names-1.txt @@ -0,0 +1,10 @@ +{ + "id":"two-simple-western-names-1", + "type": "book", + "author": [ + { "name":"Doe, John", "uri":"http://people.org/doej" }, + { "name":"Roe, Jane", "uri":"http://people.org/roej" } + ], + "issued": "2000", + "title": "Our Anonymous Lives" +} diff --git a/data/western-name-with-articular-1.txt b/data/western-name-with-articular-1.txt new file mode 100644 index 000000000..7abb51b92 --- /dev/null +++ b/data/western-name-with-articular-1.txt @@ -0,0 +1,9 @@ +{ + "id":"western-name-with-articular-1", + "type": "book", + "author": [ + { "name":"van Doe, Jacques" } + ], + "issued": "1645", + "title": "A Book of Five Rings" +} diff --git a/data/western-name-with-comma-suffix-1.txt b/data/western-name-with-comma-suffix-1.txt new file mode 100644 index 000000000..3e1334fe9 --- /dev/null +++ b/data/western-name-with-comma-suffix-1.txt @@ -0,0 +1,8 @@ +{ + "type": "book", + "author": [ + { "name":"Doe, Jeffrey,! Jr." } + ], + "issued": "2001", + "title": "My Life as an Anonymous Heir" +} diff --git a/data/western-name-with-space-suffix-1.txt b/data/western-name-with-space-suffix-1.txt new file mode 100644 index 000000000..1480bffe5 --- /dev/null +++ b/data/western-name-with-space-suffix-1.txt @@ -0,0 +1,9 @@ +{ + "id":"western-name-with-space-suffix-1", + "type": "book", + "author": [ + { "name":"Doe, James, III" } + ], + "issued": "2001", + "title": "My Anonymous Heritage" +} diff --git a/data/western-name-with-space-suffix-2.txt b/data/western-name-with-space-suffix-2.txt new file mode 100644 index 000000000..29252017c --- /dev/null +++ b/data/western-name-with-space-suffix-2.txt @@ -0,0 +1,9 @@ +{ + "id":"western-name-with-space-suffix-2", + "type": "book", + "author": [ + { "name":"Doe, Jeffrey, Jr." } + ], + "issued": "2001", + "title": "My Life as an Anonymous Heir" +} diff --git a/data/year-suffixes-1.txt b/data/year-suffixes-1.txt new file mode 100644 index 000000000..7fd9fa376 --- /dev/null +++ b/data/year-suffixes-1.txt @@ -0,0 +1,9 @@ +{ + "id":"year-suffixes-1", + "type": "book", + "author": [ + { "name":"Doe, John" } + ], + "issued": {"year": "2000"}, + "title": "Paper 1" +} diff --git a/data/year-suffixes-2.txt b/data/year-suffixes-2.txt new file mode 100644 index 000000000..5de78b1ce --- /dev/null +++ b/data/year-suffixes-2.txt @@ -0,0 +1,9 @@ +{ + "id":"year-suffixes-2", + "type": "book", + "author": [ + { "name":"Doe, John" } + ], + "issued": {"year": "2000"}, + "title": "Paper 2" +} diff --git a/data/year-suffixes-3.txt b/data/year-suffixes-3.txt new file mode 100644 index 000000000..e9973f599 --- /dev/null +++ b/data/year-suffixes-3.txt @@ -0,0 +1,9 @@ +{ + "id":"year-suffixes-3", + "type": "book", + "author": [ + { "name":"Doe, John" } + ], + "issued": {"year": "2001"}, + "title": "Paper 3" +} diff --git a/dojo/LICENSE b/dojo/LICENSE new file mode 100644 index 000000000..3fa27203c --- /dev/null +++ b/dojo/LICENSE @@ -0,0 +1,195 @@ +Dojo is available under *either* the terms of the modified BSD license *or* the +Academic Free License version 2.1. As a recipient of Dojo, you may choose which +license to receive this code under (except as noted in per-module LICENSE +files). Some modules may not be the copyright of the Dojo Foundation. These +modules contain explicit declarations of copyright in both the LICENSE files in +the directories in which they reside and in the code itself. No external +contributions are allowed under licenses which are fundamentally incompatible +with the AFL or BSD licenses that Dojo is distributed under. + +The text of the AFL and BSD licenses is reproduced below. + +------------------------------------------------------------------------------- +The "New" BSD License: +********************** + +Copyright (c) 2005-2008, The Dojo Foundation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of the Dojo Foundation nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------------- +The Academic Free License, v. 2.1: +********************************** + +This Academic Free License (the "License") applies to any original work of +authorship (the "Original Work") whose owner (the "Licensor") has placed the +following notice immediately following the copyright notice for the Original +Work: + +Licensed under the Academic Free License version 2.1 + +1) Grant of Copyright License. Licensor hereby grants You a world-wide, +royalty-free, non-exclusive, perpetual, sublicenseable license to do the +following: + +a) to reproduce the Original Work in copies; + +b) to prepare derivative works ("Derivative Works") based upon the Original +Work; + +c) to distribute copies of the Original Work and Derivative Works to the +public; + +d) to perform the Original Work publicly; and + +e) to display the Original Work publicly. + +2) Grant of Patent License. Licensor hereby grants You a world-wide, +royalty-free, non-exclusive, perpetual, sublicenseable license, under patent +claims owned or controlled by the Licensor that are embodied in the Original +Work as furnished by the Licensor, to make, use, sell and offer for sale the +Original Work and Derivative Works. + +3) Grant of Source Code License. The term "Source Code" means the preferred +form of the Original Work for making modifications to it and all available +documentation describing how to modify the Original Work. Licensor hereby +agrees to provide a machine-readable copy of the Source Code of the Original +Work along with each copy of the Original Work that Licensor distributes. +Licensor reserves the right to satisfy this obligation by placing a +machine-readable copy of the Source Code in an information repository +reasonably calculated to permit inexpensive and convenient access by You for as +long as Licensor continues to distribute the Original Work, and by publishing +the address of that information repository in a notice immediately following +the copyright notice that applies to the Original Work. + +4) Exclusions From License Grant. Neither the names of Licensor, nor the names +of any contributors to the Original Work, nor any of their trademarks or +service marks, may be used to endorse or promote products derived from this +Original Work without express prior written permission of the Licensor. Nothing +in this License shall be deemed to grant any rights to trademarks, copyrights, +patents, trade secrets or any other intellectual property of Licensor except as +expressly stated herein. No patent license is granted to make, use, sell or +offer to sell embodiments of any patent claims other than the licensed claims +defined in Section 2. No right is granted to the trademarks of Licensor even if +such marks are included in the Original Work. Nothing in this License shall be +interpreted to prohibit Licensor from licensing under different terms from this +License any Original Work that Licensor otherwise would have a right to +license. + +5) This section intentionally omitted. + +6) Attribution Rights. You must retain, in the Source Code of any Derivative +Works that You create, all copyright, patent or trademark notices from the +Source Code of the Original Work, as well as any notices of licensing and any +descriptive text identified therein as an "Attribution Notice." You must cause +the Source Code for any Derivative Works that You create to carry a prominent +Attribution Notice reasonably calculated to inform recipients that You have +modified the Original Work. + +7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that +the copyright in and to the Original Work and the patent rights granted herein +by Licensor are owned by the Licensor or are sublicensed to You under the terms +of this License with the permission of the contributor(s) of those copyrights +and patent rights. Except as expressly stated in the immediately proceeding +sentence, the Original Work is provided under this License on an "AS IS" BASIS +and WITHOUT WARRANTY, either express or implied, including, without limitation, +the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. +This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No +license to Original Work is granted hereunder except under this disclaimer. + +8) Limitation of Liability. Under no circumstances and under no legal theory, +whether in tort (including negligence), contract, or otherwise, shall the +Licensor be liable to any person for any direct, indirect, special, incidental, +or consequential damages of any character arising as a result of this License +or the use of the Original Work including, without limitation, damages for loss +of goodwill, work stoppage, computer failure or malfunction, or any and all +other commercial damages or losses. This limitation of liability shall not +apply to liability for death or personal injury resulting from Licensor's +negligence to the extent applicable law prohibits such limitation. Some +jurisdictions do not allow the exclusion or limitation of incidental or +consequential damages, so this exclusion and limitation may not apply to You. + +9) Acceptance and Termination. If You distribute copies of the Original Work or +a Derivative Work, You must make a reasonable effort under the circumstances to +obtain the express assent of recipients to the terms of this License. Nothing +else but this License (or another written agreement between Licensor and You) +grants You permission to create Derivative Works based upon the Original Work +or to exercise any of the rights granted in Section 1 herein, and any attempt +to do so except under the terms of this License (or another written agreement +between Licensor and You) is expressly prohibited by U.S. copyright law, the +equivalent laws of other countries, and by international treaty. Therefore, by +exercising any of the rights granted to You in Section 1 herein, You indicate +Your acceptance of this License and all of its terms and conditions. + +10) Termination for Patent Action. This License shall terminate automatically +and You may no longer exercise any of the rights granted to You by this License +as of the date You commence an action, including a cross-claim or counterclaim, +against Licensor or any licensee alleging that the Original Work infringes a +patent. This termination provision shall not apply for an action alleging +patent infringement by combinations of the Original Work with other software or +hardware. + +11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this +License may be brought only in the courts of a jurisdiction wherein the +Licensor resides or in which Licensor conducts its primary business, and under +the laws of that jurisdiction excluding its conflict-of-law provisions. The +application of the United Nations Convention on Contracts for the International +Sale of Goods is expressly excluded. Any use of the Original Work outside the +scope of this License or after its termination shall be subject to the +requirements and penalties of the U.S. Copyright Act, 17 U.S.C. § 101 et +seq., the equivalent laws of other countries, and international treaty. This +section shall survive the termination of this License. + +12) Attorneys Fees. In any action to enforce the terms of this License or +seeking damages relating thereto, the prevailing party shall be entitled to +recover its costs and expenses, including, without limitation, reasonable +attorneys' fees and costs incurred in connection with such action, including +any appeal of such action. This section shall survive the termination of this +License. + +13) Miscellaneous. This License represents the complete agreement concerning +the subject matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent necessary to +make it enforceable. + +14) Definition of "You" in This License. "You" throughout this License, whether +in upper or lower case, means an individual or a legal entity exercising rights +under, and complying with all of the terms of, this License. For legal +entities, "You" includes any entity that controls, is controlled by, or is +under common control with you. For 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. + +15) Right to Use. You may use the Original Work in all ways not otherwise +restricted or conditioned by this License or by law, and Licensor promises not +to interfere with or be responsible for such uses by You. + +This license is Copyright (C) 2003-2004 Lawrence E. Rosen. All rights reserved. +Permission is hereby granted to copy and distribute this license without +modification. This license may not be modified without the express written +permission of its copyright owner. diff --git a/dojo/dojo/LICENSE b/dojo/dojo/LICENSE new file mode 100644 index 000000000..3fa27203c --- /dev/null +++ b/dojo/dojo/LICENSE @@ -0,0 +1,195 @@ +Dojo is available under *either* the terms of the modified BSD license *or* the +Academic Free License version 2.1. As a recipient of Dojo, you may choose which +license to receive this code under (except as noted in per-module LICENSE +files). Some modules may not be the copyright of the Dojo Foundation. These +modules contain explicit declarations of copyright in both the LICENSE files in +the directories in which they reside and in the code itself. No external +contributions are allowed under licenses which are fundamentally incompatible +with the AFL or BSD licenses that Dojo is distributed under. + +The text of the AFL and BSD licenses is reproduced below. + +------------------------------------------------------------------------------- +The "New" BSD License: +********************** + +Copyright (c) 2005-2008, The Dojo Foundation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of the Dojo Foundation nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------------- +The Academic Free License, v. 2.1: +********************************** + +This Academic Free License (the "License") applies to any original work of +authorship (the "Original Work") whose owner (the "Licensor") has placed the +following notice immediately following the copyright notice for the Original +Work: + +Licensed under the Academic Free License version 2.1 + +1) Grant of Copyright License. Licensor hereby grants You a world-wide, +royalty-free, non-exclusive, perpetual, sublicenseable license to do the +following: + +a) to reproduce the Original Work in copies; + +b) to prepare derivative works ("Derivative Works") based upon the Original +Work; + +c) to distribute copies of the Original Work and Derivative Works to the +public; + +d) to perform the Original Work publicly; and + +e) to display the Original Work publicly. + +2) Grant of Patent License. Licensor hereby grants You a world-wide, +royalty-free, non-exclusive, perpetual, sublicenseable license, under patent +claims owned or controlled by the Licensor that are embodied in the Original +Work as furnished by the Licensor, to make, use, sell and offer for sale the +Original Work and Derivative Works. + +3) Grant of Source Code License. The term "Source Code" means the preferred +form of the Original Work for making modifications to it and all available +documentation describing how to modify the Original Work. Licensor hereby +agrees to provide a machine-readable copy of the Source Code of the Original +Work along with each copy of the Original Work that Licensor distributes. +Licensor reserves the right to satisfy this obligation by placing a +machine-readable copy of the Source Code in an information repository +reasonably calculated to permit inexpensive and convenient access by You for as +long as Licensor continues to distribute the Original Work, and by publishing +the address of that information repository in a notice immediately following +the copyright notice that applies to the Original Work. + +4) Exclusions From License Grant. Neither the names of Licensor, nor the names +of any contributors to the Original Work, nor any of their trademarks or +service marks, may be used to endorse or promote products derived from this +Original Work without express prior written permission of the Licensor. Nothing +in this License shall be deemed to grant any rights to trademarks, copyrights, +patents, trade secrets or any other intellectual property of Licensor except as +expressly stated herein. No patent license is granted to make, use, sell or +offer to sell embodiments of any patent claims other than the licensed claims +defined in Section 2. No right is granted to the trademarks of Licensor even if +such marks are included in the Original Work. Nothing in this License shall be +interpreted to prohibit Licensor from licensing under different terms from this +License any Original Work that Licensor otherwise would have a right to +license. + +5) This section intentionally omitted. + +6) Attribution Rights. You must retain, in the Source Code of any Derivative +Works that You create, all copyright, patent or trademark notices from the +Source Code of the Original Work, as well as any notices of licensing and any +descriptive text identified therein as an "Attribution Notice." You must cause +the Source Code for any Derivative Works that You create to carry a prominent +Attribution Notice reasonably calculated to inform recipients that You have +modified the Original Work. + +7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that +the copyright in and to the Original Work and the patent rights granted herein +by Licensor are owned by the Licensor or are sublicensed to You under the terms +of this License with the permission of the contributor(s) of those copyrights +and patent rights. Except as expressly stated in the immediately proceeding +sentence, the Original Work is provided under this License on an "AS IS" BASIS +and WITHOUT WARRANTY, either express or implied, including, without limitation, +the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. +This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No +license to Original Work is granted hereunder except under this disclaimer. + +8) Limitation of Liability. Under no circumstances and under no legal theory, +whether in tort (including negligence), contract, or otherwise, shall the +Licensor be liable to any person for any direct, indirect, special, incidental, +or consequential damages of any character arising as a result of this License +or the use of the Original Work including, without limitation, damages for loss +of goodwill, work stoppage, computer failure or malfunction, or any and all +other commercial damages or losses. This limitation of liability shall not +apply to liability for death or personal injury resulting from Licensor's +negligence to the extent applicable law prohibits such limitation. Some +jurisdictions do not allow the exclusion or limitation of incidental or +consequential damages, so this exclusion and limitation may not apply to You. + +9) Acceptance and Termination. If You distribute copies of the Original Work or +a Derivative Work, You must make a reasonable effort under the circumstances to +obtain the express assent of recipients to the terms of this License. Nothing +else but this License (or another written agreement between Licensor and You) +grants You permission to create Derivative Works based upon the Original Work +or to exercise any of the rights granted in Section 1 herein, and any attempt +to do so except under the terms of this License (or another written agreement +between Licensor and You) is expressly prohibited by U.S. copyright law, the +equivalent laws of other countries, and by international treaty. Therefore, by +exercising any of the rights granted to You in Section 1 herein, You indicate +Your acceptance of this License and all of its terms and conditions. + +10) Termination for Patent Action. This License shall terminate automatically +and You may no longer exercise any of the rights granted to You by this License +as of the date You commence an action, including a cross-claim or counterclaim, +against Licensor or any licensee alleging that the Original Work infringes a +patent. This termination provision shall not apply for an action alleging +patent infringement by combinations of the Original Work with other software or +hardware. + +11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this +License may be brought only in the courts of a jurisdiction wherein the +Licensor resides or in which Licensor conducts its primary business, and under +the laws of that jurisdiction excluding its conflict-of-law provisions. The +application of the United Nations Convention on Contracts for the International +Sale of Goods is expressly excluded. Any use of the Original Work outside the +scope of this License or after its termination shall be subject to the +requirements and penalties of the U.S. Copyright Act, 17 U.S.C. § 101 et +seq., the equivalent laws of other countries, and international treaty. This +section shall survive the termination of this License. + +12) Attorneys Fees. In any action to enforce the terms of this License or +seeking damages relating thereto, the prevailing party shall be entitled to +recover its costs and expenses, including, without limitation, reasonable +attorneys' fees and costs incurred in connection with such action, including +any appeal of such action. This section shall survive the termination of this +License. + +13) Miscellaneous. This License represents the complete agreement concerning +the subject matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent necessary to +make it enforceable. + +14) Definition of "You" in This License. "You" throughout this License, whether +in upper or lower case, means an individual or a legal entity exercising rights +under, and complying with all of the terms of, this License. For legal +entities, "You" includes any entity that controls, is controlled by, or is +under common control with you. For 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. + +15) Right to Use. You may use the Original Work in all ways not otherwise +restricted or conditioned by this License or by law, and Licensor promises not +to interfere with or be responsible for such uses by You. + +This license is Copyright (C) 2003-2004 Lawrence E. Rosen. All rights reserved. +Permission is hereby granted to copy and distribute this license without +modification. This license may not be modified without the express written +permission of its copyright owner. diff --git a/dojo/dojo/dojo.js b/dojo/dojo/dojo.js new file mode 100644 index 000000000..15ea738e1 --- /dev/null +++ b/dojo/dojo/dojo.js @@ -0,0 +1,16 @@ +/* + Copyright (c) 2004-2008, The Dojo Foundation All Rights Reserved. + Available via Academic Free License >= 2.1 OR the modified BSD license. + see: http://dojotoolkit.org/license for details +*/ + +/* + This is a compiled version of Dojo, built for deployment and not for + development. To get an editable version, please visit: + + http://dojotoolkit.org + + for documentation and information on getting the source. +*/ + +(function(){var _1=null;if((_1||(typeof djConfig!="undefined"&&djConfig.scopeMap))&&(typeof window!="undefined")){var _2="",_3="",_4="",_5={},_6={};_1=_1||djConfig.scopeMap;for(var i=0;i<_1.length;i++){var _8=_1[i];_2+="var "+_8[0]+" = {}; "+_8[1]+" = "+_8[0]+";"+_8[1]+"._scopeName = '"+_8[1]+"';";_3+=(i==0?"":",")+_8[0];_4+=(i==0?"":",")+_8[1];_5[_8[0]]=_8[1];_6[_8[1]]=_8[0];}eval(_2+"dojo._scopeArgs = ["+_4+"];");dojo._scopePrefixArgs=_3;dojo._scopePrefix="(function("+_3+"){";dojo._scopeSuffix="})("+_4+")";dojo._scopeMap=_5;dojo._scopeMapRev=_6;}(function(){if(!this["console"]){this.console={};}var cn=["assert","count","debug","dir","dirxml","error","group","groupEnd","info","profile","profileEnd","time","timeEnd","trace","warn","log"];var i=0,tn;while((tn=cn[i++])){if(!console[tn]){(function(){var _c=tn+"";console[_c]=("log" in console)?function(){var a=Array.apply({},arguments);a.unshift(_c+":");console["log"](a.join(" "));}:function(){};})();}}if(typeof dojo=="undefined"){this.dojo={_scopeName:"dojo",_scopePrefix:"",_scopePrefixArgs:"",_scopeSuffix:"",_scopeMap:{},_scopeMapRev:{}};}var d=dojo;if(typeof dijit=="undefined"){this.dijit={_scopeName:"dijit"};}if(typeof dojox=="undefined"){this.dojox={_scopeName:"dojox"};}if(!d._scopeArgs){d._scopeArgs=[dojo,dijit,dojox];}d.global=this;d.config={isDebug:false,debugAtAllCosts:false};if(typeof djConfig!="undefined"){for(var _f in djConfig){d.config[_f]=djConfig[_f];}}var _10=["Browser","Rhino","Spidermonkey","Mobile"];var t;while((t=_10.shift())){d["is"+t]=false;}dojo.locale=d.config.locale;var rev="$Rev: 15997 $".match(/\d+/);dojo.version={major:0,minor:0,patch:0,flag:"dev",revision:rev?+rev[0]:999999,toString:function(){with(d.version){return major+"."+minor+"."+patch+flag+" ("+revision+")";}}};if(typeof OpenAjax!="undefined"){OpenAjax.hub.registerLibrary(dojo._scopeName,"http://dojotoolkit.org",d.version.toString());}dojo._mixin=function(obj,_14){var _15={};for(var x in _14){if(_15[x]===undefined||_15[x]!=_14[x]){obj[x]=_14[x];}}if(d["isIE"]&&_14){var p=_14.toString;if(typeof p=="function"&&p!=obj.toString&&p!=_15.toString&&p!="\nfunction toString() {\n [native code]\n}\n"){obj.toString=_14.toString;}}return obj;};dojo.mixin=function(obj,_19){for(var i=1,l=arguments.length;i0){console.warn("files still in flight!");return;}d._callLoaded();};dojo._callLoaded=function(){if(typeof setTimeout=="object"||(dojo.config.useXDomain&&d.isOpera)){if(dojo.isAIR){setTimeout(function(){dojo.loaded();},0);}else{setTimeout(dojo._scopeName+".loaded();",0);}}else{d.loaded();}};dojo._getModuleSymbols=function(_4b){var _4c=_4b.split(".");for(var i=_4c.length;i>0;i--){var _4e=_4c.slice(0,i).join(".");if((i==1)&&!this._moduleHasPrefix(_4e)){_4c[0]="../"+_4c[0];}else{var _4f=this._getModulePrefix(_4e);if(_4f!=_4e){_4c.splice(0,i,_4f);break;}}}return _4c;};dojo._global_omit_module_check=false;dojo.loadInit=function(_50){_50();};dojo._loadModule=dojo.require=function(_51,_52){_52=this._global_omit_module_check||_52;var _53=this._loadedModules[_51];if(_53){return _53;}var _54=this._getModuleSymbols(_51).join("/")+".js";var _55=(!_52)?_51:null;var ok=this._loadPath(_54,_55);if(!ok&&!_52){throw new Error("Could not load '"+_51+"'; last tried '"+_54+"'");}if(!_52&&!this._isXDomain){_53=this._loadedModules[_51];if(!_53){throw new Error("symbol '"+_51+"' is not defined after loading '"+_54+"'");}}return _53;};dojo.provide=function(_57){_57=_57+"";return (d._loadedModules[_57]=d.getObject(_57,true));};dojo.platformRequire=function(_58){var _59=_58.common||[];var _5a=_59.concat(_58[d._name]||_58["default"]||[]);for(var x=0;x<_5a.length;x++){var _5c=_5a[x];if(_5c.constructor==Array){d._loadModule.apply(d,_5c);}else{d._loadModule(_5c);}}};dojo.requireIf=function(_5d,_5e){if(_5d===true){var _5f=[];for(var i=1;i0&&!(j==1&&_70[0]=="")&&_70[j]==".."&&_70[j-1]!=".."){if(j==(_70.length-1)){_70.splice(j,1);_70[j-1]="";}else{_70.splice(j-1,2);j-=2;}}}}_6d.path=_70.join("/");}}}}uri=[];if(_6d.scheme){uri.push(_6d.scheme,":");}if(_6d.authority){uri.push("//",_6d.authority);}uri.push(_6d.path);if(_6d.query){uri.push("?",_6d.query);}if(_6d.fragment){uri.push("#",_6d.fragment);}}this.uri=uri.join("");var r=this.uri.match(ore);this.scheme=r[2]||(r[1]?"":n);this.authority=r[4]||(r[3]?"":n);this.path=r[5];this.query=r[7]||(r[6]?"":n);this.fragment=r[9]||(r[8]?"":n);if(this.authority!=n){r=this.authority.match(ire);this.user=r[3]||n;this.password=r[4]||n;this.host=r[6]||r[7];this.port=r[9]||n;}};dojo._Url.prototype.toString=function(){return this.uri;};dojo.moduleUrl=function(_73,url){var loc=d._getModuleSymbols(_73).join("/");if(!loc){return null;}if(loc.lastIndexOf("/")!=loc.length-1){loc+="/";}var _76=loc.indexOf(":");if(loc.charAt(0)!="/"&&(_76==-1||_76>loc.indexOf("/"))){loc=d.baseUrl+loc;}return new d._Url(loc,url);};})();if(dojo.config["baseUrl"]){dojo.baseUrl=dojo.config["baseUrl"];}else{dojo.baseUrl="./";}dojo.locale=dojo.locale||String(java.util.Locale.getDefault().toString().replace("_","-").toLowerCase());dojo._name="rhino";dojo.isRhino=true;if(typeof print=="function"){console.debug=print;}if(typeof dojo["byId"]=="undefined"){dojo.byId=function(id,doc){if(id&&(typeof id=="string"||id instanceof String)){if(!doc){doc=document;}return doc.getElementById(id);}return id;};}dojo._loadUri=function(uri,cb){try{var _7b=(new java.io.File(uri)).exists();if(!_7b){try{var _7c=(new java.net.URL(uri)).openStream();_7c.close();}catch(e){return false;}}if(cb){var _7d=(_7b?readText:readUri)(uri,"UTF-8");cb(eval("("+_7d+")"));}else{load(uri);}return true;}catch(e){console.debug("rhino load('"+uri+"') failed. Exception: "+e);return false;}};dojo.exit=function(_7e){quit(_7e);};dojo._rhinoCurrentScriptViaJava=function(_7f){var _80=Packages.org.mozilla.javascript.Context.getCurrentContext().getOptimizationLevel();var caw=new java.io.CharArrayWriter();var pw=new java.io.PrintWriter(caw);var exc=new java.lang.Exception();var s=caw.toString();var _85=s.match(/[^\(]*\.js\)/gi);if(!_85){throw Error("cannot parse printStackTrace output: "+s);}var _86=((typeof _7f!="undefined")&&(_7f))?_85[_7f+1]:_85[_85.length-1];_86=_85[3];if(!_86){_86=_85[1];}if(!_86){throw Error("could not find js file in printStackTrace output: "+s);}return _86;};function readText(_87,_88){_88=_88||"utf-8";var jf=new java.io.File(_87);var is=new java.io.FileInputStream(jf);return dj_readInputStream(is,_88);};function readUri(uri,_8c){var _8d=(new java.net.URL(uri)).openConnection();_8c=_8c||_8d.getContentEncoding()||"utf-8";var is=_8d.getInputStream();return dj_readInputStream(is,_8c);};function dj_readInputStream(is,_90){var _91=new java.io.BufferedReader(new java.io.InputStreamReader(is,_90));try{var sb=new java.lang.StringBuffer();var _93="";while((_93=_91.readLine())!==null){sb.append(_93);sb.append(java.lang.System.getProperty("line.separator"));}return sb.toString();}finally{_91.close();}};if((!dojo.config.libraryScriptUri)||(!dojo.config.libraryScriptUri.length)){try{dojo.config.libraryScriptUri=dojo._rhinoCurrentScriptViaJava(1);}catch(e){if(dojo.config["isDebug"]){print("\n");print("we have no idea where Dojo is located.");print("Please try loading rhino in a non-interpreted mode or set a");print("\n\tdjConfig.libraryScriptUri\n");print("Setting the dojo path to './'");print("This is probably wrong!");print("\n");print("Dojo will try to load anyway");}dojo.config.libraryScriptUri="./";}}dojo.doc=typeof (document)!="undefined"?document:null;dojo.body=function(){return document.body;};try{setTimeout;clearTimeout;}catch(e){dojo._timeouts=[];function clearTimeout(idx){if(!dojo._timeouts[idx]){return;}dojo._timeouts[idx].stop();};function setTimeout(_95,_96){var def={sleepTime:_96,hasSlept:false,run:function(){if(!this.hasSlept){this.hasSlept=true;java.lang.Thread.currentThread().sleep(this.sleepTime);}try{_95();}catch(e){console.debug("Error running setTimeout thread:"+e);}}};var _98=new java.lang.Runnable(def);var _99=new java.lang.Thread(_98);_99.start();return dojo._timeouts.push(_99)-1;};}if(dojo.config["modulePaths"]){for(var _9a in dojo.config["modulePaths"]){dojo.registerModulePath(_9a,dojo.config["modulePaths"][_9a]);}}if(!dojo._hasResource["dojo._base.lang"]){dojo._hasResource["dojo._base.lang"]=true;dojo.provide("dojo._base.lang");dojo.isString=function(it){return !!arguments.length&&it!=null&&(typeof it=="string"||it instanceof String);};dojo.isArray=function(it){return it&&(it instanceof Array||typeof it=="array");};dojo.isFunction=(function(){var _9d=function(it){return it&&(typeof it=="function"||it instanceof Function);};return dojo.isSafari?function(it){if(typeof it=="function"&&it=="[object NodeList]"){return false;}return _9d(it);}:_9d;})();dojo.isObject=function(it){return it!==undefined&&(it===null||typeof it=="object"||dojo.isArray(it)||dojo.isFunction(it));};dojo.isArrayLike=function(it){var d=dojo;return it&&it!==undefined&&!d.isString(it)&&!d.isFunction(it)&&!(it.tagName&&it.tagName.toLowerCase()=="form")&&(d.isArray(it)||isFinite(it.length));};dojo.isAlien=function(it){return it&&!dojo.isFunction(it)&&/\{\s*\[native code\]\s*\}/.test(String(it));};dojo.extend=function(_a4,_a5){for(var i=1,l=arguments.length;i2){return dojo._hitchArgs.apply(dojo,arguments);}if(!_af){_af=_ae;_ae=null;}if(dojo.isString(_af)){_ae=_ae||dojo.global;if(!_ae[_af]){throw (["dojo.hitch: scope[\"",_af,"\"] is null (scope=\"",_ae,"\")"].join(""));}return function(){return _ae[_af].apply(_ae,arguments||[]);};}return !_ae?_af:function(){return _af.apply(_ae,arguments||[]);};};dojo.delegate=dojo._delegate=(function(){function TMP(){};return function(obj,_b1){TMP.prototype=obj;var tmp=new TMP();if(_b1){dojo._mixin(tmp,_b1);}return tmp;};})();(function(){var _b3=function(obj,_b5,_b6){return (_b6||[]).concat(Array.prototype.slice.call(obj,_b5||0));};var _b7=function(obj,_b9,_ba){var arr=_ba||[];for(var x=_b9||0;x=0){this._fire();}return this;},_fire:function(){var _130=this.chain;var _131=this.fired;var res=this.results[_131];var self=this;var cb=null;while((_130.length>0)&&(this.paused==0)){var f=_130.shift()[_131];if(!f){continue;}var func=function(){var ret=f(res);if(typeof ret!="undefined"){res=ret;}_131=((res instanceof Error)?1:0);if(res instanceof dojo.Deferred){cb=function(res){self._resback(res);self.paused--;if((self.paused==0)&&(self.fired>=0)){self._fire();}};this.paused++;}};if(dojo.config.isDebug){func.call(this);}else{try{func.call(this);}catch(err){_131=1;res=err;}}}this.fired=_131;this.results[_131]=res;if((cb)&&(this.paused)){res.addBoth(cb);}}});}if(!dojo._hasResource["dojo._base.json"]){dojo._hasResource["dojo._base.json"]=true;dojo.provide("dojo._base.json");dojo.fromJson=function(json){return eval("("+json+")");};dojo._escapeString=function(str){return ("\""+str.replace(/(["\\])/g,"\\$1")+"\"").replace(/[\f]/g,"\\f").replace(/[\b]/g,"\\b").replace(/[\n]/g,"\\n").replace(/[\t]/g,"\\t").replace(/[\r]/g,"\\r");};dojo.toJsonIndentStr="\t";dojo.toJson=function(it,_13c,_13d){if(it===undefined){return "undefined";}var _13e=typeof it;if(_13e=="number"||_13e=="boolean"){return it+"";}if(it===null){return "null";}if(dojo.isString(it)){return dojo._escapeString(it);}var _13f=arguments.callee;var _140;_13d=_13d||"";var _141=_13c?_13d+dojo.toJsonIndentStr:"";var tf=it.__json__||it.json;if(dojo.isFunction(tf)){_140=tf.call(it);if(it!==_140){return _13f(_140,_13c,_141);}}if(it.nodeType&&it.cloneNode){throw new Error("Can't serialize DOM nodes");}var sep=_13c?" ":"";var _144=_13c?"\n":"";if(dojo.isArray(it)){var res=dojo.map(it,function(obj){var val=_13f(obj,_13c,_141);if(typeof val!="string"){val="undefined";}return _144+_141+val;});return "["+res.join(","+sep)+_144+_13d+"]";}if(_13e=="function"){return null;}var _148=[],key;for(key in it){var _14a,val;if(typeof key=="number"){_14a="\""+key+"\"";}else{if(typeof key=="string"){_14a=dojo._escapeString(key);}else{continue;}}val=_13f(it[key],_13c,_141);if(typeof val!="string"){continue;}_148.push(_144+_141+_14a+":"+sep+val);}return "{"+_148.join(","+sep)+_144+_13d+"}";};}if(!dojo._hasResource["dojo._base.array"]){dojo._hasResource["dojo._base.array"]=true;dojo.provide("dojo._base.array");(function(){var _14c=function(arr,obj,cb){return [dojo.isString(arr)?arr.split(""):arr,obj||dojo.global,dojo.isString(cb)?new Function("item","index","array",cb):cb];};dojo.mixin(dojo,{indexOf:function(_150,_151,_152,_153){var step=1,end=_150.length||0,i=0;if(_153){i=end-1;step=end=-1;}if(_152!=undefined){i=_152;}if((_153&&i>end)||i>=bits;t[x]=bits==4?17*c:c;});t.a=1;return t;};dojo.colorFromArray=function(a,obj){var t=obj||new dojo.Color();t._set(Number(a[0]),Number(a[1]),Number(a[2]),Number(a[3]));if(isNaN(t.a)){t.a=1;}return t.sanitize();};dojo.colorFromString=function(str,obj){var a=dojo.Color.named[str];return a&&dojo.colorFromArray(a,obj)||dojo.colorFromRgb(str,obj)||dojo.colorFromHex(str,obj);};}if(!dojo._hasResource["dojo._base"]){dojo._hasResource["dojo._base"]=true;dojo.provide("dojo._base");dojo.requireIf(dojo.isBrowser,"dojo._base.browser");}if(dojo.config.afterOnLoad&&dojo.isBrowser){window.setTimeout(dojo._fakeLoadInit,1000);}})(); diff --git a/dojo/dojo/string.js b/dojo/dojo/string.js new file mode 100644 index 000000000..4240ee13f --- /dev/null +++ b/dojo/dojo/string.js @@ -0,0 +1,148 @@ +/* + Copyright (c) 2004-2008, The Dojo Foundation All Rights Reserved. + Available via Academic Free License >= 2.1 OR the modified BSD license. + see: http://dojotoolkit.org/license for details +*/ + + +if(!dojo._hasResource["dojo.string"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo.string"] = true; +dojo.provide("dojo.string"); + +/*===== +dojo.string = { + // summary: String utilities for Dojo +}; +=====*/ + +dojo.string.rep = function(/*String*/str, /*Integer*/num){ + // summary: + // Efficiently replicate a string `n` times. + // str: + // the string to replicate + // num: + // number of times to replicate the string + + if(num <= 0 || !str){ return ""; } + + var buf = []; + for(;;){ + if(num & 1){ + buf.push(str); + } + if(!(num >>= 1)){ break; } + str += str; + } + return buf.join(""); // String +}; + +dojo.string.pad = function(/*String*/text, /*Integer*/size, /*String?*/ch, /*Boolean?*/end){ + // summary: + // Pad a string to guarantee that it is at least `size` length by + // filling with the character `ch` at either the start or end of the + // string. Pads at the start, by default. + // text: + // the string to pad + // size: + // length to provide padding + // ch: + // character to pad, defaults to '0' + // end: + // adds padding at the end if true, otherwise pads at start + // example: + // | // Fill the string to length 10 with "+" characters on the right. Yields "Dojo++++++". + // | dojo.string.pad("Dojo", 10, "+", true); + + if(!ch){ + ch = '0'; + } + var out = String(text), + pad = dojo.string.rep(ch, Math.ceil((size - out.length) / ch.length)); + return end ? out + pad : pad + out; // String +}; + +dojo.string.substitute = function( /*String*/ template, + /*Object|Array*/map, + /*Function?*/ transform, + /*Object?*/ thisObject){ + // summary: + // Performs parameterized substitutions on a string. Throws an + // exception if any parameter is unmatched. + // template: + // a string with expressions in the form `${key}` to be replaced or + // `${key:format}` which specifies a format function. + // map: + // hash to search for substitutions + // transform: + // a function to process all parameters before substitution takes + // place, e.g. dojo.string.encodeXML + // thisObject: + // where to look for optional format function; default to the global + // namespace + // example: + // | // returns "File 'foo.html' is not found in directory '/temp'." + // | dojo.string.substitute( + // | "File '${0}' is not found in directory '${1}'.", + // | ["foo.html","/temp"] + // | ); + // | + // | // also returns "File 'foo.html' is not found in directory '/temp'." + // | dojo.string.substitute( + // | "File '${name}' is not found in directory '${info.dir}'.", + // | { name: "foo.html", info: { dir: "/temp" } } + // | ); + // example: + // use a transform function to modify the values: + // | // returns "file 'foo.html' is not found in directory '/temp'." + // | dojo.string.substitute( + // | "${0} is not found in ${1}.", + // | ["foo.html","/temp"], + // | function(str){ + // | // try to figure out the type + // | var prefix = (str.charAt(0) == "/") ? "directory": "file"; + // | return prefix + " '" + str + "'"; + // | } + // | ); + // example: + // use a formatter + // | // returns "thinger -- howdy" + // | dojo.string.substitute( + // | "${0:postfix}", ["thinger"], null, { + // | postfix: function(value, key){ + // | return value + " -- howdy"; + // | } + // | } + // | ); + + thisObject = thisObject||dojo.global; + transform = (!transform) ? + function(v){ return v; } : + dojo.hitch(thisObject, transform); + + return template.replace(/\$\{([^\s\:\}]+)(?:\:([^\s\:\}]+))?\}/g, function(match, key, format){ + var value = dojo.getObject(key, false, map); + if(format){ + value = dojo.getObject(format, false, thisObject).call(thisObject, value, key); + } + return transform(value, key).toString(); + }); // string +}; + +dojo.string.trim = function(/*String*/ str){ + // summary: + // trims whitespaces from both sides of the string + // description: + // This version of trim() was taken from [Steven Levithan's blog](http://blog.stevenlevithan.com/archives/faster-trim-javascript). + // The short yet performant version of this function is dojo.trim(), + // which is part of Dojo base. + str = str.replace(/^\s+/, ''); + for(var i = str.length - 1; i >= 0; i--){ + if(/\S/.test(str.charAt(i))){ + str = str.substring(0, i + 1); + break; + } + } + return str; // String +}; + +} diff --git a/dojo/dojox/LICENSE b/dojo/dojox/LICENSE new file mode 100644 index 000000000..3fa27203c --- /dev/null +++ b/dojo/dojox/LICENSE @@ -0,0 +1,195 @@ +Dojo is available under *either* the terms of the modified BSD license *or* the +Academic Free License version 2.1. As a recipient of Dojo, you may choose which +license to receive this code under (except as noted in per-module LICENSE +files). Some modules may not be the copyright of the Dojo Foundation. These +modules contain explicit declarations of copyright in both the LICENSE files in +the directories in which they reside and in the code itself. No external +contributions are allowed under licenses which are fundamentally incompatible +with the AFL or BSD licenses that Dojo is distributed under. + +The text of the AFL and BSD licenses is reproduced below. + +------------------------------------------------------------------------------- +The "New" BSD License: +********************** + +Copyright (c) 2005-2008, The Dojo Foundation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of the Dojo Foundation nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------------- +The Academic Free License, v. 2.1: +********************************** + +This Academic Free License (the "License") applies to any original work of +authorship (the "Original Work") whose owner (the "Licensor") has placed the +following notice immediately following the copyright notice for the Original +Work: + +Licensed under the Academic Free License version 2.1 + +1) Grant of Copyright License. Licensor hereby grants You a world-wide, +royalty-free, non-exclusive, perpetual, sublicenseable license to do the +following: + +a) to reproduce the Original Work in copies; + +b) to prepare derivative works ("Derivative Works") based upon the Original +Work; + +c) to distribute copies of the Original Work and Derivative Works to the +public; + +d) to perform the Original Work publicly; and + +e) to display the Original Work publicly. + +2) Grant of Patent License. Licensor hereby grants You a world-wide, +royalty-free, non-exclusive, perpetual, sublicenseable license, under patent +claims owned or controlled by the Licensor that are embodied in the Original +Work as furnished by the Licensor, to make, use, sell and offer for sale the +Original Work and Derivative Works. + +3) Grant of Source Code License. The term "Source Code" means the preferred +form of the Original Work for making modifications to it and all available +documentation describing how to modify the Original Work. Licensor hereby +agrees to provide a machine-readable copy of the Source Code of the Original +Work along with each copy of the Original Work that Licensor distributes. +Licensor reserves the right to satisfy this obligation by placing a +machine-readable copy of the Source Code in an information repository +reasonably calculated to permit inexpensive and convenient access by You for as +long as Licensor continues to distribute the Original Work, and by publishing +the address of that information repository in a notice immediately following +the copyright notice that applies to the Original Work. + +4) Exclusions From License Grant. Neither the names of Licensor, nor the names +of any contributors to the Original Work, nor any of their trademarks or +service marks, may be used to endorse or promote products derived from this +Original Work without express prior written permission of the Licensor. Nothing +in this License shall be deemed to grant any rights to trademarks, copyrights, +patents, trade secrets or any other intellectual property of Licensor except as +expressly stated herein. No patent license is granted to make, use, sell or +offer to sell embodiments of any patent claims other than the licensed claims +defined in Section 2. No right is granted to the trademarks of Licensor even if +such marks are included in the Original Work. Nothing in this License shall be +interpreted to prohibit Licensor from licensing under different terms from this +License any Original Work that Licensor otherwise would have a right to +license. + +5) This section intentionally omitted. + +6) Attribution Rights. You must retain, in the Source Code of any Derivative +Works that You create, all copyright, patent or trademark notices from the +Source Code of the Original Work, as well as any notices of licensing and any +descriptive text identified therein as an "Attribution Notice." You must cause +the Source Code for any Derivative Works that You create to carry a prominent +Attribution Notice reasonably calculated to inform recipients that You have +modified the Original Work. + +7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that +the copyright in and to the Original Work and the patent rights granted herein +by Licensor are owned by the Licensor or are sublicensed to You under the terms +of this License with the permission of the contributor(s) of those copyrights +and patent rights. Except as expressly stated in the immediately proceeding +sentence, the Original Work is provided under this License on an "AS IS" BASIS +and WITHOUT WARRANTY, either express or implied, including, without limitation, +the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. +This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No +license to Original Work is granted hereunder except under this disclaimer. + +8) Limitation of Liability. Under no circumstances and under no legal theory, +whether in tort (including negligence), contract, or otherwise, shall the +Licensor be liable to any person for any direct, indirect, special, incidental, +or consequential damages of any character arising as a result of this License +or the use of the Original Work including, without limitation, damages for loss +of goodwill, work stoppage, computer failure or malfunction, or any and all +other commercial damages or losses. This limitation of liability shall not +apply to liability for death or personal injury resulting from Licensor's +negligence to the extent applicable law prohibits such limitation. Some +jurisdictions do not allow the exclusion or limitation of incidental or +consequential damages, so this exclusion and limitation may not apply to You. + +9) Acceptance and Termination. If You distribute copies of the Original Work or +a Derivative Work, You must make a reasonable effort under the circumstances to +obtain the express assent of recipients to the terms of this License. Nothing +else but this License (or another written agreement between Licensor and You) +grants You permission to create Derivative Works based upon the Original Work +or to exercise any of the rights granted in Section 1 herein, and any attempt +to do so except under the terms of this License (or another written agreement +between Licensor and You) is expressly prohibited by U.S. copyright law, the +equivalent laws of other countries, and by international treaty. Therefore, by +exercising any of the rights granted to You in Section 1 herein, You indicate +Your acceptance of this License and all of its terms and conditions. + +10) Termination for Patent Action. This License shall terminate automatically +and You may no longer exercise any of the rights granted to You by this License +as of the date You commence an action, including a cross-claim or counterclaim, +against Licensor or any licensee alleging that the Original Work infringes a +patent. This termination provision shall not apply for an action alleging +patent infringement by combinations of the Original Work with other software or +hardware. + +11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this +License may be brought only in the courts of a jurisdiction wherein the +Licensor resides or in which Licensor conducts its primary business, and under +the laws of that jurisdiction excluding its conflict-of-law provisions. The +application of the United Nations Convention on Contracts for the International +Sale of Goods is expressly excluded. Any use of the Original Work outside the +scope of this License or after its termination shall be subject to the +requirements and penalties of the U.S. Copyright Act, 17 U.S.C. § 101 et +seq., the equivalent laws of other countries, and international treaty. This +section shall survive the termination of this License. + +12) Attorneys Fees. In any action to enforce the terms of this License or +seeking damages relating thereto, the prevailing party shall be entitled to +recover its costs and expenses, including, without limitation, reasonable +attorneys' fees and costs incurred in connection with such action, including +any appeal of such action. This section shall survive the termination of this +License. + +13) Miscellaneous. This License represents the complete agreement concerning +the subject matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent necessary to +make it enforceable. + +14) Definition of "You" in This License. "You" throughout this License, whether +in upper or lower case, means an individual or a legal entity exercising rights +under, and complying with all of the terms of, this License. For legal +entities, "You" includes any entity that controls, is controlled by, or is +under common control with you. For 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. + +15) Right to Use. You may use the Original Work in all ways not otherwise +restricted or conditioned by this License or by law, and Licensor promises not +to interfere with or be responsible for such uses by You. + +This license is Copyright (C) 2003-2004 Lawrence E. Rosen. All rights reserved. +Permission is hereby granted to copy and distribute this license without +modification. This license may not be modified without the express written +permission of its copyright owner. diff --git a/dojo/dojox/testing/DocTest.js b/dojo/dojox/testing/DocTest.js new file mode 100644 index 000000000..b7daa5324 --- /dev/null +++ b/dojo/dojox/testing/DocTest.js @@ -0,0 +1,288 @@ +/* + Copyright (c) 2004-2008, The Dojo Foundation All Rights Reserved. + Available via Academic Free License >= 2.1 OR the modified BSD license. + see: http://dojotoolkit.org/license for details +*/ + + +if(!dojo._hasResource["dojox.testing.DocTest"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojox.testing.DocTest"] = true; +dojo.provide("dojox.testing.DocTest"); +dojo.require("dojo.string"); + +dojo.declare( + "dojox.testing.DocTest", + null, + { + // summary: + // This class executes doctests. + // description: + // DocTests are tests that are defined inside the comment. + // A doctest looks as if it was copied from the shell (which it mostly is). + // A doctest is executed when the following conditions match: + // 1) all lines are comments + // 2) the line always starts with spaces/tabs followed by "//" + // and at least one space + // 3) the line(s) of the test to execute starts with ">>>" + // preceeded by what is described in 2) + // 4) the first line after 3) starting without ">>>" is the exptected result. + // preceeded by what is described in 2) + // 5) the test sequence is terminated by an empty line, or the next + // test in the following line, or a new line that does not start as described in 2) + // (simple said: is not a comment) + // preceeded by what is described in 2) + // + // I.e. the following is a simple doctest, that will actually also be run + // if you run this class against this file here: + // >>> 1+1 // A simple test case. Terminated by an empty line + // 2 + // + // >>> 1==2 + // false + // >>> "a"+"b" // Also without the empty line before, this is a new test. + // "ab" + // + // >>> var anything = "anything" // Multiple commands for one test. + // >>> "something"==anything + // false + // + // DocTests are great for inline documenting a class or method, they also + // are very helpful in understanding what the class/method actually does. + // They don't make sense everywhere, but sometimes they are really handy. + + + // TODO: + // - using console.log() in a test prints something on the + // console (if you do it on the console) but its not accepted + // yet to be the test result, may be override console.log!? + // i.e. here i wanted to: dojo.forEach(["one", 2], + // function(el, index) {console.log(el, index)}) that works on + // the console, but not as a docTest :-( + // - surround the eval for each test case singlely with a + // try-catch, to to catch syntax errors etc (though the + // shouldn't happen if you copy the test from the shell :-)) + + + errors: [], + + getTests:function(/*String*/moduleName){ + // summary: Extract the tests from the given module or string. + // examples: + // >>> dojo.isArray(new dojox.testing.DocTest().getTests("dojox.testing.DocTest")) // Use the module name to extract the tests from. + // true + var path = dojo.moduleUrl(moduleName).path; + // TODO: + // this needs to be done better, this is pretty simple and + // surely not dummy proof + var file = path.substring(0, path.length-1)+".js"; + var xhr = dojo.xhrGet({url:file, handleAs:"text"}); + // Make loading synchronously, mainly so we can use it in doh. + var data = dojo._getText(file); + return this._getTestsFromString(data, true); + }, + + getTestsFromString:function(/*String*/data){ + // examples: + // >>> (new dojox.testing.DocTest().getTestsFromString(">>> 1+1\n2\n>>> 2+2\n4")).length // Do tests from strings get detected properly? + // 2 + return this._getTestsFromString(data, false); + }, + + _getTestsFromString:function(/*String*/data, /*Boolean*/insideComments){ + // summary: Parse the given string for tests. + // insideComments: Boolean, if false "data" contains only the pure tests, comments already stripped. + var trim = dojo.hitch(dojo.string, "trim"); + var lines = data.split("\n"); + var len = lines.length; + var tests = []; + var test = { + commands: [], + expectedResult: [], + line: null + }; + for(var i=0; i>>\s.*/)) || l.match(/^\s*>>>\s.*/)){ + if(!test.line){ + test.line = i+1; + } + // Find the test commands. + if(test.expectedResult.length>0){ + // Start a new test right after the expected result, + // without an empty line. + tests.push({ + commands: test.commands, + expectedResult: test.expectedResult.join("\n"), + line: test.line + }); + test = {commands:[], expectedResult:[], line:i+1}; + } + l = insideComments ? trim(l).substring(2, l.length) : l; // Remove the leading slashes. + l = trim(l).substring(3, l.length); // Remove the ">>>". + test.commands.push(trim(l)); + }else if((!insideComments || l.match(/^\/\/\s+.*/)) && test.commands.length && test.expectedResult.length==0){ + // Detect the lines after the ">>>"-lines, the exptected result. + l = insideComments ? trim(l).substring(3, l.length) : l; // Remove the leading slashes. + test.expectedResult.push(trim(l)); + }else if(test.commands.length>0 && test.expectedResult.length){ + if(!insideComments || l.match(/^\/\/\s*$/)){ + // Detect the empty line. + tests.push({ + commands: test.commands, + expectedResult: test.expectedResult.join("\n"), + line: test.line + }); + } + if(insideComments && !l.match(/^\/\//)){ + // If the next line is not a comment at all (doesn't start with "//"). + tests.push({ + commands: test.commands, + expectedResult: test.expectedResult.join("\n"), + line:test.line + }); + } + test = { + commands: [], + expectedResult: [], + line:0 + }; + } + } + return tests; + }, + + run: function(moduleName){ + // summary: + // Run the doctests in the module given. + // example: + // doctest = new dojox.testing.DocTest(); + // doctest.run("dojox.testing.DocTest"); + // doctest.errors should finally be an empty array. + // // The above is not a doctest, because it just would + // // execute itself in a never ending loop. + // + // >>> true==true // Test a new line terminating the test. + // true + // + // >>> true==true // Test a new test terminating the test. + // true + // >>> true==true // Test a "not a comment"-line, especially an empty line terminating the test. + // true + + // Make sure the result as printed on the console is the same as what + // is returned by the test. An array is printed as follows on the console. + // >>> [1,2,3,4] + // [1,2,3,4] + // + // Test a "not a comment"-line, with some real code(!) terminating the test. + // This used to be a bug, so make sure the line below the test is real + // from this method! Don't write a test after it, always above! + // >>> true==true // Test code on new line terminating the test. + // true + + this.errors = []; + + var tests = this.getTests(moduleName); + if(tests){ + this._run(tests); + } + }, + + _run: function(/*Array*/tests){ + // summary: + // Each element in the array contains the test in the first element, + // and the expected result in the second element. + // tests: + // Make sure that the types are compared properly. There used to be + // the bug that a return value false was compared to "false" which + // made the test fail. This is fixed and should be verified by the + // following tests. + // >>> false + // false + // + // >>> "false" + // "false" + // + // >>> true + // true + // + // >>> 1 + // 1 + // + // >>> "s" + // "s" + // + // >>> dojo.toJson({one:1}) + // "{"one":1}" + // + var len = tests.length; + this.tests = len; + var oks = 0; + for(var i=0; i 50 ? + viewCommands.substr(0,50) + "..." : + viewCommands + ); + if(res.success){ + // the last if-condition, dojo.toJson() adds a quote sign " + // before and after the result, may be we remove it and + // test the result again + console.info(msg+"OK: "+viewCommands); + oks += 1; + }else{ + this.errors.push({ + commands: t.commands, + actual: res.actualResult, + expected: t.expectedResult + }); + console.error(msg+"Failed: "+viewCommands, { + commands: t.commands, + actualResult: res.actualResult, + expectedResult: t.expectedResult + }); + } + } + console.info(len+" tests ran.", oks+" Success,", this.errors.length+" Errors"); + }, + + runTest: function(commands, expected){ + var ret = { + success: false, + actualResult: null + }; + // Concat multiple commands with new lines, so "//" comments at + // the end of a line don't deactivate the next line (which it + // would if we only concatenated with ";"). + var cmds = commands.join("\n"); + ret.actualResult = eval(cmds); + if( (String(ret.actualResult)==expected) || + (dojo.toJson(ret.actualResult)==expected) || + ( + (expected.charAt(0)=='"')&& + (expected.charAt(expected.length-1)=='"')&& + (String(ret.actualResult)==expected.substring(1, expected.length-1)) + ) + ){ + // the last if-condition, dojo.toJson() adds a quote sign " + // before and after the result, may be we remove it and test + // the result again + ret.success = true; + } + return ret; + } + } +); + +} diff --git a/dojo/util/doh/LICENSE b/dojo/util/doh/LICENSE new file mode 100644 index 000000000..3fa27203c --- /dev/null +++ b/dojo/util/doh/LICENSE @@ -0,0 +1,195 @@ +Dojo is available under *either* the terms of the modified BSD license *or* the +Academic Free License version 2.1. As a recipient of Dojo, you may choose which +license to receive this code under (except as noted in per-module LICENSE +files). Some modules may not be the copyright of the Dojo Foundation. These +modules contain explicit declarations of copyright in both the LICENSE files in +the directories in which they reside and in the code itself. No external +contributions are allowed under licenses which are fundamentally incompatible +with the AFL or BSD licenses that Dojo is distributed under. + +The text of the AFL and BSD licenses is reproduced below. + +------------------------------------------------------------------------------- +The "New" BSD License: +********************** + +Copyright (c) 2005-2008, The Dojo Foundation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of the Dojo Foundation nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------------- +The Academic Free License, v. 2.1: +********************************** + +This Academic Free License (the "License") applies to any original work of +authorship (the "Original Work") whose owner (the "Licensor") has placed the +following notice immediately following the copyright notice for the Original +Work: + +Licensed under the Academic Free License version 2.1 + +1) Grant of Copyright License. Licensor hereby grants You a world-wide, +royalty-free, non-exclusive, perpetual, sublicenseable license to do the +following: + +a) to reproduce the Original Work in copies; + +b) to prepare derivative works ("Derivative Works") based upon the Original +Work; + +c) to distribute copies of the Original Work and Derivative Works to the +public; + +d) to perform the Original Work publicly; and + +e) to display the Original Work publicly. + +2) Grant of Patent License. Licensor hereby grants You a world-wide, +royalty-free, non-exclusive, perpetual, sublicenseable license, under patent +claims owned or controlled by the Licensor that are embodied in the Original +Work as furnished by the Licensor, to make, use, sell and offer for sale the +Original Work and Derivative Works. + +3) Grant of Source Code License. The term "Source Code" means the preferred +form of the Original Work for making modifications to it and all available +documentation describing how to modify the Original Work. Licensor hereby +agrees to provide a machine-readable copy of the Source Code of the Original +Work along with each copy of the Original Work that Licensor distributes. +Licensor reserves the right to satisfy this obligation by placing a +machine-readable copy of the Source Code in an information repository +reasonably calculated to permit inexpensive and convenient access by You for as +long as Licensor continues to distribute the Original Work, and by publishing +the address of that information repository in a notice immediately following +the copyright notice that applies to the Original Work. + +4) Exclusions From License Grant. Neither the names of Licensor, nor the names +of any contributors to the Original Work, nor any of their trademarks or +service marks, may be used to endorse or promote products derived from this +Original Work without express prior written permission of the Licensor. Nothing +in this License shall be deemed to grant any rights to trademarks, copyrights, +patents, trade secrets or any other intellectual property of Licensor except as +expressly stated herein. No patent license is granted to make, use, sell or +offer to sell embodiments of any patent claims other than the licensed claims +defined in Section 2. No right is granted to the trademarks of Licensor even if +such marks are included in the Original Work. Nothing in this License shall be +interpreted to prohibit Licensor from licensing under different terms from this +License any Original Work that Licensor otherwise would have a right to +license. + +5) This section intentionally omitted. + +6) Attribution Rights. You must retain, in the Source Code of any Derivative +Works that You create, all copyright, patent or trademark notices from the +Source Code of the Original Work, as well as any notices of licensing and any +descriptive text identified therein as an "Attribution Notice." You must cause +the Source Code for any Derivative Works that You create to carry a prominent +Attribution Notice reasonably calculated to inform recipients that You have +modified the Original Work. + +7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that +the copyright in and to the Original Work and the patent rights granted herein +by Licensor are owned by the Licensor or are sublicensed to You under the terms +of this License with the permission of the contributor(s) of those copyrights +and patent rights. Except as expressly stated in the immediately proceeding +sentence, the Original Work is provided under this License on an "AS IS" BASIS +and WITHOUT WARRANTY, either express or implied, including, without limitation, +the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. +This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No +license to Original Work is granted hereunder except under this disclaimer. + +8) Limitation of Liability. Under no circumstances and under no legal theory, +whether in tort (including negligence), contract, or otherwise, shall the +Licensor be liable to any person for any direct, indirect, special, incidental, +or consequential damages of any character arising as a result of this License +or the use of the Original Work including, without limitation, damages for loss +of goodwill, work stoppage, computer failure or malfunction, or any and all +other commercial damages or losses. This limitation of liability shall not +apply to liability for death or personal injury resulting from Licensor's +negligence to the extent applicable law prohibits such limitation. Some +jurisdictions do not allow the exclusion or limitation of incidental or +consequential damages, so this exclusion and limitation may not apply to You. + +9) Acceptance and Termination. If You distribute copies of the Original Work or +a Derivative Work, You must make a reasonable effort under the circumstances to +obtain the express assent of recipients to the terms of this License. Nothing +else but this License (or another written agreement between Licensor and You) +grants You permission to create Derivative Works based upon the Original Work +or to exercise any of the rights granted in Section 1 herein, and any attempt +to do so except under the terms of this License (or another written agreement +between Licensor and You) is expressly prohibited by U.S. copyright law, the +equivalent laws of other countries, and by international treaty. Therefore, by +exercising any of the rights granted to You in Section 1 herein, You indicate +Your acceptance of this License and all of its terms and conditions. + +10) Termination for Patent Action. This License shall terminate automatically +and You may no longer exercise any of the rights granted to You by this License +as of the date You commence an action, including a cross-claim or counterclaim, +against Licensor or any licensee alleging that the Original Work infringes a +patent. This termination provision shall not apply for an action alleging +patent infringement by combinations of the Original Work with other software or +hardware. + +11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this +License may be brought only in the courts of a jurisdiction wherein the +Licensor resides or in which Licensor conducts its primary business, and under +the laws of that jurisdiction excluding its conflict-of-law provisions. The +application of the United Nations Convention on Contracts for the International +Sale of Goods is expressly excluded. Any use of the Original Work outside the +scope of this License or after its termination shall be subject to the +requirements and penalties of the U.S. Copyright Act, 17 U.S.C. § 101 et +seq., the equivalent laws of other countries, and international treaty. This +section shall survive the termination of this License. + +12) Attorneys Fees. In any action to enforce the terms of this License or +seeking damages relating thereto, the prevailing party shall be entitled to +recover its costs and expenses, including, without limitation, reasonable +attorneys' fees and costs incurred in connection with such action, including +any appeal of such action. This section shall survive the termination of this +License. + +13) Miscellaneous. This License represents the complete agreement concerning +the subject matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent necessary to +make it enforceable. + +14) Definition of "You" in This License. "You" throughout this License, whether +in upper or lower case, means an individual or a legal entity exercising rights +under, and complying with all of the terms of, this License. For legal +entities, "You" includes any entity that controls, is controlled by, or is +under common control with you. For 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. + +15) Right to Use. You may use the Original Work in all ways not otherwise +restricted or conditioned by this License or by law, and Licensor promises not +to interfere with or be responsible for such uses by You. + +This license is Copyright (C) 2003-2004 Lawrence E. Rosen. All rights reserved. +Permission is hereby granted to copy and distribute this license without +modification. This license may not be modified without the express written +permission of its copyright owner. diff --git a/dojo/util/doh/_rhinoRunner.js b/dojo/util/doh/_rhinoRunner.js new file mode 100644 index 000000000..ae4759723 --- /dev/null +++ b/dojo/util/doh/_rhinoRunner.js @@ -0,0 +1,17 @@ +if(this["dojo"]){ + dojo.provide("doh._rhinoRunner"); +} + +doh.debug = print; + +// Override the doh._report method to make it quit with an +// appropriate exit code in case of test failures. +(function(){ + var oldReport = doh._report; + doh._report = function(){ + oldReport.apply(doh, arguments); + if(this._failureCount > 0 || this._errorCount > 0){ + quit(1); + } + } +})(); diff --git a/dojo/util/doh/runner.js b/dojo/util/doh/runner.js new file mode 100644 index 000000000..3b4539317 --- /dev/null +++ b/dojo/util/doh/runner.js @@ -0,0 +1,1054 @@ +// package system gunk. +try{ + dojo.provide("doh.runner"); +}catch(e){ + if(!this["doh"]){ + doh = {}; + } +} + +// +// Utility Functions and Classes +// + +doh.selfTest = false; + +doh.global = this; + +doh.hitch = function(/*Object*/thisObject, /*Function|String*/method /*, ...*/){ + var args = []; + for(var x=2; x= 0)) { + this._fire(); + } + }, + + _continue: function(res){ + this._resback(res); + this._unpause(); + }, + + _resback: function(res){ + this.fired = ((res instanceof Error) ? 1 : 0); + this.results[this.fired] = res; + this._fire(); + }, + + _check: function(){ + if(this.fired != -1){ + if(!this.silentlyCancelled){ + throw new Error("already called!"); + } + this.silentlyCancelled = false; + return; + } + }, + + callback: function(res){ + this._check(); + this._resback(res); + }, + + errback: function(res){ + this._check(); + if(!(res instanceof Error)){ + res = new Error(res); + } + this._resback(res); + }, + + addBoth: function(cb, cbfn){ + var enclosed = this.getFunctionFromArgs(cb, cbfn); + if(arguments.length > 2){ + enclosed = doh.hitch(null, enclosed, arguments, 2); + } + return this.addCallbacks(enclosed, enclosed); + }, + + addCallback: function(cb, cbfn){ + var enclosed = this.getFunctionFromArgs(cb, cbfn); + if(arguments.length > 2){ + enclosed = doh.hitch(null, enclosed, arguments, 2); + } + return this.addCallbacks(enclosed, null); + }, + + addErrback: function(cb, cbfn){ + var enclosed = this.getFunctionFromArgs(cb, cbfn); + if(arguments.length > 2){ + enclosed = doh.hitch(null, enclosed, arguments, 2); + } + return this.addCallbacks(null, enclosed); + }, + + addCallbacks: function(cb, eb){ + this.chain.push([cb, eb]); + if(this.fired >= 0){ + this._fire(); + } + return this; + }, + + _fire: function(){ + var chain = this.chain; + var fired = this.fired; + var res = this.results[fired]; + var self = this; + var cb = null; + while(chain.length > 0 && this.paused == 0){ + // Array + var pair = chain.shift(); + var f = pair[fired]; + if(f == null){ + continue; + } + try { + res = f(res); + fired = ((res instanceof Error) ? 1 : 0); + if(res instanceof doh.Deferred){ + cb = function(res){ + self._continue(res); + }; + this._pause(); + } + }catch(err){ + fired = 1; + res = err; + } + } + this.fired = fired; + this.results[fired] = res; + if((cb)&&(this.paused)){ + res.addBoth(cb); + } + } +}); + +// +// State Keeping and Reporting +// + +doh._testCount = 0; +doh._groupCount = 0; +doh._errorCount = 0; +doh._failureCount = 0; +doh._currentGroup = null; +doh._currentTest = null; +doh._paused = true; + +doh._init = function(){ + this._currentGroup = null; + this._currentTest = null; + this._errorCount = 0; + this._failureCount = 0; + this.debug(this._testCount, "tests to run in", this._groupCount, "groups"); +} + +// doh._urls = []; +doh._groups = {}; + +// +// Test Registration +// + +doh.registerTestNs = function(/*String*/ group, /*Object*/ ns){ + // summary: + // adds the passed namespace object to the list of objects to be + // searched for test groups. Only "public" functions (not prefixed + // with "_") will be added as tests to be run. If you'd like to use + // fixtures (setUp(), tearDown(), and runTest()), please use + // registerTest() or registerTests(). + for(var x in ns){ + if( (x.charAt(0) != "_") && + (typeof ns[x] == "function") ){ + this.registerTest(group, ns[x]); + } + } +} + +doh._testRegistered = function(group, fixture){ + // slot to be filled in +} + +doh._groupStarted = function(group){ + // slot to be filled in +} + +doh._groupFinished = function(group, success){ + // slot to be filled in +} + +doh._testStarted = function(group, fixture){ + // slot to be filled in +} + +doh._testFinished = function(group, fixture, success){ + // slot to be filled in +} + +doh.registerGroup = function( /*String*/ group, + /*Array||Function||Object*/ tests, + /*Function*/ setUp, + /*Function*/ tearDown){ + // summary: + // registers an entire group of tests at once and provides a setUp and + // tearDown facility for groups. If you call this method with only + // setUp and tearDown parameters, they will replace previously + // installed setUp or tearDown functions for the group with the new + // methods. + // group: + // string name of the group + // tests: + // either a function or an object or an array of functions/objects. If + // an object, it must contain at *least* a "runTest" method, and may + // also contain "setUp" and "tearDown" methods. These will be invoked + // on either side of the "runTest" method (respectively) when the test + // is run. If an array, it must contain objects matching the above + // description or test functions. + // setUp: a function for initializing the test group + // tearDown: a function for initializing the test group + if(tests){ + this.register(group, tests); + } + if(setUp){ + this._groups[group].setUp = setUp; + } + if(tearDown){ + this._groups[group].tearDown = tearDown; + } +} + +doh._getTestObj = function(group, test){ + var tObj = test; + if(typeof test == "string"){ + if(test.substr(0, 4)=="url:"){ + return this.registerUrl(group, test); + }else{ + tObj = { + name: test.replace("/\s/g", "_") // FIXME: bad escapement + }; + tObj.runTest = new Function("t", test); + } + }else if(typeof test == "function"){ + // if we didn't get a fixture, wrap the function + tObj = { "runTest": test }; + if(test["name"]){ + tObj.name = test.name; + }else{ + try{ + var fStr = "function "; + var ts = tObj.runTest+""; + if(0 <= ts.indexOf(fStr)){ + tObj.name = ts.split(fStr)[1].split("(", 1)[0]; + } + // doh.debug(tObj.runTest.toSource()); + }catch(e){ + } + } + // FIXME: try harder to get the test name here + } + return tObj; +} + +doh.registerTest = function(/*String*/ group, /*Function||Object*/ test){ + // summary: + // add the provided test function or fixture object to the specified + // test group. + // group: + // string name of the group to add the test to + // test: + // either a function or an object. If an object, it must contain at + // *least* a "runTest" method, and may also contain "setUp" and + // "tearDown" methods. These will be invoked on either side of the + // "runTest" method (respectively) when the test is run. + if(!this._groups[group]){ + this._groupCount++; + this._groups[group] = []; + this._groups[group].inFlight = 0; + } + var tObj = this._getTestObj(group, test); + if(!tObj){ return null; } + this._groups[group].push(tObj); + this._testCount++; + this._testRegistered(group, tObj); + return tObj; +} + +doh.registerTests = function(/*String*/ group, /*Array*/ testArr){ + // summary: + // registers a group of tests, treating each element of testArr as + // though it were being (along with group) passed to the registerTest + // method. + for(var x=0; x 1) ? "s" : "")+" to run"); +} + +doh._handleFailure = function(groupName, fixture, e){ + // this.debug("FAILED test:", fixture.name); + // mostly borrowed from JUM + this._groups[groupName].failures++; + var out = ""; + if(e instanceof this._AssertFailure){ + this._failureCount++; + if(e["fileName"]){ out += e.fileName + ':'; } + if(e["lineNumber"]){ out += e.lineNumber + ' '; } + out += e+": "+e.message; + this.debug("\t_AssertFailure:", out); + }else{ + this._errorCount++; + } + this.debug(e); + if(fixture.runTest["toSource"]){ + var ss = fixture.runTest.toSource(); + this.debug("\tERROR IN:\n\t\t", ss); + }else{ + this.debug("\tERROR IN:\n\t\t", fixture.runTest); + } + + if(e.rhinoException){ + e.rhinoException.printStackTrace(); + }else if(e.javaException){ + e.javaException.printStackTrace(); + } +} + +try{ + setTimeout(function(){}, 0); +}catch(e){ + setTimeout = function(func){ + return func(); + } +} + +doh._runFixture = function(groupName, fixture){ + var tg = this._groups[groupName]; + this._testStarted(groupName, fixture); + var threw = false; + var err = null; + // run it, catching exceptions and reporting them + try{ + // let doh reference "this.group.thinger..." which can be set by + // another test or group-level setUp function + fixture.group = tg; + // only execute the parts of the fixture we've got + if(fixture["setUp"]){ fixture.setUp(this); } + if(fixture["runTest"]){ // should we error out of a fixture doesn't have a runTest? + fixture.startTime = new Date(); + var ret = fixture.runTest(this); + fixture.endTime = new Date(); + // if we get a deferred back from the test runner, we know we're + // gonna wait for an async result. It's up to the test code to trap + // errors and give us an errback or callback. + if(ret instanceof doh.Deferred){ + + tg.inFlight++; + ret.groupName = groupName; + ret.fixture = fixture; + + ret.addErrback(function(err){ + doh._handleFailure(groupName, fixture, err); + }); + + var retEnd = function(){ + if(fixture["tearDown"]){ fixture.tearDown(doh); } + tg.inFlight--; + if((!tg.inFlight)&&(tg.iterated)){ + doh._groupFinished(groupName, (!tg.failures)); + } + doh._testFinished(groupName, fixture, ret.results[0]); + if(doh._paused){ + doh.run(); + } + } + + var timer = setTimeout(function(){ + // ret.cancel(); + // retEnd(); + ret.errback(new Error("test timeout in "+fixture.name.toString())); + }, fixture["timeout"]||1000); + + ret.addBoth(function(arg){ + clearTimeout(timer); + retEnd(); + }); + if(ret.fired < 0){ + doh.pause(); + } + return ret; + } + } + if(fixture["tearDown"]){ fixture.tearDown(this); } + }catch(e){ + threw = true; + err = e; + if(!fixture.endTime){ + fixture.endTime = new Date(); + } + } + var d = new doh.Deferred(); + setTimeout(this.hitch(this, function(){ + if(threw){ + this._handleFailure(groupName, fixture, err); + } + this._testFinished(groupName, fixture, (!threw)); + + if((!tg.inFlight)&&(tg.iterated)){ + doh._groupFinished(groupName, (!tg.failures)); + }else if(tg.inFlight > 0){ + setTimeout(this.hitch(this, function(){ + doh.runGroup(groupName); // , idx); + }), 100); + this._paused = true; + } + if(doh._paused){ + doh.run(); + } + }), 300); + // doh.pause(); // commented out prevent tests from dropping on + // decrepit fbennett laptop + return d; +} + +doh._testId = 0; +doh.runGroup = function(/*String*/ groupName, /*Integer*/ idx){ + // summary: + // runs the specified test group + + // the general structure of the algorithm is to run through the group's + // list of doh, checking before and after each of them to see if we're in + // a paused state. This can be caused by the test returning a deferred or + // the user hitting the pause button. In either case, we want to halt + // execution of the test until something external to us restarts it. This + // means we need to pickle off enough state to pick up where we left off. + + // FIXME: need to make fixture execution async!! + + var tg = this._groups[groupName]; + if(tg.skip === true){ return; } + if(this._isArray(tg)){ + if(idx<=tg.length){ + if((!tg.inFlight)&&(tg.iterated == true)){ + if(tg["tearDown"]){ tg.tearDown(this); } + doh._groupFinished(groupName, (!tg.failures)); + return; + } + } + if(!idx){ + tg.inFlight = 0; + tg.iterated = false; + tg.failures = 0; + } + doh._groupStarted(groupName); + if(!idx){ + this._setupGroupForRun(groupName, idx); + if(tg["setUp"]){ tg.setUp(this); } + } + for(var y=(idx||0); y"); + } + } + } + } + }catch(e){ + print("\n"+doh._line); + print("The Dojo Unit Test Harness, $Rev$"); + print("Copyright (c) 2007, The Dojo Foundation, All Rights Reserved"); + print(doh._line, "\n"); + + load("_rhinoRunner.js"); + + try{ + var dojoUrl = "../../dojo/dojo.js"; + var testUrl = ""; + var testModule = "dojo.tests.module"; + for(x=0; x + + + at + in + ibid + toegang verkry + opgehaal + van + voorhande + Verwysings + n.d. + en + et al. + + book + books + + + chapter + chapters + + + column + columns + + + figure + figures + + + folio + folios + + + number + numbers + + + reël + reëls + + + note + notes + + + opus + opera + + + bladsy + bladsye + + + paragraaf + paragrawe + + + part + parts + + + section + sections + + + volume + volumes + + + verse + verses + + bk + chap + col + fig + f + no + op + + bl + bll + + para + pt + sec + + v + vv + + vol + + + ¶¶ + + + § + §§ + + + redakteur + redakteurs + + + vertaler + vertalers + + + red + reds + + + vert + verts + + onder redaksie van + vertaal deur + red + verts + Januarie + Februarie + Maart + April + Mei + Junie + Julie + Augustus + September + Oktober + November + Desember + Jan + Feb + Mrt + Apr + Mei + Jun + Jul + Aug + Sep + Okt + Nov + Des + + diff --git a/locale/locales-af-ZA.xml b/locale/locales-af-ZA.xml new file mode 100644 index 000000000..fa3f6a1eb --- /dev/null +++ b/locale/locales-af-ZA.xml @@ -0,0 +1,207 @@ + + + + at + in + ibid + toegang verkry + opgehaal + van + voorhande + Verwysings + n.d. + en + et al. + interview + letter + anonymous + anon + and others + in press + online + cited + internet + presented at the + anthropology + astronomy + biology + botany + chemistry + engineering + generic base + geography + geology + history + humanities + literature + math + medicine + philosophy + physics + psychology + sociology + science + political science + social science + theology + zoology + + book + books + + + chapter + chapters + + + column + columns + + + figure + figures + + + folio + folios + + + number + numbers + + + reël + reëls + + + note + notes + + + opus + opera + + + bladsy + bladsye + + + paragraaf + paragrawe + + + part + parts + + + section + sections + + + volume + volumes + + + edition + editions + + + verse + verses + + + sub verbo + s.vv + + bk + chap + col + fig + f + no + op + + bl + bll + + para + pt + sec + + s.v + s.vv + + + v + vv + + + vol + vols + + edition + ed + + + ¶¶ + + + § + §§ + + + + + + + redakteur + redakteurs + + + vertaler + vertalers + + + + + + + red + reds + + + vert + verts + + onder redaksie van + vertaal deur + to + interview by + red + verts + Januarie + Februarie + Maart + April + Mei + Junie + Julie + Augustus + September + Oktober + November + Desember + Jan + Feb + Mrt + Apr + Mei + Jun + Jul + Aug + Sep + Okt + Nov + Des + + diff --git a/locale/locales-ar-AR.xml b/locale/locales-ar-AR.xml new file mode 100644 index 000000000..0fffa264b --- /dev/null +++ b/locale/locales-ar-AR.xml @@ -0,0 +1,207 @@ + + + + عند + في + آيبيد + زير + جلب + من + القادم + مراجع + + و + et al. + مقابلة + رسالة + مجهول + مجهول + وآخرون + تحت الطبع + ربط مباشر + وثِّقَ + الإنترنت + قُدَّم في + علم الإنسان + علم الفلك + علم الأحياء + علم النبات + علم الكيمياء + الهندسة + أساس عام + جغرافيا + علم الأرض + التاريخ + الإنسانيات + الأدب + الرياضيات + الطب + الفلسفة + الفيزياء + علم النفس + علم الإجتماع + العلوم + العلوم السياسية + العلوم الإجتماعية + العلوم الإلهية + علم الحيوان + + كتاب + كُتُب + + + فصل + فصول + + + عمود + أعمدة + + + رسم توضيحي + رسوم توضيحية + + + ورقة + أوراق + + + عدد + أعداد + + + سطر + أسطر + + + ملاحظة + ملاحظات + + + قطعة موسيقية + أوبرا + + + صفحة + صفحات + + + فقرة + فقرات + + + جزء + أجزاء + + + قسم + أقسام + + + مجلد + مجلدات + + + الطبعة + الطبعات + + + بيت + أبيات + + + sub verbo + s.vv + + ك + ف + عم + ر + و + عد + مم + + ص + ص.ص + + فق + جز + ق + + s.v + s.vv + + + ب + بب + + + مج + مجج + + edition + ط + + + ¶¶ + + + § + §§ + + + + + + + تحرير + تحرير + + + ترجمة + ترجمة + + + + + + + مح + محح + + + تر + ترر + + حرره + ترجمه + إلى + مقابلة بواسطة + مح + مت + يناير + فبراير + مارس + ابريل + مايو + يونيو + يوليو + اغسطس + سبتمبر + اكتوبر + نوفمبر + ديسمبر + يناير + فبراير + مارس + ابريل + مايو + يونيو + يوليو + اغسطس + سبتمبر + اكتوبر + نوفمبر + ديسمبر + + diff --git a/locale/locales-bg-BG.xml b/locale/locales-bg-BG.xml new file mode 100644 index 000000000..dfafde826 --- /dev/null +++ b/locale/locales-bg-BG.xml @@ -0,0 +1,207 @@ + + + + в + в + пак там + отворен на + изтеглен на + от + предстоящ + цитати + без дата + и + и съавт. + интервю + писмо + анонимен + анон + и други + под печат + онлайн + цитиран + интернет + представен на + антропология + астрономия + биология + ботаника + химия + инженерство + обща база + география + геология + история + хуманитарни науки + литература + математика + медицина + философия + физика + физиология + социология + наука + политически науки + обществени науки + теология + зоология + + книга + книги + + + глава + глави + + + колона + колони + + + фигура + фигури + + + фолио + фолия + + + брой + броеве + + + ред + редове + + + бележка + бележки + + + опус + опуси + + + страница + страници + + + параграф + параграфи + + + част + части + + + раздел + раздели + + + том + томове + + + издание + издания + + + стих + стихове + + + sub verbo + s.vv + + кн + гл + кол + фиг + фол + бр + оп + + с + с-ци + + п + ч + разд + + s.v + s.vv + + + ст + ст-ове + + + том + т-ове + + edition + изд + + + ¶¶ + + + § + §§ + + + автор + автори + + + редактор + редактори + + + преводач + преводачи + + + авт + авт-ри + + + ред + ред-ри + + + прев + прев-чи + + редактиран от + преведен от + до + интервюиран от + ред + прев + Януари + Февруари + Март + Април + Май + Юни + Юли + Август + Септември + Октомври + Ноември + Декември + Яну + Фев + Мар + Апр + Май + Юни + Юли + Авг + Сеп + Окт + Ное + Дек + + diff --git a/locale/locales-ca-AD.xml b/locale/locales-ca-AD.xml new file mode 100644 index 000000000..5f2a820aa --- /dev/null +++ b/locale/locales-ca-AD.xml @@ -0,0 +1,207 @@ + + + + at + in + ibid + accessed + retrieved + from + forthcoming + References + nd + and + et al. + interview + letter + anonymous + anon + and others + in press + online + cited + internet + presented at the + anthropology + astronomy + biology + botany + chemistry + engineering + generic base + geography + geology + history + humanities + literature + math + medicine + philosophy + physics + psychology + sociology + science + political science + social science + theology + zoology + + book + books + + + chapter + chapters + + + column + columns + + + figure + figures + + + folio + folios + + + number + numbers + + + line + line + + + note + notes + + + opus + opera + + + page + pages + + + paragraph + paragraph + + + part + parts + + + section + sections + + + volume + volumes + + + edition + editions + + + verse + verses + + + sub verbo + s.vv + + bk + chap + col + fig + f + no + op + + p + pp + + para + pt + sec + + s.v + s.vv + + + v + vv + + + vol + vols + + edition + ed + + + ¶¶ + + + § + §§ + + + + + + + editor + editors + + + translator + translators + + + + + + + ed + eds + + + tran + trans + + edited by + translated by + to + interview by + ed + trans + January + February + March + April + May + June + July + August + September + October + November + December + Jan + Feb + Mar + Apr + May + Jun + Jul + Aug + Sep + Oct + Nov + Dec + + diff --git a/locale/locales-cs-CZ.xml b/locale/locales-cs-CZ.xml new file mode 100644 index 000000000..281e6a0da --- /dev/null +++ b/locale/locales-cs-CZ.xml @@ -0,0 +1,207 @@ + + + + v + v + ibid + přístup + získáno + z + nadcházející + reference + bez data + a + et al. + interview + dopis + anonymous + anon + a další + v tisku + online + citován + internet + prezentován v + antropologie + astronomie + biologie + botanika + chemie + technika + všeobecný základ + geografie + geologie + historie + humanitní + literatura + matematika + medicína + filosofie + fyzika + psychologie + sociologie + věda + politologie + sociální věda + teologie + zoologie + + kniha + knihy + + + kapitola + kapitoly + + + sloupec + sloupce + + + obrázek + obrázky + + + list + listy + + + číslo + číslo + + + řádek + řádky + + + poznámka + poznámky + + + opus + opera + + + strana + strany + + + odstavec + odstavce + + + část + části + + + sekce + sekce + + + ročník + ročníky + + + edice + edice + + + verš + verše + + + sub verbo + s.vv + + kn + kap + sl + obr + l + čís + op + + s + s + + odst + č + sek + + s.v + s.vv + + + v + v + + + roč + roč + + edition + ed + + + ¶¶ + + + § + §§ + + + autor + autoři + + + editor + editoři + + + překladatel + překladatelé + + + + + + + ed + ed + + + překl + překl + + editoval + přeložil + pro + rozhovor vedl + ed + překl + leden + únor + březen + duben + květen + červen + červenec + srpen + září + říjen + listopad + prosinec + led + úno + bře + dub + kvě + čer + čvc + srp + zář + říj + lis + pro + + diff --git a/locale/locales-da-DK.xml b/locale/locales-da-DK.xml new file mode 100644 index 000000000..22a11ec04 --- /dev/null +++ b/locale/locales-da-DK.xml @@ -0,0 +1,207 @@ + + + + at + in + ibid + accessed + retrieved + from + forthcoming + References + nd + and + et al. + interview + letter + anonymous + anon + and others + in press + online + cited + internet + presented at the + anthropology + astronomy + biology + botany + chemistry + engineering + generic base + geography + geology + history + humanities + literature + math + medicine + philosophy + physics + psychology + sociology + science + political science + social science + theology + zoology + + book + books + + + chapter + chapters + + + column + columns + + + figure + figures + + + folio + folios + + + number + numbers + + + line + line + + + note + notes + + + opus + opera + + + page + pages + + + paragraph + paragraph + + + part + parts + + + section + sections + + + volume + volumes + + + edition + editions + + + verse + verses + + + sub verbo + s.vv + + bk + chap + col + fig + f + no + op + + p + pp + + para + pt + sec + + s.v + s.vv + + + v + vv + + + vol + vols + + edition + ed + + + ¶¶ + + + § + §§ + + + + + + + editor + editors + + + translator + translators + + + + + + + ed + eds + + + tran + trans + + edited by + translated by + to + interview by + ed + trans + January + February + March + April + May + June + July + August + September + October + November + December + Jan + Feb + Mar + Apr + May + Jun + Jul + Aug + Sep + Oct + Nov + Dec + + diff --git a/locale/locales-de-AT.xml b/locale/locales-de-AT.xml new file mode 100644 index 000000000..74a8e07ca --- /dev/null +++ b/locale/locales-de-AT.xml @@ -0,0 +1,207 @@ + + + + at + in + ebd. + zugegriffen + abgerufen + von + i.E. + Quellenangabe + o.J. + und + u.a. + interview + letter + anonymous + anon + and others + in press + online + cited + internet + presented at the + anthropology + astronomy + biology + botany + chemistry + engineering + generic base + geography + geology + history + humanities + literature + math + medicine + philosophy + physics + psychology + sociology + science + political science + social science + theology + zoology + + book + books + + + chapter + chapters + + + column + columns + + + figure + figures + + + folio + folios + + + number + numbers + + + Zeile + Zeilen + + + note + notes + + + opus + opera + + + Seite + Seiten + + + Absatz + Absätze + + + part + parts + + + section + sections + + + volume + volumes + + + edition + editions + + + verse + verses + + + sub verbo + s.vv + + bk + chap + col + fig + f + Nr + op + + S + S + + para + pt + sec + + s.v + s.vv + + + v + vv + + + vol + vols + + edition + ed + + + ¶¶ + + + § + §§ + + + + + + + Herausgeber + Herausgeber + + + Übersetzer + Übersetzer + + + + + + + Hrsg + Hrsg + + + Übers + Übers + + Hg. v + Übers. v + to + interview by + ed + trans + Jänner + Februar + März + April + Mai + Juni + Juli + August + September + Oktober + November + Dezember + Jän + Feb + Mar + Apr + Mai + Jun + Jul + Aug + Sep + Okt + Nov + Dez + + diff --git a/locale/locales-de-CH.xml b/locale/locales-de-CH.xml new file mode 100644 index 000000000..b80807f90 --- /dev/null +++ b/locale/locales-de-CH.xml @@ -0,0 +1,207 @@ + + + + at + in + ebd. + zugegriffen + abgerufen + von + i.E. + Quellenangabe + o.J. + und + u.a. + interview + letter + anonymous + anon + and others + in press + online + cited + internet + presented at the + anthropology + astronomy + biology + botany + chemistry + engineering + generic base + geography + geology + history + humanities + literature + math + medicine + philosophy + physics + psychology + sociology + science + political science + social science + theology + zoology + + book + books + + + chapter + chapters + + + column + columns + + + figure + figures + + + folio + folios + + + number + numbers + + + Zeile + Zeilen + + + note + notes + + + opus + opera + + + Seite + Seiten + + + Absatz + Absätze + + + part + parts + + + section + sections + + + volume + volumes + + + edition + editions + + + verse + verses + + + sub verbo + s.vv + + bk + chap + col + fig + f + Nr + op + + S + S + + para + pt + sec + + s.v + s.vv + + + v + vv + + + vol + vols + + edition + ed + + + ¶¶ + + + § + §§ + + + + + + + Herausgeber + Herausgeber + + + Übersetzer + Übersetzer + + + + + + + Hrsg + Hrsg + + + Übers + Übers + + Hg. v + Übers. v + to + interview by + ed + trans + Januar + Februar + März + April + Mai + Juni + Juli + August + September + Oktober + November + Dezember + Jan + Feb + Mar + Apr + Mai + Jun + Jul + Aug + Sep + Okt + Nov + Dez + + diff --git a/locale/locales-de-DE.xml b/locale/locales-de-DE.xml new file mode 100644 index 000000000..8933677ee --- /dev/null +++ b/locale/locales-de-DE.xml @@ -0,0 +1,207 @@ + + + + auf + in + ebd + zugegriffen + abgerufen + von + i. E. + Quellenangabe + o. J. + und + u. a. + Interview + Brief + ohne Autor + o. A. + und andere + im Druck + online + zitiert + Internet + gehalten auf der + Anthropologie + Astronomie + Biologie + Botanik + Chemie + Ingenieurswissenschaften + generischer Stil + Geographie + Geologie + Geschichte + Geisteswissenschaften + Literatur + Mathematik + Medizin + Philosophie + Physik + Psychologie + Soziologie + Naturwissenschaften + Politikwissenschaft + Sozialwissenschaften + Theologie + Zoologie + + Buch + Bücher + + + Kapitel + Kapitel + + + Spalte + Spalten + + + Abbildung + Abbildungen + + + Blatt + Blätter + + + Nummer + Nummern + + + Zeile + Zeilen + + + Note + Noten + + + Opus + Opera + + + Seite + Seiten + + + Absatz + Absätze + + + Teil + Teile + + + Abschnitt + Abschnitte + + + Band + Bände + + + Auflage + Auflagen + + + Vers + Verse + + + sub verbo + s.vv + + B + Kap + Sp + Abb + Fol + Nr + op + + S + S + + Abs + Teil + Abschn + + s.v + s.vv + + + V + Vv + + + Bd + Bd + + edition + Aufl + + + ¶¶ + + + § + §§ + + + + + + + Herausgeber + Herausgeber + + + Übersetzer + Übersetzer + + + + + + + Hrsg + Hrsg + + + Übers + Übers + + herausgegeben von + übersetzt von + an + interviewt von + hg. v + übers. v + Januar + Februar + März + April + Mai + Juni + Juli + August + September + Oktober + November + Dezember + Jan + Feb + März + Apr + Mai + Juni + Juli + Aug + Sep + Okt + Nov + Dez + + diff --git a/locale/locales-el-GR.xml b/locale/locales-el-GR.xml new file mode 100644 index 000000000..059d4201e --- /dev/null +++ b/locale/locales-el-GR.xml @@ -0,0 +1,207 @@ + + + + at + in + ibid + accessed + retrieved + from + forthcoming + references + n.d. + and + et al. + interview + letter + anonymous + anon + and others + in press + online + cited + internet + presented at the + anthropology + astronomy + biology + botany + chemistry + engineering + generic base + geography + geology + history + humanities + literature + math + medicine + philosophy + physics + psychology + sociology + science + political science + social science + theology + zoology + + book + books + + + chapter + chapters + + + column + columns + + + figure + figures + + + folio + folios + + + number + numbers + + + line + lines + + + note + notes + + + opus + opera + + + page + pages + + + paragraph + paragraph + + + part + parts + + + section + sections + + + volume + volumes + + + edition + editions + + + verse + verses + + + sub verbo + s.vv + + bk + chap + col + fig + f + no + op + + p + pp + + para + pt + sec + + s.v + s.vv + + + v + vv + + + vol + vols + + edition + ed + + + ¶¶ + + + § + §§ + + + + + + + editor + editors + + + translator + translators + + + + + + + ed + eds + + + tran + trans + + edited by + translated by + to + interview by + ed + trans + January + February + March + April + May + June + July + August + September + October + November + December + Jan + Feb + Mar + Apr + May + Jun + Jul + Aug + Sep + Oct + Nov + Dec + + diff --git a/locale/locales-en-US.xml b/locale/locales-en-US.xml new file mode 100644 index 000000000..962aabaff --- /dev/null +++ b/locale/locales-en-US.xml @@ -0,0 +1,230 @@ + + + + at + in + ibid + accessed + retrieved + from + forthcoming + references + n.d. + and + et al. + interview + letter + anonymous + anon + and others + in press + online + cited + internet + presented at the + filed + slip op. + rev'd + + + anthropology + astronomy + biology + botany + chemistry + engineering + generic base + geography + geology + history + humanities + literature + math + medicine + philosophy + physics + psychology + sociology + science + political science + social science + theology + zoology + + + + book + books + + + chapter + chapters + + + column + columns + + + figure + figures + + + folio + folios + + + number + numbers + + + line + lines + + + note + notes + + + opus + opera + + + page + pages + + + paragraph + paragraph + + + part + parts + + + section + sections + + + volume + volumes + + + edition + editions + + + verse + verses + + + sub verbo + s.vv + + + + bk + chap + col + fig + f + no + op + + p + pp + + para + pt + sec + + s.v + s.vv + + + v + vv + + + vol + vols + + edition + ed + + + + + ¶¶ + + + § + §§ + + + + + + + + + editor + editors + + + translator + translators + + + + + + + + + ed + eds + + + tran + trans + + + + edited by + translated by + to + interview by + + + ed + trans + + + January + February + March + April + May + June + July + August + September + October + November + December + + + Jan + Feb + Mar + Apr + May + Jun + Jul + Aug + Sep + Oct + Nov + Dec + + diff --git a/locale/locales-es-ES.xml b/locale/locales-es-ES.xml new file mode 100644 index 000000000..b7ecab283 --- /dev/null +++ b/locale/locales-es-ES.xml @@ -0,0 +1,207 @@ + + + + en + en + ibid + accedido + recuperado + a partir de + previsto + Referencias + s.d. + y + et al. + interview + letter + anonymous + anon + and others + in press + online + cited + internet + presented at the + anthropology + astronomy + biology + botany + chemistry + engineering + generic base + geography + geology + history + humanities + literature + math + medicine + philosophy + physics + psychology + sociology + science + political science + social science + theology + zoology + + libro + libros + + + capítulo + capítulos + + + columna + columnas + + + figura + figuras + + + folio + folios + + + número + números + + + línea + líneas + + + nota + notas + + + opus + opera + + + página + páginas + + + párrafo + párrafos + + + parte + partes + + + sección + secciones + + + volumen + volúmenes + + + edition + editions + + + verso + versos + + + sub verbo + s.vv + + lib + cap + col + fig + f + + op + + pág + págs + + para + pt + sec + + s.v + s.vv + + + v + vv + + + vol + vols + + edition + ed + + + ¶¶ + + + § + §§ + + + + + + + editor + editores + + + traductor + traductores + + + + + + + ed + eds + + + trad + trads + + editado por + traducido por + to + interview by + ed + trad + Enero + Febrero + Marzo + Abril + Mayo + Junio + Julio + Agosto + Septiembre + Octubre + Noviembre + Diciembre + Ene + Feb + Mar + Abr + May + Jun + Jul + Ago + Sep + Oct + Nov + Dic + + diff --git a/locale/locales-et-EE.xml b/locale/locales-et-EE.xml new file mode 100644 index 000000000..e88516e3d --- /dev/null +++ b/locale/locales-et-EE.xml @@ -0,0 +1,207 @@ + + + + at + in + ibid + accessed + retrieved + from + forthcoming + references + n.d. + and + et al. + interview + letter + anonymous + anon + and others + in press + online + cited + internet + presented at the + anthropology + astronomy + biology + botany + chemistry + engineering + generic base + geography + geology + history + humanities + literature + math + medicine + philosophy + physics + psychology + sociology + science + political science + social science + theology + zoology + + book + books + + + chapter + chapters + + + column + columns + + + figure + figures + + + folio + folios + + + number + numbers + + + line + lines + + + note + notes + + + opus + opera + + + page + pages + + + paragraph + paragraph + + + part + parts + + + section + sections + + + volume + volumes + + + edition + editions + + + verse + verses + + + sub verbo + s.vv + + bk + chap + col + fig + f + no + op + + p + pp + + para + pt + sec + + s.v + s.vv + + + v + vv + + + vol + vols + + edition + ed + + + ¶¶ + + + § + §§ + + + + + + + editor + editors + + + translator + translators + + + + + + + ed + eds + + + tran + trans + + edited by + translated by + to + interview by + ed + trans + January + February + March + April + May + June + July + August + September + October + November + December + Jan + Feb + Mar + Apr + May + Jun + Jul + Aug + Sep + Oct + Nov + Dec + + diff --git a/locale/locales-fr-FR.xml b/locale/locales-fr-FR.xml new file mode 100644 index 000000000..8db30ad2d --- /dev/null +++ b/locale/locales-fr-FR.xml @@ -0,0 +1,207 @@ + + + + à + dans + ibid + accédé + retrouvé + de + à venir + références + pas de date + et + et coll. + interview + lettre + anonyme + anon + et autres + sous presse + en ligne + cité + Internet + présenté au + anthropologie + astronomie + biologie + botanique + chimie + ingénierie + base générique + géographie + géologie + histoire + sciences humaines + littérature + mathématiques + médecine + philosophie + physique + psychologie + sociologie + science + science politique + science sociale + théologie + zoologie + + livre + livres + + + chapitre + chapitres + + + colonne + colonnes + + + figure + figures + + + folio + folios + + + numéro + numéros + + + ligne + lignes + + + note + notes + + + opus + opus + + + page + pages + + + paragraphe + paragraphes + + + partie + parties + + + section + sections + + + volume + volumes + + + edition + editions + + + verset + versets + + + sub verbo + s.vv + + liv + chap + col + fig + f + + op + + p + pp + + par + part + sec + + s.v + s.vv + + + v + vv + + + vol + vols + + edition + éd + + § + §§ + + + § + §§ + + + + + + + éditeur + éditeurs + + + traducteur + traducteurs + + + + + + + éd + éd + + + trad + trad + + édité par + traduit par + vers + interview par + éd + trad + Janvier + Février + Mars + Avril + Mai + Juin + Juillet + Août + Septembre + Octobre + Novembre + Décembre + Jan + Fév + Mar + Avr + Mai + Jun + Jul + Aoû + Sep + Oct + Nov + Déc + + diff --git a/locale/locales-he-IL.xml b/locale/locales-he-IL.xml new file mode 100644 index 000000000..13036a1d5 --- /dev/null +++ b/locale/locales-he-IL.xml @@ -0,0 +1,207 @@ + + + + + בתוך + שם + גישה + אוחזר + מתוך + forthcoming + References + nd + ו + ואחרים + interview + letter + anonymous + anon + and others + in press + online + cited + internet + presented at the + anthropology + astronomy + biology + botany + chemistry + engineering + generic base + geography + geology + history + humanities + literature + math + medicine + philosophy + physics + psychology + sociology + science + political science + social science + theology + zoology + + ספר + ספרים + + + פרק + פרקים + + + טור + טורים + + + figure + figures + + + folio + folios + + + מספר + מספרים + + + שורה + שורות + + + note + notes + + + אופוס + אופרה + + + עמוד + עמודים + + + paragraph + פיסקה + + + part + parts + + + section + sections + + + כרך + כרכים + + + edition + editions + + + בית + בתים + + + sub verbo + s.vv + + bk + chap + col + fig + f + no + op + + 'עמ + 'עמ + + para + pt + sec + + s.v + s.vv + + + v + vv + + + vol + vols + + edition + ed + + + ¶¶ + + + § + §§ + + + + + + + עורך + עורכים + + + מתרגם + מתרגמים + + + + + + + ed + eds + + + tran + trans + + נערך ע"י + תורגם ע"י + to + interview by + ed + trans + ינואר + פברואר + מרץ + אפריל + מאי + יוני + יולי + אוגוסט + ספטמבר + אוקטובר + נובמבר + דצמבר + Jan + Feb + Mar + Apr + May + Jun + Jul + Aug + Sep + Oct + Nov + Dec + + diff --git a/locale/locales-hu-HU.xml b/locale/locales-hu-HU.xml new file mode 100644 index 000000000..f8aaa7d50 --- /dev/null +++ b/locale/locales-hu-HU.xml @@ -0,0 +1,207 @@ + + + + + in + ibid + elérés + elérés + forrás + megjelenés alatt + hivatkozások + nd + és + et al. + interjú + levél + név nélkül + nn + és mások + nyomtatás alatt + online + idézi + internet + előadás + antropológia + csillagászat + biológia + botanika + kémia + mérnöki tudományok + általános + földrajz + geológia + történelem + bölcsésztudományok + irodalom + matematika + orvostudomány + filozófia + fizika + pszichológia + szociológia + tudomány + politikatudomány + társadalomtudomány + teológia + zoológia + + könyv + könyv + + + fejezet + fejezet + + + oszlop + oszlop + + + ábra + ábra + + + fóliáns + fóliáns + + + szám + szám + + + sor + sor + + + jegyzet + jegyzet + + + opus + opera + + + oldal + oldal + + + bekezdés + bekezdés + + + rész + rész + + + szakasz + szakasz + + + kötet + kötet + + + edition + editions + + + versszak + versszak + + + sub verbo + s.vv + + könyv + fej + oszl + ábr + fol + sz + op + + o + o + + bek + rész + szak + + s.v + s.vv + + + vsz + vsz + + + vol + vols + + edition + ed + + + ¶¶ + + + § + §§ + + + + + + + szerkesztő + szerkesztő + + + fordító + fordító + + + + + + + szerk + szerk + + + ford + ford + + szerkesztette + fordította + címzett + interjúkészítő + szerk + ford + január + február + március + április + május + június + július + augusztus + szeptember + október + november + december + jan + febr + márc + ápr + máj + jún + júl + aug + szept + okt + nov + dec + + diff --git a/locale/locales-is-IS.xml b/locale/locales-is-IS.xml new file mode 100644 index 000000000..05e92e160 --- /dev/null +++ b/locale/locales-is-IS.xml @@ -0,0 +1,207 @@ + + + + at + in + ibid + accessed + retrieved + from + forthcoming + References + nd + and + et al. + interview + letter + anonymous + anon + and others + in press + online + cited + internet + presented at the + anthropology + astronomy + biology + botany + chemistry + engineering + generic base + geography + geology + history + humanities + literature + math + medicine + philosophy + physics + psychology + sociology + science + political science + social science + theology + zoology + + book + books + + + chapter + chapters + + + column + columns + + + figure + figures + + + folio + folios + + + number + numbers + + + line + line + + + note + notes + + + opus + opera + + + page + pages + + + paragraph + paragraph + + + part + parts + + + section + sections + + + volume + volumes + + + edition + editions + + + verse + verses + + + sub verbo + s.vv + + bk + chap + col + fig + f + no + op + + p + pp + + para + pt + sec + + s.v + s.vv + + + v + vv + + + vol + vols + + edition + ed + + + ¶¶ + + + § + §§ + + + + + + + editor + editors + + + translator + translators + + + + + + + ed + eds + + + tran + trans + + edited by + translated by + to + interview by + ed + trans + January + February + March + April + May + June + July + August + September + October + November + December + Jan + Feb + Mar + Apr + May + Jun + Jul + Aug + Sep + Oct + Nov + Dec + + diff --git a/locale/locales-it-IT.xml b/locale/locales-it-IT.xml new file mode 100644 index 000000000..ec40943f9 --- /dev/null +++ b/locale/locales-it-IT.xml @@ -0,0 +1,207 @@ + + + + a + in + ibid + consultato + recuperato + da + futuro + Citazioni bibliografiche + S.d. + e + et al. + intervista + lettera + anonimo + anon + e altri + in stampa + in linea + citato + internet + presentato al + antropologia + astronomia + biologia + botanica + chimica + ingegneria + generica + geografia + geologia + storia + discipline umanistiche + letteratura + matematica + medicina + filosofia + fisica + psicologia + sociologia + scienze + scienze politiche + sociologia + teologia + zoologia + + libro + libri + + + capitolo + capitoli + + + colonna + colonne + + + figura + figure + + + foglio + fogli + + + numero + numeri + + + riga + righe + + + nota + note + + + opera + opere + + + pagina + pagine + + + capoverso + capoversi + + + parte + parti + + + paragrafo + paragrafi + + + volume + volumi + + + edizione + edizioni + + + verso + versi + + + sub verbo + s.vv + + lib + cap + col + fig + fgl + + op + + pag + pagg + + cpv + pt + par + + s.v + s.vv + + + v + vv + + + vol + vol + + edition + ed + + + ¶¶ + + + § + §§ + + + + + + + curatore + curatori + + + traduttore + traduttori + + + + + + + cur + cur + + + trad + trad + + a cura di + tradotto da + a + intervista di + cur. da + trad. da + Gennaio + Febbraio + Marzo + Aprile + Maggio + Giugno + Luglio + Agosto + Settembre + Ottobre + Novembre + Dicembre + Gen + Feb + Mar + Apr + Mag + Giu + Lug + Ago + Set + Ott + Nov + Dic + + diff --git a/locale/locales-ja-JP.xml b/locale/locales-ja-JP.xml new file mode 100644 index 000000000..c1feacbfe --- /dev/null +++ b/locale/locales-ja-JP.xml @@ -0,0 +1,207 @@ + + + + at + + 前掲 + アクセス + 読み込み + から + 近刊 + 参考文献 + 日付なし + + + interview + letter + anonymous + anon + and others + in press + online + cited + internet + presented at the + anthropology + astronomy + biology + botany + chemistry + engineering + generic base + geography + geology + history + humanities + literature + math + medicine + philosophy + physics + psychology + sociology + science + political science + social science + theology + zoology + + book + books + + + chapter + chapters + + + column + columns + + + figure + figures + + + folio + folios + + + number + numbers + + + + + + + note + notes + + + opus + opera + + + ページ + ページ + + + 段落 + 段落 + + + part + parts + + + section + sections + + + volume + volumes + + + edition + editions + + + verse + verses + + + sub verbo + s.vv + + bk + chap + col + fig + f + + op + + p + p + + para + pt + sec + + s.v + s.vv + + + v + vv + + + vol + vols + + edition + ed + + + ¶¶ + + + § + §§ + + + + + + + 編集者 + 編集者 + + + 翻訳者 + 翻訳者 + + + + + + + 編集者 + 編集者 + + + 翻訳者 + 翻訳者 + + 編集者: + 翻訳者: + to + interview by + ed + trans + 1月 + 2月 + 3月 + 4月 + 5月 + 6月 + 7月 + 8月 + 9月 + 10月 + 11月 + 12月 + 1月 + 2月 + 3月 + 4月 + 5月 + 6月 + 7月 + 8月 + 9月 + 10月 + 11月 + 12月 + + diff --git a/locale/locales-ko-KR.xml b/locale/locales-ko-KR.xml new file mode 100644 index 000000000..9254be404 --- /dev/null +++ b/locale/locales-ko-KR.xml @@ -0,0 +1,207 @@ + + + + at + in + ibid + 접근된 + retrieved + (으)로부터 + 근간 + 참고 문헌 + 일자 없음 + 와/과 + 기타 + interview + letter + anonymous + anon + and others + in press + online + cited + internet + presented at the + anthropology + astronomy + biology + botany + chemistry + engineering + generic base + geography + geology + history + humanities + literature + math + medicine + philosophy + physics + psychology + sociology + science + political science + social science + theology + zoology + + book + books + + + chapter + chapters + + + column + columns + + + figure + figures + + + folio + folios + + + number + numbers + + + + + + + note + notes + + + opus + opera + + + 페이지 + 페이지 + + + 단락 + 단락 + + + part + parts + + + section + sections + + + volume + volumes + + + edition + editions + + + verse + verses + + + sub verbo + s.vv + + bk + chap + col + fig + f + + op + + p + pp + + para + pt + sec + + s.v + s.vv + + + v + vv + + + vol + vols + + edition + ed + + + ¶¶ + + + § + §§ + + + + + + + 편집자 + 편집자 + + + 번역자 + 번역자 + + + + + + + 편집자 + 편집자 + + + 번역자 + 번역자 + + 편집자: + 번역자: + to + interview by + ed + trans + 1월 + 2월 + 3월 + 4월 + 5월 + 6월 + 7월 + 8월 + 9월 + 10월 + 11월 + 12월 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + + diff --git a/locale/locales-mn-MN.xml b/locale/locales-mn-MN.xml new file mode 100644 index 000000000..dd3c5edb0 --- /dev/null +++ b/locale/locales-mn-MN.xml @@ -0,0 +1,207 @@ + + + + at + in + ibid + accessed + retrieved + from + forthcoming + references + n.d. + and + et al. + interview + letter + anonymous + anon + and others + in press + online + cited + internet + presented at the + anthropology + astronomy + biology + botany + chemistry + engineering + generic base + geography + geology + history + humanities + literature + math + medicine + philosophy + physics + psychology + sociology + science + political science + social science + theology + zoology + + book + books + + + chapter + chapters + + + column + columns + + + figure + figures + + + folio + folios + + + number + numbers + + + line + lines + + + note + notes + + + opus + opera + + + page + pages + + + paragraph + paragraph + + + part + parts + + + section + sections + + + volume + volumes + + + edition + editions + + + verse + verses + + + sub verbo + s.vv + + bk + chap + col + fig + f + no + op + + p + pp + + para + pt + sec + + s.v + s.vv + + + v + vv + + + vol + vols + + edition + ed + + + ¶¶ + + + § + §§ + + + + + + + editor + editors + + + translator + translators + + + + + + + ed + eds + + + tran + trans + + edited by + translated by + to + interview by + ed + trans + January + February + March + April + May + June + July + August + September + October + November + December + Jan + Feb + Mar + Apr + May + Jun + Jul + Aug + Sep + Oct + Nov + Dec + + diff --git a/locale/locales-nb-NO.xml b/locale/locales-nb-NO.xml new file mode 100644 index 000000000..f99007393 --- /dev/null +++ b/locale/locales-nb-NO.xml @@ -0,0 +1,207 @@ + + + + + i + ibid + aksessert + hentet + fra + kommende + referanser + udatert + og + mfl + intervju + brev + anonym + anon + med flere + i trykk + online + cited + Internett + presentert på + antropologi + astronomi + biologi + botanikk + kjemi + ingeniørvitenskap + generic base + geografi + geologi + historie + humanistiske fag + litteratur + matte + medisin + filosofi + fysikk + fysiologi + sosiologi + naturvitenskap + political science + sosialvitenskap + teologi + zoologi + + bok + bøker + + + kapittel + kapitler + + + kolonne + kolenner + + + figur + figurer + + + folio + folioer + + + nummer + numre + + + linje + linjer + + + note + noter + + + opus + opus + + + side + sider + + + avsnitt + avsnitt + + + del + deler + + + seksjon + seksjoner + + + bind + bind + + + utgave + utgaver + + + vers + vers + + + sub verbo + s.vv + + b + kap + kol + fig + fol + nr + op + + s + s + + avsn + d + sek + + s.v + s.vv + + + v + v + + + bd + bd + + edition + utg + + + ¶¶ + + + § + §§ + + + + + + + redaktør + redaktører + + + oversetter + oversettere + + + + + + + red + red + + + overs + overs + + redigert av + oversatt av + mottatt av + intervjuet av + utg + overs + Januar + Februar + Mars + April + Mai + Juni + Juli + August + September + Oktober + November + Desember + Jan + Feb + Mar + Apr + Mai + Jun + Jul + Aug + Sep + Okt + Nov + Des + + diff --git a/locale/locales-nl-NL.xml b/locale/locales-nl-NL.xml new file mode 100644 index 000000000..43b2d931b --- /dev/null +++ b/locale/locales-nl-NL.xml @@ -0,0 +1,207 @@ + + + + bij + in + ibid + bezocht + verkregen + van + in voorbereiding + referenties + geen datum + en + e.a. + interview + brief + anoniem + anon + en anderen + in druk + online + geciteerd + internet + gepresenteerd bij + anthropologie + astronomie + biologie + botanie + scheikunde + techniek + generiek + geografie + geologie + geschiedenis + geesteswetenschappen + literatuur + wiskunde + medicijnen + filosofie + natuurkunde + psychologie + sociologie + wetenschap + politieke wetenschappen + sociale wetenschappen + theologie + zoologie + + boek + boeken + + + hoofdstuk + hoofdstukken + + + column + columns + + + figuur + figuren + + + folio + folio's + + + nummer + nummers + + + regel + regels + + + aantekening + aantekeningen + + + opus + opera + + + pagina + pagina's + + + paragraaf + paragrafen + + + deel + delen + + + sectie + secties + + + volume + volumes + + + editie + edities + + + vers + versen + + + sub verbo + s.vv + + bk + hfdst + col + fig + f + nr + op + + p + pp + + par + deel + sec + + s.v + s.vv + + + v + vv + + + vol + vols + + edition + ed + + + ¶¶ + + + § + §§ + + + + + + + redacteur + redacteuren + + + vertaler + vertalers + + + + + + + red + red + + + vert + vert + + bewerkt door + vertaald door + ontvangen door + geinterviewd door + red + vert + januari + februari + maart + april + mei + juni + juli + augustus + september + oktober + november + december + jan + feb + mrt + apr + mei + jun + jul + aug + sep + okt + nov + dec + + diff --git a/locale/locales-pl-PL.xml b/locale/locales-pl-PL.xml new file mode 100644 index 000000000..89dc3956e --- /dev/null +++ b/locale/locales-pl-PL.xml @@ -0,0 +1,207 @@ + + + + at + w + ibid + udostępniono + pobrano + z + w druku + Referencje + bez daty + i + et al. + wywiad + list + anonim + anonim + i inni + w druku + online + cytowane + internet + zaprezentowano + antropologia + astronomia + biologia + botanika + chemia + inżynieria + generic base + geografia + geologia + historia + humanistyka + literatura + matematyka + medycyna + filozofia + fizyka + psychologia + socjologia + nauki ścisłe + nauki polityczne + nauki społeczne + teologia + zoologia + + książka + książki + + + rozdział + rozdziały + + + kolumna + kolumny + + + rycina + ryciny + + + folio + folios + + + numer + numery + + + wers + wersy + + + notatka + notatki + + + opus + opera + + + strona + strony + + + akapit + akapity + + + część + części + + + sekcja + sekcja + + + tom + tomy + + + wydanie + wydania + + + wers + wersy + + + sub verbo + s.vv + + książka + rozdz + kolumna + ryc + folio + nr + op + + s + s + + akapit + część + sekcja + + s.v + s.vv + + + wers + wersy + + + t + t + + edition + wyd + + + ¶¶ + + + § + §§ + + + + + + + redaktor + redaktorzy + + + tłumacz + tłumacze + + + + + + + red + red + + + tłum + tłum + + zredagowane przez + przetłumaczone przez + dla + przeprowadzony przez + red + tłum + styczeń + luty + marzec + kwiecień + maj + czerwiec + lipiec + sierpień + wrzesień + październik + listopad + grudzień + styczeń + luty + marzec + kwiecień + maj + czerwiec + lipiec + sierpień + wrzesień + październik + listopad + grudzień + + diff --git a/locale/locales-pt-BR.xml b/locale/locales-pt-BR.xml new file mode 100644 index 000000000..07ae87b82 --- /dev/null +++ b/locale/locales-pt-BR.xml @@ -0,0 +1,207 @@ + + + + em + in + ibidem + acessado + recuperado + de + a ser publicado + referências + [s.d.] + e + et al. + entrevista + carta + anônimo + anon + e outros + no prelo + online + citado + internet + apresentado em + antropologia + astronomia + biologia + botânica + química + engenharia + base genérica + geografia + geologia + história + humanidades + literatura + matemática + medicina + philosofia + física + psicologia + sociologia + ciências + ciências políticas + ciências sociais + teologia + zoologia + + livro + livros + + + capítulo + capítulos + + + coluna + colunas + + + figura + figuras + + + folio + folios + + + número + números + + + linha + linhas + + + nota + notas + + + opus + opera + + + página + páginas + + + parágrafo + parágrafos + + + parte + partes + + + seção + seções + + + volume + volumes + + + edição + edições + + + verso + versos + + + sub verbo + s.vv + + liv + cap + col + fig + f + n + op + + p + pp + + para + pt + seç + + s.v + s.vv + + + v + vv + + + vol + vols + + edition + ed + + + ¶¶ + + + § + §§ + + + + + + + organizador + organizadores + + + tradutor + tradutores + + + + + + + org + orgs + + + trad + trads + + organizado por + traduzido por + para + intrevista de + org + trad + janeiro + fevereiro + março + abril + maio + junho + julho + agosto + setembro + outubro + novembro + dezembro + jan + fev + mar + abr + maio + jun + jul + ago + set + out + nov + dez + + diff --git a/locale/locales-pt-PT.xml b/locale/locales-pt-PT.xml new file mode 100644 index 000000000..1f23e7f36 --- /dev/null +++ b/locale/locales-pt-PT.xml @@ -0,0 +1,207 @@ + + + + em + em + ibid + acedido + obtido + de + a publicar + Referências + sem data + e + et al. + entrevista + carta + anónimo + anón + e outros + no prelo + em linha + citado + internet + apresentado na + antropologia + astronomia + biologia + botânica + química + engenharia + base genérica + geografia + geologia + história + humanidades + literatura + matemática + medicina + filosofia + física + psicologia + sociologia + ciência + ciência política + ciência social + teologia + zoologia + + livro + livros + + + capítulo + capítulos + + + coluna + colunas + + + figura + figuras + + + fólio + fólios + + + número + número + + + linha + linhas + + + nota + notas + + + opus + opera + + + página + páginas + + + parágrafo + parágrafos + + + parte + partes + + + secção + secções + + + volume + volumes + + + edição + edições + + + versículo + versículos + + + sub verbo + s.vv + + liv + cap + col + fig + f + n + op + + p + pp + + par + pt + sec + + s.v + s.vv + + + v + vv + + + vol + vols + + edition + ed + + + ¶¶ + + + § + §§ + + + + + + + editor + editores + + + tradutor + tradutores + + + + + + + ed + eds + + + trad + trads + + editado por + traduzido por + para + entrevistado por + ed + trad + Janeiro + Fevereiro + Março + Abril + Maio + Junho + Julho + Agosto + Setembro + Outubro + Novembro + Dezembro + Jan + Fev + Mar + Abr + Mai + Jun + Jul + Ago + Set + Out + Nov + Dez + + diff --git a/locale/locales-ro-RO.xml b/locale/locales-ro-RO.xml new file mode 100644 index 000000000..0e6bd271b --- /dev/null +++ b/locale/locales-ro-RO.xml @@ -0,0 +1,207 @@ + + + + la + în + ibidem + accesat în + preluat în + din + în curs de apariţie + Bibliografie + f.a. + şi + et al. + interviu + scrisoare + anonim + anon + şi alţii + sub tipar + online + citat + internet + prezentat la + antropologie + astronomie + biologie + botanică + chimie + inginerie + general (de bază) + geografie + geologie + istorie + umanioare + literatură + matematică + medicină + filosofie + fizică + psihologie + sociologie + ştiinţă + ştiinţe politice + ştiinţe sociale + teologie + zoologie + + cartea + cărţile + + + capitolul + capitolele + + + coloana + coloanele + + + figura + figurile + + + folio + folio + + + numărul + numerele + + + linia + liniile + + + nota + notele + + + opusul + opusurile + + + pagina + paginile + + + paragraful + paragrafele + + + partea + părţile + + + secţiunea + secţiunile + + + volumul + volumele + + + ediţia + ediţiile + + + versetul + versetele + + + sub verbo + s.vv + + cart + cap + col + fig + fol + nr + op + + p + pp + + par + part + sec + + s.v + s.vv + + + v + vv + + + vol + vol + + edition + ed + + + ¶¶ + + + § + §§ + + + autor + autori + + + editor + editori + + + traducător + traducători + + + aut + aut + + + ed + ed + + + trad + trad + + ediţie de + traducere de + în + interviu de + ed + trad + ianuarie + februarie + martie + aprilie + mai + iunie + iulie + august + septembrie + octombrie + noiembrie + decembrie + ian + feb + mar + apr + mai + iun + iul + aug + sep + oct + nov + dec + + diff --git a/locale/locales-ru-RU.xml b/locale/locales-ru-RU.xml new file mode 100644 index 000000000..0111b04b4 --- /dev/null +++ b/locale/locales-ru-RU.xml @@ -0,0 +1,207 @@ + + + + at + в + так же + вызвано + извлечено + от + грядущие + Ссылки + нет даты + и + и др. + interview + letter + anonymous + anon + and others + in press + online + cited + internet + presented at the + anthropology + astronomy + biology + botany + chemistry + engineering + generic base + geography + geology + history + humanities + literature + math + medicine + philosophy + physics + psychology + sociology + science + political science + social science + theology + zoology + + book + books + + + chapter + chapters + + + column + columns + + + figure + figures + + + folio + folios + + + number + numbers + + + линия + линии + + + note + notes + + + opus + opera + + + страницы + страницы + + + параграф + параграфы + + + part + parts + + + section + sections + + + volume + volumes + + + edition + editions + + + verse + verses + + + sub verbo + s.vv + + bk + chap + col + fig + f + ном + op + + стр-а + стр-ы + + para + pt + sec + + s.v + s.vv + + + v + vv + + + vol + vols + + edition + ed + + + ¶¶ + + + § + §§ + + + + + + + редактор + редакторы + + + переводчик + переводчики + + + + + + + ред-р + ред-ры + + + перев-к + перев-и + + отредактировано + переведено + to + interview by + ред + перев + Январь + Февраль + Март + Апрель + Май + Июнь + Июль + Август + Сентябрь + Октябрь + Ноябрь + Декабрь + Янв + Фев + Мар + Апр + Май + Июн + Июл + Авг + Сен + Окт + Ноя + Дек + + diff --git a/locale/locales-sk-SK.xml b/locale/locales-sk-SK.xml new file mode 100644 index 000000000..b293eb34f --- /dev/null +++ b/locale/locales-sk-SK.xml @@ -0,0 +1,207 @@ + + + + v + v + ibid + cit + cit + z + nadchádzajúci + referencie + n.d. + a + et al + osobná komunikácia + list + anonym + anon + and ďalší + v tlači + online + cit + internet + prezentované na + antropológia + astronómia + biológia + botanika + chémia + strojárstvo/technika + všeobecný základ + geografia + geológia + história + humanitné vedy + literatúra + matematika + medicína + filozofia + fyzika + psychológia + sociológia + veda + politické vedy + sociálne vedy + teológia + zoológia + + kniha + knihy + + + kapitola + kapitoly + + + stĺpec + stĺpce + + + obrázok + obrázky + + + list + listy + + + číslo + čísla + + + riadok + riadky + + + poznámka + poznámky + + + opus + opera + + + strana + strany + + + odstavec + odstavce + + + časť + časti + + + sekcia + sekcie + + + ročník + ročníky + + + vydanie + vydania + + + verš + verše + + + sub verbo + s.vv + + k + kap + stĺp + obr + l + č + op + + s + s + + par + č + sek + + s.v + s.vv + + + v + v + + + roč + roč + + edition + vyd + + + + + + § + § + + + + + + + editor + editori + + + prekladateľ + prekladatelia + + + + + + + ed + ed + + + prek + prek + + editoval + preložil + adresát + rozhovor urobil + ed + prel + január + február + marec + apríl + máj + jún + júl + august + september + október + november + december + jan + feb + mar + apr + máj + jún + júl + aug + sep + okt + nov + dec + + diff --git a/locale/locales-sl-SI.xml b/locale/locales-sl-SI.xml new file mode 100644 index 000000000..e66b68a82 --- /dev/null +++ b/locale/locales-sl-SI.xml @@ -0,0 +1,207 @@ + + + + pri + v + isto + dostopano + pridobljeno + od + pred izidom + sklici + b.d. + in + idr. + intervju + pismo + anonimni + anon + in drugi + v tisku + na spletu + citirano + internet + predstavljeno na + antropologija + astronomija + biologija + botanika + kemija + strojništvo + splošno + geografija + geologija + zgodovina + humanistika + literatura + matematika + medicina + filozofija + fizika + psihologija + sociologija + znanost + politologija + družbene vede + teologija + zoologija + + knjiga + knjige + + + poglavje + poglavja + + + stolpec + stolpci + + + slika + slike + + + folio + folii + + + številka + številke + + + vrstica + vrstice + + + opomba + opombe + + + opus + opera + + + stran + strani + + + odstavek + odstavki + + + del + deli + + + odsek + odseki + + + letnik + letniki + + + izdaja + izdaje + + + verz + verzi + + + sub verbo + s.vv + + knj + pogl + sto + sl + f + št + op + + str + str + + odst + del + odsk + + s.v + s.vv + + + v + v + + + let + let + + edition + iz + + + ¶¶ + + + § + §§ + + + + + + + urednik + uredniki + + + prevajalec + prevajalci + + + + + + + ur + ur + + + prev + prev + + uredil + prevedel + za + intervjuval + ur + prev + januar + februar + marec + april + maj + junij + julij + avgust + september + oktober + november + december + jan + feb + mar + apr + maj + jun + jul + avg + sep + okt + nov + dec + + diff --git a/locale/locales-sr-RS.xml b/locale/locales-sr-RS.xml new file mode 100644 index 000000000..38007dd21 --- /dev/null +++ b/locale/locales-sr-RS.xml @@ -0,0 +1,207 @@ + + + + на + у + ibid + приступљено + преузето + од + долазећи + референце + без датума + и + и остали + интервју + писмо + анонимна + анон. + и остали + у штампи + на Интернету + цитирано + Интернет + представљено на + антропологија + астрономија + биологија + ботаника + хемија + инжињерство + уопштена основа + географија + геологија + историја + култура и уметност + литература + математика + медицина + филозофија + физика + психологија + социологија + наука + политичка наука + друштвена наука + теологија + зоологија + + књига + књиге + + + поглавље + поглавља + + + колона + колоне + + + цртеж + цртежи + + + фолио + фолији + + + број + бројеви + + + линија + линије + + + белешка + белешке + + + опус + опера + + + страница + странице + + + параграф + параграфи + + + део + делова + + + одељак + одељака + + + том + томова + + + издање + издања + + + строфа + строфе + + + sub verbo + s.vv + + књига + Пог. + кол. + црт. + фолио + изд. + оп. + + стр. + стр. + + пар. + део + од. + + s.v + s.vv + + + стр. + стр. + + + том + томови + + edition + изд. + + + ¶¶ + + + § + §§ + + + + + + + уредник + урединици + + + преводилац + преводиоци + + + + + + + ур. + ур. + + + прев. + прев. + + уредио + превео + прима + интервјуисао + ур. + прев. + Јануар + Фебруар + Март + Април + Мај + Јуни + Јули + Август + Септембар + Октобар + Новембар + Децембар + Јан. + Феб. + Март + Апр. + Мај + Јуни + Јули + Авг. + Сеп. + Окт. + Нов. + Дец. + + diff --git a/locale/locales-sv-SE.xml b/locale/locales-sv-SE.xml new file mode 100644 index 000000000..ab75b4a0b --- /dev/null +++ b/locale/locales-sv-SE.xml @@ -0,0 +1,207 @@ + + + + vid + i + ibid + åtkomstdatum + hämtad + från + kommande + Referenser + nd + och + m.fl. + intervju + brev + anonym + anon + och andra + i tryck + online + citerad + internet + presenterad vid + antropologi + astronomi + biologi + botanik + kemi + teknik + generic base + geografi + geologi + historia + humaniora + litteraturvetenskap + matematik + medicin + filosofi + fysik + psykologi + sociologi + vetenskap + statsvetenskap + samhällsvetenskap + teologi + zoologi + + bok + böcker + + + kapitel + kapitel + + + kolumn + kolumner + + + figur + figurer + + + folio + folios + + + nummer + nummer + + + rad + rader + + + not + noter + + + opus + opera + + + sida + sidor + + + stycke + stycken + + + dek + delar + + + avnitt + avsnitt + + + volym + volumer + + + upplaga + upplagor + + + vers + verser + + + sub verbo + s.vv + + bok + kap + kol + fig + f + num + op + + s + ss + + st + del + avs + + s.v + s.vv + + + vers + verser + + + vol + vols + + edition + uppl + + + ¶¶ + + + § + §§ + + + + + + + redaktör + redaktörer + + + översättare + översättare + + + + + + + red + reds + + + övers + övers + + redigerad av + översatt av + till + intervju av + red + övers + Januari + Februari + Mars + April + Maj + Juni + Juli + Augusti + September + Oktober + November + December + Jan + Feb + Mar + Apr + Maj + Jun + Jul + Aug + Sep + Okt + Nov + Dec + + diff --git a/locale/locales-th-TH.xml b/locale/locales-th-TH.xml new file mode 100644 index 000000000..d2ac94562 --- /dev/null +++ b/locale/locales-th-TH.xml @@ -0,0 +1,207 @@ + + + + at + in + ibid + accessed + retrieved + from + forthcoming + references + n.d. + and + et al. + interview + letter + anonymous + anon + and others + in press + online + cited + internet + presented at the + anthropology + astronomy + biology + botany + chemistry + engineering + generic base + geography + geology + history + humanities + literature + math + medicine + philosophy + physics + psychology + sociology + science + political science + social science + theology + zoology + + book + books + + + chapter + chapters + + + column + columns + + + figure + figures + + + folio + folios + + + number + numbers + + + line + lines + + + note + notes + + + opus + opera + + + page + pages + + + paragraph + paragraph + + + part + parts + + + section + sections + + + volume + volumes + + + edition + editions + + + verse + verses + + + sub verbo + s.vv + + bk + chap + col + fig + f + no + op + + p + pp + + para + pt + sec + + s.v + s.vv + + + v + vv + + + vol + vols + + edition + ed + + + ¶¶ + + + § + §§ + + + + + + + editor + editors + + + translator + translators + + + + + + + ed + eds + + + tran + trans + + edited by + translated by + to + interview by + ed + trans + January + February + March + April + May + June + July + August + September + October + November + December + Jan + Feb + Mar + Apr + May + Jun + Jul + Aug + Sep + Oct + Nov + Dec + + diff --git a/locale/locales-tr-TR.xml b/locale/locales-tr-TR.xml new file mode 100644 index 000000000..6b3ccdc60 --- /dev/null +++ b/locale/locales-tr-TR.xml @@ -0,0 +1,207 @@ + + + + de + içinde + ibid + erişildi + erişildi + den + gelecek + referans + tarih yok + ve + ve diğ. + interview + letter + isimsiz + isimsiz + ve diğ. + basımda + çevrimiçi + kaynak + internet + sunulan + antropoloji + astronomi + biyoloji + botanik + kimya + mühendislik + generic-base + coğrafya + jeoloji + tarih + humanities + edebiyat + matematik + tıp + felsefe + fizik + pisikoloji + sosyoloji + bilim + siyaset bilimi + sosyal bilimler + din bilimi + hayvanbilimi + + kitap + kitaplar + + + bölüm + bölümler + + + sütun + sütunlar + + + şekil + şekiller + + + folyo + folyo + + + sayı + sayılar + + + satır + satırlar + + + not + notlar + + + opus + opera + + + sayfa + sayfalar + + + paragraf + paragraflar + + + kısım + kısımlar + + + bölüm + bölümler + + + cilt + ciltler + + + edition + editions + + + dize + dizeler + + + sub verbo + s.vv + + kit + böl + süt + şek + f + sayı + op + + s + ss + + para + kıs + böl + + s.v + s.vv + + + v + vv + + + vol + vols + + edition + ed + + + ¶¶ + + + § + §§ + + + + + + + editör + editörler + + + çevirmen + çevirmenler + + + + + + + ed + ed + + + çev + çev + + editör + çeviren + to + Röportaj yapan + ed + çev + Ocak + Şubat + Mart + Nisan + Mayıs + Haziran + Temmuz + Ağustos + Eylül + Ekim + Kasım + Aralık + Oca + Şub + Mar + Nis + May + Haz + Tem + Ağu + Eyl + Eki + Kas + Ara + + diff --git a/locale/locales-uk-UA.xml b/locale/locales-uk-UA.xml new file mode 100644 index 000000000..3e1840757 --- /dev/null +++ b/locale/locales-uk-UA.xml @@ -0,0 +1,207 @@ + + + + на + в + ibid + accessed + retrieved + із + forthcoming + посилання + n.d. + і + et al. + інтервю + лист + анонімний + анон. + та інші + у пресі + online + cited + інтернет + presented at the + антропологія + астрономія + біологія + ботаніка + хімія + інженерія + generic base + географія + геологія + історія + гуманітарні + література + математика + медицина + філософія + фізика + психологія + соціологія + наука + політичні науки + соціальні науки + теологія + зоологія + + book + books + + + chapter + chapters + + + column + columns + + + figure + figures + + + folio + folios + + + number + numbers + + + line + lines + + + note + notes + + + opus + opera + + + page + pages + + + paragraph + paragraph + + + part + parts + + + section + sections + + + volume + volumes + + + edition + editions + + + verse + verses + + + sub verbo + s.vv + + bk + chap + col + fig + f + no + op + + p + pp + + para + pt + sec + + s.v + s.vv + + + v + vv + + + vol + vols + + edition + ed + + + ¶¶ + + + § + §§ + + + + + + + editor + editors + + + translator + translators + + + + + + + ed + eds + + + tran + trans + + edited by + translated by + to + interview by + ed + trans + Січень + Лютий + Березень + Квітень + Травень + Червень + Липень + Серпень + Вересень + Жовтень + Листопад + Грудень + Січ + Лют + Бер + Квіт + Трав + Чер + Лип + Сер + Вер + Жов + Лис + Груд + + diff --git a/locale/locales-vi-VN.xml b/locale/locales-vi-VN.xml new file mode 100644 index 000000000..bf34518c8 --- /dev/null +++ b/locale/locales-vi-VN.xml @@ -0,0 +1,207 @@ + + + + at + trong + n.t. + truy cập + truy vấn + từ + sắp tới + tham khảo + không ngày + + và c.s. + interview + letter + anonymous + anon + and others + in press + online + cited + internet + presented at the + anthropology + astronomy + biology + botany + chemistry + engineering + generic base + geography + geology + history + humanities + literature + math + medicine + philosophy + physics + psychology + sociology + science + political science + social science + theology + zoology + + book + books + + + chapter + chapters + + + column + columns + + + figure + figures + + + folio + folios + + + number + numbers + + + dòng + dòng + + + note + notes + + + opus + opera + + + trang + trang + + + đoạn văn + đoạn văn + + + part + parts + + + section + sections + + + volume + volumes + + + edition + editions + + + verse + verses + + + sub verbo + s.vv + + bk + chap + col + fig + f + số p.h + op + + tr + tr + + para + pt + sec + + s.v + s.vv + + + v + vv + + + vol + vols + + edition + ed + + + ¶¶ + + + § + §§ + + + + + + + biên tập viên + biên tập viên + + + biên dịch viên + biên dịch viên + + + + + + + b.t.v + b.t.v + + + b.d.v + b.d.v + + biên tập bởi + biên dịch bởi + to + interview by + b.t + b.d + Tháng Giêng + Tháng Hai + Tháng Ba + Tháng Tư + Tháng Năm + Tháng Sáu + Tháng Bảy + Tháng Tám + Tháng Chín + Tháng Mười + Tháng Mười-Một + Tháng Chạp + tháng 1 + tháng 2 + tháng 3 + tháng 4 + tháng 5 + tháng 6 + tháng 7 + tháng 8 + tháng 9 + tháng 10 + tháng 11 + tháng 12 + + diff --git a/locale/locales-zh-CN.xml b/locale/locales-zh-CN.xml new file mode 100644 index 000000000..0567635cf --- /dev/null +++ b/locale/locales-zh-CN.xml @@ -0,0 +1,207 @@ + + + + at + in + ibid + accessed + retrieved + from + forthcoming + References + nd + and + et al. + interview + letter + anonymous + anon + and others + in press + online + cited + internet + presented at the + anthropology + astronomy + biology + botany + chemistry + engineering + generic base + geography + geology + history + humanities + literature + math + medicine + philosophy + physics + psychology + sociology + science + political science + social science + theology + zoology + + book + books + + + chapter + chapters + + + column + columns + + + figure + figures + + + folio + folios + + + number + numbers + + + line + line + + + note + notes + + + opus + opera + + + page + pages + + + paragraph + paragraph + + + part + parts + + + section + sections + + + volume + volumes + + + edition + editions + + + verse + verses + + + sub verbo + s.vv + + bk + chap + col + fig + f + no + op + + p + pp + + para + pt + sec + + s.v + s.vv + + + v + vv + + + vol + vols + + edition + ed + + + ¶¶ + + + § + §§ + + + + + + + editor + editors + + + translator + translators + + + + + + + ed + eds + + + tran + trans + + edited by + translated by + to + interview by + ed + trans + January + February + March + April + May + June + July + August + September + October + November + December + Jan + Feb + Mar + Apr + May + Jun + Jul + Aug + Sep + Oct + Nov + Dec + + diff --git a/locale/locales-zh-TW.xml b/locale/locales-zh-TW.xml new file mode 100644 index 000000000..ae167868a --- /dev/null +++ b/locale/locales-zh-TW.xml @@ -0,0 +1,207 @@ + + + + + + 同上出處 + 被取用 + 被取回 + + 將來的 + 參考資料 + 無日期 + + 等人 + 訪問 + 信件 + 不具名的 + 無名 + 及其他 + 印行中 + 在線上 + 被引用 + 網際網路 + 簡報於 + 人類學 + 天文學 + 生物學 + 植物學 + 化學 + 工程學 + 一般基礎 + 地理學 + 地質學 + 歷史學 + 人文學科 + 文學 + 數學 + 醫學 + 哲學 + 物理學 + 心理學 + 社會學 + 自然科學 + 政治科學 + 社會科學 + 神學 + 動物學 + + + + + + + + + + + + + + + + + + 對開紙 + 對開紙 + + + 期數 + 期數 + + + + + + + 筆記 + 筆記 + + + 作品 + 作品 + + + + + + + 段落 + 段落 + + + + + + + + + + + + + + + 版本 + 版本 + + + 詩句 + 詩句 + + + sub verbo + s.vv + + + + + + + + + + + + + + + + + s.v + s.vv + + + + + + + + + + edition + + + + ¶¶ + + + § + §§ + + + 作者 + 作者 + + + 編輯 + 編輯 + + + 翻譯 + 翻譯 + + + + + + + + + + + + + + 編者是 + 譯者是 + 授與 + 訪問者是 + + + 一月 + 二月 + 三月 + 四月 + 五月 + 六月 + 七月 + 八月 + 九月 + 十月 + 十一月 + 十二月 + 1月 + 2月 + 3月 + 4月 + 5月 + 6月 + 7月 + 8月 + 9月 + 10月 + 11月 + 12月 + + diff --git a/names_nesting.txt b/names_nesting.txt new file mode 100644 index 000000000..004560fd8 --- /dev/null +++ b/names_nesting.txt @@ -0,0 +1,40 @@ +Namesets (decor from names, provides delimiters between "author" and "editor", say) + TermAndNameset (no decor, no delimiter) + Term (if label before name) + /Term + EtAlAndNameset (no decor, delimiter of space if no et-al formatting element) + Nameset (decor from name, optionally uses AND term as delimiter) + MainSeries + FirstAndArticular (no decor at all, delimiter controlled by articular option) + Name (decor follows charset) + Namepart (decor from namepart+name= ) + /Namepart + /Name + Articular + /Articular + /FirstAndArticular + MiddlesAndArticular (no decor at all, delimiter controlled by articular option) + Name (decor follows charset) + Namepart (decor from namepart+name= ) + /Namepart + /Name + Articular + /Articular + /MiddlesAndArticular + /MainSeries + LastAndArticular + Name (decor follows charset) + Namepart (decor from namepart+name= ) + /Namepart + /Name + Articular + /Articular + /LastAndArticular + /Nameset + EtAl + /EtAl + /EtAlAndNameset + Term (if label after name) + /Term + /TermAndNameset +/Namesets diff --git a/ref/FLIP-FLOP.txt b/ref/FLIP-FLOP.txt new file mode 100644 index 000000000..d0dcf653a --- /dev/null +++ b/ref/FLIP-FLOP.txt @@ -0,0 +1,7 @@ + s = 'one*two \\*three\\*four five* six' + one*two \*three\*four five* six + js> ss = s.split(/*/); var ret = []; var buf = []; for each (str in +ss) { if (str[(str.length-1)] == '\\'){ buf.push(str); } else { +buf.push(""); var addstr = buf.join("*")+ str; buf = []; +ret.push(addstr); } }; print(ret); + diff --git a/ref/cite2.js b/ref/cite2.js new file mode 100644 index 000000000..ee8043edd --- /dev/null +++ b/ref/cite2.js @@ -0,0 +1,234 @@ +Zotero.CSL_old = Zotero.CSL; + +Zotero.CSL = function(csl) { + // "with ({});" needed to fix default namespace scope issue + // See https://bugzilla.mozilla.org/show_bug.cgi?id=330572 + default xml namespace = "http://purl.org/net/xbiblio/csl"; with ({}); + + this._csl = new XML(Zotero.CSL.Global.cleanXML(csl)); + + // load class and styleID + this.styleID = this._csl.info.id.toString(); + this['class'] = this._csl["@class"].toString(); + Zotero.debug("CSL: style class is "+this['class']); + + this.hasBibliography = (this._csl.bibliography.length() ? 1 : 0); + this._formatter = Zotero.CSL.Compiler.compile(this._csl); + + for (var macro in csl.macro) { + //Zotero.CSL.Compiler.macro(macro); + } + //Zotero.CSL.Compiler.bibliography(csl.bibliography); + //Zotero.CSL.Compiler.bibliography(csl.citation); +}; + +Zotero.CSL.Global = Zotero.CSL_old.Global; + +Zotero.CSL.Text = function (children,options) { + this._children = children; + if (options == null) { + this._options = new Zotero.CSL.TextOptions(); + } + this._options = options; +}; + +Zotero.CSL.Text.prototype.toHTML = function () { + return this.toString(); +}; + +Zotero.CSL.Text.prototype.toRTF = function () { + return this.toString(); +}; + +Zotero.CSL.Text.prototype.toString = function () { + return this._options.prefix + this._children.join(this._options.delimeter) + this._options.suffix; +}; + +Zotero.CSL.TextOptions = function (csl) { + if (csl == null) { + csl = {}; + } + + this._defaults = { + '@font-family': 'serif', + '@font-style': 'normal', + '@font-variant': 'normal', + '@font-weight': 'normal', + '@text-decoration': 'none', + '@text-case': '', + '@vertical-align': 'baseline', + '@display': '', + '@quotes': '', + '@prefix': '', + '@suffix': '', + '@delimeter': '' + }; + + this._orDefault = function (csl, attr) { + if (csl[attr] != undefined) { + return csl[attr]; + } else { + return this._defaults[attr]; + } + }; + + this.fontFamily = this._orDefault(csl, '@font-family'); + this.fontStyle = this._orDefault(csl, '@font-style'); + this.fontVariant = this._orDefault(csl, '@font-variant'); + this.fontWeight = this._orDefault(csl, '@font-weight'); + this.textDecoration = this._orDefault(csl, '@text-decoration'); + this.textCase = this._orDefault(csl, '@text-case'); + this.verticalAlign = this._orDefault(csl, '@vertical-align'); + this.display = this._orDefault(csl, '@display'); + this.quotes = this._orDefault(csl, '@quotes'); + this.prefix = this._orDefault(csl, '@prefix'); + this.suffix = this._orDefault(csl, '@suffix'); + this.delimeter = this._orDefault(csl, '@delimeter'); +}; + +Zotero.CSL.prototype.createItemSet = function(items) { + return new Zotero.CSL.ItemSet(items, this); +}; + +Zotero.CSL.ItemSet = function (items, csl) { + this._csl = csl; + this._items = items; +}; + +Zotero.CSL.Compiler = { +}; + +Zotero.CSL.Compiler.noop = function (csl, helper) { + return Zotero.CSL.Text("", Zotero.CSL.Text.Options()); +}; + +Zotero.CSL.Compiler.compile = function (csl, helper) { + if (helper == null) { + helper = {}; + helper.macros = {}; + } + switch (csl.localName()) { + case "macro": + return Zotero.CSL.Compiler.macro(csl); + case "group": + return Zotero.CSL.Compiler.group(csl); + case "style": + return Zotero.CSL.Compiler.noop;//(csl); + case "text": + return Zotero.CSL.Compiler.text(csl); + case "dates": + return Zotero.CSL.Compiler.dates(csl); + default: + return Zotero.CSL.Compiler.noop; + } +}; + +Zotero.CSL.Compiler.each = function (ar, helper) { + var funcs = ar.map (function (i) { + append(Zotero.CSL.Compiler.compile(i,helper)); + }); + return function (citation) { + var t = funcs.map(function (f) { f (citation); }); + return Zotero.Text(t, Zotero.CSL.Text.Options()); + }; +}; + +Zotero.CSL.Compiler.macro = function (csl, helper) { + helper.macros[csl['@name']] = Zotero.CSL.Compiler.each(csl.children(), helper); +}; + +Zotero.CSL.Compiler.group = function (csl, helper) { + return Zotero.CSL.Compiler.each(csl.children(), helper); +}; + +Zotero.CSL.getVariable = function (citation, form) { + +}; + +Zotero.CSL.Compiler.text = function (csl, helper) { + var options = getOptions(csl); + if (csl['@variable']) { + var variable = csl['@variable']; + return function (citation) { + return Zotero.CSL.Text(prefix + citation.getVariable(variable) + suffix, options); + }; + } else if (csl['@macro']) { + var macro = csl['@macro']; + return function (citation) { + return Zotero.CSL.Text(prefix + macro(citation) + suffix, options); + }; + } else if (csl['@term']) { + var term = csl['@term']; + return function (citation) { + return Zotero.CSL.Text(prefix + localize(citation) + suffix, options); + }; + } else if (csl['@value']) { + var value = csl['@value']; + return function (citation) { + return Zotero.CSL.Text(prefix + value + suffix, options); + }; + } +}; + +Zotero.CSL.Compiler.date = function (csl, helper) { + var options = getOptions(csl); + var variable = csl['@variable']; + var parts = children.map( function (child) { + Zotero.CSL.compile_date_part(child); + } ); + return function (citation) { + var t = parts.map( function (part) { + part(citation); + }); + return Zotero.CSL.Text(t,options); + }; +}; + +Zotero.CSL.Compiler.datePart = function (csl, helper) { + var options = getOptions(csl); + var name = this._orDefault(csl, '@name'); + if (name == 'month') { + return function (citation) { + citation.getMonth(); + }; + } else if (name == 'day') { + + } else if (name == 'year') { + + } else if (name == 'other') { + + } +}; + +Zotero.CSL.Compiler.layout = function (csl, helper) { + var options = getOptions (csl); + var childrenFunctions = children.map( function (child) { + Zotero.CSL.compile(child); + } ); + return function (citation) { + return Zotero.CSL.Text(childrenFunctions.map(function(f) { f(citation); }), options); + }; +}; + +Zotero.CSL.Item = {}; + +Zotero.CSL.Item['_zoteroRomanNumerals'] = { + "digits" : [ "", "i", "ii", "iii", "iv", "v", "vi", "vii", "viii", "ix" ], + "tens" : [ "", "x", "xx", "xxx", "xl", "l", "lx", "lxx", "lxxx", "xc" ], + "hundreds" : [ "", "c", "cc", "ccc", "cd", "d", "dc", "dcc", "dccc", "cm" ], + "thousands" : [ "", "m", "mm", "mmm", "mmmm", "mmmmm"] +}; + +Zotero.CSL.Item['makeRoman'] = function(value) { + var number = parseInt(value); + if (number > 5000) { + return ""; + } else { + return Zotero.CSL.Item._zoteroRomanNumerals["thousands"][Math.floor(number/1000)] + Zotero.CSL.Item._zoteroRomanNumerals["hundreds"][Math.floor((number % 1000)/100)] + Zotero.CSL.Item._zoteroRomanNumerals["tens"][Math.floor((number % 100)/10)] + Zotero.CSL.Item._zoteroRomanNumerals["digits"][number % 10]; + } +}; + +Zotero.CSL.prototype.formatBibliography = function(itemSet, format) { + default xml namespace = "http://purl.org/net/xbiblio/csl"; with({}); + return ""; +}; diff --git a/ref/collapse_JoinPrefix.txt b/ref/collapse_JoinPrefix.txt new file mode 100644 index 000000000..edf676286 --- /dev/null +++ b/ref/collapse_JoinPrefix.txt @@ -0,0 +1,98 @@ +>>===== MODE =====>> +citation +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.9 +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +Brown 2000; Jones 2000a,b; Smith 2000a-c, 2001 +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[ + { + "id":"ITEM-1", + "type": "book", + "author": [ + { "name":"Brown" } + ], + "issued": {"year": "2000"}, + "title": "Book A" + }, + { + "id":"ITEM-2", + "type": "book", + "author": [ + { "name":"Jones" } + ], + "issued": {"year": "2000"}, + "title": "Book B" + }, + { + "id":"ITEM-3", + "type": "book", + "author": [ + { "name":"Jones" } + ], + "issued": {"year": "2000"}, + "title": "Book C" + }, + { + "id":"ITEM-4", + "type": "book", + "author": [ + { "name":"Smith" } + ], + "issued": {"year": "2000"}, + "title": "Book D" + }, + { + "id":"ITEM-5", + "type": "book", + "author": [ + { "name":"Smith" } + ], + "issued": {"year": "2000"}, + "title": "Book E" + }, + { + "id":"ITEM-6", + "type": "book", + "author": [ + { "name":"Smith" } + ], + "issued": {"year": "2000"}, + "title": "Book F" + }, + { + "id":"ITEM-7", + "type": "book", + "author": [ + { "name":"Smith" } + ], + "issued": {"year": "2001"}, + "title": "Book G" + } +] +<<===== INPUT =====<< diff --git a/ref/hetzner.pdf b/ref/hetzner.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7c9aa9e039b669f84a4c8eb1e938528c8cbd5b6f GIT binary patch literal 69619 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 S&dJTq$$>^oD=sgA_J05*KC}J+ literal 0 HcmV?d00001 diff --git a/ref/locators.txt b/ref/locators.txt new file mode 100644 index 000000000..12c9f1e16 --- /dev/null +++ b/ref/locators.txt @@ -0,0 +1,54 @@ +[{ + "source": "ITEM-1", + "note-number": "100", + "locator" : [ + [ + { "page" : "10" } + ] + ] +}, +// +// The above becomes: "p. 10" +// +{ + "source": "ITEM-2", + "note-number": "200", + "locator" : [ + [ + { "page" : "10" } + { "note" : "1" } + ] + ] +}, +// +// The above becomes: "p. 10 n. 1" +// +{ + "source": "ITEM-3", + "note-number": "300", + "locator" : [ + [ + { "page" : [ "10", "15" ] } + ] + ] +}, +// +// +// The above becomes: "pp. 10-15" +// +{ + "source": "ITEM-4", + "note-number": "400", + "locator" : [ + [ + { "page" : [ "10", "15" ] } + ], + [ + { "section" : "10" }, + ( "page" : "7" } + ] + ] +}, +// +// The above becomes: "pp. 10-15, sec. 10 p. 7" +// diff --git a/ref/sort_NumberOfAuthorsAsKeyCountMinMax.txt b/ref/sort_NumberOfAuthorsAsKeyCountMinMax.txt new file mode 100644 index 000000000..8edea5dcf --- /dev/null +++ b/ref/sort_NumberOfAuthorsAsKeyCountMinMax.txt @@ -0,0 +1,134 @@ +>>===== MODE =====>> +bibliography +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.9 experimental +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +Book One +Book Two +Book Three +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[ + { + "id":"item-1", + "type": "book", + "author": [ + { "name":"Doe, John" }, + ], + "issued": {"year": "2000"}, + "title": "Book One" + }, + { + "id":"item-2", + "type": "book", + "author": [ + { "name":"Doe, John" }, + { "name":"Doe, Jake" }, + { "name":"Jones, Robert" } + ], + "issued": {"year": "2000"}, + "title": "Book Three" + }, + { + "id":"item-3", + "type": "book", + "editor": [ + { "name":"Doe, John" }, + { "name":"Roe, Jane" }, + ], + "issued": {"year": "2000"}, + "title": "Book Two" + } +] +<<===== INPUT =====<< diff --git a/ref/speed.sh b/ref/speed.sh new file mode 100755 index 000000000..9d10201d5 --- /dev/null +++ b/ref/speed.sh @@ -0,0 +1,12 @@ +#!/bin/sh +START="$(date) <--------------START" +cd $(dirname $0) +RHINO="${PWD}"/rhino/js-1.7R1.jar +DOJO="${PWD}"/dojo/dojo/dojo.js +DOH="${PWD}"/dojo/util/doh/ + +TARGET="${PWD}"/tests/test_speed.js + +java -client -jar "${RHINO}" "${TARGET}" dojoUrl="${DOJO}" testModule="" +echo $START +echo $(date) \<--------------END diff --git a/rhino/js-1.7R1.jar b/rhino/js-1.7R1.jar new file mode 100644 index 0000000000000000000000000000000000000000..c081d16b8aa3bf1fd0658c1ce397b36d257c566e GIT binary patch literal 756883 zcmeFZW0Wr4vMyM*ZQHhO+qUgmW!qR~+cs92t8CkL_1b5jbMHRi=>47BJ^E+o7?E$z z81c-An3)kdW4@WGAPo!x1@MneD$ z3EH-QRmK!aj>Q=HdMT4HUw=4&!CZ-DKZYQ6VnkQuClKS+h)6r1To z_Jr5glWWn-Wsn!^79UW!BMCv#|1U2907U=dFvuS-?48W%|F?wLUnF4uQ^MBX%hJZi z@NXp1{vv5?W9aN`W@%&kFPOg$IQm~OR)%hd&c;rb4le%!690=yr2igdY;WgcY3FL_ zVrg&Z{4ZVn)hpb8--U^(k?X$>$X~Vp4b;lSnvwBewEjPYGXKAavi=Q}@ZbAt@8Du- zYw2a`^fz$4e-C#uH8=He_#5ossCF`Sws&bIZDegfR3<&^0fdv3S@)z*`&SyfNE~divCZ=@%!SY>o z_ds1l1HD-d4%QorgbGAefCQ;CYHugSY-@LJCk51oArxRB!3uvSzHm0X+8EOex?2Ap*PFQ~o45+l3%R%;?|d6`-cvmY z?DE))VkcQ$Y%eM;ZY-@YHn!9T_2Rt+BTW>n(Xg6MY1G6;x&?dLRTwnEJt5ZnwlGNS z7+8&ccCArV=aN@c=ag4{cFrlef;YGP1e|X965tRX0q0!5?Voo0B6Ns+3**xMX1J}e z`t)hnsKtUqHOBq1o+3-yj6g#xIa3}+eIeJTjmeh z{2`olC+E00OK17;KLW!|?fd<~S=@vrQ@o6Si1H6%wr<5;Z-{&n8L0|qXe8ySRE;SR zsm1u6)|Uv3X(&G;hO^4fsMCOkG@YUF>Q^a0`qaz)z8~h&ok2f`@g0@j73cfC%6IQ# z{yuBYxn9br?GI`3#W~IPtz({*>(KJr{3b1UpES+Je`s_6`_E5dFAGcW^y<+v_qxya z>e0*(WETID#;F;u^$)N=h~Hsbo6`ch#v@&PnX!!zmd-RMzy}&2*0|CJ^Yt)jxY+f8 z2SHt_vU`uBmTBzRgXImdGjsOc+4ecMx%*vun(MFWK$^Y*dMIaQw*%>J4@53#Sx7BL z%vSsf4W-vc3#(;zfGo?oujG|gZyO$^)yE=>$NR@Tm6w&UztZRU78#%!KuZw^~u%7s0;zIc81Y1J%) zKulmadAn(Bmu)KgCdIyUN=Ib5n#Jf&)2f*@buCJ1zp?4o{#w3sqpseC`$KZc8FjmK z)VB4V)lH$^53A7FSIzTSSB>*%o!ir9`j5bBYbm@Iriv3`4|_?lPj$RikRfYmo+N>r zN8+qCUU58V{joeX_#8<&#gE8p#}{dbl9i35)wvBF)4y`ztg-#cF6wVl->ecWpX%+} zR;1VwYTCwOgC}a-fOprdE&8~Y=26Zy(BVk-8mruacQx5|GS32)@*c%DN-#y=^>Rfu zCDseFZuC^77R-JRll3MysRvE%!A^tqPdaVI*v{!fDUXL_J5^pO#jd-gIc?N%|JaAy zEXHv+B6eI0k*<+Wi!2ryYqdwdb_BjN#afAhMaISC|Jhu6;E4fSuitl`lWPrQR)YO0 zRGwXD|2XVXmo88K>EHm*r@?|z`<3W1IKarSE``n%QMB2X_Grswdo57A=R<)UB4iZ% z#;Riw2(GuRE-lLTvyyuCa;*|kvw|L^WdJ)pp-P_I{LHQj*gledcEnnXC`|_Z$)q<# z+8V;C=W5yum+Ogb=@K{Va(&4C#+U7tvUA9N7(3Fp>fn23xT`cj=hS!DcN;HUC;lAw z1t9D(07CzoZ>TX&oM=eAt!zz*i;)?BN9|;k?{gmeuH0pd?dg-z*7zI5IxW*Wh#*Uj zU1v3bI4&4srsABM(__R`LFqUpSeup69=&Z@o3 zw9W?Q!!P>l+d7j3aZ z;Euq9!4rZfnFj_>jt>A&kPm?`+=syj;#J{=;ZEX%GusEmhr|z#p4e0hU3n|1L#%ch2(DRM#PDgCxQpFhEP7BG_kb5G+sVLo;VjSSC9`mM~)Ag zFUtqchmI3)IWfs0GCP#{fU7O%Vvu>1d6%Xga5@2)Lp}!-eN?nfgl;hAfXsu<6V3(fjsV%4rutihds$Q$hJ%mXitg{wh#9!+>6|u?#reo$T)Bh?TQe}~-Z$A1gG z(vSM*f1n@qDttlT=~H}zzS1Xu2Y#TB|Iq<`*h}#Li~WByAXV`xw_m02GgJ*%{FP%J z-&KU?UyZ3%?=xI~80UW&HUx1(q;Ith9~;35R;*t&*>xjHx^59!w~gaqMX6XIS_rBLU?i^r9lke0D$V~`0|OQ@U6VVH&nLZHfOjMNfcgf& zW+y|6flj0QQ2ga>9$M~L7?tC_oy_|ZnB$#22wz%C61GajF zNkvK$Tn+R%(KgfSH)WI_>!{QXttIPJ-ce7z4wf!aNk$ zahJn0QqgT?EUengq7jc`#q&9xZbjMbg&7uIbtF<biBwEwHxgmJDZX7hH85^U*5_U3R=6e!>`r zVxK_eXK4l#j?V^V`BjC~!JYAa@DJuwAEH6(ma8In4jVU{q`!^6jq>-jqRemRv_#uX zNtAfnX*$DrNX*cP&@%&|pOYOKotnX{C%~lFuj`3lU^EkFh02+beC5S0Z?scRKx2B8NY6xUMnVu8C7$7jL z(pu4E*o3D~n6yT;M{M@%Y7cm?-6}R`pS<5e{K-4RaA0 z0e=!1N2a&LI*AN1*hGaJ4xu3qmeCT0db1#>@`gHUPs6Y6b`!rc^B~{WB1{bFz&UeI zz60VuodK1*RnHjug@NLrHEDbl?pr2aq3t2Qt`gB}!bI9ehvOg_fm_x`vEE{=??FQC zQR;;Uo;r`tpSrslCdTno!5^~!&N{rBkElFnNT_!B)Qe-?+R|L5qD zHFdGD|F7^-T9^A1KDwo?hOvX9q>MgpAm)KA65FzjN zk-fea9JAlaUJtq9FzdTcx^>!dtNCdc;0nppIPNSiVXC+rXrcnwj(M3h*+vi+j$M4E zy0B^C?#20P=TKH)a|TT=$QUYJEuI$%sS9N<)eSMPsyE1&vFD`3bRD>URFK9n7QK@N z@%i7*@-VT=7-#~IaKdK76f#8{>h$}P^$E+U3fr!He8S0P@0gjtoZqp2m;EI#-)YCme}g7IqO;C0%4gfKao(#&xy zpJI|BBt;=dj%@}xvv8e)1;WjKW`pxW3BlbaN}g}`J)Ghhd6k5<@%j^gO*pb=nAkRo?H#1@kAwXpym95tUU^pSYaUe(uwn;VW_P4^Y7=U& zDn};XZR@W~rn!j=C_`ftEr4kas%igUE1mzm55$$+LQ(+&0AT;QnnnKSD_Pyi(#6z? zSo_V(*IIcU69eFsn(u>YK^k2c!D4l~P5KUe{;RFo%bSMQRGj zOj@;{1+udCzh{*lJwJI`dH{em)BmHa^3QYe&mrIRf%H%jZMiA$klwy>Nt~V+n8$@^ z2$7S}7>pHK0SW+sB#077a*<$=43h(QFjm|^7ZEWP7uX+YOC$)~sVQWhKH-QeoNk*e zV=iRoisE9X`sQ@4wBHUE^RVA~?z#5w>vpZMTP$x}EO$QJI!d|D;Q<5)dhw;RFuvy4 zW$<3^_uB^=uKGx|yPmuB?eG<7g~z>cr*o*^Rz4&Ss5Sp2Y(NP_PLM-&MBJHS3I;1{E}?-N6hi(USX#@8SW_> zZ-smM*)P|gM-PsUa|DCUS(+upj(WU@CCIgj1H}LU&JJ_sLRe_fM~QV zPe`!{+1Vb3SA>`>*9y~NinU>VLkD(k#lV13NZG*&aJUd~!hm}bX&>Xy?0cvuaP&1HI{w=kb&=L@s7yz>c@V}A1m29Lp$n+biw1~A+QeX3@1 z699&9a?=lnAK0)j49gddhoaoO3lfvJE)f)0kUHmrE!}mTPh|29|5Y5acCaEM5%9HwAjW$_kQ`3Kp>C@9sPjXAc@FHaTNxA2j(2uTs998BU5k&9Wj~ncj(H{h+Z+Al# zq|WUz8Uj_8A4{#%mAZ_1u`Dtx#e&@NSg>x`qvRbTqZt6G(wXkHP> zal_!aEYhk97KhQbx}ykg?|8Ea(~+_Oo|Q$uyck9nMhx43Qq-)PUt*!#mJra{RL_Wl zI3qj-qq8q9l{%ftonO@y3|MIpuY+V~6AOl2cpvykOQ=H6047|OaW0JNnig7TPZ{JQjnM*rN>W*#Z@?NUb{E%Ox@&_>E}PB`s!5d*3kw|qHk3o6 zHStS6T_u#rIZ{jVbx1PYLKI>cJ36!?B-|Vf8^U{aeCNzS(YMY~R8f>gX}QgaC8(*x z!dYAi1BHePT3iilr)^^o&_akmn<7Di@Sd22fff% zcPT$2abkTpi4Jb&tdcTvq{1;|Svg!xfqsPr(;+i8PL28OI}FIWcT8%V7EywNv5Odm z7Iux()fUCzZa8vMWmy~>8c@^lAyC{ zQ4OV*N{`Rsiv)=Tk;~qXG1q*rGkGNn+vrdt)_y82Y%tzR_!_Wtwnm+bXzf z)?uBwc@p#_n+u_s-BbzHa1DaT3GfVNDRVkhw8kc)XRE&~&z(PRM*p$jqWOew3NgtqxP z&=cb`tn-3>jOa=3O^cc0;%^=>stj1I2}`kbx`*K41<3J9G1kaHUU2Vp{Bq&V`00v0 zY3kzDd4a0@pocjjwcvu5;|$MF6#Z-Cvr9*~*$*N$BPq=?Z$q4FJfuL4;at2DPH1!_#7LS7 zYB;5!Csr}iG_0CKG+QiGn`vWC#uA5S)7@QIA^K4Kt-6T7+cOJyOEmOJQHJGSzl*Dd zp;^_CGp5%Jj9q;xh;}Lrnkrh9$~v@tN1D0$uwoFiv0_+(TDwA4md_?Ls@yo8r5KjPr)%>vEghkJ zISZTf@5p}ZV#egNI;qdy$+({FW@72gzQDK!ovTy0d6KMXs7mKaNB_F)L1Zi;+G=p9 zTSMd5k-3M^R=FpGX3mnytK+~eMQ|n=PJlU6z>dC~q?Wx1(@|~VHCHLnJ3gzNGPR@P zT@AF<7jTj`nwg>)^Wh^`LDv2nu&ja8r(vtX`i-|Ar;NqLDp8o4#0pAmG2132g>5~s zvR*L)Q=E~^SYHFCn+|NAxj3&Qy{9cG2Z-G;0kgRw3U2X?%S5Tku1)ZVC!Y(*&!o{5W>0+KB(*xe%b+DVNgHTHaP z$z4lY7&(Ldi8jr8q#0?QYWOYRx5Y|TT9<^x2&bQR4!>AXD*1-f(&<&DGR;)4d?hjQ zWL4$2;ap}_Oui$b9pHRLQE`k!l4R8anGm7jsD|2tsI0Iab&f2gxMl8w)g)h6d1QF2 z=s*SvZ+ZZ=X9R}4WK)JVlK>r+M8}^+Q3{lnhT_$wGS#rNLc!naDxsH%?AmmX)LM*4 zm@3gp#)H`k&J+z;zaedEERgymf^bq4D%NPAc%v&*Z_Zyt05Cb`ojy{BIud3$gM<+~ z<4{TivVuT1o&4h$QR+ok1}Nh!G^8B+luiT2;v#LqVuD-@+C5fJBDsB&M>E4`B~o?L zTz3oZQZ1CBp=gny*dW$$3>yQo|MB9cZ1FF2Yt(L!z+0!%aaAID9^ zVsN*BSjr-D8U9VsbRehbLulwe*lJUay%qF~`M@DvaTLlwkh^h1xye_!-n)y<{sFaR z1r%2fJD0I@r4-5A&9->~s;j zJt$7m#X(y9_?VAc7HGkM)$sGJXbR>y(<}!Y_E_mgBD#I!f^NPKKm5~um)-7#_G4)3 zN*HYyICuy51v1F-I63W+?>^zTz_|#js}9>NohD*G`S{LdU}wtFFV?-)W{ z{$Xq%AaUFeF81D>?VV8l!F4-7;yDj)$SbnomnoOd5SL}umpYw#%LBI1!uG{{EEm?c zhVGMDq-Jx;YqvLM_U%b~*L&IzHg+GGy;ttB{alvEa~o`|O-mwte9gJ}9~1MxJbrEb znq4bVKy}1p3+gaqf5%Lm)-xcrbNc~QH3`{|VM~I-+~LybT{eh|!cY>TUC_RpxdB0| zN+{@3g}Ww_KHIM7wI3V9w0-Ah5e>R-A%P3gg2GB6#!Cl6WDS%h)6$W0@l5(K{`06h zGFSqkEFKQN;=HaoLx(wNV+a|xWoRgm`%Uqk+0e5+0ih#X!B};4%Kms=?wS;%>A53l z`_zoSA#LM>F8IaGkGx^kGM;7Vg@WzpN>#zS3tNy~?kVR8sTeM%SQ#CQ9DZ8#WzlD4DpjEA71 zNo_^Hh1Bj?7qQZw^$ zSR@j)?osF0c|?smp{>TQF*9tRUGY(UA4}xYi9}wL zv4Eo_GaY~wJ>^R|6uT~wh!fUsF=VFHRFIUTnOz3X&rJCSn%L>vQa1(;E^+z@{BH^( z&2tp+aY%|9*a(|ZzmLRL3!#g=!ek^zl;1C98PO@}Kp8af@LxfVhfw#)(_CfEayXN~ zI@+wjm;%1?RwBg1`AqNEnFdD8A#QA~H1?^2Zs<~#$fv!PJgOYHw?CX+ZU&5r$@~i- z*1tFc0Ds|gQ^X;Mre;v!6A34K{*Vp^yPy2MM505an9z~@J3;Cvq@X+pj4ePsyyguE z&hX*~N%vlmu?D|gC4a~xa?6`!6~ApIf6$}3?c;IXS6B5H(2{=BqW-|!M9Uj|{a0l5 z7uAx#N#!?2!!GMf1gt;X$ATJv#N+ZVY^5Lll0TTe)?=>mC;HE`-V24}WCaKeU|B^Y z02(QnSkYH)&5>-;Wc*PsGqi#s2c2XLrpP;F%`d^!^r7%OWlcY_3I2&=|AfQih7Y0S z)f;u}T>70ycFCFT;g8iD`1O1G+W}qKzVGCRPwD9(P2|+y_1CR8xLfjum(U8g^a9d5 z5Oo4rLHlCZH+_r>XgGk)uuU9gBZA_6&i#(nu+aj3*c|nn%>X0h%>mp9957cOZW4Au zD1hh?9Iky)@lXSNGM!h^D(Fl zSX2g3(xYa1G@$PDq3D7cXns)8m;@6TF!ggF(_11cDQ3tBUJP zG7)5j^}mLT#?oP>K`huc28m3iC$%5!6mw8En+|*6Mg7>vFrm4@514ej`SmJ|hTqo*`CXK|x-9NZd<`tVn+K9rr%29=k?$x&}=tMW?1#IC^*ta%(VQRRj zS)m~Yc3;O5VGR*pE2-d|BP6fL?Q%N#YKDC*mrA!3l4Pm@p*Q4*m1-K`cETn0NQ-^0 zo`$<@2B*Md>J0wETX+nHvJKFT+fhDTq5gOsVh7xHrXat|=RmYWnb|36T3yN~NZ)Ai zBhWZbz%4seNMhjKE!z+r%9y-pfNnH+^91oJuXinKd@GD*1C|((4<8OnE6nJ6YsWal z;@$+xG|>vSgrQagUyj017hx~lp5{E#8Ze}8$clBtJ9KBjG8}D#MlfFD-MwlOr z4|G?B`UEG?7u>ikIx}Bjg$K&156oNteqf0s8J{$&Cyh3iDc-$g;Uw~zqJxe5k+_5? zOa=`&p{&BPuF|vckf{OZSb9+i2}Ov90-}yqVR$2=iMfCW z8^Jwhj?YGpTW1G6uJk#MRS^%-I);(#1tY`6;Q^AU5XnT)Kre{fPJ<=`G2!eW5N0l; zt6?Wic?XD=>BbeOJfjPnQ#5V3{?sd1h?Zy?;_1|#Zs>*-Y~u-uzNOmu_}2Jf{r!V$ z0_|%;?dxy$Rjy^ds#f`MEbglF+%jmO%4DBEnvHn(L_rE(xEM0b`~;cMj)5I}ZpWa{>@6Si5p|y$R-f19`hu3XHBhN?AaoOED~? z)6uO-hf<%zX3j8M;75Q>P>ye*$Uo}@=Bt_S0_Hb?i8A~IbcwOV41j{Kc!NZOAJhXq z|Bf5bmDC3PTnbB+H>;QYO+?~7+5?5tJn@TaU*d*dDAR(g78lGz=MTeEsZOm;MmtnA zVWdoSw3o&l^Y!u}037l)5A-xBt}i}G@3Dw*Q zTH^uJj(0$+Pmi+6eIIJE>=6>f5NKj3sDO7?EQD2wlC4X`d(Lkqc37g8(Ic5T{*VWz zFt+ccdYBF{4$&d;#|YGl>`vRBNo~}1(mYpg(V=X^8G3lfdPN+%YZ_}aJ0)DlzJXJ= zH!yqCnVN*!#X+W2URcQml*i!6@A9i@G6&u7ff}a6*`bblLfd!_) zhT5>9pf54FI1w8HU060;2`?)?vM{Yxk?DMeVBL-Z!Su#OX#$x8}ea!(R9- zjgr+fP@Buz&}k2+Hc&iS^!HY-g0+Nhj#{l;UO2UcRhzpTPx#spd&ldJ;Tfyfv$aI< zPSqIF*ITb*UwA#ybq4rG6Mv1{8I`U~@kDG6_-Z_vwBGWxq`(`lzi_yL=MG#QG_L6S zAg)haufS~$x!uLsp!cR;9_>TVk@twju)N2HPZ@)qeWgJJv{tj+C*10TvRQyXK=D}^A3WV22`e}{6=}d|wNF7}oYSa2WDj;cD=Z*+0ZSpy`w3F- z15>EMC`8wTNQZL8ouLoy9PBK=%Wga*KFynAA2Mcyd~I=|Kf)+9ZH-$eQwa) zcX1@VgMclV{)*BDeffi7W?(e!NP_4X%XtwZ28pmKH`l086hw1~U$inm=7`7-$To~E zlfvF~pMiP70G5Ar8XbEog<=&N!6}c8UiAGfVnu!L}VM8!Irx{=M;K= zBDOC&$>L49&XG)PiMv0gO9d+y-#z!=^LMZS6W*7k&Fjbart z`;kQJ<2ME>KQQ1EkJc+RLv(kz<4t7?h)F>+X~Ls&(M8agP2x_H#ZR003N+%lHp%;E zn)zRc=|zVGmYfoq*Mda(sP?`$cLcEO^)iEZ;o*q^=7t%B6Ed1!^*WSn@{Jc%6Lt-g ziKg{5VG~ZlG~(k<$uy2~O^kgT{WR|5PH8mm6Hak7&*M(HG}ozzewujkhk}}0#1r18 zt5g&3CZ4@T`wUCH0}ZmNBlSMW6z)v#-6F;OzE2$wtKRw4R;#D-xy}k}0wGNSLeYW} zyY+sOfHJhy+H>!QoE;kXRzCD51{bwzh5XNFdxlzl*Q%7I12oZC=`+2c$_&W&JOQgL z1+*UaA@-lz)us2g@}M=(DBpk%ufH+IhcBEA!{|7^D9-|i;G-WkW--U6r+Go(ggWq* zd~>3^cOE>Mo(17^$$jzLfOB91R_gZC?Q@;9z=JVzX^LKkiW;m5U~@`qTKZR?`pF=p zKoU5cVx5f6DN6Ub-jIG3#41u~8fQ3)X&edR@}bwtnM&zVOfb`;XNa=r>lb z_O8li7hbE*&QzQzvp$r^;z3eec44 z4>zypzqNTX&l&t0?sQIh-jU0hQ1+0|`StF=e;wuje(RGn0)F@913`bV?}3;b*(~Zq z0e@%cLyA8==tH7ED1JZjiqV7UZL|0L)lBbK>pi9qe(spICnx`q`R!m=ApT*>2T1Nn z?k@C8*MU>HRh z7>pts2+vWF9$?%n3HJ^oelaM|DazH0$h5bjPL?kv@jkjRUTs)F7ogaUSlf@V{ABii zoE|8&TeGtLO4~3BYTB8$#1zP{@HEWCG)f6pURhWVCd&alBJA$6-(xWPVOhVuu;*2v zEvblng^7Mz60(9OQ?;Kg!bu|$bfYEcxsw%D=@9*N1(SM@0J&!=Y9*SdH5XaaCUX55 zpd^!?N+!^On{dTJ{B93fguG&dOz91EN}|nSddZj^dJ#;rVcK=($IwM}$!u9?iC-mm z0-TIvGa127$BYY{%>_`-nFH&-FFf-WG|PKLf}lDn3*r=9Yr*q5N8=ToQwU`4XNWH& zaWZXTrXD+`2o@67kN5;h^WCV!^H_24qpRXHK*wzJD3EAJ{KijW4_*L{AEf&gp5es< zLhLTgkjNjz>~4f$6hBPM4`ZMUHYnb$EgL_i@+HXum>(?b)v+xpH<@dv3#S}zd(J^o!Iuh$%$q>^!LYzNDRN zqw-3jl$3eCFG5w%)r>*VU0|{uSC|u+NIAzTud3+&CBcRbSVb8j)e@4*>8r8f2qJ&% z?s@L`;cd}5-ya3<2vjfE27uoXX!raAu-_D>)RIlg zHBQQ%Q`ADDbl=*~Ui5^(eBmAt?kl5$j-#R;QNU^BVbp0j3dSVDSf`-0Y2Eh0N?~nO znDqUWB5R`36bg-!{h}S)G?%>MqvQ;17_R3Ly#G^PsCS02oW>htcOu-=pGc|uK7gT8+`P4!GDOEXl_}-yx|IwaE)v;QygNAdLpfq)~%A3(WIVAv4=p# zNQH`yrAikMsGo<%k+PRid=m(rhyRemdr*8EbRfm2Qvn+g9VaML0~@3&##o{lH0)*q zVxuJ9)iPz-sEH239rswNmJxB42?$FrcM!@TT$m3g(gVdzAH@>|-HgTlKmyEvp;7(W zq~bcSv?%FlRt#ZLu8;zp(}$9-k^&UhkSF2A#89tAr*aquER;}GK}8L*5{Ch?&a#cR z&4+Qa|ISdgICR9Tbc_1~Cf5-_38=$<6>V;Xd*}8Ap{oqF!AILsLaHz6Xq^gcwqkvE zuWbRy1Z13NHsv+GNGDuL8-R0Mh-GJ(K}0hUnI%6^_( zv&T~s@}(tcFhDxRC{7OhX9G}TiWc@X3bZ-Yo{#cgG$?%Kfpse$Zw+>uvuoVCyMPx# zDejqLXPXv-EeJ!7#fi&9WfhQU#1Co9P!&=r&2g)fnyThQC*CSa@6jEhei2 z#ES&`8nS2Uc4zQmIZ6&ot6qn3-A;yIcU6ca2hY;o&fFxA6TxB^3$#0u!$*D#q_j)J z5C$}J3z{F;iXZ9$+N&TL=oGDeB!_BQWn|ha@-09y6&iT~ zEY`{H1GX53F1XY}u*2JMmA?*Op7TpbmPQLtrwUb2HtQdb+`_?lpyS(qY@-|}JRCiw zJ}h3g2}H8qEB2@hYu4fxgEuH7Azm!R{-l%aMd1eJxvvM$U(zOI9^u)UoZbX0y1+j6hBU1ncbiSd-BEN4R9^*M9k;uod=`K|)MMe7SxtVQ1-Tag!vBGEh>*Dh zKbyuE4E<^dK^ZqNJZ?N&!~-`ah5d`|vJR1VjO-9{rGN)BYSa+!=!UiJ=7i#vP1>q; zOhPIsYnT#T{Q6JHMA)-(M3AAmV58q z5zVI(c^BHF0cm$a*ynR5&>mKs`WChjn3V=M{Q3b_1Q()%YxHSrlQ6;Y4M?RR?<2e= z29wjQjR|s+f8aSNLl}O*n#DHiB=;TE=Zp#P5X2`F(iFs}1CkT?D;th73nFRJFuoEl zjPDF$R9RdwfeQ<)(%7(w3+`7Lxv6;meVbiyJ* z?b*W%sM96&eBy#K9Vl0-K@JkSaPk$+EondHHH~~DtCRk*LpQ<& zTOP|c<`P)}OZYJrqSd1K^73bLSA(*7L3teHq~Nr=n@Q~OWa1hz*xCW6jYp$Y(y@J z>r$%0WyZ9eKXx!gLz)UhMkLaeuevPM;03AmT&z&02S&UwVVlY`Ph?djx*#EmBDgFi z-80SA)CNDY8#?I{)ioe@pu3&G!@s?K`wIKAf$v}QJ{qd}O()TR7{w+Np_d8C<-(uo zQf~$}&XP8we5qQwcosA}5t@Xi@D>x!{z=v)Ib^wK5b_>cHR#&Z3JhEDJ#||XsXj=s zQOTLA`7xw^LhI%gmOXi^8WmD7Cv=)DQh}|wq+U=}8whwtmR_L;e0b)nkiP{Wy^xis z*A2>6p}k}0ip^881<0?|I@oze_oB5q!t!WGeWM8i)v1TUHqKc>7+e&JkccI80+yfe z#6grA2=!Pe9BXg$vZQOf68n{1p`F|0?dPlEc{c|>^tPn$73l$O5d$|*qC$~S8S|X z1F8_jV_bQwAlvGA>YO}8@|XhT5nHL$ii3De^Zb(*P^ZyY=~KbjYb*IH(yvPP>BuN2 zoFXD+dt&8l0_AHWV7+0lXW|OQelV_Q`1z8b$W_Yx z&C?4^S54Zr5fXa>C`fKsDk_|Nk*r1GYcomAbKUyr0Dt`_@mOc z_vo@Gr(@k09Y)p1u6yU9Q+n0$e2V$Vp~ep2Z#CTVUbuR?)iou|dDVKxwLD}!Q6CyT z>d#ns`}4FZuP&MUtSu^bdsUAMc(Sc~ZK6t_11^J~hX>Y8+d1AxszZL>aZUZa*}8V1xNv&iJFYW1(`kngfIzp%6R)hF5%@8J;T{q%i#?twyo?_Pq%(L!^X zYv`|iCCEEm+mPvD_2gTpmzf3ZK0LRV_1MK}euz;IQ#KmIUIE z%Yr$r6g6fEvKGjF)y^-n@c{!q+6So5+5=s=p8{{2@2kS|l^Zj7srZUpGkA#R z;>-q&-YPz!Z4hP+BP#?bwg@Fq_XTkj_^oPuuk?2pQ5Q#x@|o)W8vKys`}uiPy{OZL zrde@L<9Es?tVvem0Kcoinj%nhui1?^ntM#!79?dr_Z!wmD6Ohn&=O_N1!=o*IV!*S8z%Ah-Ts1L~*Y^!i5ViRPz zFMcNI&%(WP(N9gxw(7#sT}CpCFo~}q?-j|Ji_g_@7V6v1Ml~8k;KzB|snPKYRthCp zuDMB|>ECQ_!sWbXr3>ctZ^FH&#jFmsJ-afdeaeKhtTPSib0o^>qKjI z!acBB-e2nljCm0|sof0b+cCq)w-v*8pq5!|=`*59vu+iZSO-JAglhwv$YK!PuDJZc z-So3gcOA5|X|qm$9s1egot8Fs*miCMMqL9TlGe=y=vhL)|AalU#Nk!vUYN|yZwF$7 z`Iq}fdVaL>P;1YqUL@&>5i9Z)ZQspFkK>*x9GSy2a=J>P$Q>1Ya|+1S%b8ISH@FMB(J+1kk{zv@8R;!S=^9VLuVzv{Pn0gyChflg z_^gGs^?ytk6k{K4u-;)mA`+G4mCaJF>pXONC83!nVJ6>u?i~vN%743gcvM|+_kn|) z*tU|}<6jrQ!QWh+^!dJfs=H=uRTUIdwSlO7>#1Sq<(8>LF;6WT^gQd6c(Bw?n7ngo z)?BSjN7`KetaUZ_bPEbZ`?@8&MEU%k@uI5)yd|4xVgF3C25#Asx}@y?#064~C`s-6 ztLc}UsEuin^1Euw)AVxYwYQi{4nFx^XBsWX4yJ4oZy;xkl;s4VgBR@grok*i>vCS< z+|u>c_$pkdC3K7=mO-`b683>>h|M;^MDzCVt=9(rPOAP!Sdn<-Zul=@E2VBOyNgrj zuC)%>u#02ExPor5J#)p>Vm`kEv^am6V&F8*KFRTw4`7r%+%$u4V$lMd%6{Bu!?E>@q zJU_h3CGUDvFZ&jy>p`pspQR%7Ix}AY?P~M}STDr&DtI&P2f_u=n2MB(M5Cn@(1gQJvs>*Uth$whvE1VeG_M4z4jeQE-EJJz>?7jKP%ZLF}a29 z>@sZ|qBwDZOxAWfGWQiS^!AJ%9P-*gnQp9(bHbCt<(2Rgd&IeIqJm!0q4WA|F<*I(cr+GU2&y z<-#l21EiP_{G5`{&M_|h#zpUA&F#51T_5J{9TVp^wtm{$$9FOuz3?;7yw_xwt!Y2$ z?Ms>FoZlbyeRJp*E$A=RVMa1u#zTi(zQ|48N~saI%@gHqy0+DRy_pG%YoF45ucW}? z9wzyvzV==>{J!&b@yGA2Z_&Y~^WL7`N4mwuPJ8!1LGtnL;XHVKia+Ll5GWz%Lgy#Z z>*XAug-@x(j14&nS}NC!Jyy-#CuSXyQ1-^~UC0sR&yvR?_DziH9`mEyZveb|(UbJ= z`t5(U<1^#tQCp`Uo{#q={Y1^lLL}er^;M7rgYISi;#4W-~ii0R9-i+JX*N`B2T1@Ao&thw@0ux9+)= zdWZ8TNJiTK#n(3mX&Pi%ce%^9?dq~^+qP}nwr$&8wr%SzblL9uYGyWeXE)-Th|K4I z#?5&0{+ zD2f|&HjB&{taHtq4-IEe9lw3-+!mi*@nxEJeRuyZ*Y{?4(dtEKn>OX~ZgZVXO=ax9 zPIH(Y`yM``>w?M|jI^9*=R3t{9S5Jo6L%4FPa_Ay^y+P$+A;^f9g$pME-ceiSH z4l6@tx0uLz!%bwvvl6!)uP#F>lcUgNbO(t`J_4<}$x^-w zvhRr~U!swEtT&1HdJGLe^-?D4#;@wIU$l^6-8E!CL%lz80_?C}QbQ|St;zJl&7gia zt~<;9kyre#cY(L!Ho9CKIb?{Xa`WZIRfNrD?4_O5=)Fg!<~oRwkV``uaf&qjaiUNo zaehJRS_82L#<=WLIu;s=7bjDQu`NZexGsaRc{vT-8Rd~;hC#)X)Yw(V;CS|u*VYZ^ z!n(VFrOVlPaVxb|)=ej^-DE6$aY@jPMY@i%+o)KQ7E@3|kWuBVszM@`fF z<+~T>b8AwmGNIjjxqB}|F8;i{U Af!ol1gtldMeI;88&t4NAS%79%IZ)C$odN&bvPDcMx4i=0gqdjx-r4^tY zTQNhqKt!nhRz|V0OD%vTjeSw=8mI#!J-9dI!x&#RH2H#imw(HI`xY7?bd4NiXY7pCY91__e%ga>Y^MCTg$%s+h#xl2VUTRcLw21l7}6h)pYFN&KsA``I-@N zsEV7Iz>GGozXdGW`{)h_7$5P`e2^od`NpZSFn4uqr`-S5->0~0xgpr$iK$s2jcxIQ zBGiy3gQ^U7Fsk!WLQNlMV4aDl)kX*Ou(@)YESR*M==a3qn5>OBb-eToyI$m1UN5F? zFKGyt5KU?5UuGIIb;{PZY-?0GTIO=LOPt1gSB0CakS>Fb^43>iDaWX*;+@wF4@^#6 z7!98%hiq<|r!m8;xfJ(M>o`Rw|H_$yK|f+3w^~vyJ8qKp2nAp&XiaEYv}bSIWY2T* zGLuvsAx)aN+;e#v-Z?G%*jVl_n7)}(l=$2^rwkjBC$$EGdtD4HCrmpqVM)qRx|DYT zG*`lwyU0b|XDf!itND?C`BPJ-7@z`{yTIiptSIVS#?L8wr%A;q>)gh%DfF%r*%Wt< z67BN0E)umU>|DpcKQ7}n$(!1DtP_`X9YKC8@U16BivTg&uWHH4>CB>UCljx-`yD`+ zhW(OP+r263!SBp3-G}*uX=@&6crSnT7w+a8k>pDb_*srqYtQwEoFInf2RRlHB^f3h z4hY1R*?uTBtM((luseDiWpCLUPv|^qLU+Hv^v<_9RKq6>dfahV!yMIU$ZN*FpjuO- zbGCS5ZLjQ}Q^;#YuJZc>x)&hIQg;OnF4Q|``EvJ%0y~!IVR>PX<|NKQDbv=eUPOdF zRCM{0-S1gKW>M;v`N)%Hgj2Knxvv^aS+kXoe{7_NAJGnH+e=F|-^cTX7vtKS?p%^h z^7d7rr8Ax-T0CSknlA`Nl0d}S7wnJY!=C46bi4DqUJdubzU83h1){E+ zm5ZLvo#emztaOFHU%OzB(Y2>)Xz6~V1yKc(_!ooh0Rit>TmMu8s}2{3!aq~^ z1>+wKE17%(O|MEJ4Are>Qiz9WhSJCixTy$-2t4Xhjw1PL1-LGAJ*U>zdNMZbi~$^B zCW5C0jgV6|71Uf2({!zx13gG^4);2sY8ySL1)Y#nPBva3zz_SVpi_B9sjtv)w^B4L zej$M4x{QV1ewkxCL?*wJyOO$7DSV%C1Uvr_s;ZaVVMF#~(7`<7lNZM^$WT#E#$Jvi z?1~B=usUB>WhE~x-Pv_{_5(;6{eB6IH_X%AGl5sHtG`tgY+wG8_bi~(UxxmF+o*xD zqQbE<5|9$oF3_@n?vYOR-%^n+bbKU6EyR=)obnAY>xB&m zYLGHdA)Ba^aH~@~S0n3g5qO)U`Zhx&Z-(^2#hxLePE=q+IwIcx`GI?rut3|s2pP9i zSkxU`)aWwj(3~bL^{2`mxI2orL!--mViux}Y&hvu!IWm9qmG zh^I1dUe&YEb4~38`>f5Vl88#m$YV~5?{Q7R4wJN>K(l=w{dQ^k-h<3OhTIYq_U`$J zTW?Ms{So4Gl!5Ow?P8ir7Va%>ct)T5lsv9%UUy0D5EZTkZrh3Gcwt*8=URUGcu=h> zI!U7N86t-2OQ#jF;zm(`^0d2=orM}4 zv;I-wlYQcs;e2l9@JYi_6rq}epZ_TA5KX!vYup5ZX%q)H-ASSD)F_fd7^)%RO1LL; zl*k%UD*ew?#vfSrRqCO^=EABpquWH$@4}$uLr~o0nKzBSJ9$kHY^>2&`_r}tIX$Zk+fQL3RO0#H&o~Ti6VWL6tRQCa9aC|ib zlYLk=cvlJmtvZW0csK!aiyrDW6H1#ccDuI)4N9!QT z@9E|%VfMBwQ(J=7ZpP`U9axn$8tk{58&Q|aC?)ZVDzTz2Zz8hf={n_!UG*zYO*=1* zzm+sJ)lCX0i{@;97bJ?d+v92&$+XdTqTbKUI2KQVT8*)I*fT^o7)O(gf{oA?e~J-p zCsd{&tG|)_Ax5{iX}hp>?94lek&I0xB!+kn&9eTIO0gk+68$Eh{9ceRKErI&Ku6s4 zDDpowIelb!uoZ1-4=HGaSPk!1r+aDu-;R7VIV~GM24`{(iIu3p}+PmUl*u+?;4&GCTre?nz z%rF|2Gp?i1Kg19R_5hAK0z`U>t3d`wxQ;!T@RsgqScjbkj+)hVF$rALJ-A@MsO&ob z`nk#oAf6CI42RwL2!yKI_*iZ@ecQ2EkAUMNuj3;^hiAHWcb+znU@h-WYWtgbLe=Pwf7M}<_P)u96f2!>gXQ&Xoh@TQ)*uRyBvK4@5GUZV#kIdhy(5%JSzODM4KmW+egf)i&>wPQJzeUmi%VO_;eCGaJdai6> zXl){5>+I<9Up6HQ)3VqM7&zq6QrV;uuhgIvC~rwLif!Usnhp_)EQ(8bfdlL7?L%W1 zM0FMZ$aO=6f`0-a_6n$Y?bK+uEXVI-PMUa#-}j&Eynei|0d5*}`)OEltU28Q`jexr zajP)*6Q&^4(U(yPOEA@=@}xCc(apY0k!d^zRy^6L^d- zHM(_d=J1$ZvYe&1-E~N>mj~7)(+LZAf3xlMrVi5dd_6bQp$m zH8Z~KupDB3XwDC(a?m}vN;u#trsgj$9HGH&REvac;a#yZ##R`Bs#kd2!yB(ptXLBF z9{4ZImU3g!G4mDqvJC>)ASBar)>31Wzy)c8AAf|6Shj z;g|va@6uj^{P;oh|1Ix7eP`qx|7D<|Xkz+bwN31`Ta-r_?VWY?W&b6kw83woMA4i) zB!LWtY&ou2fuy)0i2@ceEwMF}fE;v4pkJN-0KfhOmL6@>mBb!fnPcOki0-h-^HaL=h2IJ7^(lH%myz;B9NvE zC=@5vSB_jr1{y$~_*t%a^<)3!XT|3h??BdwRk?@f4#6D^^pVAp#e!4@XEqE{0dEu&&@@km6yx$0QmYkaL0b>Vk*;&<201^DSFdCl)0wmEcgOqvg~!uut6A2&&q+2}0m|he{;TcD=g#wI_v){@ zkLz{hA9SO3I_XikA??6zo%Yy0e-8e*qW6Sy9a)+Y&bp4*xmC7Lh6rxavgxIbK94PT z(|LnDk1u~ZzLX-vi-*EbO#TM6@g$xL(Q!wM9fgSj)^*XJ_8DFcdZ8h1+9Of#HU-e( z_8mI@q=L$g?Q6+$pA9L=I#1jWQuSO8NMFQX^eTm47m8Ur4n>p!PKq4eMd7*?mw8b? z>2L<0mAR`9I06oub0b9#VmzsErN~x7Qz65vKt-2Gkk6z^5-g&JxLn=~Teh#?cl~Y| z0tV!rjhsmER$Y)nt((*6;SW6vSr*CQq3+5R@A}B-D|cqF}yCy41PB zoXf1orOdJ8b~*==3TLBWG{6q0GNTOxRGufp@p8q=j4Mxqgp>{^5hWcTuv!p<#0&{K zEpQXB<{2O-!qkFFu}Y^j39MO_M+rHucyV8xiv>rElWUe9Hba?aUeZ%bE7)_E3Kmu< zZ5`1#8 z;)&qyl)#Q8yn_`EEHkqwC2?jd3brYHhEl7v7sOd2Ev*G6h^3gM9JYgwJ+02cLYt`~ z;v{CGh6}gs(uZM`L~CuRv00^t9$wNJ6Jr*>Q!xQ7A@VWd0!_T$z!K#t z;i3Y_b7pH`kzS~s9yC7rTOnA!0V~IQ4Ol)=>EUxM-#|8I;aepY$uCS_I=0RRiv*;+ z#E;z}Ef807_ArfAX6>+ZFfzc|#C1)AyAWC8yj2_PIWA)<%LlMsmAlyBuiM&CJp&GE zBjY}9tcCnmopymiRqJo0jqx@d)LnGo1KT@d2TJCrEr68ngP17KoJK^ZMZAZJt;E|J zyinr&YFRYL!c5L(9*RlBKUm>Lyck5M+hu&RidM;TZZrn#%aVFfF){XEuYht7An|S zt4A}xLT0GN`6^97ujX!}vpq8Mr?aI6|5kZSH~*pGSc!1;c52IUq?&E>^=UJ8=JZmu zMO>tn!L1eYC5(O_0W1#z%K>vY)#)|SXf|{Y<3fUEYhmls@fxirD+J8X_EZ}u?u-X1xL;C83<*K!|v``=w;GVL4E~7tDA2Q zVi=zt+zTJ)Z=+fM)4-V@T*&$7Y@bIVeyuLbtvd93P&WqR#o!p!a8dLKErk4qf@{&( zFHeR_Y`U*SisL`w1p>IElF>)(d5-8en6z$D^r7lLLu@hZ$4H~VmbxOJR^{)Omff*$ zwnvwqJK1J`qUcqDMkEi6=Jv1_bY&=^?bsbRyA2)2qyJ!BQT+S?`;4uTX~$;|KP6MFaTuEsI^ zMm(|r>Q<_7N7ch0QQZIptYWf57Tk>dw~Gd zfB&U9C=S+u$Xn_EDm{pkFJBZw*z#j~eF$0?HL}s)wIc7NHP)MA>`_CSG6G4eFC?{S z(6^vrkQb>8{33V;V^$$G`1xweU=YF4MQ(7J*z?<@&u#N=pmh6giv+qoV&Nu}fpKsI z|F*79S$FLBQJU3#pl7%OMVrq}&Oos4;no>6t9uHQ*vq-7LP<{3s&C?7xF@3nL}ETp z2js^;M7|um!C5iu%^QZ%2kk)t_SA<@tkT1m6eoGlR9pRazun(uH}>f^0Jfn6Jk96b zN6z?m-2OT4^jS54BPRXdIvSgo6W{}M)CfltFc^fp9;)Km0NovH9F*tt^LrTu)?!M@ zJ86N&(7p^}pv(bGxNOMWWVAezn!Qr|l43wLv!kvAt{R+VSeQkKnD{G&WIa02MbXu} zMF2>bOMJ!L^oQ>NKlcp(Li+H!`Mz>GBLlQjUnM_StafxJSUFqW4^(w-l-KeWqBEr2 ziMO^zRnh^P<)kRwclx?$^|CQw?dofx1TRbVia(-|Z8nZvwALrCC~Xx!_MK&6xGMck zH=vVnh3w*ZJ3RIq;s#mu5FvjXeW%#D_a!DM7$WhbL7(70E}}3cXAO?ue5W`$90nMY zj|r6NKLQSwUp#7M^=V`qlXDCwxu*R&1{FV$2KQ9RwyfF{;yy3ka|#|sS+_?P)*Ono zshKUfEJ{vuG?cD{1I<3J2MMGTYyGuFnQEwG5Y`8NFi(4R3xG`B@mOqSnQ2E4kcs%B_}LM_yNwCO|gnhjefk-9$; z^e4S$^_%0&4;F~S75xE`GkPLq7x7{94sdE8f-&?cyeXv+VL zjr^M%at1Orgs(C7cc}Hv46U)3p8jjX^^2|Y&8>8W59Wt&rRw0^ALFqNah^r-)HCQW=r zq5Wn1{pdIL&|962Z^*!L;(3@@Z74-Ed}PUQ^Ovou@qpy>IQdd2(?Yh}j!hQR#gHvF zqQ0S0-nvl_RQ5sycXJpu1+MOp8OqHlVATOC#D}6z-UjdSha^v>ilJoS$xC#?`Jp8H zslv%sfe?3PqiNV(!MsuIM3`)n7-aU^12;?omxkP~Q219!$T#un;X;L=V#6d4 z4u0Cw!yF8Q^u7>9Rgs89&}kDLkt2E&A2bI1S(i6>xwfo5wkL}hqG+;Q*!_au0cMPG zag8z7WzatC(Z8@TX}#Y4nel_LPt)#<4t_=ieWcWS@x%;B0xH9wO9-v= z@dUx$kx55nFw&+2Q=l5jbmlfK<~HZRDg~|KDogn+p!Iu-Ez6c#R$4V1tJAiv*N@## zEcVwBEHgTvYfrg>pv_ZT5kCUfc*(f2p*Pt@9_b4*ZaQdWTj$N(ORV>wr+ zkgyR*ren$lCY5pvMz>D+lQE-EZYqG43Zj}5zdtAd@y;H0Ho30p=-e7UZ_+84Q*Qqr zwTFMd14^%a4%;@D+)DSTAVZs)>148)6SJ2e587nmz4+SDV`=g&D%cXivVl7lWxrub z3QxE6#xa9gb-zBkqd5E*K(s)0tZ00C8c%aTH$-jXoiRks!yLWt$sW2cA-AOwplQ$| zOID3;8OzNo?i3`Cz1=k~MElJneCKIaP1m8jrbgMRzDW@jMX^$E=HX6$jbz!D^-SU2 z66X1WWpV9t4`D3l|17}f7hb_$LRyrtrb(L-Np@g05S8(QREh{2;ZB7cQMM{-$dk$R zv6cnszJ~uum(b}fttcSf+G_47@x@H4bFeZNGghTRy3StS>Qu3knl+<>YO{;AxSe@G zqlex!h@L9WXG)ANb(7c}ITGcOuy?#Mo)6hU8L)zJDoS7^c{;W#QC}AbHIn~fn_;8+C$wbA7Xq}^q zx`7KTO2jn6SO~WxblB>m8h$c~zr5`1IL|MfQGr2%e|IRj|c%YLf63z?;LW+g8 zR=9>^B(spM9NVfk`~pWG!*=x=1M4rvIgEH9Cb_E5fj5T9UUGA8^D}6 z_ZWFobb~QLX7!YCx>F?-9T$Z$m1nR&M1;)wNMrBb@t2)-{un19{po|L9-!mS-q?7J zz|hf2EU}HIBSE{23{ueA@4b-OA7wGg2Xb_S;BmO2l7U=Uu45(T>>_3)NcYB zdMngJ^XKezF3}J{%S-WWMVRYCCO~HyyP@KzaZ$!*G%$~T>+x$yF834Xi+U4^CKUGd znQpad~EoBKiEB3P+G8vJyrwDa(s@U z&8Hqy9k(IBrsP#@?hBF53SBTcNnE_MW_AMNcj^GNEEWcFSq2GgkStS4 zEv@OXJRb42cBPh~gll>h*9KDQ( zT2A|`XA0j0zES2}%AahGczjY$(^k<9Gfj^S$==dm<=!B>r^j(s+OqJ(6j*_-m=WC* z@2_OylajM4JsErjiobBpGP4yN+0hm`i5r$JfvOe@5*nKpVAa#*S@~|0Hcrm33vt)b;EFNA|(=@MRp_YQ1tQ#tmn?x zcFECtsLyoY!UgOHvc>j-eM&4V^r+B?W;Nm8okp1iu|KRu3X25WRfQE%H4J~Mgdd}o zfBfWwVo?=7M5Xdez;|-Wn;;jSMIS55>w!RVzmf3BJ{SzCVd8=#95{wAsE>tP6s9)5 zU0kzKaT&&wLj*o3ZJz;V-)xZ&$$dWii63UAchwKFOqC$n8vwXZdx@SfdxcENJ1X1y zXr9nJHdFRZ&2zd}Q~pcES9b^fElE#sC+ex9o=-y3)f=375y@6nR|cfLoQr>+4|P+w zJVhqQIu}gr?%7p-G}3>e^&Xg--*SEEr04-w(}BUB{2;{#D`=zwDhI-&$FGV*%|y5p zYJX$|S`K*=%&oq{R_9^=jpsn0%4M|WqIY!+Xvhe*Np4jV)bRO}xa>(Z)QmLTXHT{8 z9N(wbL){D1r+diF9M`{(njlnF;~h5g;C9qpNuC=k**?(Us*b!X8ncu5LcY>a&dQBM z^>}}%T?+7+81mMlbS`Xm5ph<%hrk@?e{gKEi6A*&6fIfuZ*A=+N0LGv3l6X`W-g0% zk;DofocB>-T)<7Owz=3#RIF}O;sd6J($_|g`?gxuB!g@laqtRE{D&`7FKoZRnQT(m8ftF&X^r-UnsdJ!5-CVejRSSOl@$N8S983d$JvhkFAC-XtG=vX(X>xfZ%a zDvvfJj4Q_i`v;rB82YkP)F z78~J-GAw3l+WUwfGb3ynE9He;yom+Sc&P2mGEil2JVTOSWkaa?IkUs zO#!-Ey10-ivSeHsT{5}V#*xZ)!cS-KI@0>vF3Cs=dE7)(TZ*WNo{70(E9SM(nU~e^ zbu01IcFEP8VX>;%N*py07A(?=hxV% zZ)|a0A6JdlNfq}83dgHxDk?{M;(dzmJ0k{n^@cSU;>4?6wJAHH6k!qXqqfu#OKx>e zcMdMbjITdXo=d^;pbWz8dEkPEya8SQ?j^d4GJ7}Fo zjq=#h#WQORnO$JUzdBjNpm?St7pGN{s!)W}Z5cyGtS`b@_Bk_K)u1_A4Wxe#(h&e? zN!H#2l$dCUt0bk#2WGhZp`Z|O#rNqy(hF+yZhGJ9M$<~$agjh{{tb5N>)Dsx30q`R zK?#(%ASXgCD3^HhqoRKf`RI)NnjsJCv5x4$wsw;jlQ`G3EDgmL9zb z&BPDZv`K$P;IXE|VPx1$HsXj+(ulVqV++&9!DRA)@XR^&TJQ1C3iM(AlaN*3NQ8ZdB<)*FE_o z;8!B<^J)9MdO=IVh0uh05XZcM39j}Wc|AYLkt4dT z&n`?nVe~L5dVq9S_dhAJZ$K%yM4uKVl)UbSL!U(ep*JVSmtI)DOgB|4Ez-=BC+CkT z4{woPK9Y5I(subDpeZI7&PXu9d*O@wktz0rKk}FQJWK}>XM><29~wps(WauD?aN&O zXmi2NRgjd{f||)7l;OJ`r4ls$3Te-a!Ma`Knb(MS=}XXNdDTMIV<9g;2=E4D@q&-= zfP=#b=XEXpxtS0K(T3{5ZXMndA#ZJ&;FeN;!!Lp|fR6429YF`@lDeHzbl??G#?3Ds z0wxToV0i==uSnhaWc1K)Vjv&qIRYF(<1jPY5&5eLPe&lTqk~P!3`-=`t+1N$^U2N0 zctp_qfR7iMH2!Ls5mqxHLb;4Q%r>Q)>FbzAE@B6(Qw@()ISQ?;);~o3xK&L3(S_#q z3+9GW=Z73faQ_3?6he>{lZ&$j5bpG7U4O%zTK56P^Z=K?8|jWf7daRDo1lA~&~NZ- zg))m{a0;gt$V?yBo1Zyac$sTrPK^3yr-=Kg=GU8ZJ8t>i*M_5Y3x=LCSZ7|%xjXr) zo=UsIeg0-Ph11CjEV9VAFxc(1{@la(D4wagOl+-V+|(n`{=A&mKVkycX2LSJV~dXJ zPe$7DjfdNBA5ecr_FY$@^{OW6jUBMbyzmgDlbv=&tE-tp)lE6jSiuqtet}kcKqs7> ztSxV9oQF(3s@s-Lr+Xr_4`s@N#XQ0R`_U^Oy1nF(p9bm%cio?KO6qj3*v>>a0DYhx zwrTmMA6}GobOZH*kU1IDY+g4%FLrfA?&?$$%;+Y+8s=58pP;?wn8C?oicX)EZFERh z++k8R&e8_5t;I-`h%i zSJXQP{`Sjq7`&B1Dchzw=h7LK>on-1_ZeK*Zot!LKHK`Le)v!m%U!M|bPK3=X47N}Rl+CS$%{s|3=I1;Fe0gVDL>ogMC zPoJGY4OE;-#m>*fo{q{zMN6OJ$)C7(i-ohK?%v&T;|{qPBful45GbzX3DOhwUeUv5 zHrX^b-XsBVYS{45sETG&a~P2R4#P5dRf_DG(Ciwn$BmmS%+`)PccweR-leUE)5)n; zayzTYkl$rSJ)c`X>wCUl>`k9(#ltz`?|`RU5rb`k>pj${cK5uCwg3L22IraqqQP72>>0OL}xvfdOKB=_gQieRLy3=e8nZNh(I(J zeZ$3A^iEXW5a;}rB+J*Sy4<;^T}xa%aZXZ`dX33J69SE}nlun)4$3y?t_#CMS0Je? z3ZyH0;*|cUJ)y8GvGbL2W4dZjk=B{1u0YF!c6_s8@;{JhAAf#%RV#nkG+kJ=&@Z=Y0JyXL1>1$cvMrC( z7;_{vVs|MkcwP}^04#MbmU+4OUm{Q9hX)14OhLKTY@SHNpFo$o!bv0gze?ly4VZ9g zN{J<9$^^zS{IH5_MS_3B?l^E&pTe1glwrrNj(d}byx4a7!L!foZ$#wY| zq2{vzSNhj5)3(od5S&)QvA>tIASD0Xl(UghOrj7-7xE%ok`37i=Yw}*4{Z1Q<-a9& z_yUyvz>qlrPk8ZUn(@THrV@YVhjv0{M2-BIy&I}D7Nw*ty-DWh!WQ5oTnA2%pJ9P- z5rZ(-One0M^rSQziJ`BS32I->gvPI-a z+C`Z%?Vn5Mn$>HcSkb)FT-YAmkuhZF<#m62kHp>c=ND9n=lPjvb~k>Nq1mJyy*`a+ zBH>pknIpSzAf{8fe?8Cbn}c?P-5lI2S2d?Q%a>368n!gUCwg~}ywT5B(*40C{7u?` z{gCPm*)83CQFD&>llkt_JpA}djlI7zC_$oEZ=4>f(Gk9h)nzy_%?*SS-(8!=2hblXsK>jjUxMK&gjx7WwNKzlI1A%z?8Mv?Bo zSz)Y4>QM(-g_=oQQh^42*Wop7SMw-lk!{7Ihw>52dt9j-wbBH}{kY4{`n@?>t-xW1 zMLH|zEJ^Ib%f+{!vP69gJSFuQAE0~7KK%~F92-XTbzWu0zj3<1B z+*uGQoN|*=ZK*xC_6x%kQM!NkT~G4Iof$-U`C%|0wJ>fx(5wr?$i|F>#^7Qz&}@cd zi|dE%@4>Gao7!s2J!oFpbQ5D|2B1f>T+EY;o_TTDFotT}dXRbvif)cjEt9z55!II; zXS30tm`8>?af7+Zme%V=#1V+3ldIh@(C`Xm^AV2cB>;YjFXk{U8o_4JlcFCt)-#PK z)HAJTuUVgFy#Jrvr6X%{)QoSk82Wdi{zJsIkimBh_ctBzUrZdXN4r&CaBy%Ta9LMy zS66U2QSj8Gp==z{P+i!(k3#3qt&hs7>}=uB>Y>J=gQLQ!KqQ}&kFLa}NF*!myMBEt z21@c24AOaC0*BA+p)O~iuj1;ZBP1&sX+lx(+P#m3!XxFjscdCYa9y)}Y=MnOekx4N zBL@!D%IE}vAKT)rqTr(7WZ($;#sidu9e4=@)#eA8=PPd}^u+H$s4Z2Gu+|rO%BF?c|r?>*EwX*M%)X39q!9 zoSfeYmrsw>^e;cZXC8l_7lOdc^a=scCL}r$1ZUkHltC>+cP*GS;&xz>fo#wgtb4?z zz^EE9$c&$V7>ISzLR!dT^>lNhQ~-|r*r_7 zDTe0qs4fajjAtL|1yg6t`AEn>4?m*@@L!tIFfC1(zf z9c=BD8eY0$2JT^ESUH~WDQ-`Yb_~LEX|P_~$1Q?>a36L^D(4AKf?d>r=2kk3eP@?3 zoo)pdI`T<{E~&auMJ4mcnC8YCCT3+8Ds?Tus0d{iXbi&iyMHl@cr$a!UHutl3Cg4U zsk1H58e^s+lBYVBxU)SS-%_5y$n))W;MHWuPZEe}%a9#z=jy(Y3u<5KC*{B2l{tM| z*8WVmV6m*w7>dwXDQZX$V;c}nZNvv~ZAqDy;pAmAQ8yivull3y04!n1V*UhH?%35y zcm~zakmjE5V?iKA13)^g_E zT4`_Lrp#2R^7bW8!nk$6@+*VPR(Vf)j#o%QG!V?hX&+o-X?586TEvNob3}m_%xr;9 zASE&UA5@*$3t*T_5!VxF@ZqeuZFvvb;B150a>ECW2C(V$IEBj*=bov@^ler{Xbq<0 zL&*SiWoX7!hn#}nKeJX`aupsBnUvHILIM4g?E$EmRR^9vfnJi;Zwc`Y_}3He@YKq6 zB?l7jdHZv{Gzg(Rw5_;hO41#lmYVa>#@RcP*EI-Nksc?rDH4;#wI(MbxE(xI=_JXU zly1XqbJURaGv||Zn}fHGy;>ybtz5Peh}_cz>D2MY+p}=cC6zB=ASBIE#wE+=L>(4z z;o9IrW!xcw2}ionGXN^mZRsKpm*FZvF^-fBR7w&T!s($dCE{EuUY z*vkK+vG5Tv^4|R1WR>SyB;o684FhrGMwbDF%P!KJl6Y&%CX%7sxT%2y)g^k)uY+Y5 zk3G!;2@8)t6erbksC3fDb>S;;1$lH12@Q(?a?Dm2J52i-W(#4LwnZ*Y6v0XPrLYr8|d&c9a}91KqIv<1{n&-03sXJ+`M>x0}O4rx=>*nGC<58E}q{ZR#8fJ`^RZqBTv!E3(9&e zuNdt@7uL2Rqq?FmTeW_O0Kv^CM75q_uZcJXyL!bFul@1+x1-}9vG7n+2&!V=N8VHe4|L4&mY+`C*Yw?d)?f<6E|Ld4ck^e0VEP%oj#C-r2NFgpwbKy;58}5pM zH7DHEfKbwal?pTp(`4+rg26X5QkT!zP+$Lm{e9ohSvEJIvA*JYp6Wiyo;rVDWco%u zc*pY8`MP~nLZoP-j?3s|sR=#oSB&+@p^D@S4S9(~PP(pZ^C{0ww#qrF>VU z>3jYMRQb=!D4DxBe~0V+e?dz?o?%Vg$GC(a8!_~q+@ypot)79A zo{^rx{|7NNF$fa~bog)|6iEig+Q03(e*l)_B&*HCZ@@we|2_Z1uCueT|4xu~6tQ)+ zaQs%$|7(3QDd$eeDky!ktscyqHXEU6RH%{uHkm&V^TZJ$EkIJ5Q_!H4QCc@Qk5Z>? zx5PC6fGFFK{CeyEb=MEiYx)p0Lm|{ZkBOh>`~mSGcT;E2ZPwI$_EhS^=`^$Mb=~po zrhAt6_4kG82Ttg-$r?zS(G67>S`cr$-~kn6$`B1?%n%Nws9~;ff^Y;Vc>}>9%bZE` zgfS)q3Yi8fQe9HL_!y+vC zK{9qVov3*g831?c^ zxbapahiOcvlN;ima!qhsQ=4DRke&FAa#Nnhsx!{85bG-5?UlUVTO&zelF}nC?YSH^ z8>C?r^yCRfTYEDOkeNwAi%7waJ3^OWw)GBaf*fjtGAPnA%VjE2i*3Caj*>Xnc-G4P z*&4O>xQhnL9VS?;%l^5OTBaOkSa4c`D?Z~RS33!Wz*Y;XBx_B}62C%b#@_yllVJmc za}^Kn?D4E2*mW}rklox0){oLRteHS+)uT$rCT_CY=54G6ordYGh4=YN+jg>J-kdu#RcB63&6%q1uI{S-(_HIY-+JCxJ8C&J6-=3$ z@p>b4e&>eP&RoCB5C7W=)I5mn0<@vA_@%s(<`$a$x|G{Ns zk^f1o9hk&YAX)Bk)vS#^f2J7EKe+>1hI%f`Qa3=JstL%TfrzAlMAMvBG(}pKS_3MA z73u!Ado)MD1Lc5%31NU->wX^2yAC^dD?;vhKjQ0-2J9XO2(N$nQ~_^T7B4W#9>xtI z84D?gJy3H1SKJpdO&0N&9| zA7or^e}W>bzxSWKKQ#lO2#zQ+nE|4jZC?}m<+CQYZ=KXp zx9!t;cq_Y7YQvr7#2s6|8{X*RqcG7ISJO90cPd_AVQRI zyP6pOeFAwA2xlnSkC{=QJc$0_RefW-WszJGBcaDPbLe%J3J;BD;12FFc`fh!{AuE&ovtL3&8y`35v~q;QG#DV5%0#s||^9)jg{M z$?iqvl!MOR44iQbDQ_dFk+7;G>n)hIgSB+*tBe3a4wK?eCq@h z9|2Fl_tt&;Pi=Sq5iN$22UmuEqlCe4j`Cl5um7B*{D;oU|17XrnEWr6CaxQ5fFB{) z>?^8QKfjisTpnA3C165#9I|^xy`eaS~jF!(Kx9<5aWye zIf3kvuh#+r0u@E68nL1buzh8oVp)L64WimxZO-?PQI-DnuUl_vAw`1yZfiiGTJ zolV@GNf`e}(Ck*8wq4{$_-1uI_)KH9$!`LD$0l&t=m4}85vP!cOc=;7Lzl%~mDFk9 znQ*NL93sA>BS0i%zXRZgIG{veij`AQd|4WtnVRus;$r$<>HYco1kH;XCB;xTQ!sPL z9S-^v>8>sSECZYpkP-k3_)q%XMeM!j>aC{FQZ2;iL)hnW%m{yy36mq=4Qn$SrGZ%f zAbw1tG*~Y;cvnstOJP6!bu4PL=k#|oKie&8BU+@+1BCNy|JU(z^kTpic61M(!tDG;?rKG3lb3k0s)>Y?ZKQtz<* z#e>P-E7e2bcMkTiV2&DH+(TK}RjLmy7O2j4U z*)o+92!RZZ#G`UW1oflP#C%3SP5$Yar@#mIdB!r9pgOkDQPngdvy}qAU~3QY4@*S5 zL<4}Yyq|rPb&|~zL!8JRb>+Tn#y!jNA(ySzE`cVAV-vIHJ3Pw6t0Up|F3I*M1&Pe) ziq2M{6RZ@ZFD7-7OO+ukwDI5bDe-vdpZ}6`dQUz+iLe0x^u_%)x&Ghsvj6|x`X6uB zv=8KOZ|m}F`%6#yi|NCdBoHCZARZYc1d%uZA&CHx1_PuN|1cruKpzRR85vE1OZjrg zO0j1CN;7SBGpamLIO;V}3*GX?s-@PZrp@(EMRoP|>rDIY%w*=cbh!8P&&R)y<8HUx z&KK*KEvH$Ym#+QJACFH7fV6U*n`8Qi)GnGhzg_6Xw@Ey2&k(vFp;Y{{&oJG&>I=2< zWvj37cd=Pfxg`$GQ0E7RIs1F=#j6R%5PR3 zpP?ILlXkG*To>Odp~yr zL7%x`Kj=^ItusG`|B^xhyh+p4>!pv&#yROpE= z&=!j$>7>pSW#}!>6s3lX@f>Q@MTa|RUW3(T<*1z%ZbNiPs&onh=wdp|9|n#MNp)rl zrI=W(^Q9{3ROfw~=~m`^s_8bI>t~=>qnHY}!1(mTW zUb@zvAqW&0BR8Kd4V%($kqRm|hJ?CPv%o6ppf9^Dk_x8cb!bbcmeCn@gkKh@p>I0Z zZ$o!Z>-{TS2{r3^B0ksJ^;O5f>V~ z^Qap5K(|1E>Qzyph0OIrh00Sk&@?f_n56RTmOYq?3yI2fQN>MBg@$r7aruRGMF&;6 zC9BGInz9R;%67UkOIXE?R7HlA3Opl)uBO&Tr?ftjjoPXqk)LcW=6>g z)`h&9(&n0GYg3J?AR3G$QngklYf}^JDoc*kv}T4Xi<*=_R**vk8Fghw{Y&U?J#-DD z_E-2z>(WxIEIq1!EqdCR8f+&+UygYVFC1LrCSs+zaTN)GEoeYkMFzV;Nv%7-7)xPJ zDqBF{fD}<nN~8ku2gk|1OGooLE7)houk621g;aqXY#G+!R4x{j+%)IWMr8K6e{&&yr>M z-gdn{fpp>23LyYh6-3G1x||L7f)Xx7nAS#u5EwEOp+!P#--vyD@Zt`33{knt_5B>H z1bqNTksC4V23nD*B7ea1bbo9!?5|VkuV?GVJZg>s%YbYS!UR;lv)h65)Dm#JWz3Sx zC^it!TJaj;aSA~qPULM>gfplh$%+jm;OXcRHIflC5*&CT%*3Ba1Ae1%gcyU#lO6Xg zPPrL&`B>968}-D<{Nu5u+Ld)UE>n@9>}D=cc}lk{9AT{KuWE71fdtnjC@ome!~DBw zPmM4;CwYUv-d2IwUJ7F(lq}1c3U=bs2 zC)7Qd>AQHak2EsUkBdD+{oNP{$yFLY5q#l%}Anhco%SNuTEC5!fLc7 z@AC0V;CY0PnAG-)2I1J6-ob&Ms$7&Rr~? zaCe)ATcr#Q>+&5rTWkK?k!YjzEsrtw=rY(%p+J?Iq-nW^e@78dZ0U-ebs`(GKwpeF zirTVXgXUsU4lSgvm?@RZwfc~0*g*j|YtfI@Rc~ZIcS^0plxF9SWYKS#g7e9#FeiWE zaHawxGjv^I@VvlH_8tg>KwsBzw`%aBzzj)>4eN-ejoE!Th2hts(FFa5u?|=Q%v-mV zr|`45RFqOnBKI!N(uRRZNbRIKhhr8Z5^ z2Td232fWs>pWWC-40l!k6}8|r0a>|~*w|4!A+_N@B=i^Y#|L|>$S2l&G1yy}u|Ty& zXUn&cssbG64cuntGKXY0houO*A)I4=9f%)!fH|q`G@8&h8&wPxvxR01atKN~GA`sW zzy3EUWCk2lyL|c62SV=Yq_n?}WL!zh;mZiwM5jtS$SyokaU);SY=P@>)GuIYd|q7v z<2oED5P4T=uh7)uwMh`EvAs)$A|i+gb%`l_Mhy(12eyLp89e3ojc(#g1*)#|t_PH* z|A&!p#rMp_ZLI7@3jAF;D7RfCvGxlwVePhdiG^c%M!XCw2(pw6lZ{E$t35_y-T0^o zgacFiS&u~mlb?K!xPF&c=JQ7nCOZfoF;ZT>mN-q`!bI0BH<0fEW6_#^n^4=3qUfwy zQ|lu<+ClHqdO$!nM@IZdes)|ua+{Hd(NM|mg`gh~d}9F6JXM&}zITYt7VAjbK!V_; zXgi3DO6mb71y+P7^n|;Li$?|<%RWn;st+eZbF-voQ7DxaiVX#dShPiCQ$dH*JtIUnhQDRjHKA}adb&~on8HrVr?chP)2*^4*owL2d3?wZ%_*eh5 zqq#Z{BNR<5yKRYm{UFU|(Uewk9v&XF#pr^1(op{Toc^u;AUep2MS$@Oh!Meg{Vnl=FXSxj$2Ph@wVVc0}aE2hJY-0{0+@R4oOkCzr z!_$%+dqr(${$kaRSRnGZndgW$83DyG;cNR}6-(ea#<0-^)i`B=73SJVV{ew}D2MQT zgE^sjhkB)E1RcQ00;A3Vu{D?yvz!lL_$~?F9aphioM6ptXAs>Cj`fM36PGkS4rRM=v_4>b##0_4aNgr~!-eBy4kshiPEafjl(}2zC z6W(O8)#A3L*2Ol7VW%ET>~lSsEVV6K*|DarrKdMJ=!XJqf_^gJspBb9h!PB3@SUP@jOb6A&X)A}qqot9Bwg=for#w{W6t&FCMO z<4hCQ3*TMAMxe9kTQDHp#(&>hXL3ll|;-l=<(?q5mB}Pe*>=0&hzlfrFMh3zjZ9)v*=`_4MF#7LaS^Uk#&N8Er+}%jOVdV8Tp!;= zIWL~-3^KQsQX|(Z@dSdbZ&A6i+xIY=Dq5fuKmsn4TB>nRQB1B$NWpA*{i+t@WZKD1 zJ-}gfY5R1-uWW1kKASd1^(V^!i_U>vvgX;I1g*%6M7mHkN}-Wy+$MgQf@7K%`-}SW zH66*rY{I*+iEfs_l-VXRx04BH9ixuB&55aK8TEptTQcUZdj}2wfOZf<<5x)S+CybhHwTHwy>D%%K$PTo+79YkhIl$f_DN%jS>0f1g*Rb3&ko)r=zwvc z+xwia=!TH-kESv?oAw_65g{1SWiFg7|D_Z zzwA(Fhx;swAEF=2x~(e@FyC`#&AZI)EgMfP_Ql$xFx|mpD1X@|%579{`oZm08zt}F z?}%t-j*a7Z2;~RiN0^Vxq+L)d&2mWr9N2*wD^rWOE77%P*gfO8% zKPc#AdT#nk?CxMAxlWRX-vMx-AV!6ypN!o^Tb+Yc~@DW`s@ZLhnc?N#*gleWY(Wt74X8X90H#aA) z5I6UqW~i+EuIxiJ{i!@~@u72PrOfA}DK_BPH;18JiSWvK#y`1muxnpCnJ=;+*N&By5K1*2znaU0Q?pG0cuWuXJ=5 zmUgIB?n$gPYtTwI4^lp{)tNud9Ns7HW$k+C>6g88^TM|QH4@2DQ$Yt<^nZ~%z8zQFmNX+cV z(M!$};n7>w%ZSgk^cbDqA3c6KLyRS5@D2-sVVO9)I%DtM-%+9Mu0M+J?rTU7l=krn z45~DDVAGIc8_uC5@1ika3nJTC>@SF)CPdR%xm*x;qonMa#j9Oobd>l8)?vp>&0B3n zEpyH7n%4g*(4pn4Yf3@p*>TpXLUFUeZ$DCUCCjx=TCy^A2)Qlw&D^)7X^v`syw;F8 z!XUZhP*Q#z-kU}<<0;b;BYjBTtU|^WPDj|QJ9r@T`TM^KnI!KG0+;qJZ5cVr-FHj3 zM(l2Xh~8W z_FmytPqHFB@@P~95NCNGT+3v? zY4SiylBjEwS#DE$JV?qTqO{pBma!pwok-Hkd%ZGioNdh%v;ebXisDm?%d=Pwn~r)k zR@5IWlQ}MD?_5V$_*Ng4wO${@HCN(FDYGvvOyLxqr z{AcslIBruCpI7Y~hl%#55<5j$2sfGAlH{2-2nUl~v+}i^WfWz@H&VNzyGNm0hME)J*>@DUf}Q--HsJ z{suPqoL^n@rNrEb-e-}C!-ndbpTFo}1s%5yQ*P00&kaMC0=NefGyOb!>S_&bJtHHs zMjh{hjU5lFS{dAva%V}IGwmU3#=uB5uaLN2W3f4IpZ(Epdj{t~jVmcJ@qPQ~%q3~m zA@W{)V_h-U&mzNI@8?olGR^tIGW&*E9dq8S2&dAd2rxg@#9tSA3*`*9)VEI|L4x5t zV^;181P5PPJ;8NZ^W+cA@gtqhK{;yDB|ZxhzaQlc3f`>f4x1pEun?073CmCv@1p4h1$xe&eVV(%XF&e8&yZSg}o`g zORJfQ&XkdSe=DDmPT7D@LeCqszz#5NSohiVZyOvure^jH-vIApZ_IRZ>NpN!9bx_@ z=b2LUXTgQ@d^;USmFrl`mj%n(tnP$3kKyZan($KA46g-vfg7SG8RU>KCtyDMEMGlA zdJ*5+TJFtc(!Y=qG1_{7Wnu=j$X-V0T?w11en6|zy+mB#f?s2Iw^`Kl$W(_E^JpwD zq}i`J<&>X`HL?~YBDgdtG!?WMwj#{`J?+gs|P-_^({a6&|(y}&p{3NQ&3+_+6gTGMy|EwN5)0H6kK$8xK-+Gl&^##ntu3zwtZ2 z19j({wEtb5jZ{8dGUce4t9J=Io$%Vm<%HI%16l6fCvr$t*?FNgte}*Qu2+CGF06kl zzxaj(cT|q^SbV}RENsEL`7dgrucpAYRgxn6LBD#Jt&&S#rlm3W#7yLPR!G1abmEs4 zOF{$kGZWyh6b5nxXcCxrTY_r7m^xw^DOaVE(#U1l!|~`GdZ;vD*imQ-syIS^qFtzh z3I$e_njPG@cka|-Rs3I=hm8#m%@hgW@$4-9{7vZ9-$Q7GXAm_FocK9d^U?1=KUdQXtR*0h}7cKkeAUrd9jTyUnB-*oBz|D z*dt1QTV2DoNN(#w^_%)%#E$3AP$_CmyJCSBb3Kmy$z^#8gTa*kvCs6yn0?Ua1X$u{ zq&6h>uTOX=J&vsBo=~9ce=ryGfJqtUoH(qza!MXG@(3*CMx0E-IUZNfIiQdmb}TRC zhMn{kYloRUj&%f0Ddn1As`CylzP4#6%u$pyk$_P7_ z6!YLsL1&+UuJ?{D?1Gq#!ab&bJ2^q26&*{6dkZMsD9{)tWN0-Zwsyd`@-5HyR+K(@AwPIHNVSF{+dqE zvrNz5Ci%s6h45COMWW}{IMak-b z>XLRFa3WUF9prp*4bQ93@P`n=_nN@m*8xEryssPFaYB}VMPY6eF2G?*&lQ2&cOG2# z2XKrNu44@viw~lN&u>j&?50#7${k@4YL5G(|Ih=rK>^;o3XtsZ^+N-B%81$kF_u?B z&3M11EJ>~i)x3ZrNKm0o{yxJA!10~H4Rq(zC%%n1)7-XTAX6kD)^v4RR(-{C?G59*i=n$fkQ*P#)w z>J8wc9~$`4JJ5sKHly-dKv6a$@0)iquJZyEk1vazAdU$w*z)3Rf^dpDeYT=lb^-HO zs!i3c0+gM&ri8mr>)G;A$!v8za}&JK=nY=_$er+>YhQ_Ky~7d1mEH}a(qYw#dpM4H z+1nv@ppuSkmQ|!do%Pa2-83F3mkPr)Xd@D?5f9+}d@wyMCW$ezE@Pv36nW2Mujt%|Z;6kk+h`U~8Fq z^{ohdwIr|Ws%9o6=jXaOAY{2WV!-{!i@>iWM~gx1-BT-daf7~*v+*Oi*#PWf~3#mNe zafR3dAHo1lb#ykT?%eQIR^)%nwN~iZE=@6G1lj+T>6+O{!ZkV?I5SFGo)=tBaI8=f zwBV2Vnxok^r|7QOlqTokZ%_G=DF#_&!8z;0Ui@#WDLZaYxRJ9~F-nrqWe1jB-E48; zPwGm%#}~|T679ZJ-()3W*lM4>?xi{^)U`^!{5#kgPh%l#WE>@mQx!`E5{uC{qcB_T z6|}^0yH}Zd@G$78xk=`wnFMpRV2VFm(72X7k7j;!Z6MRDC3{q@!`z?I5|h}1;k;xS zktn&A{(Nx)NnMRs&!W%Et8wN;oiwWTX$z7`3UUpX9$=QZlKleT@f4g;r@E%H{7-gi zI>Nk{0SrHn?}I}5Wzk`wx?nu1J70*3FH&#=1HPX!+1EDQQGIaZf7$YV^Z^du=u?NO zgB+hwqf>gulllpd-548Dj?Ya^Z+H_FDkQqKuUcFe)D2HmiuQHi&3k%b9d4B$a4x-) z+jhz?T+3g)E`H%R8-oRU#tV}7mHB^nVJhEf;pVGVcJjj#jctmTjyfX>;e@7b=bn>N za6&Y3>Wkk_pZgmWeB@WbC*k`ejVLMPFFs`%UUlG5kWnMKpKV;V^UD;fPVxOcl_x(# z2j^ZXmW(KeH~#tTiI&o4@}2mn+07OqUtxkeLs;GOnk{*aHiUv;L_Mbo(Po5&3dWZd#*{`lwnyv9 zq@RgzVk6#xEEDDv$v=w^@k&#R=VVj#Wc|R*064G?m|h2x;7XDkB2Ja#OU#;Ij3YI} zlVnlL+779+hYfrfwD&EpT>ESF+z;A0zfFs+qYxgu5#p8a-<9{TDw4RaANDH?1<|)2 zL%RUVaR})s4{TycQR0mQP5T+T{jj8z?eEg$x)zF3yj<@PCtZj?bAYth19vVM?e8ucFs5|TJzAJksE^>>P1 zn$}nnXbH*wL9ajuKLvySp6k0Ly3EN}w@9`9y!t=#cUVh-NylR9JVn#M00+8)-phpJ zG@$W0-;^-6Zx(r_?5YGoAk<4}YpgPcKMDE#>-)i+)9vE2wAz z>avRFB8HHX3V`dyjzb8=A_TAng?or{?AE@qF%+Ys$%P2}$Yu+FJnc&*C>&6&4ymW*s&klqB>D)($_M|mcFDP1?(nlWj+`7XU-tqz&bB0KD?X1FTWd{ zw||c1m9}*&oL%{DLgssm;3KWoq{KTA=gtP}XhGvyNBTGT`5%SnwX@E)qBgCdkIYe> z7vcJzlhZO;G20m&{@FAaafEjwZglS@lUvmVp}ie4RQ<+SE+8(@DF~@@*`9-!>GTZ8z9rckN29Ou- zh>)mWx=}2|ui~Ubsdch7I)?iSYax}##WARD{JN?Ek@xk5_8wZGH-vEgsLXzo7<7Nt zYSy7Wi>0*KJ=q!pQPr+RC!gz{83OU*P6~hqB8xRBu;yBTS6%(pHX%7SiW#&!VMeS{ zgY-I~sG6wtLtROymTCe*Hk#|iJ7;o|nf(75@=9(5Q)RwUaS#|=px+~vbLgf`iv438 zVpUui zG~UjXcN7j zkeZ9PTl^i#0kl6d<_>tnPxQtA3#e}}te#W3LTkc~|5Ur6Qg@r$2jC$Ot!D+_k21Mz_M! zPAx#F(^|VAjZ!rs=jUPgi(m-U=@PPuLbOv)xFAnAq9^pPZ}njRfR9+6_$QRnI9{ zrQYI$y`>JSNW29oi=U(emlr|@4+Jt&K<4<$G(03Psi_K7pQQPX^{1y#4zp? zB?OpN5`ko59_H4#wE{4RCQo!Oxm*ieb{2&$A_;|zkc)}Z( zsFL_vA|qXLrN7A-^!hNbjmRqTkc9Sy?%x_4Bv2j1?)U}SP83MDjCmLCt893J_f*ydwC7l<5QSB#!|t-rkz zCY<=5e?)K}@5NU@C>F>EFno}tmrMCWcu`L-7WD&e+~Qm2$ZQC24Y5frwz&`P!pc=d zL>GGg5?pUWD)#*SGyB9LKA}x=Y)xW;ZmAkTPIPr$5Ry~>+w3wone~X`?o>& zOvOTsW8|>HsW3zSZS9SH23M3ke01`CPdGBOq!vg=4;F9RW8h{h@>#R=%Nu()r$H?( zqevi}bkh$dN8ru-lmI97%%0`_CL{T*y$7*)0nWn{{6YqyRTE6UO6N!M|Diy z0B_fT97nro4Le&huto3w?Fyg^acDEhonACMMlb@;iGh1#glogpom^9!SDz$DD&6kA z7+7ooPEkA1H5J~}Emx|(^PNTfs5!pS?@#ykap&00hSW_l>*pT;3Bb)}^csnVu0XwVhUM}#D%@CJ zyYeaM@I$X~e@n&Yf0Jd|@caHeSNcZ5)wgQ*ai!@r^d+(>kCn5_uJTLkZ^cV9awXTF zkiIb&T>@{7Gmls(t5M$%L3fH3Q$10CywJj4I52AXZs)vC4QPs6CI;1gtN+gQ^NrUk zja8r)AFb&2Vz*Yw^*{OC`Iwb0CT_yZ+wutu*K(*)V?qNORG&Zcb_s2xOkzQQWwiGt2hize?RGM0w+XG7M{DEcRKw=8sVXAr<0C z#z2Kd$~BTQ#Q14S`p?s^Q7oO3aQg@zNJ?Nbodiv)?>#=-sN1HSOz|JOZCEqIltCUVS-8$DwBuKFi2K;pxmT2c0s68rD5k!1(310wWf>QD)EqMmWT z&*Ook<+{)Vy1pUPGmKt2LzFh16RnyBXKrEzBy*l_IZ*t{@!OVyqFN{U9;MUKI*(0ES_+6}0KZB*ShE z+-;lACpBrAneNgb882tTe-3H1XRB0sNhO}QfLpYuZo7yH2uGYaT&8Ekl+I)nvR#u7(` z1h00j;4v5xDafNx3@1p{J*>+KMfscs;C&UOr{X#0{+o6_9PSN&U2euy1vvuinMvV%O0AgY^i!(GM{+9%wDIAe|G zZMs7hj4ak|zk*#c#}2ZL4Z)5u*;n4vY#DHa=d$Vg`;0`{&$&bDvg(HLVbuSg6AcpH7b81oS#h5O};;_CM!% zbGe+q!fzBLF)Rde$#i}2Y{k|X7s@>{xx^}&mR_ey%rm|{hQkavzEjeR%&DTfW{q7~ z6h3Q6_RbDWgX_W%g3I;uQP|)&-{n4;P}Wn+q1nela^x7uUyTPa=4fNwI@r#VRow40 zzt_%CKKlc*gkrU{5dh zQxvSy&^_S;`aw*Va%{Lp2m*6CSx^_C6h00kSQ}OMz(4$pm3w&LwB;R3cY+ZDRs$-{ z4WKswY5T}%6I(i$q~(F{4jsesuG1C2=IaT_!pLbtVVOXGa_ z^eKp2TM4Zb@(w(wT!!9(?{8wv*%Sr!#Ct+Csob~aBfSf(RIfYg$+m3vCgQMSV9NY9 z{Mae*0zI#MwXJ6H(8A%liSvT9x(rq!M9pagqZ`E6ho3G6JNiT+eHRTj%>)KBtA6J> zB9Jo*9+Gp<&Wx-dSc>vwj5YP}x{o7=x#T{vuPp~k^Xt3@HVdPE$^pE=!(Bh8j`vS_U@_x2V*=Z+?@l_zT7Er;|@Ob+&Qy%C0& zpPiiN$??@rRE8$l;4_bV_=5>WH1|a&uH%qo*->)Kz5=-srpjfr+nZi!tnRG^RyHWsG?B36-d+!cQTvLTKc~Y z_8rMC-?&`$G*xh&lG)g1DLz1sM?2f>Lym9_))iFLQjH!j)?$ioc^5ar_qsqzJe@ek zsT;hKls`4x6f=jj8|4TQxOd_}zF9!X;e~O>H!}o>R=DxmqyNy1M{*lIG;0Y`N&X2- z)FX*0()1;M+Ki1{kByWXB%i{87a(CPLlw96Ak(_b9G-nEWrmk- zN?T_BE;w=Y`bPiX1;s`O@1Uc9@w?IAmFmC6@C5#o(Zv5jufm;*|`M=exlEIJ9 z^OZH!?db7SRJC-BU?B!pv-h=7aIDZWm8BvMLQpO@a+EOj&A}7rAP$1^H6pac!~~gx zH8V2SH`X@<02D>bqsCO{rvXzX7$52b`!A9Yn6NHV*9_8En=c&EP(_NLiExdzL}}qL5NAPu~+H9gZ&98+Uzz3MK>(YZ$O^RHQfDi zsEj$`jL{XN-XjmZZvR~#g6T)<2GR(m&MB2Vct3}joO_62@X$wZM-{fGXi7Q6-!4#U z<#bWpoLrd*ow3!UTBXn(Jv4hXMxGX%4%9iEDtZ{vC(R}9B`~~ocHZZr75~$&CoSqV zduguFFh9rP8Xy=7NmdDrJM3H>QDBOscw4!2}BydzB}1eaIjisXqX@X zb~cD5LiEZ?CKuayNM`#vx8dA-%LY0{&%MIEN|h)mB1A!fe*ebG`_-XPZxjB8Z=D~1 zr|R{NneB}>857x=rjEvGj@Qh#SMKimhubr6-QlS(H>M!V^V=_G5zUR; z$3&4#~)q&ei$GW*gYb3ZIX&U^$-Ef8+1QhvAq@`9(O)8Tj5V9AG z@)c<+n-@LH_3aE&f*Q2DC(fYvwCpRJn^rppS}CiY8dyt89t*glOs#9-4Gc-UrN^f1 zt@cD^#ZXgBhXANa4QkZJCtRRqMpdhpCSkjOB{$chIb`Q~)Fkq#Y)YDJ=cWP~5xM~u z8-4yJ7n&PQ$VgUGD+e%s9ithiz`*JzWK)k=0SlobTA<0QT()!HhNc5&V~=jwQDj|jR1XKCgre3R?;t_kn1=F&N(rHmnn$p& zUJbwj556{G`{EE&xajDBP>6Xkp(!&Y7Eb?0wOmcGg=pu)Kn4ysRlOQQH<28In1!(o zaErth%P8JWExWgSy`2`sF(C!1&A&Ku(*8ff&MC;Vpxg3Yw(&39w$WwVwrzIVwr$(C z(Pi7VH9d3ZVdi_dH{wKOoQU&wG9uUBx%O|ltY%|&*KUcwtlhy0bujiJnF^9nXfx#< zPJd!7ykMfH!%>Hr8@Dm8ff>k|B+maVqw={ZpRi zOEd+$lf&)5citGPaAJXmd)y|jrDWWNYcMm>(a|PQfwuaGd9V;Verrg!LWsL=gAyQG zysj=NCjDwMrdP0&1X53OzPwI~#~~Rhoga^)8`L-Bs6gS=M2(PiiZUhbm55iB;Gf8P z7-1c00Tpo=AG#m=oNJQvLL_6{(s_U$WNJdC*Q^;nXg{y>4#1=`OD6=QS?Mb(nzKW| z;*4C#zPvv5a`f(#cHv?b+S?bH@XXD>Ijvi`?xK^}V8W|to^K3>I$Ssu^AAR07KDm{ zr%4{03(_JBO;TFH29Xe&9g$=Vk$!Kn{fvvwl?SPGo-EhNm*q}ejE*LI_%pG_XJ=@F zW>p`vn%Jv=MqMvC9NZ>8%BJZm`EkNr-Sz$(f)5Yclfk#qqcrza#7TOIA{)Ic8NI`vbdAtmON={7M^FNcF(M< zn{i3-DBM|f`J&GUkO~j8X^V9gYzDh!SoTR;=d>ZL)(>-Uz^u}ABp|f1LZ>TN!Ics`Zmkv$N zgf8%j%a@0fhz5J1Nt9K$U_e#f!fGB=d&-RBs*c}1E&`*MUX+nt=Ni%(Z9gHt&}m!N z26yrK+8wcRmmjetogI5y|9hc5+XpR|pm1Nwr>Y-}%C^sp%64B22ElF=UwJb)x9pX1 zxx5YA7ge1hpY-!pi7f+#`oOuG*l;)u53_n@mCF-5pF6E9+gx>Ib&;5%Ie$8nxB*sc z{K3eKvwjI3=pU>6%kk`8W;_P=qzo)r8ntcg7L9pQ$6pHiRGV3J)QZ&NQQdhxvk{%6 z(}bQL7y!`z(Y_X7wIEKmy|7q9p28WYdodHdiv-ufF^g470dtMcB>U-2g`N>?M^@Qk zP%Wv>+a}?yHI`d`xHt<2i;_W1W}C}}&@05s(BnjY<5w7|wQ?FU!9V_cvw-{#bUkXK z-EvAh#2WSPk|j`9dptlkT4|y;5H9+h#8jRO)K40pQ>|E$wCy)BrVuvfkmRi3i%|?w zJmTpoO9Z9Qj>;1@?hcG?US#T0r%;14RQ#G^WLNSDO!4oQ?00t@o44aLqC^YQHDiLw zphv=uJ`$bSR6GkL)a*=TmcX0CD`deBsKwQhf}dzV$^>DO2)w{}e~t(p@Dd0ZKH?_A zI4ypDO2Z9}WRKHbx*7JvU%J-(Jdn&R(o}9+C_J&UNNpvbKGrOeSG8FGyaNcZ%)6^9 zp!xt<3YM48DZn8eej+z0RoNZzio!(+dTC0&D{r&T;&pyY==#?pUePl{bN3vv{K}%r zNbb;K$HY(~#g!6?ToumOIehUmgxCo?B0Wf>G#42rtLv32b$IzSm@2Nf^Lv%bOr`xi$ z*in)0M+K4#h*7amS1_((`kYa8ZHda3J+D5>7!AEv4yFw_N7EIdCbTh0Zf~w z4oMG`C7og=hT;dvnT-Qb!5J~^+=<*pnO9=oGbgp?2RZ5;L&9HSntU1E#AOldr&)kM&p=e`=9YPOr5#HwDeJqd?}EH2EiKkz@Y-E zQ!g~=OIs=qb>LtbVqkElp;^`1!As%wOB3`gB<;h zQV*iPD!eBY$2nm*`5;)lQ5~C@+TynaA$eihX(YA;a+~4?ZJ02_wCY5*gU}8TbjWU= zY|Hz$RbbtYM$qs2T&vQ8|8xVYjkb2-ViNA)C)1&weJo2W8TDyKWuNP%y)3~)t#FUV zX(~?T?|^O8H&Y|O6ouPAB-tkPB_oRa`rC@JoyPlvyd6pQP;_w#plWd?LOHC@h|%Hr z<^&LQ=JYxX>g)l*c7;76t@tXel8+czlJ;iht3Sg#j#e`we$v-M>3Ih>QF+?oT^Q()ny8;Dx!oNyU-O)}D8eH`IB*-@COiQa zUHVM?ch24NERD&_XfYSaDKm zP3p`vyw0JYz zlD?Gxy5}zbwT{=n2%)kN>1R6g!+KGQdBTc)w@C zhfdOHzEyTxltlRFukEdy<4Cx-0Qu@{M`i`|JO+2|26ub1pYk31bT1wCL;Z)5h+i2G zmr26B6y9_Zof4hK!0Xh|=0D;@<@@;QG0`St+j2=rG~*A#<5Wp0RnO`Q_f>yymb`t1 ziHX%SVvU`Ue2rs0e(}2)vB*vM1vW+nG;X%9dDMn^i65Fd`s=)czpiTqc&?8?>mjb} zgZ5N{{y_ZydRdUfSAP4SP7eJaVL<;IfAb&pL)^5a5F=vn?4sv_?uKSR`z^#4OPi|( zEo3kq^tBO=q+}PRMACU-`z??+g@dh4d*}W>$wR!;%v0}g8u5o{Lnm|V9oYn(=eV8 zltNY{kB;n#EQtsiA`fhd+#sc{C?hEL8!jLsFRv7;dsBo*nI?#0wO+e^b8S-NnuoW$ zAm`{&{@(ZD3cMiT=i}?!_cqhR?sz(ry;er!^C~?Q56BP4djkC978(BU)^ukl5XYZB z{={LUhE;+{DCN~UP&216qK>C6Wxv36efpFM!x)-lOO9D^_^euk^bie$ ziG3ywZCeoX6e&|QF4YOo_!t$gcNf@Idq&j_dnj-;&e+ewF^fa|arbf>OJfD*=7 zwQ`;L`)eOdcl2l@Q|q1QO#(t}6Z@Jj1APonpmvbEiXZ2oY6yuh1N%Y46DbQe3B#t8 zyDq#}Y-`Tln(hvt5VhZL3mWI;3GD_=vnZ-#{MesoYM1^c>Jp#KEw{3cDVpzv_hYe9^ER2mOvKIL z;^8+GGr0^MO~o93vw!>@(xb*mbZNmpq98snxTk5_+8;|*TUI>7?+62xqSjV# zs-yVRkwjTp(_kW@>Qk5Dj9v!M60hIkt6<|11_gfhupo9WsEJiWHlm0Y!OuebU^W?$ zv~9M2>8N;6Fme3bNeX3HMpMDSJz{<0{k&?8R;K^ma=eF6US|zin{JIZPXzQr3;L)b zvzTjEOi%0%&DyqxWPP|94o)UN-9z7mc-k>v1mk=6KH>L6gQlkU^(Q7VJ1b4)3xK|4n6yYoyvn%&L3K{7W48!XQ*CUbsK$q6IG`XHhK{2}{M@!o zTQRREzdWW+M973ukSY*5i&jlzZBwx>2r*qhz+Y4`8@UQ@S)#ULJViA{#v17?6XJ`y z7zUy;ylDnn+y$w)h|`#)dK=%Ba89~iIK$50SUhV0HXNuj@nL2B4ImNuT8(H4tDLN+ z(XnDVQJDf-VZ3aekK+<7%>lXsj=s=Qks6mljGowb6iFS}3Jqx zc@EaU1vW1I@9Dht#w=`L6#>(#5bf?uH0f&RUY<{kD$RSSW|>=cRpnF+oD@!}go#Qe zS)1_m{gYVR)}vQ#gYdoqZkM-!*FJdP5I02a6DMk{fL4M>esV7b8(J{0tD%x}6Bm-J zqGT2Sk+`aQejWX~WqRV-6umRKl)1Q6>rt&cKttPfOsi4m;g0QSc3b49zUh%P_jO91 zu5zz>O|WAT;~`Ge8rF6Ff$nDMo)71@A1=Z^A@?`3ugNI9#%7G$>YmZ-P)z8ZEcZ87 z?CKp|*GA0Ct^)Tq^~NUK~o#ZuM|3D&mVCHaXbfAxu7`U+JiVeox@!XN0b_qm?B0RvqoE%6C(yU~sL$$7 zjNEQw!ULsadG4By`42C-^<6=+e?gfV%C{m;c?~M9qPRXPG5lzRfDVU-M7}?#TExJ<#>8h7h&~vK5CshI+b0zWKUDq;* zL2`|YT_LE=GRrcnDr+Kyc$ltV+*WRyEoH&7`uCvZD7OtA_^(>Av6@+`;E zLj1(aqHPnS%tQN>urt~i2+Vn8(@F1^!FhRD2+93|WTJZmE6q+Ss?=0mW2qO(VEvt` z2&pD)K&Hq>*E9FqU7@D1-eSdR2FUiY;y zi2s?`1OKQ0{a`O#w@vglvHR8{DEB;=U*vV6`_>H7w*~NxJ>dIM_~!FM{J!%tkV~AU z$kBht6sg5ZYU9D4AIqj#;2oStQ=zae%oGE%Z3Xv7Mc2N11nL$m`56(Y3*Jth9? z1QAPWxduSFsk?&6G}84JfiRD`e2usg^BJ<#q*rCUWy7gcpTom544xCFwG)QBGwO!7 z(ZNpB6(}Bvbw|^PB%VOx8@VvPSSK9V!#Hr^SdMuT6>1&QQh4EV9>7%yTGv!?XB}8X z9O!~342Vlp6|RLOt{{FBAK+w6O$hk4jOa>=Q3qe3&nr9#9u{2L2eR@T*gB}ko|bc- zOgwm+0iz~#&mJTyh?W7oMG(k3aNHh+)|q=M0G9#V*5Bh6rVZ9M5V{Tb^RK8=lMwD@ zgK|8MCS8|Rc>#S=pI6EohC-KI9Lrs<*P>8~+2cPqdu+JdeI5KhZcK9FK{ioUfO{yN z0_nd+#*mjQOpT-j>6n0Yi2EtmQXh+>oJSw5RiNLdG%p4o!VwtEo(ar`3d{x^%!&-` z1QI$y0X4~pVhWn#l}zdHbY5PjNI$9CDZGSrwdf2Zb(df!Pjm3f66nDEU|$qyEwSy> zbTKAWL4dWD0JJ~{SUK8urqrxQ>4qo0C#W;D5P5KZs-WGk;0?}h_@Lf_&}FIF->+jC zDuTW+7s>GI`EMF}jlmbI19CT^PxZ!Q(23vbtjYx`>2 z2TU7%W|z`GATE!T4;D5IEBU#L4?*QF0{FR>mL(m_Vj|cio((!_X%71D8@^CneWGR>uti0$-mvJ`l626~mB-4=tKqn}uOyb2S@EDVr zjgL>oIE@&NA`Oaa=7c%plX#L91sF*K6(zxdB*EbhOQ^@4Qu&C_XQAE)nAWaPtx?8ZzGaO-gHg#lK#cdx4;AN4lr0Df zzEe&9{`8fSpfu+7A`e;c`MO{7vXHT~WCPQ)xT11~!!o7&{|GbV6SPW@WAc%Y<$cfY z?U1BLt9~(#JNa$$g)HBa3j7JXr+(!+q?!QV&lNuR{2k5@DcWVUODN6*G}C~BsN{;H zE!&8)d6$j20p&2-|6pzj7;5!Dm*$X+YlSONBDUKA>1ecrpqLpd3{v>Tl}J*D;>=eA z;><|rGOS!6JEO9nWJAo_>iQ>3(AeS6MxVXaq6 zk{y=;SObz}HUvDz!_j8Pr2x*ti$sb~!j+{^mxyCTVRj@)XLtFqn^jKMm5Ol`t|`Rs zGp2jY-4;!Am9mqv4YIdWsk zGhT=6xa8Db2}B_%nOz}nLa$ExfrICvZ|E##iGhZ$RUS8pG=n7La5x}GK{xWl*RC86 zgmhPPT|K!SS&SBJmInW5&yR_1VdnTLW6g4o^~Y(-}`W_Hy=^NQFrtYga%yU^* zlo!7h6v`^JpuOF@Sf3*s}6%s<6ovQo1lO zr-acY6#|)9^a26d(Vh*tp}3{bL$Ogu4Pdzd)C zW)FUM_`nCaF@o{+DZc_r23I&RdPb$W?4tzXoX&F6L*a1(ZE+&QIp867L8S-7IY42; z454*+N)3^|vSSwh)wH|bS>dUMjJp1f^{$KM$1eE)6!t3)(f;{74Jc(gjcS*YfnSpNwVRt z)N{7w(DqfXnz+MN4yd+(vNvFLr7Rt|Si|YgvhAX`fY=#xJ5Y0nZLDs&Cr+7hq{
q9&tQK$OcEQ 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
oZiV8iJkt3ZMky_~T3o6#^K6Q@UAZl80J#tv z(Ftvx5>+-gu}5)rN87gtT4aisijcvHmd_CK;3U(AsYK&Mx*z$WfxMnp(ug))`ieDj zLbFjz43FnDM16(6iqup_%_-wZH8d{7$W(Mo#%Um7|E*RYiC&MnYICJ*Qj+nuGINV< zqsr}@oP(I+aZx(J4(lLSv>oVpDqzCXz#A(*PZsQ^J!}YeZB;TfF}K`i2FWg_5)me= zo2TM*fr8SBE7aktCNi28>>ne!N^PxWuDhX~yEwYjQ(P^#?=j91l>(^wLzI;w+jkJ6 zWBY|gSUFN?(+V?0QMEd|V6V~{)KWpo`3EeKGpkMN=AKZW%-1=HMpXS~UZ z?T}PrNkLMU{S9G4LZYmsP?%jbpkcJIjJ(mV*=Zr2HY9 zlMG3!esww`r=T&4voCb*i(sn2ih*S+kqQH?$#cuqD8g0QC{sDkNLb5^n6qF34Ziw; z$EE22xL!cj`we5P#W1^9BpNp+QCg}XXVRuO&PdzNHvyC4)1#f|oV@$=o8^L{fpK9m zOCLPg-<>wiNhBrIBm*=Ae71)KPTge4jjn$16*(h@Rbk$~`-w%Rq)ysHdF5!l$o-W= zJ!}(rBhPhC_OJy&cJ@I}veNhcN>GVy2T=&furJwWJVd4h?C~tr zqFqeBknh_A9>yhgNOFHnjpG$yJhV7eysSnA7L znmj6U*X+?w08AT5CJ9R~OPbn5Ii%Id02xWlcG&Wz*MKOMN|eAPJek7@g?&xaMfk!y zn4l(@rJ~+eM{%{>Oso+Z2^f_)_J$4d*Rx0x>EopH(q!CSC)`U$qoOk=BX%9eeO?zM zob4AEe%jf1?7eok4^LnFjfF@V*Uq&eJ0_v<%uI3TrXaGFO(}Aj)tHdU?QD?3H4^qT zyRb7m2kbD_f#Vw9Ylcl`36){I=7a~=!1UiE-}eAYe8GN!9z*f)qhiuHgR0Wa5uyZ* zqqv10%6!HngZr|gVH47)wHs}5mVyPyl+rwbli{;|mNSKGq|RwK(DfDWdvS$pWudKd zki~!k#E50vB1OLnO1~S*2Zq8mdidlU0$Gfj#duGbnfRbRJs~{C{aF`vO5U!#TH<(Izs?J=Gi`$ZRH$Kzrxxoft5gn=GMFlf-`vj%ttL`t!A!}CJg@tT zS>Qs1d8*Z_KE}qSxwK_}wd--GEi#~T)3Jv)XA$p$w|HRu3*wl;V>mugx_2|oq;ChN^2r^-wM;<#alI*l2J7Y;l*tgH5_Tel@-=cupUNM*;S#c$!MTql8M zH%oeN>CiH?%t+NT!ELSlYk4vjD?lRc@w|5#h2a$JIDwYhX)zUo4b*k42ofkXS(}OF zdK`V+EUnMN9C-T#&y~nBz})C@XjM$ul;~@+w^PP27dc=lzr!L$knlaby0LL{=XWEW zK{=U+5#Gplj$?|-y{idvT;|=fO8f7A@chXJ)+>>?vI^(%ND(I%4e!QNlHmYSlTA&M z!N`4wEV~qYsfmduu+sABDbMAUUXzx*Od2((hd^3Ir*ES)4kw%623j)3t#!?k*3o4E zxYohTfY|~_wu?elk{(a<9<$rlyJa#|if>UohwZ#*=g!{=yYJ>2ggwM8?X)^9e?Qi+ zD2d>P?%nYll$oAYhsUs={5&1dFjqRahJ}?`NxR}eMKr!#NVIab`PotpC%|V+6naX~ zr1M!EiibiJ=z?`Y{B{A$@z)2Co*pz6b$)!0>+fvb)e3bv;j=096bSp&?!TD?+L?6~ zfq5n4Z$05-y*>0WkXmcB{b+nnMU$Kn1hHv6>{$B%xA20CmM(^c-#^IVl^(Vk@Lk=9 z2jGUG_#x5+DX;dzvz9iZ>vPJ$6SPIUzlHs4`l!Yh!%Lga6LJI5&~`Qx!i=ZDC@8vO zikZQ@jqq~XOn1uUtoI{&vDOe=36ha?@BYLByLXB@&XqnKBv(oOK%pKZ zg+H`#FC5S>c*49zS%;`5EoBkeh-mrHg$2EG>KT01B@G@J?Xo1K zKQnOMVKLoK(;9w-LdqLW9?W478i3oIzY%^iggz=sD4%c&F-Qq{#q#>Q3MHHDPE;~d zH0IJ{2+MvnbEO$UYuJJx@*1`8W#HiV{fgv%^5Tw>d8Nwt9M6-XEu_^Je>Kg1FE3cH zn*{^rx0C##WuF4@Nx5Tezv2@oY;Nncg$N?@5J2LgAiEo3Jq+XUkdV5lQC$UV^|9S6 z0$F#Vo58;CY4A|4Khe04O%DI$A!Xk&ZHAZ}I_DsH)ECAZxMlL6+@+IjOl#MGKG?C+ z$ksK^#>(0X=Vc1Dh36YqXFq?@SsPqmWyJlKj%gNw(N|Rd3F->_INQ>n%G<@=TE47v z=7$YuQHj3;{CBo`MH1sI21ZLs6%w$J~2U(l=8gs(FRDl3U6;*%xf z-wuKU-g-F{Uf@Z# zRBzAybHEh8L(}a0qt}rRw2IN+Yr{k zv(OcsLCS?P_tAW)SGOL`Vn6DFzA0vs+0T=U5t$&{?drSrMJ5X{egSA5Ayl0r=nwAu zYy2iC{+|9PM!G?{>A)U>&kjxwZKhlgu)I*IlQL1-@B>Yt0%ZqvhE2}1#-`kW24=oR zGY+LVTsnNuB1Jf8)&qLhFINniPCqLhejdiyKiEFqsxB)U;`0Q^6ZpyNq)st&>>-%h zL7^7rNi-nK{9M@#8>BdpM~?OY&j)!%8q3x?l7E;zhUbotLeiuymQ7tRlZ*nmhx%r= zs{u6Xg#8|*I2vh$Z<4~Zoj`JKlA^P8O)AP8h^EgB2(54N*mu_!M+ZqbCMAh$w_=xv zVu(-}f@z|gDRSU+34X};-b)$gkSYWD33sd+l(@b&S`U$zNMJ`%w;PAIZfX&sIKdwln&VA{b{g*{+LaIKp ztU=$sz|BWTvikRZ6)zE4cpXF6Ed!$d^62I!{_cOMo<^8hE`CH~V7sVodvr;a>Csct z(ipe{NCL+93np{>18&|HX0-gyBu7Q7tinxlIvVeKs2Nw>@e@)6ax4b53iB90`c41i z`RN@|MSolNW=-I&GM^43bD5bP#47pm5;~o(3BWT9w8pNz^{AI^4q@-WT$c6_eD>+T z_ehiEG9H((&xnguw@-$@sP(WeOhDotg99WQcs&JHz_XuH7upYYiwPl)ZMxOyWtor$)R5}espRhhL;CL@- zNh6{=+sQ^FDX<|KR7`Tp5iP#VOVb<@Mcl;e1g_z78MTZ2VNZ@j1+}(-52_4uXtVRc z@?k1?Bi>L`LLqpa9MoA5kDPL}iuA%g>lt|$a8=WB6j;~D3n9%RC4(kZxul1kooMnS zUBx&RQ7(YqzU~NmF|>cpufJmIwwQ!bXm**1TJK;$1xnu!`E1XqELj%^DD3zVf|{V~ z2`qylDmuTmI}Wrk*B&9=i3T~VFfqF-(TON{PZe+xX$<$7ozr>liTJ6JWc4sLlxgiZAyb!AQ;US+he8~!ZRU!0RK_-%|$k|?}r_NZbFgGufS`V zWlyoltspzt&Up0eKo4l|MEbBHRT4R!*c3ahgOSl1@eZ=fX!>E8=Rz$a@;#>K#PTH7 zy^I@6iJ>w(>cht2$348~4jvNzXhK(+zmee(P}rOY=>=Zz|l?aFcwG(D=a z4CJ~4qq;}*V^E#I{`ztcMXl8#t#{hC9t1RlBgHlvjn36>_sIF##$#UfvGcI&NuF&J zTjv_0|87YL@6w}7=(PnRb zpl6)zk#({h;bdH#G^usY%zlqu61F3q92Z}Le9L96?ChIHR%FzD9{c`S$FWC4FZ~L8 ze`j@J?PbjxWv+d?i(yc*(g<-9f8N88#H|ajj8TA)(Md5L8JU4`bjnGzZFTuu4sye$ z1I#W3uX$Ol8-i5&K&?9WZ1#Fr1yv2MSIdiof@{o!jl~R0?I+Rs{Ev*9(v)EnE2;h_ zNLtNSy7S3_8#%a32=rT@GLU7UDTNJ$!d_}*01%TSYZFVA@I$68I@p(h%0Y1FcMA zHMTCUMgkeq?@%vh-)yzt0E;)i1_*56|IUh4G`P?sSI}g{c##EztAVGTj`|;F58=JSO z+SWsG@useR!gE~9(yj0JwKm%YAzxnmU|;T!c)mS_e1F_}Uwc3X@^uxwuHCsrOSwN^ zBRCH!76oNr?w)vg@tk#wU4bNB>_>_{Un_a>3`Aww4(@8X`AYF04#vH?gyPFFw*@`h zMwbOO-Tff{nE57jg~`sFxj&=h#WOg6*nH>vyVY_;{}V)*W_MplR|u3gIUklgz(Sw7foUK-q%}VPmKJ0w!6C5*0OKh zQCwr5pI7puMOrV`=w1WkpSwMiDJS$=Pjcv9$32xULyL2yKKMsSJ#ex)3bj+F`3!$r zY;3Y-Nww&WIn#SE1Zse2XFQR~Yw{ewJc_H<@$)4nU}+tmmG{S z8FpR>#I$ny=~qjtGNch{&j1vdrHO4RO|Fy{3~g*cg(fq2FpTFOz>uB$ksNPQ$TsW#QJAQPzQ{H(8)1$xfFI|=SuZx^c2&1(#TM9~N3%O?30G0i?|NVFx=emU=GHnLSHs5>3m8 zpB#KGZGSp6LK=)LA;o2tEL7@fVepILf6gGD^Fpl>$5)*Y6EC#%FAT0r` zl<@sx#}?uf5e2J?EcHVt8TvW12-@i8mLY62EcvqEtNk=AZTGDFw^5lf6ZAs<+@9#& z&Xl;^o>cQnD%7THT#ctd)l#2yE_-+YANtTs#I;Ka1d%u^O0!pJ&HLRs3dn;ajaku( zs=$YiSrsTjL-MM2Kj{j1FPiOzSd7m7T4N9iiUi`ZDvlj#N?_`r%@v0u*fLVuC&th2 zM;hkKQZQKEj2(<<1oI@2jBJgWBqVu(--j}K)c{r(){+wk z497Zi8BA+J!WYz965+Z^jYl;ypJ=Pc)eBDU$7QN(p1_Ed(F7{IXOqP&bn>y|2T23#9}8UK@-Q)jy#mX>2o$> zt+ho+!p-T>k!Tg0^mdNp-WxJv7w8{SWXMo?tVuS+=6AS%Xg9sT7SAA+y9TcP@c%mq zhq6a-0B#P_TB~NRv4Ewd4H~Q5IkC&s6Uq@;iTEjZX2WQjXy%d(3^%o_<|%cG#AQCm zLkpD_sjSR!qxw->Bf5Tu6(Y`Ca`j04p-Z7VlP4x)vBeVT7-b<4v0sIYA~>LmyZ|gz zGw9LxNmLVxl#v4R#0?B+hLo2mJhV0m2P*8%u3`;$N(^3b=kh6u&OlH6iZ?>D)#zKs zS>;fN-1FL}RZ7dJuZ&<9Lxwine7aOD&)jv{_&rMCR^XnbuA&H8tUPKbhF8|DNMb^j z*r3%xy|9)KhWtZ7)!#H~k|EEQ^shRyrAl{}v~{s&%0;>g8n?x=(tU|VB2F0!f+|eBf*3S%Hp+ixi%RT`*Z1I$ zvE|orwwxHzLR+f(-o9wFc{)e%>?yQyJo!=zs9-Q_p(PdBy|joNi;IRL2~~+hdeWJr z8^FV$qF>No(Waf%i>)0;VmSsi0a%#sUnSQMP>L+cpD=PSbX?{V^O%1_`DQ<$ zIxmWxPT@wQ5>mLzaS>5zCSF)eW6(Qy_NT(MR9Zj5h^K;c1e>Sh`{>dx8<~FDQcA&2 z+2WL@R6k%Cr?+Q_)*fN>%gqUW(7?39VRdLZ21T$x`Q>1MvRc$18uebP zBdu0@u|)$iI)V}`ITh8C6mC{C_DuA)qW(awwaFB#mUhLj)RTGqSyU>j=2EfMFgPrEZWC?i!j%ZFgK|$cxL%q6{SEi zmJaY3$D`u#y;0k6DUAQ~y}zest9q@Pw2!WgDNQuV7-^WsBn@sxM7FeFQZZs+ufq*3)zDM zHj`L-tXw)bV;oFmwpwO6!Y8eb<*|$Y(wIvbOI%+W%dq@(%wPey6mH7T6E>4I_TdbM zg$Adh`T-Jxl>o=-dd5>9s~cxV#}wpNoWLYfDUs`ilfHo?vPgUiNz>GHX)^ukgUrdk zA%4?w%hM(9>Ue;XXcHk-oH!+uh}dxA>He|#9G(P{tVJfa<|dk4zeZW@N<9o-s#N=Z z#jO7L-qlPxwd(=ts$xX7MvCzMO3|2*D=D&9FngK}tCmp6MI+a20j7R5r7Vh{jKa?- zVif$K-}>TmYep`pZy5Tal86qW(Ud*<#gu{5FiWt`DOV6YR-tiEjOnXZUDz^=U?0PA zvQD8fg&3rz(iY^uu3)u{djyvZc4VH2mBP`AlCN-htV0>Y@BYweDM<&ON-Gfi7AE_?%P^|UrK*XkoMae>a*5VwVzOwbOLxmerDReX z2TPD0{034QhpHF;`8`#OIfi3wOXpgfb4nqLOLaewQWV-;m`r|H9Im&1NZjRlJ7>q2-`l0tWL0^P}jHDf-!aw`G?=YGAgf9t{ zGi}6{`hJvbObhKT;c+ktnzMx*QZ($_s4nxAY$-byg+q(lMNxlhBK2i#BcWn#3lVZ; z@Y>V#YdIDvCz$)6cfg98rclsBnkX9>HXHRn4a^fOw)#e3OnK}mPKqOn&Xj9EtF7bW zqlPBa#beq>aU?UQ{0I}I67CHxO~d1+6rL?1u=_d&lNtP?_|hX-EbXwX%klNr`|F$I zzxOTn7iP|5nCtBu4vG#}WK_o>o{gLXOjPWc@>MD&YadykYW`MH@m@IMAOCJ^X5EN) ztdSU^uSOfUI0??nIC%X37(1unOrxmH#D~xrGea9`%8Os@nyzJUY$;>p><|yGihH(-wRCH!$%gzN)@D9bl)7ctsD#0&_xkShHJ1 zswyK^JT1bQ|9jnIjBX9Sp=lAN!)*e-0S@y+QNRU^^`YxJTQ&cO505y(DM5XFu5C>M zx(E`VV^KNhPz4AfzDgwrokgdNY|B(tHq8QNAxj?RNuFT9+%M`_*JcgL{xBLS3Z*!5 z)!sVEh%mG6%k!!`P1A%oYrJG=OpzKV+eQy;R>8dWce%0jw-Wo%LWZq<3<@a38xh(o z+$bL?ps#^`WDQf#>33;Lcf-@ob!CFKb#R#?LzZKWmsAQZLl$Mh{ zXR51xWNeT-Q*~)oOglZ&rR@d@FjDuX;RY^z@-=qS(X(HRt!#Dn(Y0~(5vA2vKe{YI zS|1=eU>XC;K#l?X-2u|R2ioljNWEhQEBy$S{sL8gd@By)m3xvexjUa8W-IETf+e7JUou8UndZHCn*TwTEmC+Xil6hMjS0mUtMKp~XesiQ0n> z@gba$(wR~oBh4&-JoexNB2<}0OEpK+=_J~Ls2iDJ#>qbLu1(Lm= zkXaL>G$MygS)w#RO^DM=jlga8)avD0sc@($X^3u{NP`J+BIhM6#}cJ}cWkau9#D&^ z;IC+D^D0Y9)qc9BFNPmWgH|hP!F)C+DaR)fo+^mz&yjX}<^rdB3%Lp#QhGibU49rWtippQR5LTwf&D0IJ}uCbyu@~V(fF=H8;F!iVH1H*s{I5Dx_VgeXg zp+MS>H9s3$wgxd06)cc5O&AmZBd8xTxQ@87=C5xQxEi__Rg_#*R^@Q%uEH0IpOy=+ zbbR@w^xgz82cgwFS9XkRTl%$aHOcy(;v-D< zKRs%$6MO0s0bdkTtH+zPrzjMRD0BlA^+6q4IBd>HsbnRf8A*roRHQl=2+k6HGz^$!K&hPE!|R?Xkg}3cXl1w zwP2emGVz>Qyu~~+d2-(LOBhT`X=eiKj+nIVBLgA{WA(YV2;6kWxe|I50yde(-v1pA zyEe|qab)c0CnJvs4m$)4iyLXcCn6Q}uPe*>ZLk~RAa`RAOHl8CSHPE&5bkfXS#+}C zUFhI0k;?I)<3{3+eSEPy|G_Sp#TB+-zB$3L<^Em8x%Vq1?|{b$WQ6l;xLEtk5X!(n zwf%vGc}#^sV64Pw`TG8iXoQfr*w;F$<5WIj((aHpW(1Y{t2XBd#v z05h=rB4SS<w#r4e$-xsX}` zeAz%&9Ztm5cO+2z#w3PP>XI2f*n}I|M#LBea`i}{@9&z8{saG(ZYvR8_8+ z;*Jr7(IuQHZ$b(u8>C&1AK?)>#~~*sMOhO57;-|E&pP&RK$Akx=lNQrQ(r5rN1-;#0l;@9;Z&7eQP`O*wG z0e{uSZNp*EI-WC|r^qDl1(a8fnc(<;>qFX-p3g~-0~z!S+z3uR3db3qN7O5HT7Cgv zd?7Z)R1A#{3H=PA(1*LG#f)i4!0w4p+}Big!MXZe-QU>gXk?|R0t)kLBk$KPJq~y_`s469`x{RjML4q}dWS$u6Y}Ubx*ha3AUTIX z;Q?%e1g*XT+o0$U0=kIFvLT?lAFMHU86B?OQ?;KypWtf3ZwdWjb7?V0Be8<|G9*&h z;V@*en&mrW#vV(yPOgi1|IBwC{$o-f91b8GCd*IBBF;4+h+xDjrA?8CH6G)7FDa4m zxQ2H-7wH)c>_CYJ1}JWn?H2wfptAFe@OldWb+|^KF~mzGHG-Pf{zren~Kd- z?)*NDX`l2UKp_;CACqE)zQg$+#lk+EJVS!pJV_0f<9XV|yZwDk~6<6Y$5*EGo%;0IYR;V+I;k9qJ|Nhu;`O z)MQTYMAyKL2X+^=fys6mt36ti#$&%P6KN9Ry;%uozT-aFEM>e7jY!~jKpm?2EKGyy z9Je!}F7alN7BC}ERY04}G&MzmG2y%@5MB|MtP;pb5!$4vKsg%aprjIln<>$06cHT~ zu_c;_Q7#rl_K0J(U(H9E4VW=tsM2qz~M#lTb%4nLa8 zJ}YzTa3@BOG0rQB+q%N?ks&jvM1+=Slx05-Gp+*alT)c?1at$|9J-8Sm1dMiB&%b% zW>{O)iD$TG;9F#>GW!pN@A&hXAt8z^hb@R)>ZBn&L`l8AecO&Kf?QfX#HWb?&4~<0 zx>DgEYKcUIluiD|Y08#VD)df5nN*max@pR`m!Y2$VVvD?P|Mon!Hlkk7-@!e8Edl| zn?pMmg;zy_FN!>(hEF5}8n+)ff;5^;k+4tqin5M%#9j&PS-pgC((wSeq9jCArj^kT zQ9Rp<{8^#Cd~F03mOV<_T%(rYaA|m+0V$>KS~cteS#SPS9QQEc*NqZ1&DpdSe8y{)XV6n2PfkPk!JJB7KWt>e=<5oym5(nPs0`hFnL3{1eclJ(b&}d}yF>AIbzV@8$g>0W2as(B{Scm! zx_$l!6kakv`1mLd$!G&|i5Hx1GC$C|=(Pj62grBE2MVhv9;#vgB9ZRsvUgO7VFM;I z{?WukR6NF?D3xI&U8*0*^vF48n%;hj2L)Z)-eHUf_PkH&T8R7i_35AZYbca}X5bJ{?ED__iRe)m^1e&cD%|5|`02=b=N z?n8LoS89(9Vqe7ZMDZhYqseD!!*zs8g&Aj9)?#G>E3QwH4)sL1&`w}SP+rg9)N*Ju zWC$z0>Vif%Qmkle8R`Q|c(-yJ(>wr2?aYH|u`WBt>KC(u2zhdR-0VK8(sK!s7r{FzjNma+h8FLNI1qcv%5TC#7KJdfOza{Htwbz zKZFa=NbX1!bJ0~FkjkFeOHiLp}xmotj<0LMy^yuhT!c*8N zBYbFsKd*%eN>+s=w-CuL3TyqwX8$)END5Ce*($55M+&`U$s=AqG=TIx3cZ*^BHtWo zndk(4(xE4+i)*TjiGQLkiYw(A8>FwTwrZuD7%TDL87$UVL#C4-v`*y;KlXwJqO6Us za*e?vM}tn`y^O?4vRSEqMUaEw_4}Pqvg$am5Y>6?iXn#r(os0k zZOH$fa%S<+7n5w8(Q2BM;EQt1_I!_4X4H|NaM%JMv%^}}d;Guirb8EvNtyKg>zRWd9{UjwZUatR$eDm4V<^& zIkU?vNl{rO7Fn>uq!}8(%=DP3cR7uS^Ju)15t|%qRaXO<)P;a^EC^xfiwI^r=v@3z z2x-D|Mw%B2ZyU40;#WcVql&Q^X@4`;YcTYGu#g=j=UAjbBatYgUCBq?2n8dzloxcPDsWVF+=yqn&sfA)8AV ztZ}EFUS#;~y9puFd{Zymg@V&kMO2{&kK1fx*yK)cyHFb}(|k9Oy7|%?!!Zb?OJtVA zY2M6;<>dfb}3^JS;aHL5NK1E|Tc(lD06(?c2OS zXjv?vSa=tp9LW~FjomIwe&4298GiKcXe|7oM+A>uH*Gw^45El;-O^LDoBF(EFp0gg zpWxt0nG#AOE_td(DT?>_%4FzR#GA7MP`{)t9xhqtD90CODLQJPl)xhfn7N2lSGaU3 za91pAEFpZaIC3enSXQQ1EJa+qfV147WWN;pw8tzIT8r^imt0J}4n5NFiR$*AFUo5c z{<_3UG{ZF$k+d6=|JOkdAHk|&deAXciGzLpqE*NY1lFv%Vu3kl>T}biQ6; zloxz=qQc!Ua7uMyRyOl7$#)S_SR*C~c_Cp~dJ~u31h;JZY1Z+<;kHQZ>)rtA7V^RH zH0KX8+%Q|N`9Zu{#}5(QKyw!GLC0G`9#G#P@m76<d0>hODQ$Sy?YQ?d^Z@I##E@BK6yMsw z)0G$srtQ-@Q`4s6#Wj&;J7qfHmz(0-<8b2O*6`@sHX@SMscNVculPPPxG^D}*lOta z-3F%)1h2NF*3EWSHBL(CTj?}RjG0OZ5T_P}DE{F|u?#l~ctv~!{+ny2A+dGIu3Z$? zSTZZkoTfxhvieD7SOXv~k;j|VqSq9J#o;N8ECTiwhCEhcr>F`OT4CX8ug3qZ*T>`9 zou^z^##oT?5GF{*n)fBR_<6a#{hLqJ%s5cxD`tOVLq&msIFC%@224EpA-@1$zKYKz z;xS0K0~+nhNVno*7@7xbIo`NYzxu;qR}a?T;yGqutcwwENs^3B{#6CQH&%JU3ciHF9iG*O`3e}D3hKh0r+XrR2&ojog| z)Jcf<3)%CTe}4&dUWbw5Cv`CLmjKn;6j3!InV*_qF+Z64MQXx)aKhqHy$~Tx_Dk}< zu`j1?S$qnwuC#n%DveV3GehiPaw^wQj>-mDdS)@|nM&oA+%U1*CgPv+gC!r2GF0=yhfCkB z8f(Oo`k)@oY$qY9ub4}*oEkpqDs!-u24l|UViGhGlj?;A>d9y<^``STZWe{}MNFrI zef~M`E@2yaZ8~Cg|2v|h$>gwH1O9adroCzIVP<}~lXLl#!r(Tg@>3!f2ISrhkE{e& zTQI@%X4^I6bwbjO#h~I-m)8LU=PpBrI3~Gr({SdS)m%+M&Z=I+1HCaW;Q9H@RwbLJ zW5|BiAZFDCjNoztpgEt;N$=?M3I;QjTseh~-smo4ITNBol6zkzRO!0AD zrn*KvWa=JtfI8v`-&uv_=ifmIeykztLw0@7cckxDp8b+`ZO(liEE&msL^h3dHPNT* zn>+F6by`)Mk2;ncr_VMJuSh!C4)8+iovd#|$VT9-*Fo3`U`z!El5xxw3yF@(6*2KT zpbTDIIENeuu{qK9mg<>*L1Zy5hf6T(&>OuhxHznr9_A`z#PH$Y|CyfG@Wgu)p#39b z%DD)--U4Hr2j40h*h9vux;XcJL06wSi*5uBFbzI2`#hg;2!hu#3^y~TD-_m;X^I+h zKYp1JZ096fS;1I)lbjb6h!=e%$*6P)h4?nsEH@C2yHeJyG624MxiJl?BU|W(VOXgP zvw61Jr})-huQ7o1IOo|H`u=lY@5jemx(5XLl6@fdjp3=*hyGKr2SIq=HWc3c=D&0o z!uZm)P_q{d{;5!}dN(}q$q#q&$0_CKpTPog-}GCldW~@CpjzcFka<>t%1>_cOa)!ylG#;crCz<=y_=i^l`?w~3GVUoijD zzwidDf8*+|{`T)(7_7Geo}@wn(&-Ip+ZAfsh+Li+sc@bNo3lxFh$>s+8?Q8~`xNi+ zp}NFf&7sm3Q;Yid2V5*f-V`dvN$`g;$58|W3nPhF4O|1u9&0SKsAK8E`{nOu8_Tf zER;jnaU7iq4oZ5I(Ubs&K)i#I4_XDlW>}zOQlU_4;gIPNxLX)54jkh&hb-sLc<4zO zVpgnv0s!W~b_g*Y2YAbdQTd@VczfB<&3R8S@m|m>IW2jm`PUN7kJ(^dz1=o?k{6W> z?Q%G0y5uSg?p#YBft{+AAJO^K!_MM6%9$6B8eUf(XhE$5NQpPgXW-O1V#g@Zxk*j} zdM3nmDJV<5;3U^mDfJ0H?;Id|B!tDwhF1~$5SH!({&GE`Q~s%=<`?QJ6px0Mr#{N8;+Cy}ex;^c2!I%^hm zx5??16Oa1-&L<-sNY2NDD4I4mQD?3{uJPcE`-wn3ji;wWZvp9MT+4E4D|ElJPEwk5 z)#p-6fNLGbKW^||aDoS{Qi82i1qDcU< z8v5@-SLG#_%oBMIzpanPwR~GtCkFa~_**Z37V;Vb-OWg!0f2?s9C(o!m+SiUP=?}q z;y<|SiVy}gTJKq=P7G-fy&PhIIq9vXcu$YWm~gPaHi#KS9TK<)_Ck5Ir4uqGCq_XPkDFy{p19E ztkWx^F@1B1eCtQ`x1R2+GrIeH`w_h%CE&Ji!)(z5G(LOM-5+n>?j`k!G)h-dJJ{F{ zVKsLLwJvZ8?un5n(|3ljbsBJgv2u<0Fna>13+{~C75fJfCJXRWM*_D6_16GPuaA)p zm@PCMBK+)0TMsW*_~pG2o_flr(oqaWe@V;8C@B+2>&U-%k$wFCg4u3Be^;wY7ZQy7 z;dZ1*O&M)EbNAL>1r&%=?7*63$3;TevhH41iO&vDQN#l&7q8tIIqTYcN-Hi2x$-3!-= zy*iLT694Cy5nH{4yf1kWc`t3qrc>wXHr<9J#1aVW!)+Tl8@*YdYDfKp<#7N#x?|dM zJ7P5I%Q@qT^c&aPDeVDimV?`=umQ1n)UVMHF&UgE;0#A#q-NCQz4?Ky*Aj1dEk@+M z;Q@{SkT+5na~3k?DdZW8IU;z3&b;oa2FHvLksQ1CPkDZ2T=>9)%)X0M6(bOVaYWxR z;i+@^=TAvjzDm;cMHM1{K#ONbH)S_M-l*O4^J2NLC%8PNT_5`Ep}X}F&%mD&(z%f} z78fVl?J&>>X=`tsEIKN*AN+(P=W+F3%K=iI4>0}Erj3Q@8EhU>z|l%tZeda*t7_vl zTsj@k5h}EqMOviaU#quc80ZfSi-&hie1WqMMM-D1Zx1+?341@-6P>IBNGI{sr0 zWJ#_(nL~zgmfZl3N;i#pOZRX7-b$)n$aJ<45kw)s_ARlf2juqHc&i$PM*fGV4V!mc z+MDE$s)YPUErTbRA4;rc>#mit^rnpA2XdCL444A``?Dbw+V}l8!~G?2S}5$opakRr zJ|P1;3enmFlPtdV8=U@k$k5jOB=5f3-Lg!HGB)&Jib&LIETUP8!2RQYaaGV$B0AbJ%F; zCnpYSuqRgQCjo1J4g6GtwMNUWS=AiO{20S>8ighL|A)btB`GIL63iXHtgegEgMdfItu zarwVFedT`uBHDjn2WJaLJBMFZwzfu$)<*6|E+)=aj;@SSrvDSkA!1}}`(G35JTDGw z{16ZjA`tTK5bo{}2;va6%Tddwb7*J7Ie6k>b~yi*%q~7VKGZU~xFSEbBF!R4Cd4wq z$v^X`?MuBT$TL5@ex$T2CdgOY(YVjfQcKkL(-0w4BBi)0hN&W7fg`WZ$WBYIMCezC z(Lg>)IQyEZxK`*{DN_@Lunsg6+MWe3v9VR5KjBayK+Z>-m|2)un3w~ANMT7qSwUeV zM*3mMGO^Zy{?~>7gFtfSnj0hW4={v*1_VU^|8wF0ok23Aq2rCag05$BW$tBc%LQ;} zC?MM(e~d-Lp^6l-8zTleDrr4p3u(reG0}=-JDQHcgM@hoNs*E2z(@ju?jb7;1)x=v zm5|>n_tyDdiu^^m;g&FwN;?+aTjPH|$>C%DQ{A(=dv;Cw{e3mZ4_Oay0KrA~?nDy7 zO~FB5VX3h^Wn$?P=;cie@9k*|8b$Kl>XVWvD{ZW1B{_O9?qb$tS`+jbS9$9D*vzOg z&QqF`^J7h!*gIK^=8G(~6Kt}{b)N19zj8WKY6||G3c*5`%P4hz8_ZWP6Y9X*D$565 zB2>&IU_WmZ1c$9{ab^n>~?xt~paeWs1op!yl@7yjeU6tF{`Cb%sKf_6VADug+ zhBj#H6yK&E*-th?ujlgo)fCk6H*|CJaXVrD$lRQtJkH2FB)m=A;C{Ud_T+MIP+vtPxD@mA%5e!I>X(!CN3ZHS4X{2dUcsymz#rROO)a(5p{*r)LT=~I44 zil@#@-^)i+EpVtn!(cQSAFuX>onL>5&9mWYTD>E}~v49%5R@QWd{`Q#N}-3ePm zb^3@C7Wo1}0QuC5&(>1jS_pA$!+of!Y{VnmUfT~{!%4T_cl7f)>;#{se6T;n(<}Cc z55@E$J|rKm@;y2N61+{FMYa?*$oT1g{`Ni(^oUfY!T0E3{Z=UOQG?k>{_CDpBw3{x z_3^|lae&bieRchA!&Kt|Z`HPEUCpHBxeZ6hFnOl8RBIbH`GdbNj?p+%c6I(u129(E zbRPo%ZvQm%Rx><)J`L>r}1gcRqg5h zGWr*9+PJ{6b^C!{=3fKMVSJ7d=PrzqsO=c-G%LI0jy@%>9gZprf3~~@vXpo7-!pSp z5dI`D>I2ob^`UX}_E(9`=35`;-TW-hpl2_MG;3lFA3Wwiu|d5!Qsd%-rMQ)#jQ+P( z?(6pZd+PLGY=DROe!!2!Low)H|IW4D+kFMXo~R_7?84SPcXl5W8Iz<=nhF`+@-(_yu_yE2^YB3DPl0C@!#tt2Gv`T)5^) z*DlGXaM3%G!W*)BR74qM?(>&~5R{Z!Qi#;eQDz>#>uQ%sCM?3OdA4luF14*BX@nbWjlbWy}S6 zsywTBdNcIjbwDY6hlfh?cRUt|+Ru4oBxIM^>fdhrqB86PSu_mF@EZIBDWizb@U%10 zm++l1_|20qVVSky6!USFi_OR>r;moRLXqhIT-&GtvU-4xRkoz z!vW$OUS~kAVYEj>t`+A>8?|}xnnbk=T2XyG8bj>EqwmCMot|9d_r2{)uqh0P*i?Ec zHeCjUMR}#=>Cymu8)Dc0%rl)0`4E-f^XtP*g^lGISBG1-U+`Il z%k9t3t<_V`KxeO_1VS$4pNvhnMW~uN1>9k>#|Lsi-ssKXCkXD{+pF8Jx;Ja4Wy7B^8kK_xbN7}g1KTy7U3SIZLo@N$;LLi?kS>oVD^y$ z_f&_M+rh;qudI=ETgRf}MQ{3mFM~5&EN2YX)4<#eQ!S1e)MYw=YNkTiPu^+nHsymW zw7B^a>xv6cBrDU3QatQiE@ia*7w7j$_>*wzP(_0Li7`ci&jX|y<`ZK;muGlayV!L| zT}EqdwC!Z`l*fStxgdQghS7j~U|9(n5zXciyRF#;Y2htiQPJMF+*$ZNCzrq1SS+WcE2ME{XL-OV&|ej?)RPY@mC$(%-l!y@Ko14}5BDgY}A zfJx4jVPVRIPKJh9)=vENTW;G2rIoH!1}BSDC@L_vt6J?fsH)MkTf2`QhOfT_MYSar*3*{d;58n;(wpB`33gIYnvK7H7c_(8BgSu!9j@b) z4cm5vfO$Kt=lp8VReRp^S{P9u%irAq@mdYC=QF5$=N#ocbsV0w? z!s;QT7SDCx4m+|=so*~tO6eqtknenGBhO1OfH*bA>U`6*7(mK^b)FhuH`SEqvj3rr z^A-duq4y4Qvk-vLB!x6kcLoA6FB9eTTHz}EHJ8NhLazT^W;^;B2h?@qBA3Zb?%UdN6+oW zWRkir$XH}&+BTCI($+ySl`rzK%e7B}YB^a_yf?ItoQaEbrK1+Y&|_RH{^T@82kzQY z)8o)L*ScC>B&uZ12>2{Hm$zPmJaNmLLkGG}?WGH`W8IK~;NQz#ej z(;lp7l|x@~JTunWv}-aVmY=Y2WS##?pAMNR zPB9%RH?x*;cU6wuNR|b&3g%_SF?&E_7J=3n^-SZYGPhb2p)=q8j)fmT@%a_Qzl zX3-EcrIzL9NIjbjhOZu&f>7T_3B16T0a+;Dz=&BT-|Xa>)^s*g7{5+I=BP)Tg42zX z!Q-?lK-9rI=U@uZL+Cc%R|_c}T!X7lfjP^ufPh|>EUR~}tFGeP#fMLC$ueV!lk-#lx*y=Jr)P8a_k6Pfx>FXp@(1)$?acu`LdK}Sy+*z2NdG`BV z@1_~sK_h{8*zf#)MEhK05t4KhptP2Q!^AdW*@Gm1wr!~#0~^Uv>a5kjSsK@jjZsLe zj5hz$^KOuAAZgU>tT!89e_>le#FGbxx-UjZa(2Pd&TgT)Lr)lKNyZA9yB6ER)!>>W z>g`Us>ygUi8$)CG4Ma$49~b??>hkphSkVx> zVZx7{>w-fJf z7~TSkXNc3X`!AXAz_rl$%>8l1kHSRlBG|w%;tp3naz@JI@1Q8$SKZ*RlA7kG6zyBx z+*wCfeR`K994t0$>wnW)x!1d^hEs-JKkh0mQZYqE*ugw`{;fHFaV20JO7;q_JAL!< zA{+sc6@q7wipO;Brn1qUdN{0pK>1lGUgpRK+nXY%tm2qZ@6n**GL2Tel03MS!#Lx~ z?_+-lVF%n_nNOa~tl!}W+*|vOSMWw}uNiHz0om1ydULbhtG^1pr9BV$=~mbrKM8Zb zccb8}8sh;5VrMeq=re+=_D#kt4{bBufHbN#%s)~=g?*(kofRX@Z6&c)N7{0hdMJ$q zviQeqLxf7_>oH2uFpNpHt7nP=lye(#n-7P^>Cb+rJana^v5 zKKR&65Nt-s^6*9&;Bb<0F^oF8E~e@YGX^3h<=mXE*}EDc){g0)JcCR% zutjm~!=z$7UP<3hD;Z=*_Q?6_jcCO#RxRz*?XQn?5d326Rew8&i6i+GFq-$rh(m2J zsL+JHx?y*}E7Kmciob2$YE@g~=9_KGFpvG3d91N}VpoaGuDbA%VdUkP(cOuUgk;s` zi(~B>ufZQ{v)JBu(q;|UAF~q4(H~vnq_;pCz_1-lPmIoH3bf*a{`0YROg~+w({Tkj zbmMvG4DN8DME%2HKFuc^?j3pV+m7)@8?!nz;TG)(ujDALuw?mCvT!L?ypk+lMH!lw zTkc>c>YBG1WS6pGrG->evHg`|QxXShCXYA%evz7~!WLPv6t2tl8>Q4zW#Jgu6XK)< z?bQUv;KPF1V74dD_?A8~`J3uyEc81=Ta|)v>Aikc;chG@CCta>K=$Joc+)2{4`~jm zKz!-Kb0w8P3Rpe){yZ4MD^x9lK~ROgiiFNCI4U0IbO^f#+ox1|>MV3nG#mjWg9 zB-W|oo*2y~;Ilaw-SXoZ%feO6lRDq^rhM|(R;yX>;-&UXF?FT{sR%D@_$us78naKQ zbhU~qv*gg8d1szcXRnC5KV~UsbVawZ`6PSxb2Zqq)>oPr>iG4|WcNfApl!ZTxa=t| zrBFwCns--+H{em6a4MN9THJtQQ4A&+F|(8~(S+Z8SYX0<`{80}>^DN&()NtB6EPP> z)?ujFGD&Wy5g28qOP%D(#|V3t&Qh-{QnnAvw1gsG42$iSwQEw?ceCh9O)|xGK@T2fI|5Ma0;xm#IGRyf z6=cOmR%e$gv*?b#yeomI*MKzAbe9&_Hp6z(OdQ9G3;%@(|EgdL?Wv_pSmjGtsmC4a z(l+Ia>Ig0J#s%#t4)$DmYDTYu5d|RKmaM-q5-LAuO}x?_g(>(=Y`)KE&<#lQq6oT! zVLpXMjq}VZ>rE{F>YFKA7fiFtc#M2IGk!*9KQe4mhg?Kiw(MEz#a$~kM@-t?_PG?R zo6(4kKbFNhlpx%oT1O4E`Wdw3G==#8nOr)U4WMg>qQ=O!!0)Vk&g{3VqPM;t`x~M< z%rT$4feRitBs2RN|4Sr_4))rbm2W`2eR3O;`y$0(<~?ew7@aK&${YUdF?*NfH(y=z zbmxxQJmR36Zf!v(29k6%Bg5|TV2R`6B#xqwA|#m+PcTtroDncvG<)44cB6r-h>W1z zA}lGTpes@8*GO2W^o%I)5w>kg^L=7w)bL?CUP|+$l8j=aUDywSD67g}c-=~!YA>8t z1JY`Q?tTWPhHDM+&CA6&mm;zYeA4a_K9pvS>JW>8I0d^`ss#|54M~J9^J7s}Dqb!i z2GV*K_IQU94eV}fJp7`^n7>h^;Z03iu5Lo=7Ot*LkWSv=UoAY`i*iN24wl{ORBPwx zvr?=Z!Mj(zz!|-JXu5wfdwczw>t^2SFyKFZRLZ$HA-KWX88>mzF4!CverX+SC%~L% z77*dYJQ78J9OgxfjAl|&EtZ`gquV{G6oto#4lSp2sKaQ1yD$!Oh29)y86GifSEn0$ zDI(yAME6tzYs^}BVEgA>pE|tdd$@fr~bdC zWEX|CKaNO1K(qfq_x}(7i>!x<+gQBAY|op|8PDB6<>_IUL_BDQ7_1M}Q90e1=?9P2 zKY1Z}947E@1x!{qVS>N<I!rzi4!)JqIe6XEe!S*4>S=u&4BoeP z|8Zkx>_e{In{LYEpj+3>5dXdTuHJ{@G=M;(eaX|Tu~Yo-ntTXrigp5RwEl?MI_ zF&^^(Gnl@Pdww%zU}p`vh^;bJuu&ju=xAY0j-muG+E03&oYzv4^h{z~)LW3(-dIGk zK1%Yc6tEa&hZvX0o^=<|Bfs7S`3%B1&Wo#aCQXz;p;1^qWN^}Sc*0;I_+eZGlW@FmRvtt6M{%uO; zDW0*OH!05`beuYgbr_f9$@B{IBf171t{RSqeyEzPUhF}=Px*BmrSX9hA+4y>*^YJU z%+IK!N^eLl-oTbw=>?VfSlOg2!RbTn!58sMCeO4b=PChm7vz{N)WLexk0=|e0>yQY z33DqYDz?km`re+7#RO_|H$a7>u)=Vs1EiP-3jVAy@GP)dZI}Ecdy`IXZ+jtK)-0`* z@k%u~pgxVy+g=3Fi+Ll>b(Hf#^l>7eok)-j&6g$Rj7oiEe$3=5`l$-xJgY9DIo~Qd ziua-9pxSc0Yd%*&gUzOe!P-PV(U^@h_iXDK(?~Zd3UKjzf}6Z1%MlPJ@Mg@FdeO-W zgPEgB)Zr3N%I%Vi^;#Y;u7aY%B^LD2pcvselq<+~n^;H^c+ISk)n%`iq)S_w{u!jG zrLk1Sxa})BP7%n9pz!`flF50O2BVuN9l6B48@x1ns7r7YOXZZKKo0HV?M_LoVpsy3 z#T)v&h0#phcoo$ss78d>$_7dPzWXqFMzW6GW-*FlIWIIZlwl8<{m*eubGR#F2h>rk zi+0u!q#T~_eAdtOc=F}!Xg{SZ#UB+V7cpJORWA#Wip<8Xew^ym(kVea4y^Sk0#J{F zIU$9o=I5=O=dm?!(-s0Sv*klp9g%$^C&ZtpYMs$ITgR!cl=h}%&< z0vhJ>lu5W}<9Iq~P$`--F@%bK0%18o$Uon6^jlV(3slo)+dX6x@y1R7QQo`+BGKR(IFdqN0c;zuTHR$)cxgxq6?mLq^b~`HJffXlrGVd{mC2y`o zM$R|d?FBQ3#ILkcz}wp+o5%9w{09WM=mL`zI>bs5)!oTmtSNV>fM{ha z5x4dv6K>WU&blliTpKP+swPGVmJWsM4+!E6izOgi#HD^p#09=nk>Ipp%BnY{qrz}& zl>b9^*6M6|VGv4fXaq$+Iav>WNtDmVjV8XqXymjDkd@)FKiGPN!cmh?F>ZB6YzGflZ_76T;`5^3<>3m zarxew2Tj;K6BM{UWtx~k$vimT-RsczP?@}kL zJfmqljc31ny{dM0k3cP*rH9a(vIyIhbZz7#6cUq}I4NH4I+W?s_IsXrzU%XW@)KgP zq?td4X>*?0ZN8IloA4llR{FJ$nLVqwtpx@wNMoXklzd&1_0ua&HKi#uXs+4C^@bUp zm8Q)Vi}Fs!8w1NrbzJk%3`8_+c(lvOM)Xq08D@alBDf)`l`42p0|+W369w48t;64z zgD5=LBjj?_G#;~=_4S~qjor@y-TuRtyL1%BP*cq~erQ@`2!peazf!;`KsXuZ%L7*@ zUu@z2k^XuE#PdcJY`Ozg@%}nwL$t8|g+Qa%Z zj*)=sI;-AcUdtc3OAps=%|Uo_XbZLGE9+iuA>Uz^MR)|r(g6oKE0 zdi}OMFN<}fv8bfG!gaZ{{I8|CyW01%ULQ=x$T#U$TR))ukfi7+ND~xHg&$a3U-b$z zuJGa(Sut@l@30j-)~|TAGGyp6dt;9+HUx^5f2=sMqEvqH$Lt^7i1#+9;S~G< zH`awE$jUr{*jWR@Jz*cmdi2Jr(x!a;0l{0){T@1S3f_*eeeIo9)xWjXxMcmcPr#|u ztM*{Z$Ibzcd`WST6Lef_VUAXV>+JUXrenmMQ9_9~3UFQf zbaVkn-zcWMl^bvN6BLx;n0B*$){@v@Cmdy;{X>r%ph(Aivs)I$HI~Ldl9nTa%|Em3 zm)x+clOeV<%;t^EdPZLSPxr4I_DzFpZU_qCq%CgR1wY4vhv#8va`_dJS0CRE;MlFQ zz^=|%`EcQ*HO9isAE196`XjvjnE}sUxdh}q4c`OT=>Yl89@gp} znH4n4xDes`RZ_UF;8l{~blBU=RJq~RPYPGf=CWl~T%5tdAJeT+%>IP*^U=p`=O=Cd zu0eID+yo+|qWSs)0X(5AH~76QJsNnbmyGJKRaty4Ue5!5ASyP`y(f(Bcjn2>xq9_uuN9Sg_0V|y zAymM4lJA8rJpfc2LMmk@8{3DjUhw3PwD!3UF38^_b02YK^LLyVJi`}`JTCWk3S&Qe z5f9>9V?GB>_GendK7%gKYFDLi3gT^iI!c@dJfS<-Ij?2x=bG&e2^=1%4Oo?nP*IKNm!1M=hD>3W03Y1(#E=M(4<$0gvN%DLVFm z&c!A#|x|NjQi^7GJ2nZhNX6+!}Qup&5menv)0Za(dHBEj=1(738ChF zVOjV0_)Q%W4tZQ)T9Q0kqap}JsO++(Z} zCO6S5WLez)N7TY1y#&%J$0F=F2@j*^%z5+Gc^rU@j_(gEj{^c|ZmrR4+j)jDVR;K_ zRBJ5mt?2l5XHuHZ7>c%FwpfhT@$xsiO|)|X-^sAw&j$z6Ug`bu;!)m#)Ot#JyFe$W zo)lpCYiYl&0ys8o38Vq*=Q7~Ui5p~fm=7lW>n~fN?cioG}&KFO)Pt2iX;UW+mZs&5m5ouuD#E7dBcfX$o#G$G~ zs!R~{SrZ{J%`cF=V4hqf+H$l9I1ZdAr;R$H+z{(}l3;m54bjiw2RbBf-|GqqI%ObH zn{}DrE@NA&_bk_;LdaNk-CDu^1)%s>BR#FhW>gh3smPp|N>!TpRN8eQE!=8#XIWP5 zlfLNa3@Ox82hHFF0hk;Tqfexx4Uk&Hm;w@Y9;<9%Td~y{N8_@jr9fk|W13Ob*5xwF zwk~%Kx&2-?p?u|!ek*QS>%x#XX%&@qS@*Uo6_V_Wpm!+F&rH4XM~&G2BiLu`?-5J! z!hug;z8dq6L$y)b()Y?8pNUq`T%8%HMQ5w3)Sc&3ejeLo$oIq2x5GrZ;!w3|DU|OB zemIkFv?kocYo{Fvm%-CXTMgYinyj}i?>)I|tu{$Hu{3-8eNbC;z73f*99)U?W}t+57{Xk=W)uha_Xr#QjKz6TW(p!*E?e+5uexTp%!G|E|>mmv>cA4&R0OtYljA*j1mL5hgfHE3b{4HOcEZ zchka7r~mdV&#Cc7!d;=Qd^~)`XQ7T)w82RMzzpw>I^)s{I33>kQR7O!E=JyMFm7AQDt*0DCoLYs6yEg?y7)o(-)UpjEBysRh#(+^`2RC)%+Arl+11Qh z)xlBL%-!t&Vaip1mo8M6u)p$-kLMoe(}dvjA<@v*i+=rztAkS$su0d1NhvkKnwNno zk&;t}c%C0S)+zPr-!!$?F0}_=#4x+xbafHnIN3Zt-e!Duy*WE>{_=3n4x5*JI=NZN z^_gxv@!k3I3E+(Xdfp2LF)xqQryJI@fAm%g>loh~+S31#m%c}!wSCd&N8sBR%Q(KQ z$KpE{&A)mvB(QnY2VVd1Tk$Met7mhKaUwiqf50B^wgAK6?=CVU#@=sTellpJ4kxi( zfEm|upT^;ohMA|TJ3;cE4S{bLUi<+r0Uz;VZpt2Y{&VBE%dt3r_t6mROEc!oJ}(O& zAnSP{47ak7FjHFb(?$x`*O88t;2Gzog?()u<_niiU@%Q~Qj!1_*& zzP4*#5VpO}a(Ac6-8~{c{Itp~{T9j=PEKY_$v*1_r+uAqTLT)+Kn||4v)}^iL@{d- zmiw$M%@@VoQqJ@t26^FH)nyv8sF8;jo4XX7{aAPKyB++pt!8s)S7DdQRs9eygpS)M zaLFofk_On$mJ>O1DQ%D|Nm0lODbJB6<$3}!6ZGv3l@l?k+wLPyw`JEvQRuX1 zGS4JE7@L~4r9?8;70;Q}avGYCrctoW>g?c3ftN-7R+Pof@}q6_>TFhS%AiiPwfB;Z z(Jvz$Y#7+~;ta`>LsCmWQ>lO+%KOFJwX;ZbO1V9(w9=)wq^&|SMV$6ZSfoViv(G$* znbVyLN=p*k$_W zJ9|5DqDplF+Vc9j@NpGrHnDV(hGN52XGwXxqX3aU6Y^>X zTJm;0mpMmY06u0ATzU_-J`+NzatqXD=|L|&=rY5#p%|-^vAf;5)S26uBjcvVZLW=* zMU^I7sa}ALI}co&`i~$Jb<*&HsuHFyqauh3cnx@Oq*Msc0xxm3C}}5G z0}(v*kzX)zfpG%Xl(|Ly5e^Bo++}Fo4zc&fse^PmZ0XZ>H_iQv?Q=huO;LfonS4VY zUCSJ_7}vUJa`(~(Qs$H)_u0GQ4h2(76i_N*UQMDaffEw@3ZxiMPpT;ua*?VhPSUm5 z6o~9$u-wC6>>)W@3608ko96N-LrLzSk2R9drpD?vA~ZTviW00L1(8jLB0%3HX&Ym5 z^|7^#$RdPF;hGvxmM*2vK{RNb-!oL$`DGOPgAQ9SIkO*KxB*Oe08kaBMdOSYRDG62 ziI&KT*>6;&X-z`e(6d|XdYLGZ64|qNgD_EJ>nqV{V?rW8N~l8d`Ad%CGcq8v^~Va0 zEUs2jMk_35wkKmvsdcC&O-?p)GN-`?j)UlV=2K$d0)m~*d z{y&VIsmf+4%G|PMRHfy*<90OhG#<3I1iqPXJFirRQm1!{?qP4d6b4qXuD~A54-b1QZ<5XJ9s>zhBM(UN|PznhI zB4xEA=CL>-*03*m9&s)~bSt`5=(B7kC>k>}VxtG=vpP19uT!{dCg|1oPdiND^pjeP z>H|iY&YDnT`^S+XI^?R^4p8H|C8!YkMh#Qr><#zMO_gS}$iec?TKML->++lY%no&_ z%dPN>oZFpNfBaU)iIdq6o*GW#Twboi<#6zJKI4PsAi|c3`KIKj%D8Gpvu3)QH;dSE z*;6(n4Va#xBw#dfJc(rz!1>E!E#T<$&S3I%8VOA+w>pXu84wnYSFw3xLv2R+cJSGe zv5Q~Yj8FZ7>qQDjX;Ck^j3`A%dFx=HAY@(}JWBiggpF1R3BQr3mhmYVyZniX`_m<- zQ7A{0cBXej%`1KWj%T;tB<}ql>y)A*%yv%4i}|ZsnO}8hGKeo3UZu?LD*L_~ikxcZ zukGYIbeN>dpYp;E%IB~xZ%^1QVjvlSg+lW zpSBYL+H`uYdkC|zH0TNHY?!1`PtJvz_yv5MzJ8;ApWBGj1c3auq^?$M8bE^5}Ru@rtT43b=CpOBFqBI~+9 z$x!@dra1H09UOXJo}ls5XSY#hOk?`LK#pt~FKv)F_NThUgpwPCt1*}85U4A4 zc*+r4s;gAhfA8h@l}tZ)qlz9eGv453|9w|^w`^!hl|J6;LH}CQ+<1A?$TTDK#MCvf zd8y|5m059oOq+C-S-RhydEh%wIxTbk8}8$sJ?FFrHXs$I)#~<9tXt|fY~1*xE&RJC zE!zqmBN^7CdhQ_Yx_up9@bvG=9`KjtY8)u{{%Xk!N}aPjC`X^0q<+i9bp0XW)EPEg za}arf4b3^L$!QF=aoE3U$bnx>4vcXSgH&b(qO(xoRSF}ekVSB zwsp+flzh(v3>J|ZanA$O`8#tRriy8;yJ2lJVY0Wi=@a8s5xz>0RKhTq1nZ?5`+28NwU*Rx!M)daZ!f~bB zwI$cUGDGB_cDULm;53>BqmUO(yGiis${V&RE114Hv?zEB8LzC#7Tm(PH~0^amFOwQ44LDgC?O7%-HxE8_aWM zpwVjP7$7r?Oz0l9ywt7Qpq$lMz|$_WR!W#_DKO8d-CT-R3z%!zAfLa8fd?Lih}TRC z(Hl)rgeF%Dcbo2ub1ck+a|;dtJ;f5#_u1L-;T%VH{EdzQ;RwM*yEoC_k;pf899eO% zv7$awQ)Fov$_V>(|7?w9o6t;QXRm(Upk6&3zKiDi|0)Xzf%?ec)bFMHhK!%ODm^Mvf zaUHMvi`&P$_tZt6vJw!;X^u#b-jly%4iLNicBID!h)bd;&QQZV+Dh1|kc`;!|Saol2JcZ={7kR1qg@*7->_@@Q>v)$w~ z%w!!@I9Zh+qr3!6%d(_8W0cKZ$a-rIUarwd58D!|>n?$a2mPxkE!k_%HKg%jr7nUoPl2B6(hpDg~ zrm$u#(@;1x`Yb)&o4bqb>Cv~)Ncin6LJ;O5`Kre5Sb0aKfvQ-2u2^^;ZT%Sn)()H1 zGtb&bO?|M?x^?^p%$Z-|KCXmO^NB-SK9Ab6gsD$qNchml--v}XP#etHiI&o(a5n)u zxDSq*q0hvvPjz3%MA-PBDlLYbJ})IrVxqJLQ{p`Z=Zvwr>nN5slmaF26-F$V0`Dr2 z7t}ypR8cW1elC}3iF5m+xL-`#{h9a|^Vf}W#bdR}MNfFxZ9SjNc*Sx`n&ZnhpE$3A z9!wRlmn5y)hH2!2RMiWa*DPr_^A#gchv;FVh0+{lsvPGIuaYfE5 zifJ}CC%(k1kokDSvA6(`$iTrMq}{@w9zZ%pNlEoT89q0j*B6`IxrBl}e$a|T2MF_; zDg{MiTCggSQE>>%Zkt0AaM{$F)V9p0e%BbH*Dd0se>4S;{OsE{ZFCs3O8b9!V8x7z zy5lxq!i6ohKW?Z4a(Qbe=#L0jyB83vC5k*3(0L0R@sV>!F$TsRto)oVmGv)}ct~d& z?~C3*2j(lKo|5+>QPIkm?ie%OI! z+#?68C)48`h-}>rKIoTHf27kS;&eB*`3(92t^kDWkh!3)i0`?SA6XN@LbK`PoqwX# zZ~&V(UI-g17D~xzZW4&{?SUD7!-^T`(jMCh{5u#van^jC+ao1W#G5mG8>znzn!-(_ z^R0IU2(UE!(ZMkdv05W!pfD2H9kHXKoL4z+f5u0Ex|o=c#*rFPed71m;PWJXt4%D> zjWZ9Pj%-BUjh0QHTk)m8u6lM?i)drg(ViZSI^J_?CT{&Hus>yLR|`sMM15BhN6pa* zLFUCGB~fWfzI|cX62tVnu&VLWsLyG%pc@sE7&1~pGui}%CO5H&?2ns3*;wZNj z?^V#eVoj4sesPW_vypTJqHhMi-PrFhQ{521mP>m*uxf^i#i#?*Bxvs-%i~R8X9`0m z27W7vn4vpnPam|RzSb5m_YHxqTeapX^vFx~!gh4>**V6j;doIUk zhCkl#nfqBX;NJ`&8sx{p44k!-#P9$djiY)W=}U7EAU}G98(RsIlqqDgjF1`f1X<$` zyovE~kfsckWdGxUG7%}cyB{S8?iq*yerRD#f*`GlZl~;MhU)J<=5MjW0ZVSe9e;kW z+LIro!alU{W*A{qTRDh-Na{d(@kc-n?EXN(T zyUgx1j@XE8(`2nKt;mf!SMrozgblyxfV#AJfd$`W-pZh^i#5M=;fkE|6v&m%w0;q# z_2{Zi+St-YX^-QVdB{CLfY#qHNLxV}=E}>k{g6D5CAjst(3Zh6U!B6!FpMNUNdDr+ z%Rv=FHYzpneI#^jbSZAMi=j9bm8tC*x63YUrv~z;F&D~jvXq}ThD4nfg>)Uw{&a?g z)rs~zAf!Lt(7+&#;#IdMvM$EDx+)%o-mLwAa!`%WHBeZ0D^h_`(q0BUrjWuYYDjly z6R#C|FP@G@w)e$Kw-zG6j69Z^tYJdNUdLuToe02Q9a%OuS|HlHi5`Zz2u!Oy3{5#* zfRXxMxL8i0+JQ@^l?-P#y+t{%og}!14G70Mp}1F#a3U3BZ#R>imy67}94lsK@al43 zD>^f|QL2#bSGFYed@01xP>dFV7t7|Nh@UZAB-?8W`-O>1ue<+lgOqDFzlBrA&9lsFr`^RxX?;eMpK*{ju*dt&yO@UI%mLjRBnglO7eL)=g^EDG)0nRp3~65Qv9^%+m$hSgD5 z5gmGOWjIiv5$HwCr>Hdk;V_<|aYuZubcc-L89KB8=|QF%b|K%Pup9+`k@Rdj?7A=I zG{YnaU7g}cW?YSYMw1T!6G^%V?tgqw$XA#C@B6OM#Sf2g}f#hWl(6t{q^R zKut-8mHf$%d2eg|NR9(`2pE&-APQr$|gX=9(pKb7Vpu8!*Q1xV^N(ER&dadi($z@A}4gJiZvZ z8oG^Qug18%+(oU)!t||WkX%RE;wom@ILcd`a`0h`>h!%M8^-0{(y8WO z@3qvSGvW%_f`^#H%~dSTAYPge?2|?|gE9u}4j4--b#f2>fjF_#92{oI-to-pzjJ4p zFLxhcI1X&e`u_RyN}KY`^{SuCyXGT~I5H9lF?!F&3m`mj2ZbB%lTk1Q%DhknY#{B4 z1N&+5ditJhxCTmY=r%e5tBm4z*d8DFg^RGV$U7r-xUrT&()4nc67WHu8O_&+*&^^e zy++fJmhbG1`xAT({(Qe`cPsg5a}iH&z&7W$TEi(RC6F6g3vfPSw+V#F4_*+SnJJJ8 zwG4IfZ|6S|C052*YkuZfT~D4B%6b|4{KM;3RVc&ZBP?`pt#=}dzT#AT@CU7=(YOY4 zqfmsOh_!IAXH+_O^jp8yPS{MmtqD4ScI0!okXlcA)$0JUYwfO+da&H)zKnRmVKczs zO^+A<2n7f03^jyh9dX%!Gq;8}x1N(D(P%ByJvDwL5`JtgBp}F1_ckTih7J1>^s1P9 zjbWiSEero+BDH}?5M#qPHgCTI9wwcNcL!zOXrRh;#*tz%XI@)iDn}x z-*D6eowp5dF(r&*3KytvLjAJ$PfVy2$Z@i(~%93q_<^Ec4_m8`9hoT?OFQU3dBT2w1E8mmZvkYA>w zGx^LQYEw|e|5`j|ZC2)QT>Uz*K;RB~^@ne?E{yW?AKU}0<5(_J*sP0zwEtW76+!EC zpZ+aG5B`>YG5rs+um1oGj?QM^bMpR6g8!d*VM=2y0CffZvxYy()(c_PP>4%DhIlaT zC<04bhe*)`oY@JX4`Mv2B$#hh)Km&TwwHpK_*e5<_O;x47@M9YZc-9jFf1aQ-ssIr z_iT9QWAT^N#?3Z1{b&+$&wQhIt4n%=-wDuXddcAPwGSQSc~AQ%?QN zqPSg45LDrptp+J>yvh+&PnN&~VTRnKfdywS;+8zveJvouK3X?U?+VVX8z1FNZu$Ux z(yO@ClQO=38e8q?9V0A#C}^GB?>fQMNiK=`H9NBU5=KYo3PI<8$qirvHj9o3zox(W z$nkNdaaxff$o#f=%q+|s(!6thMJDT38;4v%<8EM6*sN(y^cG1h_`Io-8O=f-sp*;*?)Q+kd2>j(J4Eut$pI+J9sS0k*L@d&oT-Q;#qyEl*bxw;vDtlNZ6_>Fc0CA-y!D; zxXqcarV?ZTxpS0YFz-nY#1YpVTBg5wtq;qcL_e5ibg$a{bm4bFMcVoZV8SZ#4K0BEiV|y-9bvbS>QEn55 z3CaAxX{>pJB_3{bMT3K z87VE6SM?5Y!AqjUrh_1il*nTGWTvyF~7dxuqX&J~dnw__qS0&xE3@s=GZ zyfpM~p-zwhuSstD`xf=xSm|DP3^MWzKR2mc-1@&8xu^93*~>8vbd~q8fq*J zPV#7hY>ud%by$j9qkTy zfVqzAt=pJCuLy|Wy0y1VtKQk7-pmb*sjG;XIvO`}oE*KBE`C=l)OU9osgqugFS*CN zQ9s^&t%`jQSa_!mZKP_6oE@)*VAz@`jQL{xkd2~`6Y?@x*5u@dZg;v~{6dvqwB#JB7pfH9&>GZxcY zyOy5VSQb{jNVUU1rEJGpME)Le_0D7_>HUud=WkdCqeuXiGea%qD5GQG4j|g};`R0n zu3FJmr(As8A0#;U63tA8SEuMw63J{LP>MX3xcawg9172{Zyna_fb^Vox>DOu>*m;B zKdmWJSIRO~^<}z$E7wpTiJGOh=nVq3Qh3plitkA|)w-qfQ&`U?jE@p#=oMbw%%z3A zIjj1)pG_c2m>m?J*|MBM67m*Vvi7`&Jq$u7wVIBZ)k#)8-;KY=+jLIRK-gi}SLr0vNCHu*_Ii3~s z$X}l%_9T8^CKq;uS~yo+55}XD0$u|bekDgkukd&_W%RvuqG3D-BlBn(moiKdps5WA1miwbGxl8*X5#!dcl(M={S_cVfm=*)eMUuVDaEt>Qni6LVU8D zkM&E;bJFR0e9`tat}(PR!2w4`M%=eZ%+_)2J_F}J7K1}?S$nFpIZAqodARD-QkiuX z-u}ZWmrlW*HufOSgbL)RS@A~z{X_uQOwag1t;cJ+0X4c~m!y!Ne(!;#Cm2V9HrQW= z-uvZkzY{P&Xb_W_UMn3&MK_lgq3BQ9u5)+^iyFZ7gF1S=MnX>(LWz~YIIaq zfewh}!VG;8?m^6FDHNn(Pc<37|37b`|ENrA`_v7SL4bgWe8W1H|J~RAhnKvL6L@$fJRq3VhEPy;5OKyMFS#5%ls4s$qKpKJN0~HCQWBZ0R54g2 zziWq6!c!Yo6-mk*E6)kpowsGe*`2wwtyDNRREin`*T2`>KF^yC8kIX={vWu36P6dF z#%ci2N^YF3<+?E5`48Oze#8r$?%6qfM*s2yT5ds#*jhJV(%2+6S$sq*S?fP+Z0wF< zzP+J#JT|%z%_rM6)2x3k5W3K35JeUcS7g6MAA&t!2WQ;||KjpTI3Ya-#EqJ%c{G^u zDY0?YR*nkxGlYA=!^*QLwU3%xYG3&iwx;JW5Zpr zpJ}+uwy5db+d9z}EeSO7;D+_vi{)2wG|7i_1igllj*uDKZ=ks`qF_)L^5&ZHJjwY4 zw?5xD6AF|~Kvd=`xF>TKs7FVO4c{e8()8SS`hL-BIiTHYRXA^?q_SA4}wk`(C8&Zn*TjR?CH{ zbfZVBH0a4|M<`0$dkLf$P1Q&Ol#zV9F-_=ow2{i0he$+A-jSR0yenzbn ztqEkhP+N1hYR3M1vr+zHPsYi)G_9Ah7GI+uad|bKw^}fv91l?5C^7BO=c5o4r_jCc z_da~j{VlJ%TGyJ_XpFh^A~XO6ep<$BHM)O4mADCnkJbzMMDJ4L9IlOzmv ztjO$0fXUW~VB62}C-fcXbdcgp;dPNYXK{+j_fXvpZ@ZwDm`&9G)MytmW-ist5RbgQ z8bNkc$2w_LaKq?PPN2cUH@9@D>MHf(T%^I{;LMmZiW$h?cNHdwYmLFath;E;1^DOG z_%3}I=AKO`xD#VdY5YJqGT?B~AH8N6Vt)>%%oUsN1SN{qOY}7U^B=UbDR}KJ-XW`O z?tQ+ADpyoN|B90mF?B@(nwn%3O=rrW0{Pt$MCq9zX&z^?ufv{Q=*_NP=*^yAsK)KD z{!FrK>mWi3Px{Drsyab=NA;o7a=3GW3QPSfIS&Y7=dB_c(qe`)m_|hITxi6i z)PgETwBtQ-D=_a?DMNal(yk6DBs>3*{(FY)$78M)1qT7S`tF8s|1WcngT1Sjy_=D% zm4m&so1No-rk)(tDHT+$pI_{grm_(zT0ucOFObZ{U|DXUO0We=F>1R7`)6kNFrsqi z$`3|ucog>h1R}%$0>1*!q_^!lBEO2fCR~8=R+t}+1|Bbytsz-lG8VgI zRKhk)s8b^`HXt0Ov`#RNRT2j)nl%27YuY&I?n~?p;c=o+#IiPT^7fkYlA}zeoHug#%kk`b}h`V?TK-4Nluqga4uB~*GNB~^B9Kw^nY0|a!Yjt!aiN7 zazOHEgH{7(0;GZq@c+Iu1GHm|Jicue-M)L3od3I>2{5xab2f5ya8_|Oa{Vtzpfn*3 z&Wy%?Ho)U%YqRuLp*n)}S}fkU2LT zB3pmk_o@-VuC=zhYt3dn-ONI+=lDbPzov!F8%~Uh{G7UHdtC6>n@EEurUuD zSu~ASUt186zkH#>4#WH+n|j6+^N)+m3#GCSA^wuG-enCzh)XOCkyUfA>yaRz99JS4 zE*1NbRp>lRZX>4%ID8S(a1;qjw+(1mpq*6ol%3^)LT3sSf%<>#DBY-)=5kUpxO2*Fy*OK~S!O zrI3(QR8)e1{H_+E8L6Q_)CZDxm02-%S!b0OW!O(dGnZJc%lMsjJs%c7-%bI2p06Q= z=T6=O1h-tKfjkz|z)bF|`^BBFO*jzIDI-u#qV^0DG!TmRH=~+U^QddkgaUZbG5=K> zZ-`l`d_@{=D^S@}t0;ZYQS>hGpNwycvIfp?O8K89tBfEy;+W1*5QCp2IR(&JB&0+v z;uu4w(7!vd#O8wkVd02`h9|Mo5rsvAgUxE-Sw`UrzL8Q52&1_$9T8eZiGuySq-$b}>*WJ`C_leL%jyNq%7z6>8iIyWB(i1#MVw0#RK(1p%lpbf zndMS``bksQOrkBoW*{4CL}ec0$xqWcn3_MUI95@Ugt%fBSo4c>D!Q5o(ILx# z8)s_TM;%ZddpgTUpi)L9Q>~1FwkiQdG;^hQtxC9ZjMX82he16_)FlDc4uQf?c~a9_ zhd?=}6U9@)L!ivA7aGqF8YaXp1P!-_u4KNNzbgaDtudHezRYM_3Ql(na00e72)LAD zhPdQT{!1g#g`ImvakDAKi$3(RRSyvC%Wvcl{);oo1(lmqg)^JV6`s3AIdX%_m6!Ws zv@ICOOTEVcw`Et)E6Wi(>K#vgUHtN1R`-OqE|ed8Xj{;kT|V?KcQ*r4MVeHLilq36 zvAu~PRCPzhtwa4K%4Q^y&=6bCCp%55y03(jHS%%Fca6C*^usxq=vGRFPh68vZkko~ z-e7UFLEsKZom)!%ECND+s^_;q6zD1Sv2mzEeQ)NhPkf>#?LS4SPx*!Dyj^tKLegk6GDXP-DoB3P5cs0&E1a||b3UkX z=xZ0{0Ct=Bvds8N+Wla1>O=D?+KWZ%&o-n0`Xcgi2{^&*c~Se2__in8dK-vu`z*rw zBsp<7H)G{N8D$@)qT zlqi+bgKBmvYl!JAa_CB4ip#w9fp>kxs&f{9yn6kB?l$vG_9C6F44OfVdXe26DD-FFy6 zcJk9%B9S!<$Sf)EMb+ew^{cG}PbMRllqeqP3pN6M2*I7`jQ*2rEG5}V$W%}TW1mV2 z#jT!-DEdg1h9$N)iHj6a5O_vAAn{~hGt?j}HP2m;~hL;)|f`bMD5 zxR;YeIbHm~U50{u=uWGgdJ<|$4E(5;<+%9acSx~uk0hwbO&dE~kCu~{#sN*r>tNh| z=k`K5Q*jAXIWsz<3^O@6 zNp4(*`kE!L6R6ns9qETv#3#}Pf7Q_1vm|b_xV)-$Wfr^R_G>6lpn#6|5>XwI5N~|0 zhf|B@$qL&dpVcLuv6epg#E!h^T7Z0B-}~vnPMK{vRKHb8l+t!TOvbJ z?(EUEn0n!Dh5P{JA*2lFXlg<>5QIN)*4F)rPD@8mPkY|rC=?;cbPi>)DI6)BA&4+> zmDN^d6;|JGDylOVTU)0=zFP0k&+iiNhcYf1%gU+|W~Q;4@1B?gk2RD;G=FdXS(7vFJEk`h8X7Vtm z{&j##xnIU?CbdC|9~>Va#TSO`Ae@>~q8-VPJ(ql(m&nrhVenD+v{Ju@zN&Om3wBJU z9L7IWd>k6<@YHx(e{S~gZ}LTb)v5VfUB~!FeSIr2vf0^tJo$(LcRRSVYr*#RO52zcTW`mM&#yUe3HA_f6JsWg)ZnUzr=3LIE4-sFUZ`V91{vOg(!D#Qx`Yd zMp1leFhC9;VPK@mPZ4S)=t#mEv>zxZ8E|w_F$VAr`5OrV@p(Znuw|6;I53VICGbX4<)uY-17uEtJMT62%oCJ*fWgt!T(j^c@wZ={?7M#5VDQuceB z1s|Cyw|nxi#jouFgsqP>Ia$&Frs=82azeeRuKYY^rSB;XMZH``5c6N2-Qx(Q?{2Q~ zYTLeYat^{(J~ntq2!-w(uJ8hghI-D3+u~NLyXSb+TVA~{H1!^A=&c#(X`Q?u&!_L& zuQlA`R+@S`T{^GldUP72?%LDRwMWi*^lkAgnSDVaqXvXt&A3|JAZI!fi|a;Dbk$wj zZnV;WnV+PisZ93hGOO6SEVA0Gy^4>*cr8%fTXEJi5mHv+zotwWo3%lPX8ogn8^fYR zH^Gz7_|Tp5QD_CCnK54qXHKQ_x=Yi#Ei{iD1N_%o_Y0J#eBwvAb|Q0(I3F^2)%anv zh~nE}6h;~QCB~!NegSli_9RSpni{=V?RXdiE+1i0Z9|%gr%KS!rs%OWfa&pKHD!9b z8fy4)hbwff8e&R(HHAc6snl%+L)*+&Qz||0+AlVOa zZD=HuV`>=;B5+JNr0dgT_vak6Z}pO9k4|0GL$$A!e_=_Aqe{T}?Gq25VhDLA*NN1dR=@9v)qF z`5&pUr!0vTS)paT?=35icOQil*2ovsM{e?!p-t#VOYLC{Vw?S&b+4hLS|;#H%NUc> zBTKZ8?(@T#cmjUbm5r{@9rv$$*0C|5wm+PnOq zj?Fch@zm#KTQ^GPM7&in^$g0HjdteNH%J!qNa58*lCLE*XHjSuaaXKLCDT_FX{L{k zgBX0a-g)=q{+3W%Qe}@}4lG3i8U+$H_fcb*{0#5Td7Pc5idRhqa6`Iq(p9XZ2YYhi zjIDPSbk^iEqbyS_zpO{tBw;(M0w}}-Rs?v9wqV!Y-N6sRHfnGiOCiNs=m|{V3pkJ=Cszvqdk9M{X9V=$-=FF1Q2l3(PThuxa-myP^FXG97h!01HALE}_o*E-1 zu3?1ts~>`Z;I^hS?O}j5X1W!|hq=GxNtIn6DJIOYX4}9J|G6Zz1U==g;0=GYPt~G7eb+xfvgJBXY{i4o0aET1U-9SB_q~`t>OFZv=jQHu3|TVh~xGHl8~>qf|1v z+LIch_gFWVEW~-k#W`FA_#`AdyOo3HMU zie|whV!c^K0xhiJ`$+f-YefJZz*=n&h7`0a>OL$=Ji@Zb=$vbCV{BI<12OT)Jy@@Q z?sE--zL6RJbnO^KV6r;8AW_?(8$wG`rjlz*GBa4Lb3p>_$Eg4he@mqch*F`NI*QdB z4O$?9i6YzTW4WfPnqDOS!lT3wp=ym<3p$;^xSsaTZX;mMQ1}%0W|V1FO*8Cfu`lR6 zsJOkI9J$g&pFUo7d1VDg3O&hH*sqUs?`oOZ2h+=$aS`ywM@%}tV@v;B4XawMeCbM#rfm!ghmo33nxCo#@TsZ`uA~W@)y#GN4*)el%D;#dbc{+0POqwII0&0wLK~CFDNfYT9IT3R5?>I# z>?K}QBBbXLQCUs7U1CC%78phwpMs2tPzy>jvh8(Ch-Oz9b$~W6#+BEVS5%Rd!SNeNhJzo4L!`X4>bS5La?#|tdXf?2 zu>OUVP!nG2$O~2B#09XO+6qUC`8On%bB(LtP%+ z5xcI%`ZFHmmQ>X?);o%g5l6JU71XLp&FOBvx=N=SZK;u9in9X_tMwp`)G}^rEouwe z&_V&Gduu?>ZdWmL+Flb&YJoI+|czvY5^RL5sPTg0(Q701?M_4{N|x?6MYI83oP8*xiJqb~T3qV>Opmm8^Fam86GD&II zX>r)ILw3Tx7_EYi?IE;*wt?)Iy6d%?pN!3No3{c{lbURogoUlnUWa!?2(~=1rNt=H zgp`l>;MRbv+oel|Ctv+wZ>fF35*;0Hjsv=j9`6E46hn@-sdNsdWre+*I+S)#nH=maI z)!O5cMYQKqO|Du(s|T8L)s;F+M0*BmaD%KEG;{57Eg>D+#8FH*>_7=sxpj5b%cCW6NXuKo z?Qe`%w%n8?`f1q{K({O^ew@}y?VZ0kv~UabwFlBZ#)4h+rN#bY-7bbv-=mmnFHEb# zbb!W}Xj>Rp8V=1_u7&lO}H#-j$-n;PWO_SrJqZYG^C>TO0t zEbDD#5w6$U_mSKN)VT8-8>kMmK6;AQVlORrT%haI$4h2-nIj*QJUR0t5u4c~+V;pl zeD1j1vT+mX^r}=SU4*hMR|&f=T0h(M)(_|1i(h}#um<r1h#jv*b;+e;1* zrvY7rl=y;3IDDK}iC?yl1#ZD!DAG1Xa(u(0@}(X`+dpgCcZd|UiAgtYq&g>rTG$mw zs2#&d*w@5sLxs=DD`>YX9kF^_3)wxfQ}>u9{aW_hN=9$R+Um#eQqVAb|4SQx*VfRk zNVz9wdON1Zo*fs{Zo>k53m{QTT(67{=$MjlW4)_yBaUJ*$sE^minhH=7gf>5Z(u=9 zair8a6O60#YU_BcBNzL##Ia7}E5q{}7cLA(EuD79Smzs@N3Of_x0CD>89HTeckiIZ zL0o)zab3gmQdh0SFD_rEtIV~JmPpY?#g(G~Y`*DURj>2q6AAN|Rbk7=HdaMQKMdW| zo-PSHn_LMvD)ruB2~^eR*#lFlH~XUV1uFjc7V!)+ zHe>oPzCPSQ`J-wwZx2bma|?NTbF{)!XM7CMZFY9n6)jg%CHq>w>b-3}x8|bmA3ki) zw<`5Upk-H4srRq zDzsLMBbEB-v|681i-`6tv^i-yI+Hc4ot6p)ws|ru>um|uS?{K|H0dx^?`oq27*$d2 zT>1&vTTA2h1(Tqs?}Mmzi!EYR2K3$i5jp1M0gDx|Ne1-V%>^rq&0sSv`4BtQlH26N z7XOq*EcuA>Pm7(v(8lc>>sSGb;)Ug;*Ba^g*R}60`6z3oHhWoYDO+Z-!TXKhd!eZlCUi(E`ZLXQ}NlQM(hgkAy`3xc<|7EdU zHrA5QVvpE`tjc1SuuDz(oF$)^FIe(L`H}${9oK{wA4j$Qo9Oehe8pm8*r5jW>%hec zOTJ2Iy@sTeugf|Af#1km>V|Ka4@{NC*@)JvbDnGO2=hWaAd@FKK>(z}Vzm#8Dd?c2ZUsI#s z$ZswAA1d%2)jg5W{GMH7vBN3!1Dj^aA1U=G0)Hmw7jk|j=QsJgCI8@CE%~SX%aVV~ zW=jEPX3t})GBBhVg*b%-g``rJGT9xL^6??1A4T-ab~Gx93Rz#@J>PE zt5lwE@ieY1o<&pYPIjrK(r8rvMPo6T^7W+DVLV_!@7>*6u-HB9UW;vE*IMiktbqNF z^|7DW&lWq3*mWvWo&Aa+@5B3Asuy9<8xi6?ac=S6hyf3xqxz`678_4<^g}|ZAC9N$ zk09?xS^VUr@Kj6fM^$x4{MaY#Q%em{`&+y-rFP*Vi+zQ0>^t_orP9?vi%ZO>GE}Ak zDZA*0rLu^cB}7e4lIes-DJ!#h9959b3k~SG>w_Fi4I-MQ^MRHctdN9*)KH5}rVbFZ z@H`@V4nM$B!_;s~9iZYZbs$@5svJv=U@I+k5YkB<%x0oU-V?=PsgcO^$cu+qY7})~ zG&|LRAy~yAr;0(bDh7GwZ>z1ku5F)HSZWM0cLJSP462VFSeWWiOC6?iEj3n+vs9kS zx72tw!BP_youvEA8+zL9b2454Lpp+21uRKft(JKa=;G-6XMb_xlU zmsOF)k5R>znyQdKB}A!Ga>~?nQ_Zl{Om#TUDmBaE@9=jmzJjkrV{(s|id4mHQ_Zo| z5mfn+e3_+=QgbaePkw8_@V(d!r5aJa)zc8qw^W6yv{abJXMxJJ)IyxX{0IJ{#h>Rd zSbRG+$~RNo{V1)}B2-uWed32IV#Hcjw+pS)a?{dc=d%ke{t2%k1dg`&EBsZ9zs6s; z)G=&j`&wcW25lqXl^dq2w$x&!E2_0rojTT15yVGuAuLs|aBLgZ5=$*5XPH`VspHh~ zmO6o)6V*wUI$14gA<^t}R!g0NQ&yddrGykXWxl3569ri6G@2;Cvo|bZ2xh6%)e1|P z!e^hRg2f-n5lczy_UL9p$Ptr9cro#mfEN`S^QW2o253BjBk&v z+uz|gVE+#8BUtKwg~V?bV5$c!wFLq7pxSEjH~5>DdPr@v)WhnL_WRR%{P7S}Hvge%2Cxc&=QAgevAo@<}YTW#uE z>Us47$=DZ2+P-M1m(;&4^)fo_UG<8kUR9f-qNe2rt)*U5I2Ybf*sHhH+m?Dqy=$rW z)ccnDKz&FKs;7_DC**vJl80AY{7e3or9M-iTj~q-rKP@7Ut8)Mg+li~I6mq-s^EL| zgQb2%hkwq$Fx5|%`dR&AsbAG^7SH8l4d}MBbgin^)_HJx%`r8#OKW=T`z5_c_9kih zJ2`)#A>I41-gOl^@=sDAfABvo^_TkFQq3mdXzXOjYH1cz{d_r1sU({D?J4s7ipAx6 z3)p~x?PZ~xKO|jZ6`KYb(uu8hku8&%+~NoEgDq2#5IYqeQ=)?6-|_DaNTM-cUKOsc z98^(VTTdpOsZ7%{eMl|SZw4$g4(F3;A^Vx}W`boVnnBY{vdm6qXUptjhAgwI+08P$ zo5_~h1INWoF;guw4UKcNC+VqFLJ=9NviIWhWmStC7x&idvfh<+jm9#2nZ4T=B(^A} zdwiDJ$LwpF{mlNBxt}?}fCEb=78Dito?e)Y#q6s5=*VfP`MsF1Vi>qpo z?v=gi_Fr%Ja*Jv1Z<*<6=9mM`49m>}me$aa^gZ5C4CqG^ z&NT;9UnnbHK<5Y1beOo|l-TgY0)xHXP2(-HG(J?z^>pmCe^sTUQufLYEKQQ(BX&8uZJK z%JA66g=oB{@8%k`<$Xh8z@iS{1KEQY0&QQrNC>xjF_F;ng@XaN|KD6A*+>2HvYLGi zm`HENTEujU*c+cMwhVbXZ2@({%ta`{S|qh#U(H1H*w1+;M0fWV*3?GAdCP0c7gtp{ z8_P*m_0#KH#U(bjj)|+P_Z-R)tB$4HgU%&;OY^gPF}qj$6W*CBzUaHamaFyU^$m0o z>erW?u;Jx;n(svEHZG6Y7coV>z9^aCz8Q3`4eH}#S4<6VAH8QZB8eHje}UTzItd5s?DVa_S#%Vy|fUCRda zxnI5gz!5>`)>qJmyj$z7sw}dP0Ym8n+dld&k1TYu?1W2=UUp%@+4}O?!h(7yj!{f} zG`oXzsP$E`=%xB_8XzajEFw{S_`#4VsJ z7lqEnQB-r$o|$wVUyDxSOnouKkx8BOjpeF(x=?@lz!}=zuQk+(D*x zqtyrO`_FbReZ{_jt}H}FV^|;M*q3pgNjXm6VzH04I!7;3kFV7;(l#*s?u~dY+VgCz z>?T@0?etvbqRszM8=_IaI?_)N3M%!D@0x|Q%Rm=Pu!rdC2RdEb5~|dfwi9O9IHBmP zw`Bq5OrojK7@-qKcSdxf`!OCx=^SOXXMDB1liKoLhUZ#yXHPT@x&3y%XY@9*r@exj zB`6@B*)8hA;bW*rZQYN<9wpUPl)Cq|9EqeKsC&*KRJC*4I=#JV?7Zxp-cW@SsEQ;g z5yns+*tgT^RZ)H8{OI$#uEdgU)vLh%5ktPWw~UO!GrAGgcYHd=F26Jk4f_U2ui{EABCn*aOjzk6n?)&4ILv{#cc-1O;j zU{QH}S#6!ZZUX&wuL+Qf$==!1>cMeBeXEF0(Fm#`Qd_N`Z)CRHi=8qb(*7pE&Y8(n z$Bxi~IokfVwq9NDC5_$7i~qORrw4ZE;C85%H7(yLd4y1VEA{EI8*#oW_ugZY{h~cw z=@FX#%37CE?rfh?c1NTCKUdI6Ru(L-tJY6yoi$A5zPv`={w19DDPMJLBUvceFb86v`86p z2O%^zdX1xNdW#QMIPr7`nZ(_M4prX~DIbVR1F{i(;bWsc?3$j}Hoh!;EM2eC24?hD zdHo`K9Jn<9SbBz5F%=D|u@S6uk*3*n=Y|YD%$!6o?yAUcIBp+*H^MbNI&zWBtVc6l zo09FD3T-#@U#gbf;NI32K)qfelDTvI{|MKPA)+e7)nU5AefYlNy|&t*1&s}msasS# zvpiC>+Xka6!M$lPzD0xfl{GJXbjO&INpF+`=r}#ulHj8&etym5?t8X zB5zB;svOp8OpyYZt}7abnI4z|?x_^C*E!30`(Pi_B! zW_ZEgb%W|IrMlIVgO|+nIog`P)dl$#r93|$aMcghvUD5i*5Un2CyX#Abf3btt_^NvE`zVN8 zXul+|g=6~%8G9&vMTM^Y-2Z~rYoNVk6^zAto9i(wDe)Vc><&efbDZLM^7 z^IE0MV|nxUC?U3yp3MC``Q7!guOT{*uw?at~TPU{#WbWwiu{J z-*t)FQb+GyH}=lR>KqBz)kdNRk(!ByYICjwtEP4bb?19vv@))1jIN9)?STQe%e69X z3>EBMWo=SJj?XPD%}1)Vxs@ZzN~Y)Qt&lxmwC}4a??+thyJskN(M0jSM!(mKSnR3! z|Ad?NS%>s9_<|a`hScUR*wl5rP^3) z2c^&6TP+o@bwI4D&h_DjyzqkZ#%jG^QeUUPFV-boUr}BccAu9!oB#iX+PqE(#@#=id6J-yAW(X;>YxT0u`(2+0Q z9gkiYB$Zx6tg{EZ5ivVJKZ2gG4|<$o;C1@86WP$(@*ASRtk(ve+OzYbPXcJ)h~BQp z?xMyPhY1a}Hk%bkiW+JCHghjFQ#vSP>_s*$8KYlKa8{=FQL_$4pYYaegJaJzY4iS} zFZy+bU3?MIGYuAMCTj2CwPi;8TB$Q)dw&e)t(3@R6Rv&2w(%K=1pBfl($1moe(m3Y zY%wm~Ti(?6-dH|uH(%M>?MFHG#kw<~zYMHn47hL~Vzdu*nZ6E`82yfy`w5ODo1`{8 zGg3}*`((}9{`cNnkgQYm;%{*zc1^e!MozJx(|9gkct2;|Y3Jpp0f+99%xPuxBmPD^ntms01V?^I0AYY_Z$Dj@B{jf-)uqnK@YqY;fFl%HiRGc zz>gsOs0V%w;m1Ajc7%6$;3p7%(gQz*@Y5dn8HE4kfuBYAIS>3i!Y_E>7ZHBR1OFT0 zmp$++2*2uqUqkqH5BvtgZ+hUj5PsVOzk~3*9{4?k-}k^DApD^R{s`fZJ@6+8f9ioh zL-=zK`~|{adf=}R{@Me7gYdT=_&*4L=YhXR_y-UCBf>v<;GYrx#RLC}@NXXYcZC1& zz<(nAmk0hE;pQ030D3UP12crV2NnoR53CS2J+Kd9zXuK=9Or>8gyTJM0>X(NIEZkP z2kwM$XAj&3;gARJif}g%+#TU$58MOc6c3z=aGD41iEu9u+#BIO9=I>U{XB4gg!l8n z0}$Td1E(WA&;w^6oauqH5YG0%gAg9b@lRW4ijWMMlz(7AOV-pw|4*;7L?6L{?1`r6yS(`v@0P`MQ z^cZwIVRnFn(cJ+_@B*azH?eArvFu9NVpfBGfIev8G*AHy{{f_Ahz;P&*a-f@46NRl zX>5Q%CWhiN?{=&20SdsF3(}Ye0izrejY{ZZgdy2jsGI3(SH+HH5o!jKSUrZ&3}g+g z(P?lJaE(m&9-F~h1Bnkn{45M6Y=Xpx$d9#_fH}c99!%o|=xm(g=}33BM2}T~z6|8l zdkD5oX-UCtJ#GN22fG1G(FB68b1PJo!Fb+NQ4(A3RCL_V6-lfozDKaQy^3CLQPJ^E zMJKowjlmR3>w?`1u7Lo0Nvqqb>rGExU7X$->_m2wQ`d`_PojT#M&<_S^Z<0mq3@El z5keuc8vI#&BXpgTk+lK3AzO5xmAMg;GuA`5jnE@|6Qpc_RD@D-fYT^@0C}lr6U1du zmQB!$(qdE}1aa8(hd9O`K@jyw$oLXcP+#;mzJ(E}7Y;>TkZ1e^lZ{`X)c9TFeSnRd z!(J4kxo+st$vCT-4xPeIr4hx@X*lzdui5Erh10(|n1|9rnS{+vU~Y!qGbxz08Tzzl ziDvLIv|t$5jrX<-x{Zg}61Gw|9%8F7grmvMU}riF!BYKrGISx1Sk!a zNgVTg7}|2{w%A$hY#LT}4*Q2wV+6ZG-S3|5K|M2zfMl^5_G^VbOGNCGu%^x)(sg%R z=+4e%=Q&J%KD$7--(B~J>k#!wV0{<5BH|fLpY zV=x&cOM!TnhS>FleykS^LUnc^>jQ_P8k@lOgCbN{Wo&<#i)v{h%k)rok<;&Zn8Pk& z7h}H}eOSxx8G90GgVZq|M1~!Kzk@O|`6f6RLn8^<^)PS^_%nisZGuB=c+^((M_&v5 z$lKzZ;>7YSP7#}7jOM5fFbaLK5e{7g2^52(?yx4DTI=;Zp@at^7vpST>=c}52Vrn8tFECC0)6lpaf2KAg-8-R1PeyH?ff{@mJIXi=HS!O#M*jy9O=VWF4ADY;8Okoz56KnO&>ddaXNQf5jSYT0Q37(om$26c4~$l=SmP%4A716=i?2OvYK-Em@MFCsJ>Mauo2%5`}tJ zTC&8L(iPljYToSd!u;3>j6@LxsEK`S2~OB$Nd4uA^>H|9kB2OF0#4c!v1cbiAv+mI z;1rmJ>2uj>IB8GUlo^9~_k$dE9ZppNS&+@H$9_ua0+ZPdNEz;#(mt5SZY0YFjglGc zCU!FkUi#vkLxo?kE+0vLn+g>+6*fcV6cqX4A|%Ixk%H&QkVJ|Mrc5EZ5f+YA(cq$y zX0iy$?5t#!Y~Bx50!mj%?Dq?{g5bKDM>vfFfrlVFmT z;tZu+KD(W*L&Bt@G`xx3p=I}-Q3(eZVhRy$1j^Q9M$@dRz811luY`1aelEVsmdmLd zU~vXI)fvH0NGhk=B01Ks-Oi_kv-)6Yl$ zWCuRQ@lSR9(=a_3{nH(Ig;rYtD;<9o`p2Vx2Bw#ykNq?-4X#ChYbI)!`WzW$=&q=) zb5uyFwWu$GUxjc+H#9+fNQrB;c6kUh4p@VhdhlzVmLWDlV@B`~VhD!8CO#n}a}z8{ z7TfvgjAVh5;oxL!V(CcH)ciF@pz>UnAxT@>*}G>b1e$mdHR|#lnJEd2*P`7?Lh7W4DB@(C$BYoy zeMnXswcwyAZW$!UP6__L2~O286*)~;+0=YTM(|I!%dCuAKD~(*qCIy4mKiCd9Zi;L z(c(=k+mo#0n^+HTRPb{hr)+$%$`v>+!O!g8Y7E*T$fx!&8P9krkdc-IE7pQ9_-7MH z&j1-WXX;L9LafM9n(k&s@Q08|?Vyd4<3o34j-PC~mF=_{@>3cSXk;Kcuw5JQt1^-U zo8XK=IdK^wUnnjV$3u!LJ(DPR*2uWzI5%IM&Sz0RD`W{L9}TTWg52Yq;7^ALnZX2N zQbp~bO%hk5;nEm0pQE|q9~r@eY4k!Wy2RN8=i0r7yIasEIE?abh zux9;bIw~{R1(!GHt;V%Y@L?iltY{NVCmMCbss&YTy1b1hUhoTIO&IRfOIBhN?B|Y9 zv>7MA)r6*GCb1`0e}1Yn<6HrYrpATn-iiYDHe4OtZur<;Mk0#LG`893$L=={H`%_L*@F``oyJePP_fzBKM)Um5qaZ;Xf8x5f_ko$(a=5m&K4 z885M4jn~+p#=Gn<<8$`6@eMbOUpX_HIcJIs7RMzEa>crFlcjMV>&xR5$4}%x^ON{r{A9uTDI$TNDmwGiL|492r0`W@06#+v@@5Qp;%#gY6X5$2bOWB6sFhOZX&e2rMnuM{Wnwc>Psoj8|YFD~LYh)em+ z;tGDNxQ4G2H}gBhZTv1$mWF~JMj}jP8_0q%(qJUph#_TMj&{f3-`ln zMjP#lC&I<-5e%6;4OTMRZ1?egXlOr%=C_|uhMDYftU18zVKCc{p*X${#VrkKzd6x4#!GZ6!e_{)^U1$5$zKQtw4#!_X>}P)1^4GfV z)<1Ul?(?+%32yuRPWz`S?Vqmi=smA*r~0qxcwR+D-^cdY(6~?>(WphfHfY@XC*MSR z5&gC}ajR^D%wAzAT7Q|zxQb1eQTq!GFBLVsn$$pBMXHQojyJj!GVcW=QDG*ln^5OQ zwVrFUxSISuQtblu*s>=1wq01hoEGf47UG>!q?3{{;X-aJ;H9%hqPhz@sVfw&cD~FE z21q^Tm?3jD49W<8Y2!j_{M-y(TTC5$H7BMGSPN;00BKge3v|&MY#GguHK2k|j>$;V zH8}`{RD;%&aTzS6Dlr&R_7dgd8^NMbNNs?Nn`D=0hhx?qnKddcxQGlQlMEt-HV@%< ziEZocL>iYa8HB;5P2wRtK_x5l%xDv~y%dbql&qX`l;Y3uQ9=maOVLEx0OzB*60O&- z>s{!zSh3wSZRKo&%bG-CtE8ye;93|W!--1^p12k|IlTxzOGbxC&>5SA@|J7jzqG8> zwyBf@q0M;qTIk^+T(D0v_Wv@cZw?>zi^VnZo7==PR^d5op=U<$Z>mx18vDBzc8f~) zqiD*9b(ZW@%eiZzyBDo-F*DsMpBGzHbar~xHvNJ=5BluWUFUt=oA&{xC*}Z~TaocH zZEo#`)9rFvHnFu3$_Rd+X^)^ipP*|-a0D^Y6%OjXX&hK>Mp}z(?5K=PnrEwVJ%I^p z4p!aOc{#q2?~Ly1@-=XH$fuWG|3VTZc2~6tS6l^U89_a!FgfHCYjFw$pV8*#sF3gC zkWZuXF;Oh!i%z({8NrY2m`!kH6Lik#j(A;#Y#K}_c67vt@siWK)$Wd>)58`$X)5v&r+6dQfgItsD+r~Inmj@!Zh4zvIAE=X-*3vvr>=j?JXA- zPe)~lEp9S&Sv%<|D!H}^mbaLUa5OC)Vv;t&p1Tg8Or&nprc8A7Mro5ICV|k8v|LYT zkgl-f^s+j-o(M@nyRGNjN@S+Hq~PDcAL!nv&8axP0h0Jeb^`w=JDoqk&f^cV%lTF` zv$wGu_`~cL{wTYh?_l@xC)hvvlk6e>G<$?U$DZKNv*-8=>=phZdyBt>ruM(tm;6=s zBY&O!!rx(k@^@J?|Cmeu37XrV@eu!lcjsTCx&0N-;9v70{9Ar78pLDx4}3iT5e@R6 z(9r%Fjp{%6D*iV=O8^?Z91UHG#;u>bJ1l=5wDGm|YB2Nqw zlf+qydmnu+oDl?B$kLT#ZvLTSSEfG%O!~8 zq!h=?fH*;R5+})S;uP6aoGJ&1(`2StAqR;w<$>ZXIZB)@$BA>~B=HY9O`I!diu2?V z;(R$@Tp$;Ui)6L9MAnN-<#KVEJXu^WPZL+lv&2>M0&%sxTwEis64%P>#9G-Tu9xe? zjq*Nmle}NtEVqg#`LMWMJ|Wi0=foZI6>+D0Tihi-7I(`p#J%!su~GggHpxH4X2rz) z$}j$@lEee5t9TG+@589~9#h%kaWz70SEI!aH9mLd2TEyGS7&;hMuov`F?NvC0y{O|p!F+T>$rPzj#Qses zL_e6oUdE6qhTsD260(T zOG#ra=ArYIf6!8LbgJHAZm{=~p^rYc1nBSh`_tYz*#bow!SAxkAdp(Sl#sYD%E%^h zo~^Y|YOoJlXSTs2GlKu2Exf3e(ce`=-)bYEi$17C@SCVciS5+SfDkS{P6sJh;L2hZ zWXm(*0C^T1EYF5f@;u0u=febf0Zfq>LaDq6X3I-pzPuC`%FEzrc{v;_SHn_yB^-yV zl2hb$uu5JJ=g6D%F8oBKVm2=NpVa47vvDkFyd~t~$kR3fhbc(+k2LL&KJIS)KiJ34 zDZm+;#&ins3H#JJhV6yraCD$KGZ>HReoPjUH3ua*5%zO?PhQh?xkJ~r4qcC;^9B43 z#osvmJ-f60kwxYQQu8<3LcD?$^SKU5FUfKU{i{uAPtx)%QpL21s*Og8!(&^K!C!2H zk@DgY?wpM*O=qk5XBwHb*dAs77P&KmKSk4BJsumv^PnI0`c^RIZ4fVShr{F@P$ch! z!{uEtPu>k-c@GZNy|5S;9rf7m@z{e?|41del z^w1v%790*C=Txd5Lr?0VKM(q_&uE7Tu7#jI{b2)6O*`&U6hNzK8p4NI;&UB`1MMFBtti#h{9P05mlhnm7LqfAmNp2l!~b+}ur)`-c4UJeh6EXZG&i%h!wk)VX!0k) zWn^h*MeVNO4n6$_Qp)8mQ?~1r#EdK({2*#BVveO#nwr;XG)H9y<1`l6<9|YT2O0Lc z+L}vq4!F@k#Q^o-hK%6*de7XGsC1&#iDPYxm9?1u*U;3EZ{hTR2Ym8fNRaPAl6)VM zJoOv$)bGese;`l&iTv~zJR$#v7f>p`p$zy?G5Asm_(nq&L~)&(0rJr$6mo3blgb79eF98eaog{+%HZX zT^37lkHQn8yo4c}m!#o$MEYcS)T!BLDE1$AhZgDIvG1LO$a$EDL{>0^?$w-6mq4^= zj?q=$tx=s(X?1}_71I64u*i9d_&H z(R4tw9V|KrUbS_tKJ{L;gH|TJw*)r8Dx1$%ZIz3*1d1rcvw13A`pCw_j8rji1Kdo} zsjN6Nbt5#T#xT|=|Ed>A)f)n;4_K-nB&q(;N9_mcY5)vZ=`dOigo!Exrl@QvQ-ffR z8UpjwP?waWkyv!Yf%-b%?dyE4Sx9#r$$oQm$M5a|_hRROyBE#mGjs=22eE5i4X}#( zI=VPEj$KItsT?#pMnF&<3|-VA&{K`_khz!JbT6lA1<7vHe?)hbjeO^V!KJ$CF+{qX zuZuODHi&c>mXFU!CFz0-#Kn5;C^J%N-)KGDqG$81+vy0F0yrYW$=4&2z9nu0+}Z?v zbPA40+(;4(xAJ6@hZGG;vWXcoLW+jv7D@`Kw3Wf$%R_SIsZ(Pe9*+|Y)M41+TJ1LgDZ~Y7$P2f% z=FX#W8dXDrS`3|44J4~tkF@FGlDCH@Dz(~!o3;rHA@0-UW%TFtoc7C{OBUU!{S-Ct z`e^$Ew`kp#aShmVBXm>Or&gk@Sp_rI87ODYbO#m@b-PpUbcaGV z5d|E{EltF3Fp0%;;GSWSTo*l)BS{@@N<3 z(GJR;A;UqrJ1#k+D0g;IzSlu{d`mn{2TwDKXZI+c!JrPwc~RVzjl0n*F))QT!9mxwttDu zI1|&>wd&3`6mk!vh4To`-AA!2k0IAQ4hN$JKUO_~+UQBtMo+oj$w0x=m0hDdHr?&m zbiI2(w!u_w5K?!#xx;a`!{r$*heJ8Tp<3{ED|YEgdPqHoB!3=B{sNNxMI`yZk!4IgT5}A(_Aulcg5ugj?Ge+VqZ?9_C#}Y^Ka-^g1x34kH3Q)|4RI2 zrY6BD*W>yk_^7_0M`9o&_!#;P_t;52GE#yg=m_k2Is$txmMcYPqUi%It+h8HOTCSj z**i$}caeeKgG1E^FkXEK6VxYAq&|hY>NBWRpF>!E4acZ&pj!RMV<^?RJ+I@*jufrq zJ#0gX{*8DY1hVNFy6C+i%yqrKh9b*H1Dic+q!ZQhii(mi@F#pzK>v`23czA1K( zQk)*W?!?(Wdd-2ZY^C7Mp5QZkL4w&EhocYns4omK`@tZyKOA802P4e^FxE_miRM6< zVtViW7rDJC(zuiQ>%;pxmirMn+^7xU8oJc3*V}Z-eWWkhw*z|8F}Lne(Ap9h>C+O; zw*e+ML3XllYsg#+`=L)uBs-C=$0z%E$c&0V%AD*AnS5SKG5KO%s`ll)H0`T-^hm}& zG}jU4ypYrZ-@K42&Ip-7g~Di3j24ri6VhTRE~AIx=nhBrJOI+n1EHUp1B1;GIJyVH zVdlXw)f|bVItt3o(NJZMfn&`>;WYCwILFL|OU!X_wV9`BbcEe|mqyp{ehy1t!~5%z zrqF)Qh3jkh0R5bXN<8e`Nxnwk>{0md3N7GFzRDi@6=@J2Av8=bnv7gZ{wS}T=N$s+dFMJo|=BKXY$EOx@=M80iS>Y)H`poE9fpF2|qYOzoj5 zS3@vk)_OQU1&8T;I(XIL(asZy;v3yN)x~tD`utW}#heMkJRFkD+0fmbgM)YkWSU3e zG@a*8!|tfY_Z94{}&}FdyO|RpU%U(sB2VBCPHsb$cIy&QpvV?bjg`vjL}T zOb=_RXI7%r3nN=CK=Lg_(p7n;QB=3#a)%Ff+8*W-q||A*h2Npg$$+G>}gtfPPX&%J86XSq3g9hLa6^N~_mxX1&+2<_F@? zfes0$${e@K0;kFlR!LRuvf8CygW9b&)ey`gxim;zOA!Zz#Ffx5q(c7d3EU4C z*S;I=F{Q}0PSDH|AzzLR`E%3?Q#CbT8WOQS&BmU9c^ZoE(@~?Y#3_0Xgv|4xr+Gf| z*agV#7s5g2MUZD+3=_;tVY+!49By6#N19imLb@6jqMVJG*TISA4RES?Bdj!Ug0ryf z`DT-*(*mTx5SYbB(wPxjO4B&K2KGZAsL{qQ?IK*{yc5L`AB7@}EVHxuX#IvJ1Se|B z(p)=^kI}2V6j;g+)dH?3H1NZ;fD6zc_jLw26MrNmjeA-R-5s9Cl?ETDpBo40@4-6* zcCP(U)9BSh8+=9*I%#O|J&gVj_M-&tKZi-h`U(o*v{XfwE+3|mI{9hga zH^={-%7J|#^ONqq?VFB2jQRokaRgAAi3F>4YMpPL#DBKm(zPGyYE9tb9M2{6;ykDzyrqo!nS9m8q&F6~+vl@$`h>6OrC z*qEb2GWf|_v=NkYgj^QwOl*ctIc6qKvW;+ONQBh99MRPLSms999Mf0&Eu-&6@cI4? z@xGTK=z9f{eXl|<-)k_y_c~CZDJoyB7@6 z9g(=E9moqbn|4MmCNvXcSNJ5&fj%halX)R_Jsu`$fx;jN6ZjO(_69HF#SVXdiRH*5 zcylw{KP78B1hUq{KX*U^z0rPvoGtfY%!At@p1h4PXAQ)O2VrXw+C)xFj<5p{QPG=0 ztq{#b8OlTn*&AV7cJ@|LNy*z_YbnpM-(F>-eCmcdvqN&&dWf5cq|=YAJ_`vnuw+Q& zsO+uw-NVckW^;DP97cB9cIdG}H7CoEO7^XXhl|NYd#tJX)28NE^b-O7NH&}BPnOgH zcOXte0)p=o5WY_#(f2uY@qK{<@g?-|eG8es?_s#_M;PV%2`2gegektiVY;swj`SOF zw4cLbzksEF2`kY*$M1s+{c&)q--2uW@o=3#0h;`Yu+ATZyZlLTzrPba>hA*E{ULbH z-wpol?+$PHlikC#A;8&9d@2sbDCond>A|Z*!^1vcYl2iQy?n45vR#SxrmHUB@7zLdkEqVYRo0YW@9#7(*&D#Xq zM~Y56Hp3GmCF1|UHh2>Mk5m}mGSW;|TXTGjokOfB(W11sZ5wCXwr$(CZQHhO^K9F; zZQJ0Mg zIOZ-;=T_96fz{nDQTEXc;MGhJ-4Ct!4SatOHq`nT0pkQ8is)-lzu1o*=YkJl4@mnq52Ec8dQbM3 zcx^8a2L1zj-{BXX-SgUk}LdQwsK+jtS@oQp9BKmQ58ODVNs$tlC6SqHZNTV50c8(g^PJC?P4?Q61;OQ5+XFh=1;BjUP zwITj%etlmC7fNQ;D{MPM?(Cu)RtE<7gClQVHJ}kf-JICgC$`V?lw!P1@x{CG0DTd5 z-BRl)L{U<%hA)N%@kNeNbDT#yoqh1-t~ymKydFYaVS(w^H$Yc#<;kuR^DUZ(x|;b) z%DACbY$38`67jkZ`C0fiTmK~ayL=}M_PN}PU6^0+6nRs|^ti8KD}Q6%B9&*l&v*d& z=2$#O_*>T6$Z36yEFNlPRHF?4;}QS0Rqj;;OE*^4_=!Z`pf)e|6LQ>pRwi~+qR*Jh z>!1~kDJu)Q$?)4Hv-Y%qFOsw$#@CNX{83$??T_WzsU8gQHw*ok9`xY1i+%jBI{OfQ z0Jk5{gF5hoI?>bvodBK|6zY$OeY773^*uf~*+*R1;uqP#`cIO6%r8p&pdaPKvPJ#0 zA1C*|UWB77YS#fDuv}Y;Ov)K=R+&d1xp#oo^UgE$VnV`yKG!5yoYJb35sHn zUi-iWbeK}&o=Z>sVyq&YyMz;Hm~Xw1Q;2`ST|JQrct6@SDpcqo=`<>-Cbr6#x!8`Z zYmbZ|{;a#sBM|7FnBBHnk-Wt-4fyZ7cn5U6Gr9-$l=12Scc>Z{D*kD8lb4yX>3-rn zthUf)RKsP#t|vx%N%v3I{k1Np^$nf{r@&(Yxc()z5pq`?C`Dd?riE2#LNwSqc>3rX4E|0``g0iK(;1qd zQOoW6^Xo2v!%tRz)vu}eGn;_lZw>j{3SrSU?Be(9SMSRXw`^pl2TrZ@?7CQo*G;Zf zN>+}JEgA-Buo%K$6GRRWHGUA(qbDE%T0n&%V0%DN1q=lc5LX@BI|T$3h5J6Y~5 zOs23C*%=Jt7@_ff1^eE+&pG<`sE+<(7=+x0EmODBg4O3v4&E{xD+B$u3@`T&|26?m z(&H8#2MyRYaMyGZ273^))sIo_-90RTuqRae6KMAKXJbOGI2w@z=}y41ztgm+AFV;l zPL1w7TMh6(L2U25p-{Q=4EQ!7IdbXpQ_avf9_r>|{a|ajca6~kDf9pEP;!raN3mv< z+9g?hunruqND5=`LtduGvj)z@K{^ORS54@e6Gx+n8c0XxO)w#zdjyk(EIgXP5yDXw z?}eL*wN@;(W^2yHnbfZBubBowK?ADWxX3L?)^nD2As+*cA2Kp45J z#IxWi<{qTjrCHp%X1v&rYH9F0kksHvloLcBr`Q2i(#vAZmPH{4N0_Eu$_V8m0cg0W z_Km-Eg_d9SCf9x)b2RsO$imPjI&MC2r?;9yzvwxquHXJ<45qC#VWg_Vl!;3U-*$P< zn6j%w6lBZT)03Ezsr6ZSL4HYYlmr+qI8<#WBnxAYhvQGrNPux$13hYKUHO}BFvR^x zV|j;;d4H+w(M~xpHBq2B(3TwhK3=IX1vpV`gU}XtN%UOUJ587YwH1FsXiq`cCk3rw z^cc6P$S>v42%;`eLxTlcyXiQC&ET;C{!$Pz0`Rl@8!-FFH8L}s-~$H78Sxt*D*-%< zFgvktvMc}uSYiZX)Z2Jl0e-EgpF+aC>hp7946mCuqlH#t$nPjTi4pbczd;R}VepRl zGhK~w!VF`iGJQsw6zl}sf#3B61AclONo0>5L~pU+0hjK3N8_WR)&>He+B(C4W$#m} zF5%JZS$ zir&XO!nVoTT2B7!hW_t!FS>`&w}4cP4?~Q|q;IY%1Y3XSwOFC-!c7IR*s$q*>Jd*P zJp2c&H6Vm)UD{}Rp*`87b1kJGYH|jcXZk0$NqAb}?!E^i@-}fDm}>^OXTsngKZs3o zWp&ctU%oG&I}-KRTv(4TrAE|^Kh3?p|KQBwIU}uTv@Sxye9?21?bg9NVN@0N3lQl2 zdFS>48A{`_U_hbjKx%1D1PIiGeGhd6#``9{h?Z$^auSS&U`^m6))d6X;Z_kbO0H(uEe;mSj-6JgXTxHK*RFD0UIPk2~aW++B8LorYO^pg zP;2m^Q&d1Ne^HzpRGZcU0@#9$_Q$F@N?fsR7NDt5Qq(4gqxaeCQlc=&98OZB&im2+ zRxfO%QANEwuIu~K=F-QHA{`jKtszA#!I@>;{|WLj#K?h2WJsWR-T@DTmbT$P;UvQ}(rZ}|)Z{5#4aBX!kenzq879LlL$ z91u(%)t+E>mx(!`T5OF0qxvWqfWTOiY)g%sHj2%PaG?Fg`&*~kB~Us%sgl6rrAO42 zVIEQ)n-#7q?Toe_&?cc4yU{0jY`g@M!EB68NM$xQ5s?6x%Vf|RnAWem^O1pt4G8>R zr!nH^L7}@9^%1T@PS_*(tGGkAUIs359;L+u+4RjcK}Jm@1yJKX03(X7B<{PhOLk3{ zjzB<7%9f`>IDSv+BKfJ+fPT=1J{3l}>P$e(6MD4|bQWB^fNsaoaH?b7=N$$k|dxXq3J`P(n=A8xFFFF56%z&P(LG&!3nUfkrwW zMg6D1u>wEiI@2JkAI*r^hfpWg@>Yv?d#BBn4DFIUZ82foLP`%qeS_jIVSFY}lzi9v zlitfX{N9Xxi^8X1rk80-{h3ATGm|)j?!#?vw2ZMWK;+8 z+k`7r8&P7Po7n|!47&hP3)jh&Mo+MH?bLO($)5sz0GT=NkQ=+95A+~BPDC0Z@_J40cPF%j3ei`uY^@H+5gD#AS-lI{4pSMA ze81anPJhj`vI!Lg8{_%s^$_;V2?t}$*$6h8d&N2t=Wl*{8xK!lRQQonerk!G z0P3^^DNnL!!P%6}WQ`}@;xsZS#17+HL11eP^bJxJ_nAQ^VLZuk`qw5(sE^BLQDh;$ zEL=Yn3oF-eC&zw7V$>}Vi2_SJ8XOUI|58#Y*V$WmC=lVqKD<>@)cy?(AW{A9Wiu0{ zUY>|LZmXj?uF$0vpl0CW``-NMRcX6eJ(EOwlzxYAcBJm4>rAMXy$P^}(JZn_1u zJ$$6;JgeBI_|`hMy5fuF?0v5$1kc)WeziQ(Vo>*<{(7qG{qDA1>7bnyofJ;9Q*EB` z+pPAc+&rF?VfKDXv{<%MV{_85;I&662cCy8?A#T70X= zJl^92!V0h_Y!+6!JkLU>mom*%?Kuj!ptuGFl!L5Di+m_lfG(2uof@sk%M0}uhH!_X z{!?B*)hAq?I%Sk0t;1$9B#os|jAW!-AA<$LSj*Ib3p*X^dLPQ`GyBZaRZ6eRU#{IS zC1A~gPpP9-YQUnO?zSrWe!gg{>O9dmpcF!owPBBZ5W*@HBIpjlLtY*qssDAXQa>8L z*DEr|kr8Q{`Z|Za+Byy1`b1D#xGte6Xgg!dYoIYMEh}0L^1`&_5sn3c(m!lWpe~Gs z-Ozfj#CuZDLJ?eQJsr+rBa>*oO+Mh8u0YSG#VrY(lx)Fyw;ZnSS`^OA^5=SC0Za5S zRq$;3VRrzlKA4$`*-Vh6*yBSvaQLeTA(O%FS=Bm*yv`7pXrdB>s>U!{jUjZM+Y}Z^ zpc=MS0n%cg^;_z9;l^DCR-v^@LJIt-%+KR@ce5f}H-x%>#|ny7ThlTD6p@WR?r;ev3xLF{Zt;V3++1fVBVX=mNFoy21&LN=Y zoY;b`LW!g8-MH>Id}&9J(QABMbd_syEyMQI^v?Le^Ry5+_3CeE3nS5HLstTi!(PWT zgQ=WSQ$foHEGVZ{xszx*~1T0Q;K8;4;s(?%eltqoUfpa?OEZ>6p`?p(%+v=B)OEH5d4Uwr?-G5`cNi-(4Pl)AyTc zIsENkzNE2Y4Db13>fr}zrXw$+_xs=N?R{Rb!WV(1+TYiS zQpkU`x2J@lV;V9g-C`g<{Qci~lPdBYoW}hV z1w*y-#0Yo8_yq)~dmgk2+nWQN1=|}0OcJ^~9$*sMtL*O@kazYpylVKs&Xu~U3Fe#} z&)6GDAwZZu$O@P0!{M^TsdT+#pgw#A=_GO2moSyM7qDIG7I*7cN^Bh=PsD0~pb)WE zRP&xy%r#CMC4r@=PD@B6At{Mpo<>?%Y(9f_hv^K8sUn@LEhS3yYGgk%))RQbXTR0gWQ<~wL-0RAM{PMF_xNIWgD zo(A(KIYx}b&g0aVvE#i28`72Hvx3IhrB!Ro)>SojbW~WCWmCTM$veniK73eh zMTWs`0`2bpz~~)>Oc5c%YD3(#o3nn6aJf!5eKMMV6$=KJXcnmt%L%v+l6ST1Y0cHE zfz4JmJ(4YBd>|?`p#xznBw551Vsoty2Nm6D7tuz>bES3d_2!gUgzCk)!QSy`Cie>X z;*7rnUSIYT|3m9X`}(oIi2YD|GV9`yONS_wb=XX+L_IduRR zAXiHN^$QSh78N1_Kw%zCqY#%e9Il+YgFpNb++nrc}0#qgf@ z)3YJZr)q7tM+!&(SHZilN6dS!M-Io5j~cG&mlDp6{GbR<#(Mw}NsO~HvIuAWz+BA7 zA-X7qeP&)X`|OOG_xg-h*6|4?&j}@b5eIna6gOx%BUWrkBbMQSD%NaBaManM)hLyH z^gfe)wn4&syFp2N?@iHru|ZDzjGep`*KDW_=XAI&2ksuXOv`(fB5E>+;{eLc$DyRD zK>f&?6phOcRVw>>Xn7{~K+}xPA?MN7A*hLe>&lz|tB*r|>i~z=)BZN}z+ZANbRHd`-hm&+}RkNq`@k25Z^Q-{?dZj$WA z3G={LjpaVSs?~jHS)2R9k_yks1wpQZGorWMGrUZ@dzh*A=Rji>;XeCP;l9hN+P$Ae zr0Xn`Le~*B(y#p_QcW9rh)*YKxT@9!seMIq=vi+3 zF7cpMVu?noQY)qFru@iBE%ochQgKa3j&Vz-IJ`3>*}g5Qam!7Dt-VtUb<3wX^2S%u z<*YgUqFi>WyC#zT?j)v%(~D?@p=TS4+KU$U*ET^d%W zn}p03pSaAnSBdEju%gqeK}E=C^U{KkY{xXPqE?)e<>|fnHBaNxJaYWa9dWU2uB2j5 zS>@7t5{=9Kk%XH^rj!m3O|fmRsv^7``nj!~UPYN%{n8|pWXC9zDCJ#rlBZXxxDPi| zaZm1Q@h3NQiEr*}@h6W}@lWpaLQpQvf>3VG0{?8<0>SL+g8r=Ag8VF=MY>rY^MI4I z=a7@6=h9>6Q~GHmv#7JAT!bwr=jNs?t3DOp0|jnj<=F#{x4Ne zr7a>FlvfG62=J2O1GYQ|SskCGG zQoWOT;%UcpB~%Z-=W_2|(I@hxkp!ElWmobj>lJUtX-H`zC6Uw=9F5h?i4_alswu6F zwMUb>B~du?9peHeZ8(Y_lLjX3I0~W@3MSP!N~IGT6O#|H6V~sd{{W2&8iZmRVv}w2E6m6vze{p@ZY~|D@aL+vd z5^YoN3bakWJEv`B_|ol4xJ~Mu%Q>=rL~RBAQ0~gmjq{wNzT+*^qL=&rZSySJQmY}} zEjyX`UebI3Xi50;-w^eczb57@en|zd6gm>PKzd8|Db)%@&5mdaQs<>y#>>0iyMaTxHctS!kgs1RW=D} zmU@$uEkO@Z*Wq1~TomXQX2*utk=lh^N6Q`5b@N3JnmmMci&f*7&zTQ!-92A_eUrXQ za_RhP+|qjIp^xmIeIH&w0N%mB2|eO?wRg(m(%{dNjt4)Y9u&S=-qU|ty%qh`enj+W ze=F0*de5KbbfVvif>bX=i(;Po|PU@zvbTL>huVA;tw8H)P(JX zMDAHt%iB^8o?Yd?c4#I0Hl-jvZLnb-4D%m=+Dq_Chu3>)OE@FO!mCyXdQ?z~NscycDk=OhnC2xB#rKs_yBd_tH zqq6aCN@?vGmgL%%Ea|ROKR?r|+1lSMcYg3GJ^JjCzj?xy?|6fw((zGCx$%u#7^I`( z`DQ5T(^L4nnpgGo!lrQZxLf=5dP)WS#ghX51y2tAEtD+q(=ajkbDG@$qcMT->upl* zm%%vID~NeRr;2x9r;7JzrzHBprzZODC!hO-uPplMr!w+EM|lWjYvSEkCk>&jnhU3_ zL<){YsRYbMF$-(bj1Ck>MF%QM!31oStPwCiK^1VCGSCNO;;LWE z$X3tq!BQ`rfv#RL1^F5)zD8lQK|1zLawev0k@*I1JA0g3Z6w_71&038Hk(m-0y8-bcbi6RNwX>V4wdm zyQhC#v?p#NW#9bZVBgqC!>;m9{8sp2VIR;))Gq%{-LANfNv+xgW2@>4%BS1|ZL87) z?_2wY!Cid?_fvWWsVnabrK|7~qCF8HFU)~cS&Rdzq9Pk?NlqptldLB=ovc)_GI1`C zf2?g@@5sw6{TBtRn2P8*J=MjLXv48b#KL^%pBGwv{g~foGV38PoASWjfoV8$=zhLq&wO)T(4--ehD+#7v3~%+8ow?oW=BAT(he?d<{CU;APnCT-Tk)2EBI* zE8`ZkiTIQ0q3Fg^xo{Syi@8$~Z})P0N-Mo>QBCy9lPghPD{IFbt0T4iIp~J%CqrxeZj{dy z-B{=+%dHy0tuoHT(2Gd3iW_&6W#n0fVRsvqNH*nTccYXMt#Zw-l*-Y~@*a0D7L42S z(1RQmBHuQwh*uS(`_E;l`>^GS`vS|9H;5L?F9sGaUd8E%-tv{m-olmGS*6P%^h%dQ zsilv5R7+j&mJNa)1sjarLe@yXx*eR|D%RLM1-l46#jMe~@?UZGWweO=4NgRrO;XBo z9i)_H*N95XPvO=L!i1>XmZjJTPD|gyo(+z9`EDkMqzx8_PEWVOpbe^dp>Dc)sctfb z{1@3Lg-_y-3Lj+PCBO)Q3*d-^i=c@63!#Ydi@hP`=Y%2X3!{jPi^B-DWiq7Oayin} z$|B_3ibLe#i{K%!=kp=(i=!de=ZqmZ7s~@D7tI5$=l3Bz7taI#56OdSPO{0;nMucr zIdojZu6;Bkc3TOdm52AQFD zJwhq>(CUDAB9P~|vLiw#y`SX;(_7i9hh#X3!Q!nD)?O0)cpczVLq z)jNETj?Y=E<|Drbhs7i^s6y%HO9L)#=15)X1R~%rx`zE9g^N>j) zm^g)ZC~?qHb^Io@i}7z@!tU9Gz90;=_wjFBPppLFaBdFVLYZ(bGP=cX4cn#br9$c( za4a?LM0+fU#{S8eWMX?@NoIdDKtqmxFwZ>N*9Wvl#f1&Cg;qJ z3~-q`Ae5%~Z^S|}5ej1)SUGSk(&pc{)8l4KfEa!fIcpz)GoL-oDH8tU4j&<&PZE)QydQ+tzLCmHj#Az8v=8utbTjvXpTu8UR89+ z3*T~Fuo(R%S5y}Rb#N23hhA&46JGOAw+O<^c{xY6k{)b$R>jYI`L)G94a8>{KePcu zTxWQ;BY8cBR!U0=VtSO#6Kj&OK8a-~W*e}}EAGldz+*nNl(i9q3nTZWToNp(Ua+Jo zX1|p9vCfFo9X&I0YU2*>7wiS}WbiQp++TSz56f~e$3Cav4}a3GQBO&8?ovlxK|7)$ zEtV(H3H^Twg%MUmhy8l| zi%UI|S!AP!@h)!iJ^z)GHTEPs_KSA}W(Mm*&IF(Q$tz7iAyfA2* zMwa9YK+pLYhXV;5YrxW7B<4*XK192P%BG`eufe%b`Fjpql zZk`adqk>=l#roE4mPu2GsUs)QB>X?P1GrlEOX8 zsQ=;4Rj2U|RVKzrAxCpHtc!2R;Y07Ke^KU(d0J=Ls(8b3Cm+?eouvSi>%@5!Pe>*j zwI9L-Wm((k?nWri#&NpF%Nx=ILBHP@hH(>!3FIz&J}{)C4fSB%YxadWqN_FLwa5y! zk!VG`A+UiRrDWt7?HJGOmR{F{(*;fJ_P6mrzMR$U3#MU4lTR}rpd;o z(U)Z7UVW{6UM1$vpiO?oID~xFVgZSnkwhKHbj`t0POCDG6kWYN!D5 zV8vQ^83bujSWzQMTqhE7cm;G2aU7vr^e_tKV8dAqEdNOBGQU=-$8oQhTAsGqZCDO z^DRTM@Gj=ArbWa)$3r=!6G+P_uPtd}ZfZ!K;h?Q%wrGUMafqV=3TMGuU{Z&mV34z*VAlL@1eUhuu zU*I23Ggc8-+UvHt46Q%dVd`O_fiG86cFt>d zxs9{nJ*%Mm4eKjpUN5f^J|3|YplnimbSs$Y4mHc(z6|s0vI7JubcszBMSp7&I1c(-a<{9`qR&Z=1gZ#1DkEZI^v-#7W3^kw~Y`34A8`Fztj z+b)4X2=YF$s-Jxke4AZ=bcJIS5UlK~5xUm@0)`dk%R+kal9cvKtnn0T^#{=~^MvrE z`ka)R`2wNLGnY%a2CNJl_h|@Ynf0h8t&OVCp$J~58v)kGj{8aqF35_03@2yXw8PBD zN9d1X!^kbfOX~Y!-Ly6>VjDu|o6>e-krANV+umuA<>{PF6=C!pTDoNtG)d)XAYKh3 znN97m%@${CMJh{f#&3{L8gE03vCi3ocCG+nQ1hj7GkiXX6<*(q5n7a+KU*n}$qV`ptZFYy<{fm&liC;qVS$-SDu@X3~0cNFL ziN*;BgFAG6qsL}2N;ltxrS20!JVSALHOAk8>Ah2$8w}7T|@{<#!StI%~whTB#Ek+du^f7N&6%bju zsv^iBL$t0^IVz#CKIHPC*hElEN&}^bpSIsvKL-iXufI$rPxI*05WHwXf50I&F+-_D z7i9HXF~oQ1h#Zej4unmSrl8g%v8E(x3!XAgAdF_#=2#CMz|_y$8K+Kdc||ifNl@fa zS}`ZAM`mFk2nCf70S440E5V{X*m#%m5U1pq8uLLWzZhR79-hZv1JXd_QAPRG$n?27 z5_~dLG(TuI`rSa!=e_^Kbz%WX)7K9N`V#0-GKl(eL?h3W?_fTN9bbR?&XK*aekeFG ziFc~l!;B%A%a`AfHTmq{Dl6@A-%EAOG-SxgMMqG7-5Ssb6khM+IczLT7#^BtQ*uF1 z7~X|%DB`v+KEu|JYJUO>3(r+6ZyZ;n{Vn2}7(2vE8?RoW=*p1sNy;=_mm0syiiKx7 zhp?#vl6Fss)=%kuCSs3Y}C?uzoJu%=~}1lKjNW7-Shd99D| z&2nq}XG@K7erpcQDlcJCi`=-e4Y&v1KIVojquOV7aZBBp;qr|?-cw68o4QNZO-7x1 z)P1L#o5pV?w=`Y-AzP!p&l}V;a9!w);HJaw))RIo_tDI2`30m?kEzo0VqDDvAL|o- z&Y~9Mm1!}1UFs__xTBXJjcBcvOe=6|Jy1d94O}l)s7mZ8a#dkfZaC zan0Md%Z_XulwZ`@eH|6W;_TxmsKnx_P**olFd)PIPt6xx@mnU#ZCoCGmACc_ z3hcwClE$Urh;@vZPDLj$v`Z)aU{z zGZ1Dq1-+#%t%E3!O?k$-+h5itPx(RqKCJEQr?l{QG(cY)$O(3|!C?1-hKo8DjdyUngqxvM&PGGnNk>z-!E)-)=aZXxeV? z0XLv=H$m|?Vc5?A%F99VMPd21c%fjPpyrio!K$7lbxIZ9@qI;r*4{aHEZ+JOB-|1aw1oE z5VHO2&Dnn$k{Ds>DHZ{esv%p*zX-K^ZiwGE<+rh$q%78DV9Xe_rB4ojonR_gBDNcc z7my$4qt>M7VxH3qN@~1#*6N+MGafzwmTJNK%J?AI&fo=HeCU@J!uXAR*qImc15!VV zj%C$)Xbuf_NwpbH#UQ>TmQASjL}+Dd$_;cFSe>+U9);+y4MC}FKIlyKm>tj1I z;>lfPuDa@`+ zMc4kYDnEK8sP2Vx_>P&{BJW#G^4qgfCtM6gt#*3WK{&25W(^M-96-Jf+_rUCVsk?A zz!Za);Z4o3rkS)qFsZEU4aue!mE95T)^wa^I4Us_V>J1!ZWQSpw8iz6PA*~|9o0X#J4&k*2QJFYAyq)p8bV>5Akp2q+=Johv}0c>=J+XTBv6OuCWjJ z+w&|z<*hLA14k^a-X1|W^u?K;kmN5I__^Ia{)d}==MPaVZKnd;4=DVlmpq&AK!7Km z^ulX@)Q2zm5`3TcH$hhoexTd)V7&?-)aTQoz3?xl>^a$f^ADBwl3!5O2d3fbEK-|q z?AV7#;W@g5;BSudJY9nJH@u=;uQb-Vnz+~$T>{Ni~^tR9*f)f;ESak^{V}byI&-IsU9gJ%okZm2*QkB41mC)2>h@>w5kvp(F`l0Ph=tRy8 z+Ci^MeP>2uMnj>6MG0afC9KT#lIFAd#I28!S=37Fj0N(wHrTrzRRFMdl-t55bo&d zCqe-18#UlOEBJa=6chv0PIC?5>@Tpq6fg)B00004fM}#C`xorg(iA8FKo%?j0QJAO zc8+FrHg=vC*474emIkf{PDYLv_Re$?w$3Jw_Kqh1p27ys2DC=j22M^Xs@G1)CJ4J$ z3%XglQi}kEsKQ4iG6DPwh*9F1X^!!wYsIKqExJiz_V(RTZfP5Vc5i`n-uF@Xdr^AX z2H6fcxZ#YkcjK65Uqv`>d0vh(i$>%o9bU6HKdyeWH@b0tzn_nU05~C8h-+Y`@YbMF z!ZAai#8(hdVY%8!E|{qje*A_ZLzEF!#I*@;@k3&WZy3B0eP#AJv3cWne_`~-?n+?T zh%xNbYph17n{c-o&6c7;7BnC~7E;gKGtXx%MRQzEBp0@|{C<740&y(`Xeuhc28=HT z0yA?bjM4v1#|WRp94sO5V`v&imRO+rRNQ;J7L?DJ%)^&yeT8I<-(Njt>H%rE%sW*j>Q1(IhsL?%&oel(sOpvI48gJ{hqRAreo zCaYRuY{<#ymKD<=v9jVT2MjQ(;t~m~k9wDCj5=tPWGp4iQm%e1?URBQAn%<)`mrbOrnNo^Zs zs3>VIOb$1S2wk|=Xy(!|0b5||7A--oTrp5LdA9Z_51wwvU3^5_b|h)SdaZdWwBfSV zWnFn=F)cG^Wzfn92ELt`t<0vf6peLr2vteWxhS%^yrPgsRAIZB6`8oJ2G+Ap&uDOdrtcHvp~}jwuB6gj=`L6h%TC6|S!XgXUp~-ARfJc86tHU$btpY>MU`^cTHY`& zR57-BJm~h;-0%0HBLL4@wTm0_(WBQIR$ItqpmrtPiDa!%V8`fg*f_Az+m+d>u0gq) z;EGb4UC&7VSP zRjVaoCaPp6sljNxx?6kn#*O6R;9GoawYJz~hfxFpo$8AQK(3YWM-K6>RrOIIkvL`p zs`S&1knhxYS3$uD2?j9Z$P>uUp+mSN=E}w&s$eATQ-M<6wZQC>_w8wc!u1tdZ zJV#M53fkK|huKdA%~4AxjAKi@YUZ&8@RJ+Fz2l9P$2-s&rf@6$1*lk91c)0^02Yh{ zj*TFTW64jp(dm0gLz%w?%1DM6s&Xc9@GZ_0I^;&MZkBL{;)$#)$WAwLa}-SS^8}__ z5yUrtESNpfobL$BbA+u?#JB*!!QcolC=BV6u3m7n#cvJo{21##v>;9$$53 zNnGOSxY>=w`xlY?0NK~%{1{cZ(fvv9XjF{@gAIlOOy@VvBrJ`k$50XRLt`|@6i*fbI! zU&MC(+5ka4dYgT0z?f5mn}B;iFB7|rsD7zMKwC07}j(@Qu_Cmd=U(Qv4;0+d<0=P_IM4jLVq_C$uGz{Ks@>BjIhHT ze;K;FVAOy-DcZ_B5ZrNt#Av?Z|JxOW%VBLKfdByF{y78X|LzKs{|rLF*ueguD-bjM z#}kH?W$YID5qz@f$Z9u3TZ2WtNopt}7Fj7!Xhp}TJPwCm{*ejR!K`_G%}{f z!ccNbS6i*k)mIcu#B&_iVy-okVW?^?+^WhQVUN0aJg4V9^u6Ths&B{P*mW9)8Hf@N z5Rtj>@S2KOwyD7kORS0RHVKJ&21{3I-?#yX4yVziD7pMytwBoow|t!bnPE?$_trJq zmkCoL7JC{Thq;qVTX0LK=u3fHRHMObEWTtCHo?5>$bDb!w}AE&@W)u)Tq3J8Y|Cxw z)10BeatHwIu;LW5_vV2Bp}CP&fnRmZb{9olW;&=Rw0 z76WQAALgUy>a*3HUDD}=4Kj-|NA`25Ne7c%*G(>1tg)!TbS{0Hi5_^cubR;*oh^PC z6&PBbxjy(4to7c%ziUduVl(Q4j7V(2tw@%kT6)(%R(#rFcA2RwOLYdUP3XM$$1RDu zR_i_yi#}(w6#}S9wThuDZ{zj%o$KpwD3%T*CYBrSxV5SbIKQv!k%j0VIU^*GOq7l~ z!zb!}$^u6e7Q`^o9(|Qi{gn>{1}mfR_7pjognGwu!o(G_VqVcPD`TZ#;p%XcNLbV& ze{Ng;Z&x-4tD#P@YRfY3VJw7Oe{=95PJ$W0#JmEZc7Aiw;J;3D;qoGF5xJQmhRMBw zDi4qy3b%WlBAh-_Vi}Ws0ROE>Y9t?W(0__71^GWKlJP%^j8WRO{ijGCD>4QLnXFdr zi4x{udB-AKh28dWgnXa{)j#E^aoA?Zw#REJ*UE@`ph)49!1#S)gr>Mvg5gUICbw5t z+3OihOufFpZ;<-XS|Uddlfr;jq!aBtVNf?1Xp@NW{-0~f%NvhZTOgD*>SoB{Yz48tob zlADJ;R=2NlAw`Od*$hG)(2^+ax^t&^Lf_tC%8F())4KFfxc7>c!cu<2-39i-^U%BZ zf#M%Gwc&Ar0RdiUmgQRQ{)M2(u)s3VG+S)-2K^(XLM~{kXRUrtIkD17)?5uR;bW37 zpfDl_U1=|~k5i>%rP3)4rI}`$@yLs9M0}}2f11uB-N|akvM?$6yrxxWSxS6SjrQqr zOm#Vh7Jkpgtrw2a%&}nV6(yblVVgzsA~;xxh;0^m=b1D0`mpp0d?c-D7xV}Vct*I# zQxhTE{7K5+HAhO82EERnfF`Hy=G?IJ`ZH^8$IjWUeYl-i>ZF^?#;k0pEoYI^{(-n% zDvBrD1!W(dJyEHGmmFyB?Qz-6r}s%!8`6Uds+XD`!2erJq*L&X`M>}G`(OY7JpZ@j z?SC9~N)~3e2F@;yCjZe_j*8B|TQG_*Yv;SUHsMgSW-+BYVIIhPWQlsepoQcHP>f1n zolOVv=DO{L=^%g_`yr~Dwi6&zGz|Izw3#)gb7@eU?g#o8{(;kuaJl@5rP+(mZ0_tS z_o?ycW*%Q1pgaCDdm{T>5Ix+4gLv$qf;Yk_LaZvpzueCF zm{Bu_oz5gqX>Daby z+v(W0ZQFM8#kOs0=O6pr?0s?0xmu&HR@EA7)~K5EdEZGHmAi{%ZxH|;GovYaVfRy% zQUN@fvrJ?!9}2%=dte1S&j#Wc$D3T*t|dvJ3Ntrlawf1-*AS^38G}oQ2T9+sy|i%M4`QoS%;qV`nub#G z&Re~+cupd(p`5pGP>o4F{B!}a6iYk#n-jKtD}q+SocKj%EFYOcZkQ9i;R{4dPb!s( zL5(hzp4!hm%PU(H#z_?i+4~arhU9W{VW_eL#v_{# zX}A)gILR9gY|)VA))|ylE+MhFm`I!?BoV*H+0=1kQ&O*DIt^t#(WZ;s9aQ^8`21^k z>_Qgm@O1+fUe~Gn%@;KEiYGP|5ZQJdSRSK}2|=@%blN4-R6sf`dSu z#_qCfe4bD;II&s+VhY5 ziE{2W;UwBK(w;FLPw<`+Wz1ST9W5< z7qe-Jw%MYoxvA;R+`3}>d*j)Jkq9+($>(F#`+3tf#c{@Gy6b*}EC&B~e!_wY9mTCA zT~e6p=APkAKNjpHo@rme#@pWP)*jGN}i?4K=U-@UyV zomWr{oN+4n(|)$Jz@Q==D)9u^7)_75{K-R|WYwp5_YIKdK zucdV=+1S5Y=ljXt(hOl0pBr=6$)B4Jekr68s_ujQHPp$0FZ+5esfWoz8xEzK2#yoG zHXQwE1D(vG*`b$XaW)*|lJ`c?J&`UGeiYM2K$2~BlT;Ijzi5XU+4nc@i0NpO_Z<(x zZu2y=FN%!SqLarITV=tQNgeDdpLwGq2z^ukeL2)?$}k)%(FGlx7N=T8gvJIap?!9W-kX=Wc5Rp}A9H>c3HEb~ILw1r13a%+c1u$%;` zqCMKI_RiF54tCYcS36HQ+hFbbpLaPWZ1hG+x7DkQw1v8x1zYKVWS=M5r;Qd_q#1cM zwI7PmUB+g#xx=<(9w!}7z_tzq*}Rg_UB>Gk9nloa6?caAb)`l~O6lL+E6_Hl@2M95 zG6>K6a7m+}J3dA)ZXG~#b$FyAeSv#vjR*dqY|%Q5Q=PDsa<8K3If`4hZ>piFVLOB` z?u-j_NT9HN8m+kx(UfwpplC^R=%BD=I=n3I97uFccL>q+`FY-E=6=BHQA>5sqY-4> zWfXU=qk&2>0BBs@Ptk|V;ydK`tBKl1(Ad)UOl&$w5})r7dWJ5a)AleFH^whLUq9Ei zHfDxEwJ!Ge1ZpQ5 zw#g8)Qk|e$Rt67*KH@_0?S@BmBIlx6?zP#%l4z7DAhfrSQkxaiBKIdlB^Z$BepW$JDhE60mYF-1i) z>cE837*UOQLneM8Ifxo!GaGT&O<-NdP7aQ;j_ankK1o@PzTWY-seoWyTULQ;Ved-t z9fa$?!CtZ7xE3&MK&DiFNh|4(ex1BnpeUlQY~A(xGM0_JSYdzX(Qbm-Le8mhOoG$X z!J3>q4r%}N0Bt&G$goy~)klukr1ZE+FP@yp&Z*O?#s8MzVW4dbb8~z5^3?PPZDIZ()SxI@mR2-}+UKI1||<(#N*t1RCt7=7Jf#H&vRUl~bLz(n5hRZrB$r z3lQJDvm!p~q%)IlZX~r#;5WD@RuQ}kwo`Po{&n_u$5w3^EJ^wW$s%0`ksT#%9VdRa zj8tV^qeljnsv*MFJKbLmx+x#mjap0%i`6(kpL7A2S3_l%4MjVmJLuQE-NF{;qn5`U zp^^xbU0l?bjUPy&Ei&^NyB6!n75gbU+8P8Eib12%UI{nsh^h!%zleRvkY0lwW5YLq zmb?amY8B}9X{a??q&YK*g< z0#`djYlNT8=?QpF*u~n23Gph78Hj%o*McLs=n782C#2s2>?UBQRMUF(g0hOIUqKal z#(4qXFk`CDMd4r^YsJ{R)MvBKsw3Ng)U}^GyGg%QPRC2PDm%bxHAOyaJ7n6OZt>zQ~dcwX)JH4f7sG-!i?5SED5qPBSMGXceFYkM4&)=J{b)l{ZN^Sl_5 za*PUmR7bOq_?zq0?%H3c?k3^DN+1C?dHAq(7`y@!*D6PQ~BTKXs2-#~l05mT*0S7%p1b^ndLf45`GcCuK=QkyN=ldliBk&^9Bvc0g+ z`+q8Onien7vXJm7*^M;fQUq(J=bcy#)TT&3Q3jO_uTIg7(YUOi(K#Gm)ILblbkwrc zO-EDXT=?lr$YNewz*D&&ZN#crM6V~q7NA(@09I0=$eMbLYsRT$j*-kAWK}CJ%JZr8 z;o@tPnyc-(k`oqf54gEy#Aup-N>o_VL+3m?brS)cnEO#737v3uVJumgPh5l!OkAcA zcM3p-Xrpbq#M&{Zk?g1Y+GeLaPLeRPRI)(YUVEsBa&Xp>>_>*i?beHv zoNPBcrn%bB_imWg_zU2*i?cQ6KzrK@7-3`M7SQflMfSo9U5@mhFNbhxMSTUBI^K|` ziFy3^rj&GaDk(D?nVOiIQc^Ojr&9iKhLYD`m_3Y3Aoy7=&lWwxivCTq`f!@lA8fVX z2h^)$lG!t4M?h<3P7YDXp(mVYWTMr!ur6WOATnhD1xNm%%{5kG>w}lca{c^~J|DH< z2r7t<*%+T0y#5lCzaotf5|Tfvy~g9WQG-cxj`l(~OvX$P8j{J;jgvpRy{2h=^~MP1 z$ZTH!NPeloH6Pp?)M{=SjA62OeDfuLgngJl$KqyH>>K-4JBz5R~jmIwU zSS7zSzJ}v_l4{iNT<@M^iSdymSgi$+@e2mPCA(?2?Izf0ULjwTNw$-H8wVZaO~+h+ z5&5D7a$LJ6D(a8%P4uYUX}_wrd}NSpC-}Auh8YlN-cw_7NOsfl)gF8^A`y%)Z`}PX zMaai$%y-<^Ieq=eQu0f)8!YF=Esb6vFggoTQUEn9s!A&sc#7;!vE{d6)$m<8J(bT)>w!~IvnpvScRwEYbT*TE?0eJO!>!b|B55ofeN*P zV5FllQPiC#se-!Y44hTPJ$YOeJh>DZ7EJmh(;YH67f|JOlh|I~AciW4EcvKHrdAGR z5UxRRw8utWr&8H4s5+#ad`9IvBln2vWDp~TE_GrgdRKgR<|Fy23QElqi>z7+p}t33 zH;=M?uxC>@p%A!;Bnh81)4oVA39tHx+W9x;pTiz%78q>dq|({smuk0h1z@{IH!*Ij zFv-E9WXivMxBuKwB5$xj%pl4q6%GM%7I3yU)GG>6`=2?3*87Y9(Ehk0*z6)XLF>{u zGY0y?45;@F2?u{FL0tH}Qfnn#Q5P4i5)Y7@6V5wGu=~CMtsa8pW8_>@nu@l*$%=4j{^{EYj zT32Rds<=+fYcUw=!ZE!ICeFmzUR4TUYuS(Xj3N&cz~UO@UJ3>H`6X?+C(Cg z<}gwuZnF_{q{hdO*TRfOC}Verl9IM`WKWlhtWzq`m{1h-ZyNw%eo0<(+{$YF4Ha(KjZ z6R44R4ap`_`1PVM(hTw6qP^?eG{klq{#G4)`##&zTB_sLU{gN6IX1UAn?eq z2tyj>-KgDSjd!0xtnXPOm6C_K&KXyX9G(_El74YkMFuW%!%@>9BEeg`K$lr-TMo-|}e(IsV^^^tIM7jE1bqLIpR=;1au^c~$Cg^&)vU|CY65nU#Eb#!fC zyv(bz`FmB-n1>ZFW;=+_Ikbr7(>NOd@pXcx3h~WP+<6CX!No3;zp;)gLlIQ^oMYSg zF|<@o%;(gZ)dJA|9eWd*Z%`XuLHj;mSv}(kOkSVtH@b09<#2)$XwO|9Xv_4m2r!~= z{n5r+20GO`de8ayfG> zOyx69p}n6bswkK?oLxSDl_AxhS3&yK*xDC1d9ao>H5iSJM^X{(%v(K+{elvOMPuZy zx@DL8VM4K7w9fPqd`-=mY!FX`4NHl@Elt(M_nXKwVAL%dgvOZ7u2) zn-+NK&uYDR+I#J+NY?Go|BNxr{kz?i16xvRYCOwS!C){2w8I{AP2YVh8ZMry^!iDC ziQ%E#wOH_SQA){E?icrVR+AO*^qj}Kw^y$=%wO0EUU2W4_;3)!i<_gR$nq2+lu|&r35L=i} zHFDz9R{s##a^k=XP||Wdr8N&_8N$a6i?L^)pqUnSaO$pBNiLif7-){Ju#2EL{+6G{ zZ;+TZ1=06A(=wK`V|y%0eE1ABUqvYLEPS2^YG~F>v@hJfY(30H?D8B( zBZ6cF@Da|F>mnLg(QaeC6ahTlw4RF$4&~{(?>pM`A&%W|xNHeFHn4U{3*+>rL>qsUJrs9_m3lE;CV``EXDh0wgPrR$73#QL%Nii#U1<2;nH+9%j zDq(oU*b(O#(^pQ3ERNctmjvfcozY804BgxrF{^5)MLu|eKUPczw@ym?!p|kX#V6VG zHC~*tWnGc+?i6gMoHb^uR9xlCc#9l(i|Q^-zHE|H#{`S5uM!uLOHK3(yN;Sd(q7LD znp!ZXz(L7@1S3p=SkYmcK-8l|$IqT#WI8~kdA?s$P%xm4Ibe@DJ)SvOEtxnqsOmSF21v83-#A0+?Y zFYI2v2WZ|$J&V)7ZhTP8QVoCwByFLDGP8mCs_X#XtZ9d&Ha8S>0A6aNn z&NPkGZ<6oD&EWT~vQdv4TQ@->&m{4(eyPHC*o;04>MGRTvg9=mSM zoGjdchaAL$rmb>*izXcAAE3ODnN|jZnoc0yUq?E?x;?CSswu!DpIpfeZB|^rc38V6 zkvbZF1<}M-uTHd5h$e>4{zB)sL=chACrtAa>f6eP13@#1iWx_crrDCg-}ZCCc2fh3 zGAP)!r$lI1`WszthuL=99jKCo-Zla$-SbKe|Fbmjz=(}Y=0V%$d4LPH%Ze?pK;W90 z8({yraW?dldBql2panI}QPg2wY;y{g`ALqhr-IznGWy2TqNRN(Th{d@%5)TrC{RQm zf$s9DBXPSb++odJDYp?0DAKkhK3DyW?ZZaL(Fw3GIKtVK1JdL?>_b@v?=h>OQo^6@ z!2CM3rdPea|J*$L%hv`c3SPslVaEPzpc*YR1rs z1rJ0Bx0ve`I`WOSX?FgB+MA%_%Wo^6K>v_n-t(cecweVh=!f+?%*_r<8!;<>;9tNQ z{1qCG^G8Zr6V}jSP>lhBMUIYUhoA`j;|~qnqzC~N?~2mOkfs6m5mRl-b~toE(g4s~ z68m3z+YK>&d4E>6+{#%vOOPe3^b&4Ax6IVg8l7GqvCQx^$G+ND;%|CjHF1kbo+n`Wn(3E;Owiq53(B@(fNpik zBM2KafU%fxwk}txs2DnpzEh(q4m;JTR1L@KO&L79XJJLxOC>Q0S2r@l`sYwI*1KWF zFw(a%VrGcl+%mtAe)lI)6Je`rIQuWlzpn=}GXpMZSZo(>&M!!9pJgHpBu)C;`h>R^ z$5x0_VN=cQt$NW(sCH1KRNS5n@Zm`g3B5Bd4J&RA4XbfAlMORC{`e14$%|hY*>&#$ zZJy*guymN!dRGGJipLqAe$(u5FEs`0rwHj~Ia~r*K3D!uH;!~uF62%KiFC8uv)|q~ zOOUy9A##}nfgRuAe_w6oP8HKZCT9j5iQsJTBCUTpwaKYDWsMg6mtb&}H&~qc<)9P8DFwTbBSvOoz!P_tMQ8%X|5sjfBD4 zc$2nVnC0ZKU~}3Ff~Sx~8u;ikni~8>Ls}Per$=j^8}i9KDfOTF23oNOjR2{(SVAM1 zyI&Ftjlfo;O16~ajmjU46%F;;KE~TBys{t?b<3 zWnx1}asC$=EN1D3jPfL|timH}spc}O65izP@rwmuO9nPo{pakR&KR205rtu+yp!N< zjOX%q0!dSo!S7Dr`n{hU0Xfi&-9?Tv7yyujg8N|Yr>qY{ z4RXL_Mp*eScu^G$GnkeRQuM1!Yyrd&m44ZPMl~o^KXOTWrNWR{8x2Jg2-HhggETqZ zxHl%HCX%DIOaQTX-el)U>M3r`Odg=TCDYWG8Q9ob-8h-!=$BmkdecFWSA^oxl4`xg z#QaW36NsXIm9Z}3%x(73JL9fQ)BYTcm~&TAyz1G&9$wUB$Yo^BrGOX0QDeLky^yC0P<2{ z)~E(-<(4ZSJ|tm}!A$j3*u-|a=5`rv7v(N-mM-fl%7KPy8sX?Srqd`;iBhqeQ5}y8h+(``{^^c zb6;veoi&=iU{bw{#x*xv?L0uThhCD6;hiA&C^xO#O)02lbOM%JP3K^!b5^gqyf&QL zmsV+)=4<1(rB`iAk1Ea(#NBJ# zV!zL_&0~Hgg=GniKu!55&G@4y@R>_b3%M(|=WjTRntYv0C!N3eJ;0s$otH+dz1E;M z)bN$tXIM&oXi6$BrEYh;tl{^cL8m^)wo~Al@Q|kgoc~xb`&|R(A4q7sJF}8+?td?_ ztcA_l0cW9acrggguu{k>A7CD0KCX!eeRbx0wK_Iw-ZLEQx-m@Tgg`(*3em3KpLSX8 z(rrSr`sRGW>$t*!FKkOCF3RD-=Ji^d7ph5+2>?qWQ<+t(K`%ODRPlQ^sr{YO`&K~? zh*J|v@w=>n@Z5$Q?p72&!LQ54N5eT`m=%@{Gx3lSK1D|koN%P=qTPFl76ZKJqg&qF z-cO?{Xc0RM4H=ZSf{kA&Afu)9W$Mx%g~1!-h4N#0OJ|Z)2li^w8Z-;O0!Pkj;{j19fg)E|Yn)rQ-$DzheEE*AF zoMx7QItYw~cIlApCakjCCdN&vnzyZS%T5J<;lM5(=rMZ)H$2O#7W9Co4LrIe)RY@|EXbrM;cZ&Bb-=s7KXf;6U49`DNn7Oa;ePbBK1s*k^%t9J)Og>s!arwgr@`rWTTc75cYF5pHZTvQX3ZIa5G_|nNT8(R7j=$gx*&Gi0_hRtc7>4mEH*2!UGraU zI0Swv9sc9g62a+G*5K|y{cym3aY1}x#T^yk!;NmOcvxn>oIaq)#ghwEg|`8e?*yW! z!wF0;d#!$keXV|qeZ2}`*)J^)1OmjG5#U>sSF^*_81_5^w=ZD^R{ojGQ## zo!nq!|1*TSiFY_=PfzD!-uvSusUx=C0s_uI;O#HSDHmMaW&L1XQk1)3-p-c(G_oLjQGh1_{oRp$p`t#hvCTw`pJjm z$p`%D3;p7g^5WCt;uE_(Wm*4vSy5^$w(dCjAzO3K(?x$Ay-RI1BMgZykTBmm+$q;2v9@7&E(k z=xSc#m41~ZdgAjcC1UX6&&)|6R&WmtnWbg;EYkON8I0GEcB)U9oKpe`(L4*>`_)>5 zH_BLS;rlNEv;cPy9k>oM9CWD24two1Zcz~wyvb}?W?%vj2i|Un!dHU!m1#VIFT}(< z?rkE)EYu4t;}e|q9mWX|0T8GumPPaUvTy2qumkm2qyKSW?zGF-Sxo* z9Kz;fXe)q*qu93;Q}0fGgJ@O|=qXGqwPM&|&V288eTzU!PQG_N3EMr=2N%NM&+}mE z#M_zi=IUkr%(Lq`_pJT-2+cF1c*?=PXOw|RuA zeY@Qr`8Ml2!3op`0(+Hb?;pS`GoU)VlinT@4hrs_Rcz@*KqUu=!O>EDyvpvs%7*wD z@|*{odo_C{6@P`a+t*ys{6YqMLxoTA4L*H`jY_xwuK;(q166@_K- z|7ue0SS3^sUnynK532Uo0%X9wTO_SyMxGY|j-fuj;eC)-yQ^WBDW=;5n=*>5NkppY*>xA<;dirg+ zeg6{P9LI7=TF8+xK0^a+E%B923&&Sgl5`g{Uziy@mM0soKq09H&b>dkj zg!4li2YufCQ%MhML{xMQeTHWSA?AqNupoX^C@8JLmJU?%lThZ!${(IHV)3V36fT!9 znUg>-tWB4awt%sgpFfeb;Owe2nYUfQ^-!EDYEdTnRGun8T=aTVQ-;m6_*aGzs^wgK zQ}#Dsj0OXB!9hOnY>>D~Ftb`ET>XsNz8EIVQAwD&{4rmhrHJEP5{f0QAu&~We<)C6 z*V!6)TO@cQYM zktaUqc=cJbPa1|$3p*6QT(-VkL~j5(S+o36{Puwsdi59Wzs^X&PwmF>&c!RiNu*ESzmxP#4wkq0(1b6j|W zC`oCHgo5v)#K6LKGjH(?u}lXz|D&l)K=G5%touJ2p(G)615U3lOPqcqZ0UE>$sECa%m!+{50c9^=7G$U+P^*qc#uXWDmbAt>q+Ue|35(Fr5MqwFAgI>1ygM8+$L=*MkEZkGT^U&8 z5N&;9ElF6U_uXHHrP(2P*Qjv=>I)eK(^5_!A>|!=Bsy3uJ1501eO+B`XUjs=ZEM!k zl*t6W{d8>S2Whz^;=72Y(UA3Ja;^Lx_t(bI+0=h2gB9(OZG(B?W)A94$}l!YR`jt| zfgc98w^`k6iVD`JS=MZh!7%@t6J^fC*lbAx4YYx=UuUJB z=)+KqQK)04k&~gQZ)Y2Xr|FmI=}_qEigujGKXowEvg6xnrYSlqa`S@cWGsK73TstX zAcM%@pWrv0UOT;>_^AGT_@W&@JcjI`Fs(pYOY^R))MJi0bQ;-CF?N&TwAV{aSpOxI z%#i%{Yu_x_9tEClcphxusGNV@$nf_RvrLi1e&Yj8lK+A(?(A5y7o{v$`~9Pc*fIjU zDbsxxjeqhU*2t{4ir2QjKsR^)pMu!M?@f_z{yvFdR9ga-%h!jQX2KjRPyXxxbVWiL zH}@Rfqurv~0Y~$anBv-j?=41lc+NX_TlL(=eYm2iFW_s(c$+K2894SGBdMV;*%EF; z>?gj!@F?}2o>esZBY^m@R=SxI2;_Zlh%)nbX)$&|aPlu$ax3aWQbT!cvI4!L98|tu z9a)*>7uq$;7r+9E9fmXe$tY)IRM0cP3Wa*xJC@!I4C=(CA4RdQrKqTN8F-zJrn^k9IG(33YqqzafZ+D({2N+Vp`tY% zPMKnZNK!HdMz}|;K|yQb(dfymh@!dR+UY0}gw_w@-N>wDUr0PjVYGXgB^Z#C%h57w zV52?rHHy?cCLcFX7=(16UKaO%5JCwyd}9Tt_WvBVmi~!Sa-Pk1sj2;5C}kOmEtiW055dVC z#KIoW*NE=OH?D$)FeEJv`g@#4#RX7M?epuj&IcbLm10ga6A9k04)biaH2_02s!ZA^ z8UTDh2O2I68ap{gj(x_3ou3c^i;_^KEo4s5YxMU@$}m@nl=E0-F)LMpxlsrP2r~mw z{n++Gd(1^XesshO{Wgs5sn$5~cuJs0qxx50e?LO71D3)f+5=fa04@;UKbKuhF@M>M?@VO3PU0ifLOGl_h1gwfO*E=&e$eNLTH@#qU0-(ty z=je^a^U>64T2lesB#jTuhj(0nQ?7=H2jDQGKr2wv_saO3n7;S13_y@%V))pzv_duM zIP7cAj^*f~ub=Frtvv9KxH ztKfx#sJ^Z!uqp+mGr)|5Qv~YIgiW+NymE)3hkS_Eu4B(v*D z$y&$P|B@8V^Ml7AlK=rROa4Dm@c;AM|2GO=<@p~J{PCOPxhsv0$sJmpuoo0WpgA^3 z8jg`4sUHI>G;d0k`u z>um1Jr>f_P?EAXy+Blv+pzix^mhFcHziu;q-Ey4fVe5Vv+7AgetG9ra=OPnS8XrR{ zX%)xU6zYs>32}qGp4_>A4FJ+5=fND?-yHMlJzs()p4Z_~o>IJjlWa}J7pYxn9> z(5Z;jPbrx`Vc_Y-Zftn@pD&V$(nO*g27;5=v_D>40Z@cy-gK>8W zX?u8TZVh#>%d11~BYDUbtSt5#O~Q3-e_a4+)%13g@g^Hd`L+wVo358e@XRNIAa?s& z?PC*&k9^NZcGz3@#Y+so3hRTO?>FN&KmI%Dhgm4?5vx0HZ7Ywk;|rrZH)+fWsF$2i z!kwGoFAoI>d=wgPlByCKA5tj%>?B*h#O!0?aDuSH5E>s|;gWmUJ2!a@U-5QVm>If> z{l5{uxcNSSX-*7iIMX#;ohu&DP{*|9NM6a4eZS#BE zK`%mI-k~lqx?Hb+p`+1G8#Qpcd?cdNCazV+uMl?5N2vTxXD)Joe zkGopIgHpf7fF1FmfRDQIUdC~RGN~kVxz7WVbp;M03*^CTxwigsx|{Mh$!(!KzhKPq z7GOaNS#o%|asi9l%AYpr*+W9`&}DfRsoZxoELy`cv5zo?rbhf(K-%TtmE(s5OBVUKaa?O|^daHN)!P7`ltAVPN= zHPU5jpM!tn4u+MCyuH!>yjh3-J-0k&UTC+}GcsXB7ay`nE;enyhK21jyhKqg?XHqE3f>1Y)lOkbq<&qxI z1dbvhx^7R|J3w*Swx98r#ll~PoynR~RNEp$=xUtp`QH}a`}RrxW?cF3(tl zHdg)T>ff|=o(f<$20wGqKXZ;NXfB74VQvzfuogjaruY43@?h3r1jho2OHVgrh>e^1#U~uvmw&7PccGj+ZLOy^+@St2{3wHYzPysQpa% zk0tJaZ<1ae@0#Cjm|1-pemX0gsH@&uF71}J4`{NKaOWc9p%CT_NAZms+Z^h`r&4(kbCGP*eNk73ymp$UqlfeA{E0bs=MZDom^)fSZaq`z;apXqH_ z5Xb|)K%jfWu!J9PqINh~P3ZFDGU~A|UCly3QAk?ip1x{ia}$%#n%N4Z(F3m?&SMkX zd9%<@az%g(`g5qEzZxqzPS~Nn?-&X0@jzBf(8f)gD=_EPzW^}wcE?N z6kW|a9*H>C;-6 zXauMf3-^YJxJTd-lg5H(7ZhfS zPrJ{iyDy@<$Bjf&fFU7;i}oBXZjYAbVGlwcjP|2jjhCIS5F%+#%&nf`5BTF{E>xW| zd<6Al%&uj66G=9;H^oi;M=ol!DV%C?N~1tXp~s{JtG$%#jLJR7%cH0^H9CuhL6Xbt z>d;XzTLDbHt3l@;Qcf{AKRt+eUquDR1O>u+kR3uZT5vi9{wOUE-K>tTqr{~vVRq0_ zUI=w>u<7DC#p$SbbU7B$nrV1eX1uo0T-rtw|JKa)Zji?j0CG}V+YPqy(tJa2$SY9j zHjJkBG2)xZU$1RB-@l!bj>1Pc`!4$E2>I7(8v;7(=YojU#I-|jz+&Tr?jS396;VT~ z&~WPp3Dsp31Q+k5__5!6HG&a)8%>+EDKt1)fR&@J#9Kg@nPON39A;+79p})IJfsM_ zCk@{u8r1$!d~(6rRYnxVU6L{3%99NFdFG~=53#QEGIdpd0+y#gKk>kcZ_!vZykb#_ zZCWA7vZe61nNo!$nX+jSjAd3K!HPv)y6C_mS9y2Vabj4xrHO4L9eW!CA%uQ+_;%jnPy}d zgBH54EH=ajQBDv(ei9P77GR&edTu_&ZwR&_bDZuiH6ACdz#4yTe- zY~hRw)dH?&l~RROlZNto3RnsD;b8ywPlIiN1m3$Q^XqDqa8|%CAu0PN5LvwiP zV{^GYDno%?XXnzIRsD>Ld{bZX@hQ0GA_Xq|@FRnGa~qN)d!V)E&;qHZbuhYnEoVg8 zL4{F!z?p}pwLCoQr~1$#`m3>w>&F1w3U@%=*mQ%kU>^g*6%9@!n$%`t^N$r@RkNW` z8J6id=MrGTL-%3ZRwWP}7>& zb#elxKG@PS7n53KD`$+(ZB;I1HDUO$RvxlR3{fxfgYyciD`)3t5}MjY)y<161{)Uz zK?B7v^(&O!ryBBmHj>(=73YiataOLQbB+blAwwxVAtCMJNWKm2;FK3ii4{2@T}*^l zrHWkiBG=*mquWR!mc%4=@^ytf?-|YQ%9|!-CYqP>p4QGC>EtoCVcFNUi&J(7cWPwRKI=zAox&RLR?ci*)$JiEYG*oq^WH1;BeiQJiZmw{6Bs&kQw=5ee43kx z*8F3xt7pKCZdH{Z*_;y!+jWbs#$%9+*co5KJu37*7%@;u z1fk$rwD>Y2Qb6aZtYVFgi$0I!N-E@{Nem-38#JMzUSj)!qwyF^Bg>L_7GC-_VIt4w z@wX!2**Y!LqdlD}>>n?G>}bK6v@3!fSkJR;p6d;I3gQtnz4)i5Kp@bb)TT~oEL=>9 zJT0ZJuhH$*AR1Th)GMlHHtZ}UO&qn61vRn++(?w+IXc--6IiZb zZ$~y2Kl3+-oTtJ22)O^oDpSBtgG9!Ux#8d6<9Yj;Y`jGr4MIf=$ z==i1y@Oq8y4)EHz1wTs-kFpp5NbWZ=42n=#^xCQlvf$CyirPB-R#eRC6wh&ck-#63 z8g>CWkcE84l}B)c8t4*KeZb4_*qL{O0)%T^1AbOQp%-D0>;D1 zpQESN6-7fxt*u=WS#!@hJ#dcKKr6>Y3oYDN9Z#Iuto12%(Jey7g`xoQgw|YC4}UIV zF-45kU~$m0z%iqC{HC8SY(PYKeB7O+pw7eJ7h`7G4mO-Uo zl8iE!0!xGFfl1-E{H3`%3q79i=_H)%Ce!~WHhd5}Uh=>vUlhpS!BBT&zK44+bwW)3 zrvh_%R-J;*NPd8!qb&q?wx{2&>wQ3w5}aVPkrH8{`m=3`sG7UU_JXvb3}>5Jy% zTvN{~R2?#0DLx8snm8Wd5Sd@EYe_dY)qeeE)4Wp2o4y)NaSB1e;n>U%^6Y_*EzTEU^X@5tTWzQeAv9fU~^+ z!&phE#Ndh1BKJ_^!{N^GzxaBmC{3bn+cr^YRob>~+qP}9(zfmV(zb2eR;6wG)V=?H zIA^!E_e;FSOUyRgiq%ISJJ6m%JHKMSo05G6?GxlhWGYDjYLYzFi5%T<%~9vRlD+rI zzPvl8W@mL~(5P3XzO*KLV0k_0_+9SaZbV=Ae@E!X9fYXJlD^%{o({ zyWtBVV!>_7=TYQ9ex!j4qoRO{v4J8yxp3XqVLi;|lk}9_t^~JMyFl3%Za3xF<>9(e zUlo0vc~?0ys

IFN!{L=t{}Yn{J4-D)LX^iudO48YSt11bxDbK^pW3;)AdXDqzsO z;JtR>mwkYKA<|-y*e+qmu!@hgeb#V9*roCU`*J9>)^1g0sMwL5zI1+J!!p>dBzBjmNE9Qy=|%BBq9 z{`@YUmvr!g~{mHxr2f-==Cq8VUXYmj807qjQTKenAU(TN!r8792)QB za0sLtvA@$UAV6p;P_yLx5c<~VE>pX zFmJ<{=Jt_o-bRw2?<%?^LiF%D2#KfsA87;>RXI=>XdaRA{ondht{qnA6oVTgF=J_tUa&!fF zK&@cO>K^fqh=~sjuRU@0CsO~B`rHIJ3-~crpiR~!Q28csi`LDE%O7*Vjkaf+?FDIQ~HUzM7*S;Z^|2%36LF={vNyZ<9M|n zosv9)VMF{u-=qFlx+Hk(ewZAV@ryO ziyG`fqoQZ~&6(D>o{0qY5e7Q=tl&p}%cDdYfA^l<$E>m}!zuUIvLY}S=DM`lE>O)f zS<@r+fV(Mf0#_fv3Z|#=?`FBdfkD4(kMe{_oAZdyDe}(h6u`#SoDt~henA&}N-XbO z3cq@`^Z=803~36oD!>x+tAreQmb_l{sO}16CQsRLmUT`A&V13#g0#QADF|XglqbAq zzu$$KyD2QJ&+=$c5w76m^;h+cZgPZ%jU(Ml7`7&mIyaC;y?+N$&hf8Pv$Zo}1^B+J z*kc}VI3hZA3z!IPj_jS3utm#7LwehWQ_5R{R2=wLDsEM`qi&5Kur+HWALQ)rUo_Nj zpm4K^C&tl#&2H+;QNq4NNgFP}B{+CwHWBkug?kw$EvH$I337T?1RJOkX()irLy$%O zKBa_bsuKm%CMHzgE|c?e{Vb$rlV~cTR=JOLg^A%7QN>eo3RIG^B5_#?O4YDs|R6>Fn5kG?>GclZNlEpQv2C)32bD~ z`Fkl#&f&EPHKVE*m?W<54mIP@5&z)9F@>7g=`hQ9Ib`7o%OO$~!mZI-RpxS9=f+j| z$jFrhHQR_WzOWuQ&*@abh5qAqPAWZ`X~mI=x)i5g(#i(lQR*b{@YCjYwCpb1LlPL` z2WA|b^NxN_tcYWfC(3R+mf)@)-I=yOo@4luenH1AX}v8bi{8GReBdNw+ZFmnu#3W| zioHCMy0rK{Zoia6wnKCJn&4+c!6)Hrjr#+U4&XU z`u5`vAbR>d7pdh@1jx>q!$10saihS&W-9S;{T@>C@c<|nkQuYLaDC`2jgp>Or zDCaF4A7L*X3IMzLg!0uLyebqbdzYEmZ?q)H4N4{u0_y@qwuhED(8`{`H6^ppTXtor zIr9$R(#|+a-HA5EVDC9AxiGTNFL$Nb9oo8Z-{hg~NXF&W=FsN_c~kNZrp?E_IeEtX znfLl+eTTfke@Je@H5QNlbKq%@&J zHwMjG69eU)xKRuR7!o#9KU44vBlAq;8a7^FuJOdapbA|1b7+B>OAe=6)KPCE)nTt~ zCAFdWE{hPQ4kI%RLhy4S#tIMex$~;w%b4^4@22s>B9NSKred0!0W_hxcm0_UP#7x- zaQbXYuRtCPb<6~MZsK*ep4=TQW|dpI#v$$^oO9-wn;J8ia_0WIx3lMk4vJ4~Y?9o# z{GJ3ipnmBQocy};M?Wve+(0#hjDY!*(Wjx)c+{D+ld4>UuI0mv8%QGGWa6bWBoTO% zfR;E^dS+C2j;>$nG4wvo0!yAKJ(PkCahBLTu(J+vx^RwGaj${OM@QZGV6)4Yw$7tH z%P_(8!1Qp*ZJC^ukhU(CW^BeW33Y60C8Q~2s!q1%E8hA37kC48rtb_YkTB0%_SHeu zhO8^;aDhr&9>qQtRbCA{ux&DJG`!ATZdw~}yvJWZ_*=O_?Y z&XV0bUcyoD+I1h`uQV&Ho9iaG@89!UzLIq#=c_%_qx(=}$5k&92|ld0N8M$M|Aqxn{9N6f?zRfuAZamut@cfI^;}wl0IVz=dq%Bm5X_BMs|Z zG&~Od;@l9;_HL%>rsu}Jy&;48&b;s?W4VO}Zk&`&qa1p8cw{h!M|CTbhBN!`2T0r*#ev`RbXU|Mf53y7NOzWIxBk%U-(3Qe>Xt$va)Q-oMKr6kXGI(zbf* zIDbNXM8l)keBu`NV>vv?BUZJtPgXnSh>n5ZTfA_*e+-TI%4!r>U4P-Fh^7s4enU!L zKd^-B=Xv`go*hd=^3X5Rd^1iTGm@V<39%Z4vukj&p!+v+NHTLs2=Tp8Xe)nV&^-eYN4XxO{mdQPr=?(bk z!0jkZMbK9*0ug zxw30yzDh_!@iAu5l6Rp1EyGA<$jG==y<&Mq^x~3|afp^(m0~I8NyTDJOvMI=d^N+2 zdS&$Fvef}r^GKV1jx|sI3buSX*MVm9{A4cg4nDjy?6T9CJ+P zn$)hnZL?Eh$M{lqcC35O_Q1Dn(^A2EEZDsIN$IPv&NWtPZ3)jxpdxon$$_LJ7}TxC zr&}@Dh%h>q!*%tWU?UKiKr|)NSLaz{y zP6PzgO=EI?@VF|2BXQhONr(@~j|1GBFSA>E0-HRiTOdQP(c~NuZJ-Ee6xbroy>J=YWasht+;6l+vZ0P$5oO$_~cVv_ej-WqJ>{@kOHy znuEE&a1mI9x$AuN$>}yP!>$u2fr7f%yQNAYVE-rd9}}#C3y6! zY5~UTvwRN_dV>A*XDXu}P_#E)!KqoQI73M!*RujQ-4to@bnj}xLMFy&g{{5GB~1g7>jo*5(By5rc#$9^;5re{A&Lb zg5=n)=Mk^fxA~CE>{EI;W`$?IjzjD-~&NJ|SIf+FMw;DA?(Zzzhxy7w~s_obV zRlp05%oCK%6S?FK47H-wBJw@u_}!&SIefYUNqZnLALpizR$UHv^toJ*R$0rA7MWJ> zNcFPh-l|Dvj&hIH;!VJow)O%V}Z@HEdxB& zGa~RTJ#LQpMM=!^f{s*NnXiJXlFy%~H$eD3UaX8?AeDcC3l&dUJv5vx{phWy^GpY>&8V)oOC#5^ zNQgWX=!Be`k21fXAS^xu_2?ks=rx8?^hL4fzB?ztjU@Ws z=N~pXJ6|jj=cY#`FP%L@<$2HStT>m-)`DWzfsWbgm3Kp>i(Yrj8SgAE58+PlBP_J<;E)XX&<^zGEBi&gc(m=K)>1d) zB`%cJlIU~EcHN~nMb2d_l_s%ys_!%X5LVLZuIah3^oOBuK&uYbr7e@Z%~y0*rSsCa z7S8h55Ch*v|5U0Rb}^E4CK#HF<1CY4sMx5^OpF<)8B*tHj5%qU zMXUYT)jWKY7_`2S0~cB#^TIGoCcHB3j4`(N7d#{s#s$7VSp4e&0f}Naj;*eRIn?gv z(0$82?Sf-hF9c9fzd+Gb931|bkoSEybRaI`Ah?K^^d}5E>K?0Ym4QxrJfe*2`!Xym za^n^d{`@z0_);589>_nruHiqqF2ny$6Dt4z}m?jDD4UD)ta1re5Ui#vbx99S_yb~ za9aVMwv}G}GKla%m_!b#xpt;v_N0TI(R!7JhpRFrYtspsVz6GJtnvf{B-pYVOAd#g zEXfyBV5+Ramut;cq@guwGr*y#ti#wYxO}=fgviPD@|9D2lr&ue340z+bMf`k(m>@v?=(vrGN||y74b22!75jUt+<5h5$-bo19iFcDOGrQ0xdWCU_1q1TN9I zAi{4l4FbAcLW)vwjaw8#k9+0;^ixOjeavy!jwsB6jy;ux?J2F4HuVte!6m)Ec`-*& z!G>7Ft;)C1oh^1+KcQEg1glhP{@)Sel{z1>YursvSJ*};zi|&JYgBM;0yr=`EQd4$8{R4L+3e_B=KUE*K}5u)lb{#Cw=~bNs@RIX!5r3clUrAq9u1b|8MhT&SY*4{g2Ld`!`e6|MNUa zTe^@4+uJ(Wn7T`wdi>WYB~1Q*GX5|><4#8-8ITYZ$held#G!JB3DhA{B&B5_p*$&v z&7#VY;rgfpf(_z7co296AdZI%Fi5}=pn=qWC`N9^ic5h*{hiE>fVZAzzt7Km)IK5} z2oD)_14A*|Mz)#qiEOE3RhJ#H6oc)gtf=7e=MHy*PX!U{?|-ZPvLtQ99Npt0LNHE1 zI(X}d0D6Hs*vi&#@LS3!q*ME@f+TrEkfavj123^Z^t z@&h~HyN!k&>RJh9ya+Y2U*KM|8JFDJmwyL(K;bo#^OUS#?3^CrY|9S+ui#Kby2=naz@2~0it;P4V z#eVQJ#Xb#{jxydSCv#lZXNyy|nVKE8GNAOVrL_LJ5Yg$}1YKL@;0(@qw?OEIWdS#C zEFN6$;t6)5i@Is}w6N^+ze$i6hPQHE{uTbbVF3XV{I8$Xf4-v}buVw_W!xXYbBW~Q z8adboOEHmzBnWCKfhbpg(*~<8rm4j$l+MB?8=Gv$A-Ley2uhAuXKB)zh+t<}$3W9x z1qDTnjYSnu_&4Lym2$~3P1E*Sm6Aq_%5^~&+h zU5O8n*qMF1PXcf|z(fE%86nD{IQJ^+ZAF~$xa%2lUX5TPuu0qKJ04W|x3Y3_p|QKU zVs(Of<3TPBO^VP>}e2XJk4xmKx%!eEl{IZ2tGe#x03tKm%t*%VR4dpIBTxv z7W{xw|EhQ>c^GBoWhF5#+l}bySlwAfZJtx(20@~b#V)M3U;@ZI#ts{o^bwU(oc?j5 zrZv3W2bm|7&%bEY7r~b&KcfnC*Y%_-z5#@CcXpVphOQ}0ZDn7^!|2A~;zqS6ggc4F zi7^*uwAoGMNIeDwNYL0~L7fGvv*?ZWhY-*Bq8U;#ijTf-V?Dv!^{ct&qnqUf5jPG)Q?gAb0>G4+FB zd(o_$z{v(AH#-XYQO}dSo@CyiNuSbjGX(`X@!PMMF4}b&;E&kC`mmtq=&UDTOs21J zL|p6B$HgOLTvXx~bJ$&U=;bU|#GNUY7>=XEOuWPL=J(vOf-c6OTeeXbI(Fivm>ryW zt4WN8B6Va)j{n-aiTCR29+#oAY8o}MysvwvNnzrv8luAQfxce9^;{O|`@w1!F=%ln zHC*xj!rC8M^?v2j@_q%^%M2XmM3+Z(oEoz0x*TM$pAWO&+vKYnUgoRnJ9-Q}16+*! z@qVT25vO+<^X2o#58~?z#DBdN{vEvZ_leb;K;LVclI1(_E<;n(wbQGIZ{hG*atw~|8@4++itqhesNzBTeK?YP zG~$Pt{s&mUyTlI5BRaLU_9DE=)h9yG! z5mopIz)3tofHW?flS*kk=3+a5)22^Yy7bsd4JxBvQrg(BQg!?a&ot_>o{_kJoV3=t zAAn?cZ?$+TU}m>rOy*^~Q<>wolX!F1o|u9f1nkDwJ$M2ms(fL!%kT%s;kOVLEL2Drz%dp ztTwJyd0J^yAJ?O1qnK)(3w6VOSY|sO#|vRh~!&!KYNvf zTz~7h05iVa^j-T^F{(-Qm)!e=&~IRvmNbFob4#NwsyfwVqt2&rg zbC)HW{yi>t-5K`LEu3#r=T_G~&#^k`9K1j~pa;A;?H=W`Pn#T%vxF~rX1Qb`pI=qW zu(Ub6YT%A^w3=9Z{r6Y#Bm=tdxiw*#YUWP=i5KUC?~G4)BfbFcwF*VxR1&=U)PF#g~dLEW4qokYC{qSx>lgmJcRtm}*uA z{cG2=EgbxU^yBld;qY=hj*~+I7v7N2rxfu(BXD+~$s6G26Ab)C(S03t_{iAs>b|mL zx@1J%t_!a zfrvA@zj6N@L_w`Ts{X^5jXRpXaWBYO;9TU6&&Lk0-aqL3QnS&`*{UI#8DI|iR};@U zvVu>%7$6Q*dWL5105xO8s3(A|H{`SvOn(CBf~u!BG1cNfH{D8kP*q%Luk2v#;s|ri zZ+k!@;g)(h$DHo`=bF_W9H4N*!4-tF8%LFPUuIyRi*|l=8~JxJeNbQhRYbb)Nx)85 zU{h|~j8;dZ5EVSu&@KiI@@d5)r$75H)085D=rtJIS25aSAPTJD7vbI@mSUuuVyK&9 zfSzK6uVM%=BMhTrOj~*us|Gb@IF-7MxkDTU^HWke$EXPb3Bv@x3jKJmiNPfg=ss5o z`PpljUR1!G@Gazd2YVTr+iY3G1<-Lw^HK6kC`_8OC_8qK?zCW!E~-ZP)#6M@Wy)Bh zKN|t2Qv#v7VY67|z`~og&a#$(8#sw2UCo1v^~Y?^^nopPH;@sOhqlxXop6vwXowN# zz&@M?p_)O8#y?37D%TL|8im?{)_ioe5ghD%prIqG*brCIu;(RWb(^eBpKbx%hbZ?o z>gr!$#PO1A-t<~`m-#=LcW$U?)MNR>FH{Y@Mq$JGG?QTsG^Oz^nl+_OO~Z0OzQJb- zbc}``Nz@z(#LT%;_iTHs@CE^->WEX!abwlHetqSYfjTzm+f9**qEQ@}-8MX$Z56Dg=H?)TFYFgUOki}Ier&5~v_SoJJo^pKp z^v@|S9lr?n)^09+{^8Z3HTvFkqh1098BvwNCUHzfOr zC=udkzmZ*n2MH=?WhWC#B!y4v{8l zIH17Dzvn)>)Vqg*?jZwH`B=92(wUU3?F<;6_w;=46jBIffeEqWY5OnsRvnBi<415cNb}46R~9@A}i}4dl6F zO5Vwa4z!|jug)D1MdrLHwwh`bt<7r?Rx`?OJMYY9fvMaCQ328I<(#q2pv6z)b*>yU zKNEVdJqNSRNW@if#fti*#E93oF}wfjA`cEEFKu71jK0Zb?(s|Lp7d%@an7Y`wJ<<^Bns-|Q*~xCBd#LK2=xPhaI}4K_}r>pbnhqF(>GC{@ZL*=A&AD}9Ri6XNb*SjR?x0q%$*B+F7`RQt;h+K%b~Q* zxy$D-;m=>R&l$pKrPR%`!e)V z>iGcyZv3U3Z$Tj!62G`3Dr~9TmJe{CK#bILN?kga;$9WLn^Z33-AnM@<3?$FD7TSQ zpF^C{V(xFhOf<~Yx-DU=JyK3hp#BwRn@1|^!{DJTk19v4;Ed*4HDIKYRcIxwF%(pi zngIomPD9KroUxHye)K>Zkl9s};hE`6b{d|*2o1ZYv9Rc7V~knzG1WX-64<$cjoQIU6~%j%v})0w4cJq-*ceh91y^eiTbtYwY8le< z`=D-YbYzbDry}AuKG}+aA1MU~7ccmXWw9spQx#i)_Yy$RnlBiaUVV=x(9<2#eKu$) zS2`kVVN8*?XGoT?;S}*|?&4FJDw-hfx0LUhBfGXe*pfB32Bod()aZJ!SJ{7ZID*+D zz=wq12}79Xh(_BNKU|C`EaDfi4*8CE(MH{t>nMzTE)*<5z5~ZpV1rF198IPjBs3J3 zqY*-PmES|I$xVERw;SWmoBlzG>vaZ`^IL`1`4(G+-ts+xwgSnK>-9nfkhkQ| zw&5KygW(9#J>D%lA$HEi@&3!)(=k^4#_f%qrF3jC!Q1ArP%My{0<0g)wqbmYZ`O-PAC8qnxy4;NBUJt9^N_|@}-uxU~>UzL4z{40F4yTJTO0q|i z$VOwDm&FJgwABrcDoiuX;1kE(yxPt#hJ7$K33qH1s5XK~%oj>|>OCcC_B=1g9_1H% zlt3e+?&N}pK2fi4sz#zNiZr9Z+*ag7U9w#*nZP+cgpKiy^L{T%H^LNVbUVbsa!+9 zdPn}~4QstXxYRc`Bc4=vd%3@fRCs0d(lJdpe>JkrF9iv~8}MSIRX9a_r)(0)A6+{W zf>6etzI5r*9H6%G z-+I0PtFtd2fE#CzqwbR#U=6Z)AiKddkTz8MbBFrqL22OR15@2@rBM2VWuUOy)8|Uy zHTU%aeeG8*&Ysv+kXLMPVfEdmJy)1rXoCjoYdG9*HBuk#*`C6|Kdv9Lx?efIUw}w2 zUjJs#7I6FX+ZSMOe0$3AO{?|Ii8}Gu21?M@AfeKF9+zrRYUZyKm6}Uekt#~xOAEz z(!pU$LYzug5u-@m?D&lrNYKd zm1vbGOe)}6xnvgisBlXz6eB57j8k$j|;m|B^4oUH-zs4 zRI2z>BXE@hda#WnG|XZQ+=La8nIIB**=aT?Z=1-xaQcg$H3rV6Dok|~z8u9-$qHR~ zgkIWbaXpzJjFS0!c{9$nH*$HfqDG0OReiZKBjI2_RuXxtMxL-~4+0Em^2&^!FT_6agCd-PX@iXxXkx9uOJ7Gu%Qo#5{1>Wq+XAC=x)@7r|m}- zYsaAZLYWg~Xe2Z4oS1MCe+4_AQ&{fFP^F$0CXbV7+=v_?Zf9BimcbO|!XZjx9;fAT ziJ;`o$kT=*?(9f6iSo{Pk~AW=4NQFW?SGs+)oSSOu3^t8@+$BpfhWDmTT_KggV^7h zj6*|(Srs6`a$Pt}hbl%osRLht)YR4~AfmJ~&(n#|(yuFoPLE1O(&AArnOzpZD+oDoB4%Z2XF z)^+EXW66p%jYaV_uQK<_Po!9>H8=aH}4x z#f-U7HJPk2a}GHH4(4jC_`CutBsO=rV&;{f#^NaWTV4e|7*TzNIeUC4M}vAPDLQ`> z#hu(3NS`ggUUVQ*Y(j9SN2(~%`wCs9;wq#eP0qrvK5aD3XhW+c7D!L(``iQ&qxY!Ew3`a1WIws=6cZEF7SwFs zwPmm-uaQWrX(1g%(?DWzfCshy%5dF$m(>;*q1^>oe|7a969X5w)r|hIu}miAqFLV4 z!p85bU2l*{-E0u5X*~4Q&NL~GkuTfY9U%vERi{#Ai#=d&>5^B|T(Fshb0W4@N?0&G zAjD}jWt~oC6%k*Vkev#kP6jbs`xVlc>e@D&h^DRe1P|z^lwR3v5M(F6Yof(AMV`Dm zqAPlD_>v=1&MRR{m|AL|xJWGT09o?rZ&)8mS};4%g9v4EDdjUid8+R-Q|o$-mvx_I2@a$U2UWNRNzy|R+S z@o5P*O`+9wf&q2gbTC_TR5lMLX^grpXHeAkye`ggQD`K#gH~l5LxU?RBgRSr82 z(bimCnrdb7#Nr^q@AEijwFORD*+7$K8epH}p)h)eyG_+@p8e=*T_TGPjfaDV@QlqI zId@{AF^;vNVg`oU%AH|Dl^@%PA_@+k{R?JbpD1SZXj{4GPsaKjSO2QwfYbK;ufwAa zwq{b#>_KfWUFkDfO|DMH)h2Wu>{ zYqEQ(5)&oyjzru9?rc}EFI8E_F38(#N0|a(%oBzKH?3m{tP@v zdD$k@YV5~3M;=sm^HFqwl|jMtLu*y3D*i_kMr@Pyj{6RHEU z$oEl53`=?MnVfYA9s6Cd8ws&2k`RK?VJ$?nH4KF*alEG65wYZ0pq=GzThMySR}&6s zz3mlHnxgq=we&!&ZoUjwNu^sc+h}s)3`Hvzm5=0l0behtsl`<04u2DKrj;OTM{2vE zzhAe8Ty~>;HN-$tb@(q9#zRkGO|(o8z(Z40CE*XSK7$##IlRxG#7tK#k!RMcYAkOb%PT$)5I8!(1^llHcmiFOfKg1*X=skW7l{fq7QTw?`g(AE6AT%u8iWgd4})LG5O|!5xS&s|JbvgYwp7 z^Ofa~)@-(wqvCVnaSaRJu&W2YRU@El{&B`IehtBQl4N5+u<`QPvnzA6#|1afMYY&fu%rvkz_B&g@4^ zZGBVhhJ>ru)0Z2~*>H@s4x7pNxb} z*Ga7U%OkSVx2Gb{%OmHbZTt}Ujv6#`-t3uu(p9#lFW>CFly6R2RfVTvsl*H~_SX6u`B zhGo8YGQ%D|ef!&-aVc#=I;dwAr)`|HLpyrO@RKl;y>l?FGkspD2F4^HnBG&RYEO+UaMzRcM_O4q%3n#lHH<--yvL`z(# zWWLdVfE<)Y$MykE-<>!3;1pKd2PIO?S29j&Jx8MorQcGwigwmS`ZQ^>#Qag7B*ubI%>p6D8kj2enYSsCzyP(fVa###nAo*-~5w~ z_w`Hlm9pD2t^b4hz$=HE8Qbo zWxL6}K7Whu8z<^dpyKyrAcXIsV!6SdU*v>JNSHHB;Ts8HhSHsKRq-*Hu7E~^E4ZXI zkj6olu)_yOnR9(q(GiWhvvT(jR^<%D6KF4l@UbeEP-9KS6qQL{CJwBw0@4lU7K6m! zw#M~R2X>=B$kl-wx8eAvN}>MA%9%0iN&z8C5yebUl||6iOqkk5Se>R+1x(d_y?6(x zQ&NODSG&wrur+@C`x$yO@W;n7qkAdH9c>AN=P(+Jdo$MDLFNw1jpoOU$?SABPZnxy z=S|lljW0A>9kT@~^nc&a;e^*TE^r4*2yOUcS{_uCW;Jxjd#%rsXKI3^HIfOO4aRl2 zG{U4Z!YrBaolStxkE~e6SliUF>XZUqSd#r})$VMujBGACI|oG~^zO-8*#FEmTUOm- z9g(IB>z2yetTNlrFck0>8d2o^R5%gFpX2-z56X8IUQ_DuR6E@&ln6GXU0rZ>P9oPR zWY;_3oLM`Td?2u+v%Oz&moLZ(cE;vhbx%XcKft&&fZIO#XgbxSpIm-nVF>MCmvR{E zDfh%i2hUSIxuGRo4kAY19oX`(3X^9;N|G&0old8-9WsSM8=D>~#w9!>q0_F{Yq`6( z7le2*JQK>~5jRoCt0Zm91pDzdQk~Yv^fR1GpV@izFgh~iZC_MDhD$AcGvKtU!@{LG zao|Iz$=%N&TapSLrkypm^@6ViXLqjLqxxBrANS~--V1}0Xue0+}um^ znTmm|N&HGDSJdksT-yn|D5lrP0D(M$)6M8~;s-qw+L_yvemaP9Cw$4fW}Kx2uBIx? z-!3Lcg#Y6uS3tcr?X`(`{hTv2hn+g zOA4ijBw5l_-)~4LieO2hh)e^ZGlSnCi9ms1p$q{Q5=PJj9hH@N;Wce^XbR<4TdFA9 z;cyol3azKt8!MsKnwwfHJ@-F=kDV^qc#7Vy_Fliwu9xffn^b3c{+FKq(w<&(c0{) znKCCz{`w{klw-O~-Aqx|LVB3b6L@;-i`2w=>yy-t-3_hk&vz3zwU-wu?Rps}DPLU; zz3Oc?J31hs7|#DzSL0lDClLU;{h^bnJTTXqy_p^VVOI$VLfcxP$i z<4ANV_qH6nvB%n&yJEMtB)ejFR~S7p$D98iN1GfyF(;e90LDbSWOs?M01KwwSXKea zjWB+G)k!Dg+=o%wQis`tCe21O)r`VkqNkHIBIdT?JMXMx7hgi;2)hp#3Ly4wj1cI`3yiVUg1U0Nj$ zCalmH5&t&e3)-{yB$=H4HiyEDhE zxk*HRgtMl%JheK*Ici=OvBQJ`VtX_ci&*yMk#n=rtW0a{bMqAW-y|iF zQn|IpB42NNpoLJIFq z_2g6ZwPjUU+Kj&Y-XkP%(-oKrB`fEtp=5%TWfqoYHkK9D`cvISd9bRi&G}qv=r`W^ z?Y7ujSrrF5#W44I=S!g*p5SnTzW%azrWzeq1{-jh*qK@wk81|T)(=SF-GMUT*jSkN zQ1?!oq|K}q_5X*kbBGZwYPW6Kwr$(CZQHhOp0aJ*wr%SaPuZ?pf9`vEuXA&gm7VOy zYVF3_S>K#v?BUh4?AAy&sBdg*s9Vq3Z=h<(yUMgkxQCty_5lD+rbT z$ZRH8m#N3<9wz&-|0*{~J`NW8p{8K*!wv~`c+3v&sysZLRR`}?bQZ;~9~cVW4H$WM zC=D?O7)-f&xPlH&m_Wdz_bsik3ixG%x4&}=-s8L;=$?nmqhGjH20oK!fTZU~MA7)0 zuk|Y!;D^UrH^bHQ^+Di+L%+K&3MP|fK%wX7iLjd1?taaOMx#-U_P}TQGtX(P*xkzs z*DZG`73zC&_4wY&oS*Xm5}G!uwoGTMtEH#E1*FZ$w~A3!YdbKNi%cem#cgec+T7Y* z>2taKb~HAN!QIe@gUqvY(WY->FAN9rkpwmLdKo!x?sE5=>}qUI4!m+G*VRociH8|%odK;8JE z$5gZ3SEJmU0j;+`2d!Lo4Kf`uPpE|!_WS1 zH^V}AAG`zjY=3`F@H$6G{bKFrq*kt5AKc_A&hilIoPjfX?9kis&L5ME9Ri@4O6kQI zOj(53($q~3G{yCr&lLL1Wi9<3ptW?CVmt04!SHQJpsCN1WLj8Sa~3M8U{xug&pXt+ zi+j-{V^`OpO?cddYb>Kk+B?*pK6#`!VT;9-Y}XNFMd&;we0{h(8?{4iM14L-QQ~qE ztNx=4)F3B+7~`1!LcW|7`S^-JmhsU1gZ-=cqD@l0Fs5Z2NG&5-3@L3SYcp?W3E;s; zO7W`hV`{SWMbT(sL(#OxEHLivO_aSo9RO;23f_U%{ave<k*Cp{7ybBh%k(I=~!(>7WU8O$>;deXC}w^ zlH7CR1UA~#nMgnYwiHfEWlf>agDs6o2M5PEyny@*1?Aw_gax1H6_S5sU%8W{7V=AV zwBKI(Vz~2lQ5Xg%S^O!#X=iLHn_}ima{fxp71?sK;f_l|d|s1(#3USvZ06tMj8H0; zu`FW=>TYV-DA#blt4#%>Em3ZTxJtoFvyk6IrzkSsWMndrg=R@15^pWVxh#oRr3Jb1 zJ|+s@MJ&f1LCk2&>TFKMBESW`uy@vyu{aAM}uqg!#T_9!-)5S2*mFs)XGWEwDJ$jUxv;m|G%T+N=x` ztvjay6+=vj5)HgN8r&bPFY=`oIZ(!i zK8znMz=qP$Hi7U}w&fL;X4d`EtuJ{5WsGu{vcn5ARz*!*YW%-`9+0=^fYvct#p8@P z^Q%>D@6q!L4I5Z3X)Zuse+r@`1Xy;1`PGJc81mOEKj3< zpUSJlU(}zsz!AvzgFd~*)z&z(1jfv8Ia!%IST(dnxLS_ZJLdEx0FS}J%dq=l|S22l4)XDt02?IY8zFik4{U< zA@xKm=!#xVkV6tUEuMoC4URN$-8Q*WdT=_5x^^e9PA9%ZMiSI??57)3rEI!W6gZ_zq3_jT!R8%FL$Gt=IQ z_kKm%&)r?oAJ(OM1n>2ZUGX8{YaQktB1`iT<~0vX9-2tgATUbvk-li$TfW7RJ{&ip zF%4ot7l^lrfA1#x|GC0@6PNy$W63OA1M3M%TQ5_W|XQSZ| z*SxO-GP(`&SxBUhBo?TibyH4o(lW}>n57lJB-eeWqdj_RB-Kyw7pCZG_PjG_QMB}q z9)LEErg^LMnL*-5H-BK#+p`DBLht`W`3ZJLxf&@A`t&3CChzjjx%4C3v6g5*(WiZH z`xZyKmvW9-WpKC}+Jw^-6X(CC4d8-kk94)P)j z18^@KiSpF2umNambm7B({Wtr!o_*sI9I^@1!?jco4IZON-b2gyZF9?FNNFD!)s^B> z%|rJ?Mrjuaihs;NgN_ZaB_-#XhL)u#4J>s&J4inWH`oQ`sVtQr+Ke?S|iJzzd3lcTZ>-SzBIJq_P(qR z1`2K3g*g)IY%tHPy@iNiW;PGWQZ3{p7Ndk$Q8OQTHYe{?rRp|K~_xAgja~&vH<7lgS2HX9lD7o zk7XlTHaDF{{?5K)&d@iIZ^_4vM@MJzx3jYE>7EOSS=XjvuU)FI%`a zZ%%{jK_EYl-KWxKnIZV1GNUB5jH8cc)e(2jj#1!7v9$)I&4IBY0#Y+%9oYoqu4Qek ztSqpoEL_x+Z{V^btBJbRPr)#WI|l+i)wT211?54npRrf<1Y3TD&%Y8LqCgTlVS<&j zUh=v=VC(U7KmItc;183{l!PQ5x%9E-gvhn!9)_P<@fp-!ztF#A{VUU~z_hke@y6MB zJAz-;aL;SmTDmO0H3h*hax3tvHV@UEv~OEFc4OY6*}bc*F?W3;^TAr3*TPpfN8f?I z{ITjPl9o0b$*MArwJYY||ARJ85@gX3LC!O={x0ff*4qxf`9(hYbo6nfnf(aMbGIF^h zdvx@gg)HwnRQTGi=D=s(S4WKGK^nURjH8bBOprQv5p~QD82mOBQyDf|;Ul4J=|ALj zS%8ru{MX*s$CIf4&9Ze9&S=NK`}D@z(jigqBYkT_iTh4L?FV0e(tH6~eVOfnbKRqb zy#BCHIMr@JaXoT^}4Nv7ePn1R1>*^pJg~(+C6^p61 zpnwi<%fD*0hM6ojN6WK6t!-9%7p69o)0*g}iZ+rp*0!OK0#n|TE68i{=8RDw z{$Z`<5#;G`h9}wE(XK9cZt-U4#UJ2v40xX(7l1zvgdhHOPV!bC;D;5`5AZfx@>V)P zUoJ==@UxBNRkgp4bf6B{j~LPq`F5A&^_O2RAG8PdDTnk)xBrs3?+@U|5BUvn8!mY( z9>6ab^aJ^tMDnWKpGP{72mGy$^a;98pR`{G;GYBH5B$0Xynpk%2l$&0a#y?u#B~se zPhp%y1Gt)e0L*|H@)_WnY=E!-n}h?jJ_V! zXRhGqITWvq1Pd?*-rbqIjo6$l2tF|TF!ebw%|uw(JECIE^kh0c-&*%)w#C-&379=e z)3C{F?lX+OK;O0|V4q_mAKUV|UE|T}yIT`$g5MTB9eW-iNa{mfTUCnq==#vwr4Wh#P81{qY)F*@XS#-#xTn#2y4<>T)BX^ zXewlhD9>Pupcm;rqjKq%80k69l@{kNUU7=WxO&Zk7(ulJ8CY?b*b?~nFLP6TomdRe zLAk`4MXx*2*nomsn6gJ>k&haa<;0t1-;r}3m6`t29)~HtjxoC_jG2AfaB^nzJkKs> zT-s(_8YU^h<;uI|FrIZ7ojzowl@OiWgoCO~V0Om~xU*t7_DNnNiOoHZ`(1i;r5r_h zA$}L^Fg%^~TJ6z|cF|@>h!-ZV3X-?=00?|;PhmSODc>r zxsuc1@fdkM3qf0yIInE$Ll$MZY`3xugA?bzYmZP7oZ=g6BnR7 z@DDejJWyxuK>1+LoPP2Fznp&l;4kjL_~39?Abe2x8xTGixHAww2)Ij-UHFr&embmW z$xf)r;V&nt66ymkwt0ch%(!A}OB&nJuA2GftLBi}GBv9r=X3VvIJ-h?3vj76CGH)u z_<3B13-a38Q~{X_wxjq3N~jT*QWL!+2Yl5#Jkq$7Bv9#TdwgsbA>5bFu1WnAcM#T^_a?s00m?xshbIdgmNZ2FtvbEEI32b}qGeebe^&FONN z?xu&FnR35wabnH=d8F@nVCD!t@ZwGdc)<5J(B}d@p8J{c=N`Q+Z?`Yuuo|Po_z*zn z8lgX$m+IxrRun*9b{I_H6>xbaXde-BMB$gH{_GnKTmM6>(ghCo#O+?2iCDQVCO_vJ zwvG?tkw5A?MQrE^^0=b47yvieI*nNAE#fBx@_^I(^z_*5>!}J{sif6MOoqQ<}`Cn-Q1YIq1ok z2o~h=W(Yk9G3Y&n*A0N^jSP4V4q?+*Opj>i7l?3A9TKTe4D$(gu=_$3{~QS@M1Z#_ zQgIs*NhB(RZfR6IjsPv1$|3uRP*a%p+HpoqhtP4T6mbalxK0NaiCd^}DKr<3$ju9^ z=qnkcFsKbo!zV_e4tn=!^ekwE_SpsQ96DkX(H;)EjC$ohjANSD?h=$fwF*rdx6GoN z8J<`xMQ(%=>=n%`g}J}@R=?w@g3eWN00Ec5rlh7~VtvH|NvG3MHNnlP=N04i8_}X< z&H{{x&db{v;m#pz*1ruZClHP)%AIc|8ox{+kS$ZkKFC}{JVY6*ibZ$`tOOB)7MT{b z?g?Hku3g}IHp8y@j!}~Xs`(SUdZpsmLtM+wT?60m0L8!qham?Vwq(Hq<4Ycvqyt0V zfg$I_@c7^k0T*@(EDX02CdO?s*#Hc#*O35+y)HNwJEc8!oa?E{;`#*!_19HFR0UL2 zY&VW3vv+8ORGiTT?Qm-&8K?#>0=c}7Bcbq+gbIWfi37C1Q`rC?v#Y=e=`1Qe9cq{; z1rXv}V6Y?;@Ocob@oH0a3|-7Ve>(^+Q?oMM70z*0UpCM}<7EuNS&UPm_X@z~5TOmL zaTsYBt0nzKg-a$IOt4yg9VhZGcv;wRs6l$UL{;U0RAr(RHH||{aD6JzoC9Mw>{pzz zWSgrip41eavKCks6XVvT>n(_;n&T!3K7*G5%gq}5uUSa8=OUjov{Ip68}yD`1R7D4 z9JHD$DqQn1(o71S7GhSbfOpC=Km#x_N6^%W6qkCo&~knnBoMkhuRJu4VR31PRCesp z{|4ceW$XtZ?*4wTjmdNlQ2W%bnAt|r#z;}eD%zTA7&UOMIMzi;i0y-7gQn7i&cwMk z5ot!R=G7r9ry9jnf4<|js#Y-E#&>`&vn`MbS$7AHYGlF;EpI#`q!VMAbev-xKJuY| z=%GSGM?gH9l|@fSVl1+SMO8;cdW3WtXwNaVJ=u?puE=@h*rlL7hz?PGLG?G(g}CPC zrM7vIXkJx?tF0Sn@5({<%8V0!WL|{dhi#j5PC>Rb526aTNixm*$L8E>LgDWu+g}NY z33)C88#L{L&NV|u_Ibv`(c)Lz=IDJ3aKYan8O~2`%)`^8bQsO`31!d3u?Y$VHoF&! z(!=)Ms)tp3B4+!U@?GpV)q!iIBKL8Pez>KO4`sfl7c+x6KEgU%n?@qDacBA*CicHO zq7T&So+0-I^kF;}8{B^#-@S=T(eA7W;fpyAX_=u}uF;t=Sh#D>Y~pB!XX>H3|8#5v zA@-&a8Id1HZI$=617~+5NB2cb4bve2_$h1y8}_8hiT$kyaEKMiCdDf>Jv4j|^$1am z-diX+WE3q<5FcOAHTb({tM_V?4sChPzZqcb#c3FeU>9 zjiS9UHa}%75$e^dNK}o==v2-{OiMxh4Nt0_Acm&dOU=ui6(hS|J^E}>vNVLUgJFF{XrzqnCuWO?H?S!z{y9R0Yjs(i120^D>BKDRP*R9WO(tVK zC3_{Fi0PP#EuW+bEU7}+TmkUHOK7HZ;9ghv^5Dm*-I4Ys5w~LI9CLJ9m$O@2Xy_Lu zV_Qwm5>+?Z!u-=*4nPYx1W0-1CS!-bS))k$=dML1{V%RPF3*rRSF~(Mj0R{XGes7{ zlZY&417`Ka$fDzg&}u{Ai%9P;muYWAJZ?SzCHy~!zFv#rHMttwjdZ+LLww07$X{3uJ4aTf#*03dS( z5i_OQ>B4fDC5esT(TQ9ZJ+X4J=K`(_VQEu3)`@SIRG#eB$v~Hi>9VS0f=#lbM{P}s zwh5w(Kf&jMoFRBg!sn8lF}X=2k5N29yCPferjR}K;Y(}x7MtYZ&~-SZi+>rTDq`ou zw(_e^iRo??!C8We!1xz;Tujq_n_)K@AQ!Jiqj;n>N#J#*$Q{~Y%=}>(%Z1>RGOodT z&TsX+39!O$t6s$i#m;Wcs(JOkF%}ahz0A94wQdn|8UP`uf?dS8Yjk>m84`<8`h!G! z3DTopuVl(S%O0trN#aT4Y03h!g?RruF00E)BdwHIWhpYMoR{YHiMX8b!L`@d$&BoG zbXSC6&T<(r%c+ruW>;K0R2(9SuPCpCF@$IT+fTm=w9X0qxbHo==>4~0{M?b{M^*t_ z(hI?IQ<^8urEnleC_7t5(-GigLSwnvYsI8gqP!ed5*AS>bv)|#eX^9%IuYsO>~w%g z@QT@yULivtaVFE51KMGI`#CZTY!;iOzN(O^BV(xfPYl6wA4xo_I|j#ngY&x48HKF- za%#9P=Z)U&@)f}RyFPP|A_4;{xaq{;Nk9njl+4!R#S2x&#Za_nO@P{PmWV%cQ`ptFPg`VBCx5>akMTMk_YGA+ypw}q~z7ReRk za_Np-+O7cK^s3nDKTN&>pBOt5WJ`U?IX+n>{UGVjp4&llaJ zc?s=G`3qp&Hg?DErn=9IH|Fpqbe%zej|6ncGL#U>(4jOZ}I&iW-rEx@c!utZN$ijzYXI zBE=S6w@QWTFEr-XS^FROQr;kjtP--nN2%GSC>28E>N+R!ulPmT5%|tJ@`irzwc**G z#D3y(>TmnrHzp~Y^~@$VB+TuQa~}oxIB(p{wxtIPKpeKK?5sxq=EF9ua+*@(*pilI zGtg4qi170g6)Hn~c=us2zKF(co{+nDKpch|x?sFd;h#JXEPqc)UoT1X+xpsRNE7eV zE2R}N-WiwkI3w2QEuGjG1W@$JlzWBz-q@ig)hpV3lES9?mMq@bWRq_MX7@@q?s>Hc zegqxg__BY(e{^{z`14uFLobPpG%}@{cEGq@;Txqei{S2(`3INwr6WWv%a?%OvQ2wYd#vgU zj?=t@$u}6%9if!VfDIJo;aI9bL+89Ar1XQrvP8?IYw`OB>^tr04+5l;EDlyAL@HH{ zJIT`-iQ&snN80xiqbS-|5jo??Y6_)$4mIipMJdf9dMZXCt|?hV*-!9#3 z0Vfu3E>Ua|RxK1cwW#w_HGgK8qRxzL8Fb^`Wj7T@CRFnW5Q^ES(UA!k7NWqpo1tt&na4A(N zl10jYu6IkTlk)s6|K1+M#`K#rdfSM{O!xPFYcWB&qh0Na^yFuWYTZ302YP2%miO3e zpevdUW}{HaouD_`3ZB(^Y(RSoKuXLKT#60H1Uzp+yE`2^umL?8H0Lu^Z>_AgEZEpx z!+Lreh^O>q8S42E`ZqKDHRo2WSbpY(IS+QMANyxhq2=hD-ev1HH7JKx`G9<7QSSf} z1Z)z$$#GE^TP9?Sw9b(c)#AjZl_gZva%9oSmQwl)dmyO+s;({`(L$wNGF!^n)ZtRk z0$0nGz`otC&Jkj_X0%#ETO{`2tJn~qR#)W0iI?B5(BOukJELRh7gio>8UfeIe07keW7uZQ`lKiHAGr9399{ zXXC(leN*R$>#B2GcHqXBDHe|zD^~~Cjpratn);4tz%E@LQZ?|+fTY$xp^QpjOM#e>@_)$MJaC`M%Jnj*qSZXf@*Mp$)czYiS`Xc z!;@uZbvh5ZNpBI^nwe^Ks+{Bo$l?T>Q&dypipA62s@HIdhxK4+sK**4m zP6-B^pBD*^S_EYg>H$G&wmfu*7_JEMvU0N6&G+t>Md%yD#V4^Pz*#lz8%o&J9#f`#9s$z6ItE0-RD=fyT5`O79-_K}v&!Mbp}ft9H!=Wxb|se+4$* z77J$G2O4W%$aHHQ(+bSe8)|0Vwy0xU=6%12jksK71!{S#qO~yK`Y{XkuRbXIF}*Q2sAQ`(yVH+=qD1^FmGCZ7kL{i-02DR% zgbNHycC+_*)sFP}rZ38}o3i{BV8l@{i-b3X(JO<*BR5Cr7(tM{07za4t7p`SwYNpW zb92@fd=RjQPGn+Qve*>l^G;F@%emZihZ(&1vO_*AJ>igRXK zF19c$M_QT&naM?*<6_|kV@L$l8lbb0rX@F)Ad!7#8lRe2Ama9H=8zS>Vojb?{l-u) z4T7scjFv4#>QdoOi!OG8Kx%->L6^E`T98#2lw8+`I{2l4!~AOnKE4rFxF#Oo9Ya~< z1AO8u@wsB=68gYN{y>*q>J6Iqg`M<;et5xMvHU3oyYkkmy>dRjfq2D9rCh)iFgDe4G?nOzvR^pqU>$7mP;6$~b zo+WUwQbOP;l?V+8?Yc_JGK_#M@RbmB;y9tsj7}r3ddOf6jezF-w%&RXOZd1-hyr8{ zi3fW*N2J|np;U`VPdEYsj@_G~-tOUIgR|%QC3q7zq~RXY+Tmy8lFN=4qoLl!VB{c% zZ~-s&I7sp}y6`_ODOV`S7d3dutpc+M&lPVV#DIE5T-@0#crQxv3Y}i~o)huL*RFt5 zbj}S=!k78QjcU!iagS$3&(}^a?BGKknJuA+>&=zm+<}wU`F&@!3vWa?`)yb$y9G(T zK1S49Xb;Yz>|#*FoXJS~|nD#U?vYNHVey;H(HXoTyiwIGIv zP%{i>pP{@UQOB%`(gSgVEmiS_cv=ZpQo$E1@nV!+jL$cILdvX73o;oxC-DWLT^*aZ zdnJ-YZOpqo*;|1xZ`chz*g|q~pQ54F^R}R%#=M_tw)6MDjA(csS=J!7`a)Pu~( z7IuC_K11=P8+r63xSv?gS6^cCMf?(qU()IcqZ9W`^24%S`FG~klk0W{TN{cC!?{zv zZC{pMD>~_svv?_TXs85?+9lJmVmetvr)=k%?$k4t%qgLPEaN$AIw==UIkzPfNy=!t z`mJWD6a>CIxC1HI9!4}Jhsr%O^bwU%{lrF{BrAGwjieDJ>*9pRZ03NM4!Zhku<~&= zhS^F4xjUS}?!Uw_NTsqTgAy{mf@9JU$;f!XpC~&$%fp&8)uCJt&annHOACCOI+R#l zT=dvv(frMv8FUKsWm7)PiLy2qEL9COHXF{W32f~|m{UjWutHyGt1(`pK9&ge( z{%Zoj zu*QK|pl$`bQ9i1MAaq6sjgA3%{v24%cIXdR^jded%C9$%^({P&nT{jyC2!jj8KEkL z4hz;;SxF981@%zTmh7`=IqYaaSGCX+t%6h5NE*mu^Z}-@k5` z;TKKci<$+0aKFU-#*7T7v z-}gl5zhD!J`Y7)o`=ZOg<0w}5kcpq-he5uK6>I#dW*7L;tDgKLpWf3Bt-h!otG;X6 zwSVNc%Wjb4F-X2GAnp6-DJ0?pv?PKW&_?6CA*q!6FH3vWqM@M`ppSz8PmM#rREb0Z}fuBjP2c#7oV?LT4 z*39E-CrIWk2$)hcof%^h=^b1-Y6OXN5!#)THmbzai2P}Fg`8w*yWX?YMSN04BUjdh z9y^p^M--XZSQD7oU7P=lLk_@Tn(~@;2EMhVpGrk-vgoiOuSo_kn@o6Dxk;rBY;Iro z$#fSIC8eA|f6S3ChhTVzbpgaAB|P#EgA_vhScb>TC?gGhA22_9}mN&NKTH61{p!HD!Z)Thuxdt?&Q|tBu4feus3UqVBJPid7a_1 zjb9B3Y4Tu`s$<=`XhE`3==CpVs8Vg%sVn>wru;kdFbK&XJ8!U}Ej_nOwN?rci=7ed za|$|SqF2e@&rrl$) zJn(=+vfFMwe7LT1Z#TxR75POe*8{oIc%cZQvz;y!uMn$2y@xmMSFkOZ)2#w2o>$aL z9=?Encyk6gQW!t7<&#NJD$Ki#8H537+&^g+g)66<*^V_D>RwLkNSR{LIsk!GS7<2L zWu|qJ%W&x`kMZ0|Zt1;~)Z7!-Sr*A34Rr^%+|%ZvV>7A^Y~|VJfqvvUQ1i0A6aw0h z6eVRYs9>iCei28`3S~n{Bczr#S!j_e^ruKJ#?UF|Kou}-&kwo22>K(I|5Ek-INaxn zn!;tc3V;YCBZ^!SPW{* z)TmGj685k;XELj0MqwA6v0tXF=7nUmjod)3=m-iET|w_?2}}Pg zDk@fAX~F1m6hikNl1gvrL&&b3s0C;8} z1fX)HZ;mo7}kF8c;;F3G= zfP&?7omxmW%^`!&QXLdxnJe6zY zXXmtf{N&rVEANWfu#KygZ2omY-`-my`6H+yw#je?o5FyG3@;3ALudN}zxi^YBR4A6 z>->e$ocb>J1(%|n6Rh|JpCia9Z25)rQM~otvU8gwOs+kTR63U2GU-_UCDc)Ui=;dC zO}lOZ?ih5-_&caC(Brk3wR7Pk*aV|)(2ozU%bPBuH4l9pJ0F5DEc~d2QSm~YW6jYr zA~PSbt`E-3>#{?hBWlu^Ed-Kd;pP+SD+*B~n>4geSN6q(I9K23Fzym+iyA2HPa_1_ zM)~)G48_xF{KGT9WLH5Ub44kQA!wYO<3;g{uAl%7IzBaRK36XFLa!png;F>R)Gm-$`z5$W(s;QpBNf-lLQZ?ERm zrlK%C7=g(A%jBTn5p6ID5?X?Y>aO!WrhFPYs|5an3C13@`jnTpUL3lbb7itAlA%ji zH*r7`Y>V9Gg~8WH^hy8(tL=R>7?46@_WM_JQ-5qkgHjS;bR*@sM8E+OGbSU-0$wDE zG2NH!f+v~0ALt_w+nL6{2@!vwN+8rZ@9a$@Pn_>Z{B(Hx%XiKQZSfl1o?L&b zl*j3VF;9QWROXYH*On>vSS%yX3y_w?QO%%cn3OF8GvuVF0a!CIm#x6gahQ{4*_+P5 zn!tCAo{P7p^_r)qOT}k)ACou2^_ZN`xS7?@%yMrt!y^Mc+c~DE(Sc{mG0e~+h-Zix z7jbAt(*+gn(4x5>Bo-`Eqs$&G8n$uH{p1*sfj%p^*17Vo5%Vf=_Q5vG`FtT4rGJsV zRX7HqUy6~m;v?prM&6~=t>%^ZqY|o8p8+Q_FW@ZZT>SZvQCfE$Txl3YrBR#?clkl- z6yKq4dRhdHxH_p3GNikHR!DrqSHXro+MyLeF)E8A=#hIflP?V9{?_Rgu}G+(SIwFY zk;CZi6+bCxwT#33iwFG?A`(}8N$YlPifhP{$MI0jZeHnai9phA3VA^5IpM&u+QX|r zInoWZhm!)UeNZG= zg3oif3DmdG1cNTEB4v?ib*Dj=U8Lk_q@ zo~VJ%infoO`=;7wL;HrPfiV5{u5^`|S;uN1N{U}F`&eP{br2wcd+_a^&@JE}Y9KWI z+$!uXAeqN-h5z*ImPXX{9p>WC8J2h9e>Ls$t>~Gkm->hh0CJFMYPYvq zi1(9)LH{UQAejENCcxOL+{`)~KN;3>{tjT6aINvAmu8%-Sjy(>rYj!vIb(AfsL$e0 zTqssxHm&jG?X#HAg_{z;ZPg-GoKw$?X9Jyb07^1{I};BgDV~WMrnxkJmbpZ=45!gE zCqRxxn8@rI&?8r7Egs`KB;N+B5q+7_BU>j(ccGq@ue;Srm}bEr8^v_WBWXrFHww|= zBkIq9xzjS`Xj0Gd?IqI=DpSk_2fB0V>xbKAO)IH~;{u|C#*r-#tYkdwUyG z!~bJiNKyMx#$H4HM&nhBXaU?9OmMUriwh6AUi!_nm`iL1m0kb6ljgpD{5gBfJA3SMUt^ks#GSeBIo(X$0D&(%!MkRi%>#z=7(EhPg zQ*gKP@Tl)&=Vo2~=nh)n&+g54*YIkXXXN2E|GP~G>dpLCk*(lP#kuBY!GKHv1eMZp zv{_VZj0SB~QQB#uo}EpY3ItWCqlK^rHy4pYkb`r<%g^d$=V9Yv<5cV~#Ze)<)oOYs zdX8V$o=;$b_IrOL?KJNOh5PV~y43gxcVNJInoingtOEDmZ0e#b5vyD=#{H&27L zG5Ohi5EChjn3_XO#+6WTNgp=J*)@FkN;gdnkp{cNbPome{Fogy=B6}xQQKjVeIJDA zMJ|fM>q2+_b~c-7I?6ut2Rdxa{QTHSEw2p!BdNmm%sYQkfLA_;&FnGi_{$nme$ec2NEIeZA?8lilXiMd z7CPLgV40{M6)BX{cU4c8l*L=Rw{kG@PEl^pqAx^xEQc;5)U3%;um8%v;Yb zwvcl7*IV1K+>D0I7&fy_UY;`aHclsgef#7TO!PPCpc9Km zZ&z#RHq19U9JcLYEadE-ovSTX2qQB_v$^yQx#@%pBp z?Hizj?dt2tPCfLSA{(9RKcyZ)KX`EuP1pm%9w_7#ykx!076XEc^4a(z)SH$6u9ETf z$=wzFjB-9nj>}dj@`^qm!8*iPpgfI1=JqwOeF7IfK?wPN8oCt7fUV0ht(2E$svu;1 z2%dV!U-Uc=HJ6o&5~y{PO=SRx~u|o+ODg+pe$`Md%+@^&fX4 z+x#G&+RCMWFblXNs*APP6uKHGnqX95^6}`aA87QRXlB0vGhv&@?}@dv$M692SF}iz0|kV742rmfd@}>WJ7#EBeMd|p&F75 z0h0HPDkZ%{Z<3#Hjslie2yR0}g?7JHD9eQS2KELyJ*1LsLsAF*j@&O(up?UZ0*{PG z9+1yxV9c@Nxjc|)6da^498XW3X1T^BgEYb+I3y1+N z9j{i;ShCEVLJq+k)G)}&2+5a7mzsZ5@9qEjW}_P#LG6xPd-e4K?i19_r4#NTr=}nIBj)ZzxMNgM9 zq>o6uGtD#qDF|f{XP&Py$%q-sDex#4)D_dUkypFwjirl9FeT9*s^VD0i~+~CX{azA z+UAj2&>aob&}9>8$Tk0$3aQ6}eQEc@eRx&VCn(H4gJ&uR#DmE37*6G583x@g>|X2i zOo!AihSn=?)hEwh*Cb>AM_fAOIyIy$Jg#-0LC=sw@Z0GX$`d{Rnp#E(JJ=LMHD6{z z>bs_>7a%{3#wVrXc94%Q5cuNyFkylf=K~pw{}1YOJ|NG`OS22x3;+K^wEpKDHu2jA z4*5NY&wnX=XZuX!pYvOM zOiM&WClsO0X5?h}*3Es)GFQ!gf30Z)!0lH?IRjG6k1!zj`_6x5lMXwr!UH=SWxyEV zm13X`-^Som7KciVf=g4Fs`6k90NdPgodzEX^96|Vlo?6#qybwDJ`65H3tf!>^ak2P zjie1cbe_G5^Zm#K+7qy`u<+t>mlCiv=hI*CQt~EUVrFPEAk7kjKHY7c zhs?J;K#nz9(q0phK=Hzkl(b3D8Qdjz52MC#sv&YNKVZ3#^Q4lmCgQ}2?YNfMs zbp|J~+#$?@JwbP~3(8_NfjCS0O=oBv{?$X&=S{Jl?_{t;4tGQy*ag-@wQU(t@tQt1 zH+0+@$Jv@C#w@jzBO8nqC(}VM^&_2~YnY{;!)v_3Ai|E$xHg6EqYX+@O;d384D2 z5@F4{b0ko;=om~-Zb2TEQ*v>(``L7cLV~{d9lR|f3>9JR_Ge*5-sgw4IVg^}vvkLT zv-p6*m%rAAx!=}?-9#RIc*u{yvwR}tVEKi-puTSCzp==>%MFq0n9-qTkFFjYy*7m9 z?E^cinQmCK|4EL@vwFp>rC4u^bLL55N=!527lvcKbo#Xls5?Hj{q`9wtbRBBaA zd#cu$eUj5mg2j^7oN_bjI5NKHp~SF_Ru|R%5nft8g)vugy3k1IxvmSt9a*sMDO#6w z3Z$Iv+mkTQIVLLGQ%6lm_()7l-2tE~~Yi9+KfmvLH;bD?5gu9&VC zbextOX?}tOC~9hT`)gRJ?Wd-x%qEdK zv`h}9d0fV(b|i&7MFIHLnr-)XjdT@7u_M1G{!)8Z|7p@(J_#qEdCM|GW`m@7f__szAp zZXeqyJ1mJ%2vblPb8BCP_c=1}W34~~XCyR1osfv0n26YXayd~c+(i1yQ0Iodb$9(j z`Lqm?6m~`*5?=#tfRQ>4UN$4*{Re<;DvacbWLwm;84ST_E z<~NWKjeA`JIj8qbUH$C+}8f%F(swgR8jhE54TT=V-@Qk-{9tJ z8w=_gi{HHzpSG=EVCs~hm_B)1X-h0NBU)o~NIMhm%(Q?ux-kv6?lmAVlNpgD65FKt zRI9wKSBR(4w&ZIhGOb5uVNcGZtc+LC?1&Z{?vDPe7i@W&yNiF_cr?j8E4t_?BLve- zyhO9ez0vd*Z}j-Msb$R%yyg0PZe~vn%%RAt@eSg-GrmjUtUX-P3;!FAa(4p3YOr`^o|i7=pof`Ii90-Bnt7Q46jV&FE2LY(0V)7Zc3{)jwJ%>Q-OH z6-ort1R;!NZ>*t2a}&*eyl1V+i<+N%xb z`DD17{FW?3h2wD}OUBQPOjA_onD9ii~(4-6cVYll(em5$Kc= zD|({PkLTYlL`A_<;N7l|Jk`mWz6}27Ku#V`OBuri1azhI{}{+cja<$CYanm&^)gfy zyAN=C@nK;|Ci2QOC8S9IC5%ANh7GcZ3in&6Lr4!Zi3s|Tm_=w<$LS8tAyEV&q5T3l zSXdQI6t(UN%t3GUsdx1wbf^5IC({esY4wIcVAFqDt*)!8tMgCipB>YD{?9pkVr*Jn z`|Foq2YM);9C>+x+To%se2++$6=q(Z?6Zjp*T`2!w|R|L3~L2#CAcQ_xs5UeAunv6 zwIweso_PZwIJ`T%;1CR~o{0mHn7#!AkXXL;0}+^?njr)hw+Hb0wznv7{zU^aaQsWV zr4R(>w|fu_EU!=@39PS_AqniSm>~&luTl{II^RJEtnD5_!h}G=@vrTc zV}7cJC@{VLYg``A@VWn5cv_<7Q=M>54p}^KIY*a|ub(BkheJ-j#rRI8p7OpyO^o@z zRiq?PheVL-5)v%i>mL+Wc2^D9km*u((KCDIik_RrK)hK#-jeqM*qp!AlYVqbIAT@N z-fFe@2k(&*6VTr@i3uzw#*|n8GLUQ8G2Lq=HOunPq$RlUe(L(?*&J5)G|bPWC%_&a z2*0)eWjlY*&aS@3csQy}l+mxZaGXq@pYZQ8PSVo~=+n!@E8VPKOKqYYJwt|jwuk$u z@~!@zAj9{`?B8Ky+PaluFi__j#~)z%qvumorqS^xjkwjXA;s6Z&St%zNm5*_dw}g_ zoMJ(!t;M!bdpMG5aKZg!^YN8fR~$=!yxK9EV#o5_V`j8EnZ_a6u|-M1A?4cQyLq{e zas?KrNkU))-zz`(bng^nWBQ<VGgyG{|qafkfbU;4BP7nGBmVTV?@rviDzwdU}sy<-B64(m!g2YK$oqm zL5#DjMqFVJq{5`g+XO7&@{=v`vU{RusV=cMiwYyByUMy*S2Q*hN+VZmoGLLe#l%aE z`51z&{>7=W8;J2#c-sGP{SZ_B3_IMz_VQ5ph*KiSmK65$ML-{-{3x+>l9&F@ZAdXE(B!fKWPnneBnnPQ3*Z?Tu)B+U{%UjaK zs&?s~!+OJGSVugz{$b`XVH=kuA;)vD8zzT#QV%Dk3QB}5Ayb|wXZVepAXbSWMoJ?k z6{}<(5p3O}Z{w*r+Oo7PR;gD_76?;2gCT`(&|P6^8@VK@>}(6x9H%smNzs8UB^C5N zye<~SUm@1Krj_)2;_roJsihTDnREl$_>C!cv3p!YJ)0(Sm(an%L(Jl$Nu1qL>M)#z z2_zrNGX`EqZ7n-)K(g7Dj_d0)Llai%h=-w;38=fd5GQKljWaED*g@CgmN7DamK0)) zRJ#f}Urku(23<*d%WucAu*Y~d_sD(Be>dw%AbYJBx%HzPh}eMT=V(nk9es|ubGmfb zx9!fzd-RCMC_WymkUyfSZ)WyQQAZyINKlDsBI%B8s+7s*v3spws>o;2@HLuA9?+DD z(M{r1R>I5N%?_*>*3n{YAXnDlV3rP!V^5HlPh)|9BW3f}Hgxb~MuqN9c53$!7nUXl zIhU@`JYJ|{u$XaW70XzEPR}nP*s*zm0WGmFiDN!ZW-kGB`RaR}u$l=u6`c_@*jL%b zAmr5uIs52UxyygxTrn3l!~DmSt#O2d(%#<+kFD-Yc_m4+v4nCo`t6GFYi(^oc#jp} zX8)og7!`3+iynN2{gkQ@Vpi%ErBU&~C(BTZl=HF)Q2E#b$C}9MG2$YCT^ykwKHXgA z$fV&DHxmMsEpkg@-;cT0D}kjyJlua{CpKjXQ>?NJx>HF!1xg$4LaUViy>epWvXmYL zp&fCu%vpdtW0kNL$#B{uuov=LZchuJfC2%^?$Iv4oUQoDzYblN778*eQIhY)bzZrj zIMVD!cMIn_1@u78s4Dy;Yc+OT%huP%&&LZ0GzeHnlF9IW54|AJy`sp;^LUGJZ;^1Q z@^Y#{a1}|5!>nsDn$WretLt{8D9!$`>A?}TST(AO(*bnhp-bHdao6YIMsmwg6NE@Y zVPu=T8=PmmBvT!cwh(%oL8aFV< zX@W$_*7lX?Q~6bQz&UUWty- zb)TRZvPrBXB`LRM>mo=Sq+g~KEfcll1xvu{BE9wO+~iEH9ie4yuzj=6ZoOM8$#a|A zOVJZWD~ON{*vj$^y@W@Ikl4|z?V(l%utIuxVfQaloT51yaRr^GR0!fp#Kjzy{{HEF z7~Rj;ZBs7}7L|lXs_9pPWLlma`8&F@eYhs~ zc5G?cm_b=JQjegu%(CUVq7pz01|d4;EyH%P?7HrOUCLT(qi^xfua0HYbUCSzj8b7^ z3%1%EwpWSdIW|#YG^1wBy4+6f8keW^-Cc}Vgxx~DRHE*0Zt4#t9=Ihm9nH{B6Dwh? zCz(fNf~`~Xf#Mlw-vX~j1VA0424JrJdjDtU`#s~VRm>N-y@abB%>M6v^zeFihKdx1 zmvyEwvX_Ea$*HpF70gg|JU1NWa@+HfvOzahw++JB>ZODz5kxPss!P43`KzwZ)4`&L zW*q^YD}w!m8AS-BLGI;0(Jv6e1*^n`uejI~%4z-*FiZaJz-4Sp_1ut4Pe}$? zLba~Ic9pLGL#@iDheyjL;gHDp<9yT_7e1G%LS{pC{pNhs0?%Sol~Nf&=iSIw&Fp?b zI`w@Zbd*6~db|e+wdHAhw@$mmd15+{p2gXS>P|^#I>*k|p>1+pg-qAJRuLJFv|AiR zs;sdloMcVH5DZ$+mCL23%mL31iyxxCxK!CODWyKJUUoi68~|F&RI2;I682o{xa8#s zSeks9=g?n?g$#(jd1(x@P0SX!K2o>^)&C|9n3z02#hKD`+gE6k>Aoa(Z%FSgVCeb8 z`mR>Bw=!acwrx+>o1hQj*WhlMj4TUa7I!W2gRx7`Zc%vnrH7Zh%@sLQ8+G+K9eL~w z0OyGinV!L|&N_-l!RyFE>*Fjkiba{8u1=e;SjQfCw!g!L^EN%wuMgLpF@rA({s0iN zA4i?2Gmg7+r9Lglvl%m(csl>1g$Z+UTLiNcq|z82?^U2C4N1T|yUK?~h329_x8+At zT3~udZJPsn9VePdy56N3mgl}9aw-3>G49#C%;3$QSdzT+J3q?5o9(HVbMK4Tx;QfU z3++oa?{~?>Raw{lX~PSMxg=xo0S7t!3G#g7_|y^i33)1&dn&!{x~(luOjFbxWD!w= zSEo}3l}k(opKd`84M|KhSF=*$Lx;f84xaYJ%i5`?ei}HQ$XYN|ak0ZYx10-hbup6J z(kdNDJ5O^gVU7Jl9G|LbMzWV03?C&!FQitrQu}j3Qc8CpkXjlEBO{`gxFFpxEf^YJ z`V=Vl@6i9o``MoSr=8gEzy7pM_ak3Z%x#ara;YB6DqryEWrJny?_4K@+h z&=O5=wdDr?j~bB5uNo=`3XlOHUwum}6%!XzRnI}y)MjRGvbs+NJ&;cVX8E0Y41zR) zwq$#(y{DT`cTw_Nm0%0;T(-5vLiu080%r~ZB=oEZHG)D}2*R1Lb0) z()Zl3-am%(E%2#vPjZoYgrZ&oj>;}gv9{FTh;0}FOZO!c?*-WM+vl2l6vag|C7V)E zRq<%9m)|=s-jZO%I2cLttR;iR6^@;5^q~z`Q_i*~G4~{S>yBPSARY7W$ov%EtQF>H zLTI53g395EEI)?QC}tpswYJqTarOh~?hYOjX4y8E&GdFR-7_#lVI;McwpR9|h4k=a zFzP9lvcHqF2-T>hwzw;nHly8?AGnW?oUe&F4a80g*E)$EodSTsmoY({2tbr z6zin6*@Yodr%xE3tw9#TGW&A@foYe1tjLBAl&QM%*N~FLLEa*|?pmPne$=(K!+k;h zmBMYnK5u0WoZ1|Bn*IZqE?VAYdcFQWqtd;E=18-azi+&PTc!3sq1HP2s-9(=m*l3e zEiKg3#zCc?8oMp56!A<|jHf5bnMed-CCus<(|cs(1XV77nL?l+wE*9|MG6%Q#v4*_ zZ&97eqe|dUL~qpIKL$(kHm30q!frt^oIKe&El3e*pM*7pMTOKs4tq z`tDRv9mEWtC%of8Gv$oyF8y)*9>gsew^98RT(>a0z>xe{uT%)1s=F$hl{WL)uT(`e&!4bN#J>?*~ zTXTE84&@@=Yjq&Il78*A1;?@5HtrdNcXX2g;|fB+HbF71fK(^3D(7<(khA+x+(i%C zk>V59%+XHFt_!_SeWGl+C|1$wKHN6k6$IFk*eA3Tz5a5@kbt#Pn6#^c@*q%|9Id7aYqq{duuF%u{d;}#4%9PM2@RwRZ=^23HMh_VI%DN-U{0ck zvj2emIWhs6RE--1IV;LVcB%M<^;5k>a?8;r@_5i!YEAtZo@Jf(Y+rse9Ui$`xQTKn zUo81e;pL2+C50C1F@|k1>4S$sBS5Gu4EMRzQYrMqSKW`I)IDX-_gq-*_ZG-R*bQBQ z_Sh1vi3)>hdJ_#JVw~Q1ZDV^()M-N8iAm!(efBK~6*HMx(U@YMkQdgGTuMN(Z}>gk zM4cssQG;lTY6@+NiQ*i=cEqj_lzyP$IG7EoCh7pSmc0J9mZohpX z3-BT^1*kbtJmeG@E^r38Cx{{Yu3$fIzklEsun*8P&?N)_g%PVBqX4JgLyQIwm>1$! zqMtv|0QedF6N(Yz-Wg15unXMp+s_vW9>@a>3)}{T4%`ZY0JI6j`RkUv zUnsDuer6z$1}Fk357Co$H`6=whO=M1{{Xm3&#c$Dzax+WXvQ`DO&%-v~Kw*kKIH;@F!C(qbX!`H1!@D zJJy2aD#BSnCgzNgZBYlc?1f4=pTzSuK5fpymHhLsGVYVbUc3Hihf z*7#*nx-~|<;meiHC#}{9@=W^~U2kl={9^6I74#$C-n4ICPPce@Q-UBU3YMzr1_{W3I5`^3hzH5b<_6st@4H@nd z(yEK+w1h1s$3RgtrO@n@$7*vW7>~6VaO6Q%l}!||WQwEjkn&9_l1f30y(mu6ru4P~ zr`J3mT6hiTfg{%pWydO|)=WW(R1>H{X$@2&5miG}To6ZoGd}l>oQ$`ZBMp~bnn8wP zg7c0q;We(rFZedV?x@9#Yu2D=Uq2b*?zKUkvsPNCH*uw$;EXj<_M?RV8FFvjnP|V+ z9FDx$fZAcaL#4BkEbsOkc_EHHix?VlQ8g!U(Ra~f4o)fu`ZPOi3?ZvW4SAy2kNT6I z#R}Am)JZ;yXuyi5WLNe^99tEN!uNf8i6w4El0&_&9RExlds^?`KHG^2tYtFss+>qQ zI}UpYamj6f{pN18{CY{V14~~Md*#)Js{6|5POqGrgwFP1$xyC6A$`>I_}r2B$`^1?FX$F_`EYXlPYSl@dc~f( zv}iSn#{nE$L^c(XlyQTVcapufjMZ5ltMxED`M<|Wwf@z@lysAA7_4vUntcUruGw7VGu`X)aie$SqCE&R7BjC@f&OYBAEH~!%K7bDvo zz2{#)SA_U&*gZam(lIMEJj3$2CR_Bckm=$Rr%3!^B5$aO(<;m#cu{?aLB!rT%|pG{ zzL&L~GnCdielwplmSX z7{Mqje_F>Y*zul%QbPQC95roH zOE$pz3{5Hdu2!)nTWL|%4t@|dw{ZmL9L{mRv?!=%h|*r0?9ZBatSup7UzlCJNSDdH z!aE>zlhxYFwwQ%yI6Tt&pus2@TTuKF#{^V%2#A?hAsIAu@*!#00{LFCj&?RCp;Xx8 zS;JWfy8BZ3zF`vg&LE4AKAxl%nhgOV8_7lsS3VlzGV{8OZHaBM8boqR)<^@ivqgPj zcngobr%^A^AC#1c!cWI`p?nSaYL`_z+KZt|KlFsF{_~*(iaJOa=#V%{6;uo1u{#@2P&!f6ySmwOXNxHX1%kkdRWb|BD1x?D9 z(=J}>v+ypuIuw;$%J#@tWpQ+;GBZEPnVMTzt0_hE@VIO{N?iq4+)QMTx8yWkqB&Vv zNK-ZXWi0xiPvDpHK7*-0lBPD6<8hf{Z4|kRt=KCvrO1+n^-w@dB ziA~N$lS+{k02eZRXiT4MC<(JgYvd2p zA_d?H(@$h%3F}RtOCMAwd(4RPXq%tl%AfA{{jlSjBthhh`cr= zSnP4U=K+*A<7h1uL%9-I7>uAo>^G;1l&7b>a+MOg_9#$|DQeHQQju{dm^WQXH}Kw9 z)%KA2)X*8_2>_C8TgU(z_zzQ;Uf5|_zl*7#zg-8u+oy6)Au6XkRvXwvu4_!BJu zU7{?FQCKai72+&`5I%ftxdO4Axuv9*jjF2JqQru#X15|L)xu#Ls-}_c{!be0peqnl z%g!J(Ujr{YBUB3Wd8t=TJtQ25+XtbsyEzi37%({hr|G64M!*;&V37VhHuob=-n4I# z(LF=Fo`ez|58M|z2P+K+Gdd~_zl2nVsYn7Dqc6NwR4?5TCk~a zPdNUXYoqsp~v}Q++yVM zSeEZ>FvjVC_4qZ&=Yd_borLP4+~dTFqTEHQFRb^bIB`_U`a4|-nn1|pRT6tvVhp*r zHpNJW4FfU)4j(M__juM`_>uO6iN%x1rO}3X_*%Nmi-q)}=2;#G?W8LQ{G>Ld$M|OE z1Omtk9c-|`MZT-c{is<1_jIJZAQhPxe8e!rNYBeP>Pr)4mtvl%mB?Cx^Uqcd>o|V2 zynC!#B(vlh)O=LyBu*4F`^eX?cfPI4WW?AO}qXt*FR6KkWk2zKOMp_cQm@b`25Uch@eR9jymFS4kC-?baUAd}1 zsM#$Jp3O|_*bRuh63*HpRXKLdqBmsuQ?8RXr2NIe8M@>8tpMlMRmx(x!1$TFV<%|N zFI>XYpPL-~IHxRomwOp`1aus36DNj_SM>Y)8pVzeT-wiuTecZv0-q`KJB&v*Q=NLv zKFT^}{zbMx_?QJf39IRu*EodzlrL*tWu!@tXbp{Fx*dQ6V!<&;9mSdodmRrMJ>nnT zYNO<6&9TWW6SHjU$--IW>D0B*5hG^ z*ICxoRC0-CV!hAC=`}J7AJtY0S0}^PDiOziet*6n%)ff&({4TuJ?xVDb3Ak_hcSap zeGgKQmh_xXWu(k9zD96r3q>^;a*GIaWhmmLqOr{2pKfVe@+ZQ7A)AP|zF^CltRJK1 z#0{^+v+bii(r}CH>uFYUo`4tg^YnbalDO;4xjq5Wi?h0Gh7?TL#^r3E@@8f0*4{*3 z@U`)ZF4)H8GC~*!zI(|aOj-x#P7rMktZfjdcSEmCCh!svJI5gY_I|eZe!lj8OkKlH zh_?B(c3)NI!9KFwA1It3X!dUwvwMRIf*-W5d!F3>ggHjh8xycG=rUA1Ll~UnAE?&{H?;KHK6{Kw&t)D!QhN;#dXQc%1**n^T@AQcMZ?AFPo0 ze1>Z|UnH{kb+yY}B!1k|JCNiSpk=F<$6bw$c7-01CrcG>T=w1l-I$yv@pt)36seI& zGvs}#xdiT}>`2{$WvuuEC>AdSarwn!T`vRv!L z8y}4{vW^yaXY2-Cp59atP9?DqUFu17Y4Wex*a>Z$Hq|1THc<*PPQ@9phaFL@q&@Td zcRs3X?nBVde_pH9=Z&6l`x1PAJ3MTk=oauC^4-kj9t5fui7H_jZ?51Q zu)gx@RC-1Dl;4eXGyXRCQqJk@02Z0v%y%gy+p;`Ol1&$7?r?3TxKyRgKk5_b4gPj? zWITYE=ZmD>MyOhK=_n?3P?22ifPi7`Kf14qHhbVq%XgG5uYPd?LRF1w!4P6dM%)aK80(OvBl+Pbu z7u9W8{L}eqHymG7JeDWZ&N-$6Nh$lyN0pdY-~rU(So^E8H#Gp4>FYxUJ&`g}`;wEe z&ERs<#-L}q)$W>R8?SStfIpA&n0Ax*OZh>b94gYSsAAOaCN;PwUgsX)s#u}=MiK@1 zXr5a0RkDo~NvWojuyfKWV&}hzxN(m5NvXao&$SBk4i+oq29c~De}__(%+o_du0Q%) zHR}xGv-jv=U!^jxm31MF&Deg`V5G1hO`Oj}(WCi5x9uin!&S&&0aq0+z=`4Th0rgW~8lqePr$RfHwgHsYDQj(k$Mbe`T zpDW$h>=ee8SdBigilZ!h+6U{D%aIJgAal*fltzqJUMCZuTQnx^p%kCTFlPNC9%V#E zqm`01r!t0-!BEk1V9JF@V$qDs7@ruXMgP^bhRPH%ja1$cnK79b?RANZWLh=i>t0u3 zydfINM~Pm)RrGHLZw**1O6#FSZxAVp?;$&1>naNJ`xj+6DT?wV$y!4sp7J9e?21O; z)}h_|8p-_RbV4T}O1pD*Viyq089Iq{@lwng6WRCemDK%DCbaqoOKpEB(kFGN^ZrqhYdyTO;g1}_Z9L0V2 z+Y%WuhHM|HLG}{uB-*clpWHp>>-EOzuGv$#n-n3EV>o%A?=IyPHN|0=Wgp|NdUQm9 zHNo>ATaLk+YTt}b0(Z$fN<_QXQ|y94e;FcjwRvFQtwyuEFg5aDR@+l2n`(Q0=GV<1 zk}H#Qh!Cu)?SVwg{r;=T@2IT&0HLu)4<(s{wtDhshNovYcU~XF7SwN~i?MGx0}}S{ zlqaK`kThyUfhTZe>B_K695%TsQ--Rcl~V9EAve6=1z%xT8mqwiSFF$Nod}XE<_#1} zc&!TAGyH}G`x(zRDgcQJtdv?gbAkgq5HqV}07ZpYMLBz(U$h8+V*LDQAGNZQzE4Qw*#Gw6Al zIO3fL=Uu?os3PdW41QL99TejbK#1Y*Di(A?i}L=QXn*W5pO|?-OAg-SzWUn`4SVi1 z@!N@(MZH$TuZtU~4M|@~{5zz~ec0D3hRUwj==bP4tH4)8Jciyvq&nNDG;sl|v#C-uMwLm^o)%j5ilcgymg{QSivjrs??x(Z26lyu=|3&} z4Te3z@055ROej_-s})$)9ImqA+t988b{0QM@7?+KW;+GP=4MLKT4>cf}6eR&OaE}xzxAy4QZ3i$kg-FR@Lg_N9&T@ zYB*vlEe)(PI1;eUcS{ASDw^39qFNA0al-Bk)%#C*j@$zC>Axhn(06RdZt2{+?G$_7 zqcDoKB5#YK_hyxf)#F9YB`nNzG?bcDHx-y`N@*MIi$?8>H4qewAi@INczQr+=cMO$ zRuO(fHm|lV+6W3x0>m9On>pGRaRdbywF)es73~a^roajwu+~jb8Cf$Z53HswUB0=W~-9jw~f5)@VsRz>PkD$U@m zB2{H;+VHt$bVXj;cyuf0cm@nJ(bm7L)BZuBqAoF33VLfkC;Xejl3;Yn6EsG6^~8*7 zkG5d^9Hc^0E1b>4(jt=DUESHKZ@7=tT+)Rn8;(RLU|cq@vNg1}BE;_$A$7SLg?Bch zbDhDJ2EdjE=HY}ScHeainJJfE+K~m%B)G zaBhZA0hd;n-|Ds@U3fkj$-|S;RC6J`XZO_x881r;+8r$?rc&QVd_+$0}R(WTq*+{w|^pc#M;1|K@F!{2~2r?9I zCC}<|T_*26;$VE%MAuJS<>j#II%6s%Q)We^k37AJdlZRW0s{ie?@*h*)Wfv#YEH7tW~s|f=i`dr=cY*iJF36 z>s=RKZ|WWndS9mrw||BTS05UnF$X!KU2n@Ce9~8DkT7rdf6;r{u!yZdRzWI9kg7%P z>`E??_i&hX!0vm`)$PdYqy1#m98SPVigu1Kx!at-b=s z>N>cs_8N3T)l>eN?Q)xM*Xhu!DewLjwUW`L++)ts$fQ?i*bG6koNGIK}sj z|8SM>656P{cucu2N_P!GIK%grQz&VBq<@Uc6BRfm$6N8ERZ=iJ>&$;z>S`e7%Y|QN zS+nHJmRoTFoOvUvm%bRsJZ)d<_8@ji-b~Ujx~x(2DO8>>rijlb@8Y9P`^Si==tE*N zGb^qJ;k$!a-*eARnisoE>VXK0*-22^+!G%Cd9HaXOr1WAnqY%!P4b&9q0t?sb#YWe zquJMg=0=zsa?PEtp`dH+h$|asZ=QES_`i!p-9JNDK0tdE;xS& zXvH@ET^ih?|Bxn?I=9i@j896zBhzv}jM0j^q2!Tn44A@bLEcevPbu+FJBj+Qlga`U z58`!sH3pGnYkj|1=x`EOA<4?Xu51s9MBz&i2@4TRg#8%dmlBGJ-tSzy{fToc(v>Uu zV<#SwSfvT%OrDrn^$8?Up6*cRC>B(|RI^GI3j0nME0pr(EiRf)z5Up0Ruqaigt}z% zAvd5Fhsx{_|z1jE*SLYtyg#nU$wk1LOtJ$X_eoTH<5oa1bVOa0T$E)d$xPDlZ ztFz`5rzed_?{Buj{=nIV2E+1;4CW6{GMaI{!fV3_p~YQx*^)&TCM|V^vmBIuPleCT z3#$i;Dt%o^o#;(bVNBVYmK(#r+>NKm|JY?iHG*xBmo?hA%6&@5u_xgEsrQO40LdPc zXRY6P}p)*?{yW40Bm6nxYB z-iAIRwD)D(Pr%(1WR$C=iJY8RPe0%_UztHaHDfzOB{q;L06gwDZf z=nm;`6=BW?QigFjqTUqNn+V(lb`k}e4lxU-e%fRx~F=;_~kB80Z z37iGt_ahN#5xM9EUW{lHsaY9&mj*S*zx`~lD9|$fxr;{gmeiVVc+u2%lb5I@x#)Zt zK^S_0%g_sNYvfqIy)3AsHADvr7=5`3v?^$vO*d1+w_R;0=$DNw`uF4Z4ctVdtp~~5 zn5cKgLvEPW&(J!`S8no<6qp&as;2(H;yVOt&VOsw+Z+hNS(%!OaXOE0!l7JLr_&#Y zF$R*`nuzw^385?a;hK};lHT1L9GJ=9or<9Iaa&wRX=o1eqbwKAe-8Kz4P1k)%WumP zIOE|re1_;P5Bcj2K1KTbrdj;%T^wvmc(-a<`xM*28|c1hlKT<+7h{v4eXBR!Jv?*< zU*PNuJWK{x#nknjzhVCrgqLf|WCL&$#Vrv!2JNzAL(N&qrYqI{B7@zI(s*F&+(_BS#~f%dD_@3(b+4xF`a(j`8B*bQag8J zzIygjkMrcS2H^+WC9*SdJ%3~JaQxEIBACnHt2_VMy*Zt| zLwq`ULwtuFEbXIBdJG{J6Cho9(hwE+QUimji`jd}F|PhD%P8q1lV9CIcY7BQ(+tqa zsrix7E$pLMIVXsmevdHD{!Rpx2hi#-382-T)*(CPgoq?HF0 z!!PwM%g^;Kj$Z88usr3rcz?ZUewSLc@QUF}xrTWr_!*iRYnwbm_Epp<2k1;D?$)Vh zW(@c>2pI8ZJjc$#=({}(5Ku7s z|3l;~=Ird?{NI5NjhFzHBP@S;mn4@gd@FcyC^gELX1R)@qO=%w7;IW98t|jWWf5;| zo;8Tf9TZot>}55TCJson`OEsQe}Jw4eQE0;K3ef#>b-_$}^z?q^HD#psad zaGdoe%}Mds{#&u|(hFEPsPSWlrjIVGf~Ds|+*-SwY#wrPx!Ys(cR`?spc7cQ;=HATRx~z*B>{yCQ&-;-K1Y!E~NKr|Y9P_|fG0y7mV5dN#eprWf%;3C^rxBz9TnIL$XygESIH&m=JhAV0_t~J1sK0v~gdVIXhm{cw9)3 zCcE}hb9rTbd%f3wxe)>QZwqBwY~C`A~x7=}5SlFTDE=J5wWY~z~do987;D=OKCW%k!~u#1bZmzsa``n8oN(53RU6@>uicxD^&$o zraug;P=>lu3e!OBLTKcaYYIZ1rZC06Y-zH4Qus+(d#a+LD4mbh=9KBZr^3T(ns7DZ zeF`f|tR`6rU_(VcvRCDcXz#5t^I#Efr4fVtEEspoGUmFzf5C3Ty)m&yjAaN+0j_%!*~o7 z=$@>#62tonmvqyvPTGMV=X;Ae+`_vI6V}kAiX0uWBC@ScWcoWCcGC)U}~xF+Jf0ilUT5ZrMHo{R+38!Dkd~DM9)B@SqO+@bD7w!*^*xZFlkE`BKFS<$*VU3{VkKAiOw0EG&OdWrt9_-)tYoH4Z&*P zbM5C>6csQgR@}}slZ+(VqxY7t`Lsi*H|)$SiX)1Q7P?x=;hBUpnN|yKZr`QGD`R;! zljN703g5vA(^n&;#cNWd7hDe#q^ScWveYU9{0uC0w(KmEbc-`(HNIqrF;l3CC}vQ# z(&om4t&@x6dCRR>YlE7%4p6CJDs0YiucpYhSIDo@1k{;uR-I84s%NQbJzV2US~|j$ zbC$r3Ib9W+U08TStV_x_iOOQq$3B*l-6|!@>cNYKRElKMk+L{NnBp}?4Np|6iNp^e z2cpcHQ-d{Ec#}G-p_zf!qd*Ph^HvSyQR(V@^yW9P# zPSWACBRCD1Z2h@T=qRS(pJ^*~t&S>!_+ZI$-24;~Cg`dTpQ1nSKXG+P`he{;r}ZUx zR!|Xk2Gs88T)%-PR-OhLn0J-d%NelAQc;C<{?F3FrupkIy{xGCi#`iT}{!<9IpxUFqcBBMtM>T z3OpMsh>*%q9Q_k#4Qy4sc=A}um2>X0aD<} zp9;DB=6t;#a$b;pu!wG{o38EE(yi^=iGi`A*5Pt{J*;&Odo4a){&est?&nyg;4+1? zdASKI68Q`b`j*op_RpD+Xvac*);jKb%gXJ^o~tc$!Zw!~(|&+Vy*9XI$2#rZy2U!- z9^Wg8vMEcl8N;v(>}n{$E_L8GFkP`a zEU!6CCaxE`0Go%m17V zP%tv!3OsjP{^Be~wCGj!fKsUfwK!(9BUNGH1Z6iTiUHbrm>FSt(1LuW9nR(L}_E%tVL+p?M5i0R%FYve8 zP6abY)b_Y8srM=nNH-^?@e&I|L^w@wgyV|8WrU+Upd36Cc$k=ACcTF`U;dHH%wW%@ zVJE`YDEF*Z>B-9NX>kAKFDQk*ZDD~+L`@8+yjMS$Ct;sc*(_OO%=NN|vGU#T<7J1l zF)wgY*n2;O6GW_XodrXRT(R|Ce%ZmVDO^P61p;HGwQ1Lmh^Qwc^aP2F@0a;7NKBT5 z#Bc>h0^TT|JJjoeMc(oyWm&0K#0U-cQ_aAf zQM~f|PW@)|E?0TbX^g}-z+rRrEmC`NzP&XNFz6L~tks-3sCiWeYey1{smq`3W$#}H z<>hHQ+Kf3|XAkQ;IbX562j2ZEV3g$#=uZ)@9dqtPk*;vZ=Q%uovQ?icA{#y$0ib1P!n zP%pk@vFZdzfY6h^WAX-;LYPzGzyV&i4yl5D&;JW1G6(No0{{a83WNm$qWQmIBI0iL zCazWv|4sF(QI}EKP)GeXoy1f{$}2pYM};D44Qg*@wF4<6AI;bag zH53{oP9tq58LBfFy%Q9M)9R&_(Hx)-&^eeCfljEOdE&^bkHSs&LmN8~x0SLSNaoBN zy=w^!r`lS|wE~_OWu_3!X}Omblu_qclkTXWzJxd1Ae8c1QAQ&v2mA+V?-VRb6l94W z+qP}nwr$(C&3kOyw(Wat+qU1G>6xDB`RR#xAN5i7xpP&<&Xt*KarJ!)&95&@1KF9; zYD=S6j_WU#9h=&Lx{ys#08h1$QB3$S_T@E`}Ldox6^$$i^lY z7s~!=EoxfeL}7DX)KrTq-p$YQG~)safw^C2M2Wr1%&1U$d%RRzSKCfsyo}}F)MKjq-9E4 zk1}2d^84V2B2|8rt=jaKA+2IgJkmrI%{5<(x2Zl-0FW!CP>8vv7R%s&P??w3oY#n3 zCtYpK2(e~`ye!``pXO;vqqnV+P`5>@ZGUgiEZ6tGCU>DkAq7H^e1}xrcNNnm^jz0; zsA@kn(cd{pXX0{XjWcKJ9dO3PH`W;i00Y(G?n~|1Zev2R87pu~>W=ZoNMH<2;7E_b zwP1297;7Lu({nB3{B|-8jJ9WMaEgFnk9<7nvL@-G@lgEO?2@LzFuh_k)j*Mu4A<6$AEIVcQ#JLMJy&_7aD+*4 z?2V#uQy}76$J9#kkcRB=pGZs&dajpR*NvJ7UYP`%+tpE z>@^+;+tPO=AO_lCWg@_OqpK`Cs`2PaQRks$);Wr@Q1dXu8e$uQst>kYtf7f_%( zUX8Ac^dj9Ho;0rDTQD4Ax3qOIb#}jZ^JFei=e)2tw%7bAHhqFyvUQnQJYt2GbThE~ z_(^T_+^yw1#McvFZAUrmTYw(1#c|DT(T~&y<3>_NT10KkHz?)uraQ>}9jlS{0V38- z)OO+8C(?aGuiZUHY*T=jVVj)BdchrbN)%40LE|*TN#R$|k%;&5sj8%hv0ya9ju^%*C(jaK zy=5Mxx=L;O_}Pmi#s2UodA*~U`;;N&Q7zoV_^otEAB)c)ao>mthmD=ehIo*_rpqB ziE@mJNBpz^*RNl`8@v2t=*8qlV6VP%ZI-7V31{adUpG$Y4|>3Kh?Ogb>_E;pwm<)u zNW&?|+aV7S0KhIN0D$m+mmtMW?M$5vUF@Amgl+7dP5<*%@PDRF62||i_e)fy?H2_Q zep=lQMp;RU5tAP*3M?mzYLv%mc~DVRD3gU1Nrx?)G)roAxEph*Du?Cw2I&L;NmxQU zo`@5gv5qouY#ooodJ3Xtf-v_)l5DWu@B0Fuo-5(a{P3BUaHK)L)z^K4l zKk+9nF1ucXxqd{!qSKE;UqT*?=ONgf$jK*uVB=9@(Zv&E^3T5F6ny7Pr2k1fU0eJ+ zCA{d~6OnhG_}}y0%MnQn*oU{d`|LBup~VFmiDTh^j%n^B!mY<1PJR9hsRPzKZjwp% z??GMRJPu2K#Y@ZjnEiJqXtN`@AE9!0bVHvN{uUp4B;bn18}EYM<>91^o|{Tuo5y;q ze#?BRL{`bas*KZ-fI}Ce_C^w+gSUzjD@bo<3@Ur$;J#Vlx={NEA+HSS;C}oF4;@88 zx){*Mt(^iD8_yskOZT1hrY=YBG&V!61_zCyG*&R!6HLOKGUguzpk-#;n(oV+`Ne#)+kID((?d%6XA8R;$b#pgK+eMAEZaj77Z|#ZohF=5Cj+iUY0QN0OX!X%rA%4n;gXHo8P&>ifSKr=Nqh zF8+VuJoyJs!T*2Y{NK>rwEG85-b)f!Bbm%phq6Blb0-TcAd|`ffkdc(g#JjVLf#*> zSM5#Si@lIh`5uNNNDxr{c>~~sV#G$KBP>Xzn)1%b;cPO0x$^t`d8ZD*y1|e*)B@vz z0!ww&9g7MivBS_9$&71^i;ANXE}inlTT=poDJg~MRFlW)%r)2ke3^sG>A#k)GL?28 z$B*T`gmHG)-A#GLtZWFL?1GsHTRVh#lwCco5v&^u#_c*xFm0g3+1zXaR-f_5N_t4a zW;(*oh42UFbt$Iy0eg&;PYp85dq-Rf=f3WGZ z=Doaf7FVi2!C^p&gEo~2jXOhbO3|#nRxCS9a$kA3u7a6jW?nOi2#RUN0D;?eQw4oQ zK4MpmfkeI}gUMcKFf>9&Q@sTlp8^bBSt1I zX>Kuw<_Vi|?f9oMM27EFhl@LVm_hY+=rh^y_fBx@lTkMv#Y`Rn zwge=st;v)}ZPL*wc7QHyYRcb!Y6-d-t4@MqE;tn|p+sL9sdP*(IC0mq(ZsS@*4dPi zDzBevIeu;@-shxZhDflc*xf+@LiotSjqYI-=%L@DSOL@5+>&5su~%z_G0fWBp_10FgApR6U_0g@;kLgZAtPy<#C zRdp4I@HbJcOL9587>2+N_9U2Xt8+0t z0Vl0Nf{~22A8O=<`@f#~m$1~V3k(3j05$*s&HwY6|HseYqv7d;@{fl$t6P@=Ljp!j z)Bam8DZwEE8x)3NzzUuS0oLNU1~YMB#(pD*FsFy6-K@9V3guxyEnC$J7D@s|n(MJ* zrOmVHg~qe7;kEnp-n(tXHa2=atN%IXx7z)fJNw#udu6P@(*)m7W7-ae-CDjzbz*DO zt_Q;&u`kBBMG|(6iDS2N$NZ%;*$9$VUZ@HD8XY%AkZqGA{ki zSZOFdSv8rKwxUK~S4XQ`NKj@})9{x93aenW@M76owvSbR;7+eF^Pw^cm4dHV6Aez3 zme{0*A*iM_ConLmn#4^yO}!3fOe*iNG3p}I$(u0>ugXGCDJx2wlb0yR zg2ocg4h95RERmt%5>lOvk*s zOvdKXNDd`%an1HXq$Vn)$|Wc{p~L!Jh*}0Bz=n8yuA(0Y=+k5%urndy!cs((Fq3AH zLAA9F0*qo7v;44H{<9Z15-ojeOFPEV(LIn(RJse_`da13$ z@~Bfx?fpJe-riS8iR1T>&{lv|sGM_?WZKEO>F3hjRRuGUU??snueH^=!_M}u-pRN+ z#7dGxX7I>G1IRHu5iHBqOhN;$ejqQcy(n(4@Y_X7Vz2~p1ojt!r16;ac{Rk_7E0Y` zeUJXMQct>!x%4y?DLUClJXy(SNhJ1&$1+;Iup$6E&Awu3wn`^Y`ivUXV3hdT8)+ z!;(~b^Y>JGi;iFyE;Qn?aa!5MhpvLZ>^LU%NM9;A3-@3n{E z?)SNW?tA0l?+T*gU3_BXU2OWraPtnBaq|wLLCO7OpQ_%J#tc7X0r?E^=WuMZDVOpv znP&BI<3dzK=TWna)KSB0IZ)Gp?4csd9592`gF50C8-&KBXbMTADvePuBH#&!AjD*f z42NVA?9G{q%A>T^nNVa0mYQ!0_dYWA@Rw3#YRiuqDtGbwrUNLE4SuC&LRLS$Y9e&2 zkKp4oSD1(g0hWiYew$sW>L}YXSgYu6dFErHVzH zPipu+V|4V&w1u8AV}$<%HfbYDJ&l{fPRCoACR}$Bv28CI)G-G;l#9Wi(A5c`uZbh$ zjXVsO`vVn+04r@R62j`pMoC|?>y3>ROHX%mE@|d-jNPLvNoDX#nhd(4g#=T_wia|$ zri*A|ewOAdJ)w?zr~xL8SoxC@9UDmFvTQA4_z1hP3afQjJ{Q3kt6pNs8j2mV2nO{6 zYeK-?tm1LK+gDF*!Bp5HX3THu#V~ja>E4t~55V-Fph6$S3nF&GyjkxPE=S` zA=7s&jrr~5-$b}R&yB1+myKt|u+AMp59}`B2NMNPn&zojg=q50YC8Up24^*ykSCRG zSBo;r$z|6dSeR!-*pCo!T`Kk*Zlkm%ua|2z&nmnH{y5UvfAWq(l=G%y=6eo7hSt zzeacNBeCpDzJ34T!H-q`_@{YpsXyRry3iZ-c~Sh$bR&P+)E2oSRcl@1$ELV=Jl#lV z{-W=sM|vvL?nw5RD7>ko3(YN}4a zrGKWZ^Ht8op{9n$BF(06U>-Ww7*P{lxNI@5--gSGZuAgCW{^i_2xx(37>BDaHyPPj z$Po_aehf;zssg7D6KY=^xMM>k98>)P!VBw|cdctU!=1_}dE6DDxM^>eHr~ z9a)67sC_bn(Xz+f$qmw*SLs^fD^L-CofD`g=Y_1dTE{G_6z2F()XvM4O91yM88Z5O z&dJBSG)^?qomEV+qd2@dNzJaeZG+u>Vl9FT*QJ9*&(xmZ_8 zdG8lV#AOcb+5E{L+YEbz*F*@mW@ zklMtzL4BdcytcO72<)kuoXlJXHfi-A+l_sopm4wSQ{Zu~2P-;i+trb4b*8E58zaLm z9Y|V@Xll!}?eo3ujHKE#Aa(`EwxzDN#KyJ*XDr6pu8xwr9Jsme5nlEXuaau{qTx2D z+vxXd9H3W8v;6?j53&|;!AVwZoR)*@f!|WQd5xZJeZuLmqq|Jgb(Rdld#Mp^knuYk z_SS%W3X^{7+tJ{QJhGj+RWdjD{x;;4a!X~~PP^)k(-)*cU+~B+L{hUfA&YMBbRwO8 zZ=u*1fSW_YM};U|Ir7bgO(UV3$5&;|h99HHAb*J(Wz5(psULLiTB9e^Nme+$ly3{Q zZdNfMdS+jf${|vtTP}0dP+4O3fb-m#XsLVi2+nNBW;i)c+g)HBF6t%$^4nKfq)8`Y9@T5haQOTHU*b8F6+QMjSfBDeYm8Rz% z{!j%8Ow;cp^c@fEay#urqaS&~(5e5sZy^i~1Ofwvh;TiYm5=`ciw3SuN0|M<~ z3SDZJ2A^u+=a$6;FI^!lj$*?cWQ9yAi zSLF#^9lv*V;-YBr&T+X-ydhqA?*A)HU|Xm{-ZCCpS9`MEhp~HVg|ECh@)p<~9gdvO zgCp;4M4E4rR5ind9I;G#MAUd&GR@GC&A_D>%C?S9p*julc*5zNbK!P$yvglw#Uoxz z%-xKe!I?{S8pQV29&0yNm_4sbXD98HbHi8cC+MY;5ZNke>ZZz8hC2%tS)s}H`qd+?Zva17B~nW3@j**vCa zKd~%6a<1O|obUm7Or2tm;@ecF#3GGrdg9RFzTA{x^#>=SNx8U7%xBRB_bjB|O%mra zBKnf{@>U!6#~aoALI<>poW`3+C{G+Bz~?IO#geBEMk=#Q4E0z>=rQjA>jT93yF(8V zmM;;p;hC+CMMIfX7Mr-2JrA7LYEgZ0k$55Dv8w~4K?#Cq8ye>= zzX1QIdJ+34Z64L9dK-%K&tilf0D$tptzK;GjST;nxOtBjq(|~`3*Twh@vk`(WKtl$ z1OZK>si`6k2@TR9T515v)q;rxnIS<&Br`GuN`jV_c2)Dgl%}mF+oFL;T^yxdmETI& zl2xOoZEvq_YwKO(Wn1O6`}mzCnVkQ|!-t-0zx&s{_tob2r~>}RKO$oEezqIs&=2hO zHSxfY>@+>w`T-ybJTu$;fglMyi)Z+#fK1=ufgve8i)V0(*fV+H9j}`5PALGIlsd6` z?Fb1z{)ABvYs6R<@3i*fv1ecj0{rjD^wO`34`sPtp|-#stNp+r`R z6^eB&O@suSoGs^`0oer$Hcl$;F&R5Vr`kVaI*lPLNpOW}5bM52K8K8JCygSn*KA_DnsLxKgl^Swnh>S6_?3qzU5S$W8@m4K5v-Fc%vL zR>{SgWr4+#_modL(|x9Apqv0{aDs^ zWoH^LX1w?jQ%STW??wckl!*lWdK4SFvEvM{nRt<*l$sgq!TXE3%+h)WKDF>P*nQu5 zIajVEYhuV!#7E=%QO22unS|2PISkKy5nY~zL>y&IDKWMXbM}#ykjx|4V~W!C_tQ-H zY?2|{3CUBex`oheUdxhFHYh%(4gpmsWW3(Miai}`>I?H0vCG7MQ!I8WrP(7`Xm+#_ z;|Yw#`bQ4Tu@zEdM;!D4G*??0VZL)d0!Br2Yru*d5soF4(S~j$n)n(`a0Lq>w2&lg z<7Wf2TUFkHU2Hq(Rn?`m@XXBgxV)r5bKM8#y(do@P1jZxv?r4CI1wZt=dq#46*7Rp zPK@` z#qzJmlB|XzYP`z$y#`#_eTu(vVc4wg$CgP2?OUaA6*$5v(AH>aGvyj^>o+{|Q*3ic zqhP{aIR?>d)f(NL$=T~_=ynNZLxEsRYQ>x(ZEQoft!P2*#_ZZZjE1)DHB^n7adq)5 zQ7RQJu0m5A62Wtgc$R#0-6r>6na8G&=rfd6KnpI`isp;SCxwj{oO@c%6oI5vf#PTW zXg{TGY%C#%ls~Q)1P(+vDc~r%)s~@W6{_vNV!j*+F(SfFh^5tG5Upgv#5$Vvn4{X?uB+R_ftLE>5@@moo9d18_ek|%Q?Dk zyK9eRhqVq}_oZr1dj1)~g3zpvWNKv<<;e1?m5>YPt+DBld|f%KqdgVtW3Gs#=tn^9 ztivMO%hZCBV{2t)rVbaJ#;%wQky0khhf|OlI}h3(TMKh+Waujb>~(1sIg51XydQ%) z2R~bv!*Y#}W^jUd@A^_DTc01+L&Qy$kEy>PIxXMzB_ggnP zs)^9}xVaoZE4PCi3IM`lm z8OAqDgC2BMX*Wr)X6af@*>=f**+1T+zgguU@x)fdv(207{A=wWUN?`8=_8482m}x4 zzudEaq2l|e)S0LpaUrZ>)xZ~#>)78t^X&*`Wf&oJ!nWqw1nasa>1xB6 zgefmGGf2QE<=Z{qi(U_#JkxsqqCnkQu6(9`2+JT8uRT)!hd?8 z?;702^7TgcdD_vrK)OXi`!Mew9Bx06O6KjOyQ7vC3pwfQ<)_oqUJnM?5V#P5;w7aX0HddZGw=9FF%j5=8H7#{0cyDfS> z2gc6{L^{fQcvKRuPhzy3E-6_QlcU7ak5xn za^M4VuEa=nH^9wl80n8HpGsOeEGUjKhZHAG!}w+VDzyzd39?Yv^L7(>9-~o(OJTBZ zwA*so?X34^d~FWDx{AJz0pH@HB|z;jHlUeHYJuSt2b|_|K{8*##e=?>kpjUkZlGm6 zUzu7e(P)mWHD?@g0Lk7)!k%LJx*2THlr*&Jj~2JH4*qiXkt6@a_Jm9>SkcxT^w7b( z^}RU1A&G%U-NlKbub)bB>q0o9jP1$i@Mq+vr9i~BTv7bIKG}@PENLitR~bQhz9>Fe zRoCD=P(s8AGpPK$K|`4XM0cJ2SNN||<*%{E8fvNF<(}zbLFZAmM|H;}oZo5os_QH@ zSohl^N7J^?=eRk{DBeFe(mwh(4RlIWA%X`j_?4}fj5*g{eNevGE0-cQpv9H54+|S( z6`>o9uh{6lzb}`VLH!k7aC{b+Bo*$f?d>H2p)dQyk*3!BlcZWgh2F!?dX!WW%=KKb zD}KBYhN7YUt|syfKP>W!xZ3z}Mrs^O)!*YCs;W87DiE|8_YTBstpv%{+Sp-wmwCHM z+w;o2kt?i`$qFwsb!VC&T^UB35&`ia)}w=A@mplLq|XLwV7@#m{Wl&OF$<0|`H*A~mjG7CIRDtH)CC146k)3ZY6^jGN;ya) zsY!5Ws}h|J3EOiw=8cGOh1rtX#Z;Hy6bt+7m0qZ8+wBc~fzJ!OYx=^T9_>$Q3;z!7 zPpsy?g_>{G=DO>ZAFPd4S8M(FmpHrYx}xt`yXzc_+l!T6z-#QT7JH%3EPTt|tr}nG zXE9txhKHUr%;3ah@W4Uj;ny?Dwn=!P&PSw=RG-Q=^0_w4JfFw1ZKzhf+k;kc zi5iYTjRi~>Ejj-a!jBB*v({{Pqu%O-=L`u`3Fkj(M6{w>u`2P+c$9I?ke1jBtPy4Oz~0n$;XfNdzzKw&7TfXY$lfbl3vKzfv;;7r97kZ;8pnB&Pt4g^(8$55S{ z6Hrfyan%9(P({Iw_rXN@c`njXIov!{L-T#we4KM9wWgN0RSsN2+#xx=zzbf z03NOSy(sg$U=VZxF=|1s=)jxRfcaQGuC=; zMb9xIb|2Ti)e(Bq1g5H*1An62ztMFk;68x7Ey=Z;qrn$ov*mY>qR-88CE6S?g=U~S zQ|QZlb;LhA65t$=aSx~&{E6jIaO}Xt=)n2lf~?T(JTl<`*X*)0M8g@!@?o;Qxj(Yk z{3CNuM=4R4;Jje3Z0B*)&7H_7dXXP>f^0}a5>;ud&a zVzM#%(t7g-{kb>vrt7E&lW@xhx4Wy)I8XsU>;m~_QO) z(>K5^0Tw_dKqZbj>BPZNq3vkeocS^3vLkX6i?+eHbb*WF(N5as=F*EoM@W@0qa)!t z;S~4f*fLQb*_>}fcd)H!z;YU zfi(kkCZ?5&ii7FUp3tCuf|UuNURqW z?_3^+EX(cld5+wJ?srM~bL}{DE74|MK)1p3al_qu@Fx!iE!xEk%Kak7{9%gX7v;|- z`wulECY_(a1D;?%Fnh%N3`G0D4)u?8yduRHZaYGL`VY_Lc_Q^rL7&w1gzO(q&un1_ z4iRd#CPyW012#)tt{FHP+}N$e4MXJ=z(MZI0!p`EKcCL9m#A4k^iC=M!U0rfDNcn} zegl@XJJw3VOW?nEB+6N(1DjEz(y#*ZTxRyGpJ(>37FfdDqL}FP6MO%Wn!RkQW}m*^mO;~&9oM?!l>&W2 z{H}eoK>X9;yWsKP zEzk+S{2g)c0H6mB0KfAO*!(Zhk2^4!@Hs74$$$z#jZbDSK))JroP6Qza84sD2k+Wx zge$s&Z zLI8sgYXa9A=dzV|>X${6scUxYN4R;6CvYcRKa6h7F3a+suIj%5jhPTRBpcR+^Sgh- zlYCX?0G{e^1#@j~J z4W-8%sRl3)|It+wQ^*uq^aZ{3N1QyNV2>(Tql@JbYTrb;a)P;nNuF%7hny;q)c%;W zp~=%lstV4o-4QGIMjl|xF1RY!vE498jX-++R2sinojKO$aBzZ3D|d>ur-wKv_zuAQ zs9?Z=YW z+U&H_?9+nw<|ft<(|B7IEuk=xEnve4L|{ozQfV?yHWOUDY{oM;K+6cfc(6p~sG^x%ux0^$@YpsfK74 zRn6V&Fqi59uwe$kQ`Z~vnw$)@FJLX@aepeQ)92-UxwR>@OIU(1)xw%~G_apEdwX08 z`qGYDe6rfWm}_MEUI|PEUd>m8U-dpS%-gd1Kj}lo7;3j)-qHPr zf$m_7-^4tU*#QaJmCSQd}4ME{xMYY^}*b0@F1_JpPm4DM}`7Ufc(>k0Vk1P6!Iry9YE!^2a7oSlpbg?AX_szKLHJvAXo@Ow!yoeI#U|beAGtiFkt29{y@wzrA1)zI4=XMv;gT<9P z{FY)_#4-G4WWKRR-Cs6iave`m)E%-ToPNRH&+S^m{~|ZcYP+QGhUMMC`Qm#?>iwXd zMIG;b+doUwigA_fG755P?Y>cfVZS!|9W&@=XQ~S)DLsxFmRe9Cm+#c-@8tWfy`z8N zJ|Z0V2=xtN!wOEndT;KBq{VkRr5f|&Y+NYb4mjwP^Q`W|b5vQU%1Cr5)(v%{+5 z$tvmJmmtvpth+T0G_5|35ygLvMly0XE13xOrl9P5QFkH~_T^AW-zry0ZH3uW zn7XLH1m%V9i(gK_y?pU>nmFTe<=$MrD^i327V*{x@F8cB;*d!;*QF(!U3^~Q8LwEO z21&NGRh9k=0$@l0^3kD&oUwMOUja|5L0Og_#Zc93Y!8JEfOnayG zhJ2liLXIw_pEL9o3KdeKp6Agun#=PN>Bb1gL$R5MA ztZT&y_lC@w>qhK6u`w9SKy*f%d#sHcH#Os*<@Zei%+waDOPh0z3r{0zj^#wCA$}0% z8h+3jJ`CV+`J30}+|yKqbo^5yVv>moVkVi`NBeU`V1j@I7@04=dw%trrZu~VCIG{!F1L&M-!_9=Y`$p zx{vf;``|uYC-_xqqCk_yrl_}Ny6KwSpY8@3nr0pXk4QEBx;A%Sug}jq)J-cIWu9Ck zalEgbW~M_LD)Hw>1v3Qy7Ssg?)Z}$GtkPbAqNQaPG261}4n~(Ml`PoX~ zCu&y&scVFuQn*F_CEKUI3%9dWH?}2r4(aWI@1-0biS3c0I)C5LBbR;h2DqeO9GexG=+h62@7Uz5g)<@4_& zgZP)eT#0zTEWB?|uP0THnU^!`yW;D4_JyL~F!c)Y3@&lP>k7s4jlc7L=ktK)^O4O; z)Gqk^^1f@(Ts}P6xl%QMGJAxqyg-|+<6ba%Bc}Z;ctwK`d}5ewkn^YIkn_V_G67OH zErATCmB;{Ek|6^MkolD&&yDq^*iC`NTkW<|oR-WiS+6Hj&YT0(X3L3Ru1c1j!qlej zR)FSpV9iwkZw2z#?KbkTyFQ&-NBsiBs?aTqKWH7^nPQde0J8duFfW#y<;i#V^} z+{QAx?Unlmy8-{Wodwu(SAoB6Ym>F*y*n2G-`6bK!&Tc?;VX1Cc^RNjlsq&A1Tk0q zh~YiEPpa7~@juH?D%#HzJhRn4z@b*US7>}g^9}W#D?Q^!tbQU?FMWKMir zVD&eMX2qc51fY`XGC$ki05r<*}2jsl}-I|d;XzNG3Ww@-caQQd+y8LfGoAbZxWlFmIue||f7kh{Qc=^vgtDHn>X<$Z_ zP+! zd=&6RZ)fM;By6%OS0+sG#dEwH|}?(&d@y*!+!Pr1T*$nA~^~n|HHDppq6AL-f5owu)Y<#FcqJcz1D5b_8 zQ06Z4yGnjhHi%cJG}ofXPcv}EsrdS@*_u2LrXn^ zc2`T#b{$mRW`S}DJzrcp5RL`Y&9ccvDV(}(#*J_wf3I#qG$37g+v_D66AAx=aF}6P zK}1Su*2HZ7_xSU~hxze-b@LUVcHaz5Gsg7KKsz2Cya7-WT4`hYs0^AV$A)tAo>n^P zlQgN3z9^$%d-uNm=T2&3p!$UeI>fmeuNBmw2xk=bj@gq8Sm5pXk{WNS?6KwA#j@|9ZW;O(BSX|w$dXa>XmUp*%*euune4E?C5WXL*6=@ z2(BZFU0U1fOEQeuRl)opuGS6NqJvCAC898UX431GfA5eU!Eh^O%RY=c^E+EQao zvWIEqaicRBHV`Tc3(Yo%Y_FWR-Qt{sy((@v!h8HZsi;y7jSEzCMmhMiX!=S({Quc` zYWU?QeVsCZ3`(}Dt=aS3;Em^Oiw@>&iawN3jz6Z0M~%tz_?eB61*ZuJbM%m{K+a>H7ygaggQgnh}33sc{yDOCDx3K7Cd~(<6 zhZo*1%{W&;{(GPkeu6d&seAb&c*eZWFMDjky|L{Abc(6Es>4zxoej7W+rDfWL-2_G zUr}0ThOG$lZ;g}d-{|*$yUO`r5jmm>>63Jf>$h|Aw(vwv8;B;{LSSH-6c#6}fS^%9 z3wGAfsuZYI*j6cszwP_&`FrQlpXc||cWAMW-vy;#Xn)}jkQ~Hq>Lggs2V&KteFak6=wwLF z2V`~P#B1GWDUeleD**ek!!7B`cRF%;jW!%VZAgCn#0>m}!yy_tjq^?tHqYrm&1WML zbB$VZ=VbW0T^O%R`Q;|j*?r0^&xS84-rJ!L_%o*+{&ni4sqsDA2JYyP0FHB=XKy%| zquOu|5+$L_~glk=gULD`{fYC>A=+Nl|l00=k+UcVm zrg)IM*7?D^F9d7tgOeep7Cgz1) zO?W;+$F9!4#@62M+Nw^MdT*mXw#<4kP{Ll;`IU{>q81^2VP$7)A!Y5%-VUp)Y9=O> zsAo%613h+lMqqdg0|FicsH7-aTPsWZLVJ_DE7J=5Qu6QaB5Ja?F|Z(M;hnaH31Pk? zsnHd~F@t=5#87Rmf>KH?9j7fKgNee3qWCl?0B<#F~ zy{x{AIt32gl0?PffJXUlwWV^Nfcu(6Wk-h@7h_EfY7z;5dwClgo(1&kI zzf%bkwR?>crMWGvLiA)6x#lJvx@*>HMz}-`WQ|ndKh%{>oU>ava7tWECI7}n9+pZ4 z@EvpXG*c$#ql(378_F?R-CwZ%j4W%Oq|YCPkkl*9i*lxOfaHwB5uaX{KnD#22db&w zys^ND29i6e8*Pijvs`AYFDyLwA*v3Qh*O(%sW&h+bfVe|U^CiIjQ$~iKS;(jk z)Sx%aN);p;eQx#8^=j73LLK{s=UGHf0yd-2NkSw0YkRN4HAlzf#wI@K0_i;+0UvTc zua;o}!nFfq%am1<6;VoC9Vs>>MnHt?Ax*KsJQ_GQY`idE^;O&uDM_@0%0|?4qUJUW z8J4tvWfKiI93&r3fB6R2TU7*idhv$WTX$&N_zKKZb{PJK*dn!FVIZSBx0uw| zpN%5&Vb0|jr*H9A5~siKiHj)W`frh9 z-VxI6?2Xp1?2t*PcK?;@2LLUh!uNg$G~q1h2cyYr8V1u5)_>_9NN?#LNpIyIN^kj| zoTqMo_F-J#r8}(8>Mbj-?+_oz{4`7}jEZ*TyDZHA+ynP_#nP=Hn#XWHRCVo0t1V8? zW;s;XqSGP5N0!4?v0wJiWS_Ev9LEI(8&~k@PbS6E2#R8Hw2={E>4B%((*4a;ND}LA z487Hpxv{uEi`mNPYD>ix?VQs2ETIiso{U;mI?8s7n8|SXhJ5LXyq>6dMPgrc3#FqC zixcSIsT!ISCBV}Yg;`7_N8%iRQMoTotg>~jbBl1y0q5>d(i}RM1M66I2&7SWT=-{niUYY|*{bgUU#zqX)c*bJN zVoa%x`^@i|T3*jloTGX;BIem+75mqQ4Cx+7;|DVpO|${;Iho!|cWJU2L5&}HI@be& zY*h<6b}soO5c0FFk{$Oi2qoonTsoIwB6`S;2)*V`dQC!)p#8Z1Zbb zzFCH5K@Oi>!K1Wom>G76vN6@YCRpKD93jFnWiB`>wbQ2O{s}ig&E z1I%s?=x9eaH3L*ot=L$rJ|rOAHIQ;WayDfVaJ2)V?i`gVM*Q1;ZbQSo_?F_g=y%kw z4IW_%sRs84Xr#8pKO}YJY=i(jC z#kpv!%_xLjnNTH`7Lt>u$5*XK^WP+t1G@Tdb%`DgUm1$mpp$RxY5sbfRI5*;zUii# z$5i|7VXi4v$-9Nb>GP7}9HtOA#tYM?%Vn@eW>AGr7B)p3sNd<~(TcGcsRVItMgf1@ zcxPHK#R;|Jqmzwu|EAP432;7N9%hF&`4o_WoGwnw(EunDaYQuoE(k31wJqCX4_1J8 z2Xoj~^bFf=M-L8PF-*d@*Tf561rBk?XpU{Ih!dt-lfHZ>-eO8!4DU{p061@Hwb(;6 zdENvpwG8K~xTy?@hM=`4t9hf-x^lAm!k_FxS$UDN_C)#lu(oW=Zr2t7>xgG<=QrEQ zj`LNvNQTg<^=A!J)D|4c>5McS-9_A< z%{aW%M8^r6dqb4%#uBaKxP>#iV?4%rs=me?tL-XY=1{z7a#k9EXul3vXb-Pe~g_|kfu?St;=1uZQJg$ZQHh8)n(hZ`IXsa+qP|<{$nQM zOq`oD@m{}I8M$Nc%(b3HFWfzTzy~5??3hOSIf`l&Q@F->FUFk&BEY zxh^@+6b+sj>59q5T-J6a>=Ctj?#dEKi#uE>NPBF7DDB~ddhF`Z&<(!eNMm-uuCnJ= z8p@N7b7OeDE}wE^EY+4r$S+`wTZ#m6$Ily`{KT!2Kb9NvTmFgk6aBt7;Y=*kge}I8Dk&kRi(0jLW6Ty}OE8mE z{@W)px>YpyI$Z6`4Q(NS{5wpgw&i!zB+A7szysUr9%qq zn%cFnXGBYz0DKvTCKv6#!VXMWRr6TSygM!#|Bdb=3O;XGpvfNmM8!)?)GNm5t*Fo^ zvRwbf#Ct8ehObFtvTjeQucccHLkHb_?_n?=)1XH2)e*b>PAO;G+CTiL9%3hu#bc1k{T9 zzwlB1=ZPoiO>Ni0eH5$o(J(%1`DfQfXmtCmzYB86KduDYDj zi0yn3)`YRP*m8N1qR}rYs$yHMQ|M+_Dd^((dN2oB<4!nRtyJ{!o*SOeKXGwC$=-Ql zBx?!SO9bzC+gYuf-q-CD-dsQt^)p#$NFQiVT3gbc~wxMz-k>!Y}&E+2x4o}H+;-6A{Q zzB2sBeInk;DH7UiMSS1MsJMfFl?WZ#@(407ZRZ-o$#pqMs@`Qa_Kr04jTFy&-euwZ zTU6HmRvkSv#;F|%G~JLo({#^Jf6vfyN4D&*H=IVMLdr%`ISj!{g0*xICX|C*YzJlP z{pc~Ta&R1gEp1u*)2vtaZGFG9LDr`7SD}nlO9lS#h8_|fFN$z$SS^soJ5S(5aMqo7GI_7g2*qN zzWX>VE1>~{eiGk8As~wl;xPyCVq_gR1WesKxP*d zS&EqHekMH=Rf+zf2eN%iTtdpl!x4A2)>-isvowTGwt(2Qz3|S^Hc>#)LIRQwMMbX% zmM$YQ!^Tq4;C_rU0#@Mm3WZ8(rJEP$o@dfEc|l=r1ZuRc5CBRBIjgO*LwYf>Z-KGB}x#R~5GS@R52o z)(uNv@mBS6KLZPV#z1X&1(i1n26@?ZjWazmYYwW$nz@inhPoM94O;MN-6Y6j{-2X8 zJK7T*#zU?j{!-c^)B){nhYWR z0U0>M0S@xA9I5!9ia@BC2@As7tUx3_G>Vd)K|8D+rCZys!d+FLus=TP{noF!(Kj?6 z6n=yUVbDevY4vldB-a7F^L`-&G_O#8mAmGz?IEFLzeHkxJtkw#ih~IIkXGzsyp{y% zGX?ez+ky8QI{R1cy1#Y@{l0x9xTEMOO@&AefdkiZWl^00bDj^*LjBCJ{D66;dZh_> zO*`u8-MdlAtv$Vrt{vuxW}9e7JwE#)P7y)VmaEmvO-k;%o=lO{1f1%PZdM#gmy(Xo z6{9W2lFOBE-0GH78&SLTa7x7B`P{%wgnAtDtop(O{|Hiy`m=TyQF_8Yi$=NswtuRPsQ|Pa-aoSsmV(oxe`)dj3ow^@xao!o| zvuHy5(ZyA{Gx6EQfTP9xv?|3b!b?1bl?2{RsZ&ViN&urp$_vZek>m-#BS?68E~mIT z#Op>h8Ta|^WKV;-Kv<$&_C|=~846PmIC^P5#$pUwi&3Y?d{2kEl;&6X1PJk6)Cf1P ztU&gn{li;{X4`Q?p((smn=AaaGG!;^%pUa(uN1?Z7Jc8DwPt`5uqnTmo+t3p%<4Gy zZYjG6yBmt+M}6e2Eh$?}aXI+MoY)K=#J)65Q^0LFUD9AU9ZkW4w#5&>Oy?Z$*xPbzL8t+tXdwwv9)$EzgEKFDdHI&5;p`b-mlZF z7j>TH-!b=3gJx?PAp7=XNcy%>b;DDK8j{h>`)7FO5x-?S*Ixf=_ZBF7!_WU#o8q&v z3}mbBEo(034vFpHs(oP8AER1TE;nkAQ8;UeD_=0QnCW)K?gF(UUEB~4@5FG!5(f}L ztI>sB!Q&W&+4_fp*TZKyhIqI`mbYpt5ELjlI+`${OrfJ>p(|jR(OzKOrnd4>fw4Eg zFLPU#`oQCun$K zW={(Chy#}|vESCufP%1JA}=i6Q)0(ghh8C#z)C{JoiZ$%S5vZVQnaMnOR#ESlHe^} z%4t?Aj#*nZXi%g{w=liHa99Gto+$uWu_!vT)$xQ`_DzoyS0Xc)h9@4Na=PzoZKecQ zPKhmW%5Y&I}l_#`pcc&ZS;Mjs&tA}VD*=S4-o1z&&Ak0!dP7G`He&* zu3Y4j-Yhx>tSGv?@ zwMaM6yHR}qKje;vtt4zT1Rx+#lK0|Llt>Kd!M@!$hOkg!c@TY+mCQ=?xL2GWGg}$A$n^u=sZ_{@G{LI-cg4M8l@|maa zN6_>)Q~1q(p38F~JOh@;THo(9Bc>jdAcP;KNYPjIlJ8vpZ*9oB-4E_hLW#g1`~m;n z->$E9Kz`+5KQ(S&aq~a+K)<1PRgZoe>@I&`yUcbeN;LlbL(TpmF7K8Bf6|8M9sKk4 zIz?hC8HI->4&or^y}B~GK!%V~5`iLwNobGrMOlu9AZ8}Ojf#Aa7Y8JtJ;1y(YKkU@ znMBGg6%52%1~ux@;Kh-kXK8Sd9%!!n5nbQnZL>1bZmA%FFXGN zLklbVnsbe?u)hJgRE|iQUt7nxX$Re#`Od|Mlk?!LGoN`hIt>wxhlqOpWO^{?w#)8T=ygc%>ZYCNpGr>M6)&x?_|8h* zCTm2_;OOS_9rOv%w0_d4=&w|Jdd@ISeT zN_tB_jk=4jHo72uB{vU!U}m|5-j}P+K9V1yIoR@ftVWu$Mp{<2G9%)|ZYs)n1uS7bnj=t|#6i zr}P@F?%h-Ily-e7PE=!VI^d@(5}WT>@jM`kmyi_)S32`3YdT#DfI7xNsRaTrS7=PR z!6Rb;b^OqY(gaN8R0^6mm9rn|)6yU7%qnr8A@;RGB>N6dz5M8HM3+Hf_!m{?_Ed^N{RP_LOFAZbX1JgW#Zpb+=LLK ztx{65641CBvIDJD=hPiZsnX@Wprr;tUG|$9w(#Za6o^CnA1+q@a`3uCX>-4Z5Q0cYW-ZYWNX8~n!4# zNbT|Od zM0cyWCJ;0W;cAEL$ajpkJD}EG$|h=Q1Lvw(QT5<0L|~t8s6B*HBk*rGj}kV-hw)ri zHI%7aLhtnei!Z6oCZHl&z2L%*_^&E!OeKi~-jrG+%L3c5=2~&9{@1)R-}pu;Q%}So za&vq5?a5Sn{@ae#Ru)gNpJ+>4Tga2Oel1(GUpBUvE{Ei>=F-LXsp~h4LX$TcOx!0( za&Ph!?%#R3JDKm;JiDs}dA_J&CKh*99TpJOT7c0i69P+pRBNQ_t%DndoAWk&KA88b z561IRp6vJC_J}9eiih)|N4z}8T^a_;t5t4*&oFt6BkUcl-2q4Uu71^oA@?M6L5fn4oi?lzesZ-uD0!*Dtsr6mbq^D#(C*3 zW2{1udL5vaJ1TLpS(NQ$w;fF18IFRir6rg4^ThBpNm2O%Ph^)jNEjkn8L}P^xOpxe zPeY>Bbv1NtK<5Z}5};Zs-I3s;y4*>BpBx5p5AyY_v>W$Fo@5p(klyG*ZTST>N4x;lET(Y)a=2 zj|2{N)v`rjP~Ds?V=U?p4SA9$#Jx+jLuC1@Cq6<*oi}}B!}3*E0OQ0_0&CCZt{^Et zQ&M*_H}mAOhJ9@f`m#8vYb#0s>KBdLJKTD6_}Wxyv#zAi(Zr&QOkw8| z+zgR^rrIjT2k*;>Xs%U=Y%#i?4!u%%atA zf}01NafH1wX8#0(e+KgYbe>6s{T8-jtL=D(7HTnPdSMlXE3^uD@GLXT9`ebduP=l7 zWfgij6WD+Ef;IblcbPxr?3FS2J}f;h&VWe{wOHMCn{LTtRJQJAmqQoEPhbW7wUg(v z`_vaqdq8jIenP_qBnBD~E}zF>s5nUQtUtVul8*MQKd=v@K^%^0sK1IS@&t8zC9vub zEZsi-wzN{Ww7C4|Yz`#K8k2n&mHa^7;wq1MOm3l&MI%stpZyaH`wp|D$z?rT*B}ELs#Ce zFr;7KiMd?jy*cJwQ^+tFr*#x(V`Yf_=8nJUn;`vjTkc>Ezmb)1u}VkNGHUe;)O)2+ zb&Ce;_KG}G8{WAO9^i(LvfM=EkSvj;z6rTNlXdFy_R4DlEkC^n3k9i~B1RCH)VIYu z5Ef2|tjbB~KgJv*F9?Y2L*WY+*T$Mm)aB1-=nStXr6*_A@dVbhn5&iZq9HO( z=X1UAhCg8|YHNkP2%zH-hnkz#6JxSBu6jVjoZECn?gHZ|#(;(Nrxnm%dr(U7^vF6; z3a(nfd}vP__~uyqZ4D{6X|%O z#J*+#DO(Nbk*zT&*L_8k-ST#Sg3zqGuOW1eLO&ooKbyMoGVHned+ZYmN@Xe8K*(jqg~gFT`y?D1oV_L0H&N8m#zx2Yuzc zD7I6TJ`}kiAA8cUp7M!HGlP{COxchC;eGrpkWDo&b-6~NSrpEtX>+gyqg?rDO)vk^ zKDcv`T+Q~Q{5D)N#;0@4|L6FbVpeIJJG@5AI=v@5#r}XX+#QyOnN-KYWO9lCD{ol8 z&8TxL)?TniH_rUQd{`0y-d?#`NR7F2J_3`8(+OO3gi?adQVj86qS-T-AsAQwl&J}G z@7WsQr$!L+*!!#Y{AGQMaCY~)e0WWAZ9veb&eg5R+Vt(oIr)z? zP#Y6Ijt~?Gi2oN55cB^}PxhbXg0Q`vvx}3f@jtTgf3Fx+F690rAuCO`>!fWJI@|{b z>vu}<>bFKJAcRCmj3N!Sz)fwS*L2I;q7x+O^M8lv2_}aWK_Td)xTA_T4-EoaS3voh zJeuU%d7I9#KR&s!{|%(`w=foh)VO>^H3zU_+!knv$Kgm5sfO3;DE?O$Pm#2!jp8I( z4xdDEGc8LI4uLhAiS>1$sjZuqcgHEmoFxg?CbhtA!1XhLr=PhMrttlsZndg3;Ux;z zki~&7v^M(UC=utHX9D2qlw8qAS8!>9u9o%?IKG@UG%dYDGyoJtd<)ixBt zR5HPv5D=u&{!pDs8X={l#yp?f+@2&&UtJ5sBJq^N$`mq57dpMb$)xg8npJk+Ni#Z? zKSr(yPo3q>Wu>kR#lLu;4Ot2uixm%f{07m_K@rU7U9g)0i`?mv}p zz7=F1NhQ6l>^&BR`45Y!#bmb&tHoLjCu5-WR~S?|eff5@57vy0mp#58S9szs`7Fq^ z4hq@$V4Uev4)j5T@fOUN^aKL};>hS$-$m$)?jZNLhtmS>iG=9ShBtTfl<&D;k!L({ z7DnmQIx`mk7Xndg+Y7MNvbJo3aafq2|pF_yxgh4J z)6wjDro6$wp}u1c^ObiaM;<5>u%hn&`zG6-=i|-)WFig&;rF(<$igcPxoxq!tkaw| z{<=Wj#0gx^x2~C=mC-Fr&Nk~II~vX~eG?gG2=57`BX$NrSL4Ik!OY zPS<5qgVW2owGh8-!^WYE`>{lMz!(>=P}xNR&`BhE7#zN(6TbJ+E+rQ;cd*#Mf#q&e zdjomgfe!-4tp~!%L!DnMp(cfljEoMr8Bp0&>OTXa3C1=KDJR;0!Phg``ffhejOl^6_d>>pUgKbWN7b%=n4SbzjxK{m`4L24K z9_5)qS5I5LvkOpA>Slb^nDT&b=-&-WG_19q-_r4Z6hp&4t?gG^&6MOmt7U9El^FW= z6}3M1>x8bh_P6^{VoFTov4Im?SSGhN(UA{%H(&B9u5B!ftWGN>wl$r7oF2BFHB7QS zlnvZqaD#(*p^syEHx+7CtX-8+qZT(wKiH)eWOG=$6UJE2JwTwirHcs(MqI05gpUUo zisG12mYy3bS6PjT%eruC_g|PfE)<)~_;{p%a@IZp+&~I2C+fjrF-rp%?4L5&kxrs` zNP9TCzCj~XTovwrac_~ZY@#a88}LTlPbQlO(Uh&p7;r}DFfGl0f*R$ilJq85_YnFR zY6?WQ6#ZssG83mC)&Np5d&?4pb69_e7m$JiW27?y0gkHcO|WU_|3VM(@CuHLK(l!N z46adEMAaC+iq3JeFvkFqi}Oaq;;@J)xSC5#Q-;Fj9xE`eZzH7!#8Ow*$yX)u;9A0q zBFAseqg(u8q}v`eu{n#T$Sj;n3y=}Hno_6)z7}t6X4+!3X;uu5m<5O|Ib6h?i_c%0 z0J8g9sLUPWEeG@eWC8?uV?BMX3E3IQ-Ap4H3XxVj_7mYfMB+l|0qVGcn9&Qta|*PS zflP%B4prSI(Bj&VCL)Rh6a_3kn47~Y9>fU!CwB%aXT(PkOb+$}W3G}aeSfJ+fMXbG zw2aBzb+Ku-8WcdrKzxDyBOGP{vsS=q-^FHH-UIPDV9CW%;(R(yqA3lRL2Q8lg<{o5 zK&H^0h%Tq1y|%Gi{$%V%J5!%(Y^Yq+D$2H2SUb2vav_MU^FuZJJLgpMsuf$;LW-<>T5J zwXX&5v^)!$oD&&hs^!=Y^ye^00!$g1Ka*Qwe%TsTl!ts11+@}Nek001-GuEKA;Un) zo`g}4?*=U;w$|Q{h6He0>@%lEX3U(Nif9f9(oIACZ&f+1eTWHnmov78dqmjxo6BW87Hp;GugD1ig_xHiXPU`XZD3!}pBtV-}g= zn}`4w_G^3^MCBJ)xb2%>k$V>RuY9lw2WSWV(e-1A4`@V?@+gs${WzAfz}V&BnmPVx z^AzO>)beUJrQoCkUZr}ZP8c+O*!Tv;Ot-9@cL9|vP;`4>^TY=$1lbIvgq6!y+SPw`&TB#Q&-(H+>4U&Qgt84iKqVGJ>%bFmcxa@5#r z!-_W`ya0e0!(gDMq9~0o+mNrgoh9 zsoJKT`2cO%v9zJNV+U!Ct>5J&Du=6vG8&W&IK1Ln!b|f@alfU`8*(xTWjOg6@G;uL zW-g58+}h!b2`|t^cj>BlF(~ z_$^LdoFXux53U|IP?IIkz5nC_ZJQq>Vls=lE&^<1mDu~B7(c8OuBCLK7R`Zx9mcfH zY~e#RY#Tg$g(*(SeabrqBRS_mzsCXkLs5>x0|?R*gs(UX#)~i%zhQ3;$!YVpt?$8;-6jkpdhI0w3m66hpd}#b#^$Img z$t7?-4_b^M!IUx#Lz#pQzn`13p9_AiPIawGb?vc3+MafxzN|A87k?0ls@$5XQ;4bc z97-xIjF10p_zmpV$+YqThGmTqZ=P^)`MKY-)m+EfTUc-j&g?AP+muyH>z&Em!Pscx zf+Uu~Jf5hCSY(5BG-^R6M$%D^{=1!-ONso%D0xNnU_7_5Yh-ld(EUw^kF_#PY~r3u z1D_QN6oLA+2*vw(a)SeRmw@qo6_GkVrESkyvp5T)A#T*5g+@v!3{cTMschl z4ON&L(WQ05@W}$0mUz+`2zAku3psKZG?iWqSh;u*gQ!rgn3sLN8L0%K%T- znU_Nsc!f8QnLA0~bN}5A_)SHY!^QnU})Irbz^1*hngjG`-*m2Tv@Kz*+e4^ou0 zvhzx5d6tq2zN?`h#c(SL)D>4!kF5Tm&_vp97d+Nv4SoUrA{-ST`$110GQD9g48Il9 zqV?TTcfE!zm$s#|au=_hP752&YcNMsO-BSYYT_5vkCVmkvxvxB?#|IszM3qZ_N2u@ zMLmX4H85@13!9-ttKsSuElg!kF zNVT#urJhbclr9W?&Njce1GK_Or)n|<`&<1z)V8<@8kd>KFO%68!<1i;%-T5++cYeB zpWmE8w#LO%*L_w93r0lly1=RT1Bx3|FXPy`2;fytY;J`h+bXP+0Q$FVVvNO<5j+?_ zb8p3&#@CA>$5rChLl@1jbq22P)%7i7P1OGNu_u^y!k&|wPY(fN`na2Q+C0F`iw}(- zFHi5Dg#Ypr6o!XHrfmn>0O*(*AZRLPo9JAG0ywc zruU4+7BDp}+s!(1TM_pksLOHZkJI^wi5&Y;W0rY}BiKAgU32nQssC!3Pg|kw@Cmo|bmm`nBiF+^x-p(S3FhB<9_^d;zcC?XJkz&JMowY4 zN9nl-^}I6WOUz$oykch{bcKH(4m~0>6cOA(du6Q5%5zH8-J*M?w9Z@maCJ}foWk`a z_>H$3Ub(%4?}*wzw4SAPF`CDIzhVF6T^4_c58ACxt5 z33iqFmq+9U*fPJo`>u5#U~LRVyZ$CCUuKmNczZnp0(k3m|?fA>7AC81h#%>BI)E#nuxb%kp zzfucN%qp=ZOD0G^sdkL36qw&Q;N5jdeO#B)+V&!L9t9N5U%7hgc3Rq0tmp=UI24Jb zQtI(+QU>pEK3hAl##s-Q08$^Xj%>+R!GY#PL-ttSsriJ2#irqBkm|%u4qYCE3fxGZ zJadcYA2an30!kLG)qr$lw4s;DuNaArSHRulM=o*~rt~hsfh@%aR)HVoKAc4( zAblow(^)Xc!yqVH0V5Qc3osOK7xmFMUt%(+wfSIBZ z!QVqLz(!GLqISgu4^jckR_|POCGKxN0dwGwRLx)69QPJ>dt;m9CAi1XJ@FS@h~X?y59jeCvo);%6{SgBYdCW1hcGuGAyr-bWwSWU7KZSw?s9V59YTl z>#%-mSyMBXuAg0i5dB$pV3Ci4257<`pxwW+B)6F!h_`$Ba~|!GKAdyaxxxrk4(%wn z*&81YJkl9A^vJ2v@X*lb#LF#~@{ zyBEj<4i6r|XrZmR9*Z@=EH>qS&55?RU2*{LR;j4PW#f+xGyLchFtePE~r= ztjls{CGw;-RhZ>~wiW7eIWIQ5rA5CLM#)!rG1@p|MfDe7pUs`J)ShFuvrnWj>c z@ksLSc<<;G`?*2!7N!gu=luk~QVGF#iPf!{ed+J@WN<$NkuBp~npd7w_lfs^owENC z_d_Jt0JGr(0ZISMO#5HW1LcjZOpRUsTi?b5<)N~)bdt@%V$bXuf`}|bOvqy>6qHZM z1C}Tugf6ifB!C$Tg(YFOZ!%E22wqK04Q(grSRqvj4y7T4TBSgzQL`>uvkX}6ShVYH z@yDoA`*yzeX2}SF8ua_R%X+zXx?cPD`Q9DX<$A&c4bSt@bA}sYWcQVV`BkTlKzQ0D zkC11q(h{n--&$=F8}Gy~v(0y?X|1&1dTmnI*wU{CaY$TbF?$y^+ew8?ICjQz@HmFS zsO{4+dsM;L|IN8?+xp|aOHXmVd^Zi&1#^=cW_0$?u_SFChjQb*{{_;ep6)3y@(aa~ zl%F&SLHa_Q9y1`Wt?i>6h?hLhmw979$mr7zWQIQ%$okGP!$WAeha~O`N}(SG)?HwP z0>zLRKY33L4`FQA5HBzB+x^Iq6c`(9%+1p#VTA5}mF{BWwmkNVo4@9Og&Tk2PP5>F z&y)9L@Z?Y3!8{j{M(<4!tB>Fa#?cojhO@&w_`+>+EJM2i()TR5@~vsXYb1<+NS)LR zo91VSi+}Zjyvt`r>~EB(p1lE%JG!~E8QoX*9+Db;PBTBJW4>+mc+nf^A^r1LnzPUK zA!<%Kk{ihjj{Db|*qcs`Mg*N#BEQ4*Tf}nzSnDZ{(M`*dqr7ZIPTQ5+wkz1*U=uek zpR11heAc4dXaC&xxM^tGw=c|JzdmfR_WgxUDKXpeS=GK0@e3r%Lot--G_1-$; z_0HZ&BVFy>zm7*tN@D|S6B2EpBt)?`j{Tj6CJU46fPpvApeU1rV!k$NPCg|L_8KFR z?DM)vz6@f2#=<`%0iu#SpU4udkdty&`hA>3@1WF?#OyM@cqSBbD5gJpQ=xqb!}cB= z_(${&QX_iS+Kq7*^BHU)iq}<^|0CF)_qp#CW8^z@FNy|3Ws0U;Pa{=dK|@82@K!W4 zJTBg1Dus@gDuGBuqA}DgB`pp0FlCIA>6y~ttU3r9Ympn`-(RRHy7a;9A^gh*j@yM@ z=WAr1DJjf`;t~-#lzFN;jNXBhoE@}dRpp~q^NZJFP%Z*ISTmRRjiTUaDWXTFOEMmc zih5AetT04$W`)&VwA?G54<3QLcf_QuAwhcv9?HQ8h8B{H&1N#b4o$ta(=28+=G|p; zIQJYOBPx|?=BhdN&_PB0DEHt4ko19+`Yp>RM{-gTkHd?eAlAd_#<1u6HIN_OFsRS` zOo&YvyfHDb`70mi>UZeGuotmzOdQg(lzOwB!#7phIT#wc=P)Y}>JI~~D7MP0`W$Al zWew~DW zDj7_?VLoiGyqv?ulc>zZG{XEd=kzdm%3r|#9^65xY*t7?wr&n=Rr&4_zjtY@kqyxy zvkC$EX*H{V0h7Mgv*@)?O(sPh%92<#uHAKTr>FPDju3-wA!jDdg!AsJbLmJ;#-yRQyMU4V5O$BSm+|!F4L}VUS1yjWLEB@ z9}@=WonR^cx5;bRi@~0;ej8)I-V(VFJEVVWOkoxEHk51Wfm>%trO29uXhrQpU32UL zYLfkAG4w^C#wN^5mQq8%mK6)W(Tx4|)7lD4P+u`{fZTN0$hz6wA_}u6g%~MYsBaP^ zBD!h5cTIf{sv4zcSl99;y`cdE)cN}a(9TH*ZyD%LMWA*e`b$uM^n!&+$BjLZlX5?^ z?u<^M)?{tZ2#>yLx>XXlEY`OVAeLbxGMt~0^Jl(tSYiXI z9$Twh{9dU0cOMQm{PC|Wm7ds63MGU0!Caow@t_phZLKE1@TJiJjn;e5tTx0oRG#0Y zWGda>95rLA z7?|N115!f8=GrO^lPh`ca>kOc=xOd4(?#j|;^%mCWJ;W;&555e147Mu z>Xd1$kZ{XdkHa0s)y@7Y1OY$L4}rD->vsGg&KrCTJ>P#4GI@e)rw~!EDrL%@g2Rfy zf7&dV@VbOo7&|*E=e^w&nxZ|8kZwNwysZnn-gm~i)Q6@qH9b2><_1R)suoo-#Zez! zRxY%tEs=6L#AI#FM--R#&?N|CL8Q$^$85nwx0k-+Y?5c7h{Kp`F^Cs{`W<1qxhQm~8$4qCBD(6Arlz)G#$ zoKl9pT+*SY3=T<^IzBPK?Ose1Gq|fUm86@{{9u#TnTf{CmN~^gCGceqIk>iz?$aRl z495lT;+7XG9`uB3K2L51+XYW|X6foJkr0Dep9CDcS(UXpX0?=sEZn2Wla>P!_T(P^ z7e~17cHgt)PB9K#M+D%)rAd&7GmBv*Cj^E$SrbHR6;t2@e-cRu2jcV ze$FV;t6T6j;$r7&#U4YDmjVU>HB2Z>@Ffq^#22!r+d__+$ykdFQ|n(;=M?$O6%>dq zviJ<V!$N5_mqkb`^#XH6wffVo31#us+Uo3%95%a9ZD^aN&Ac^c#&fUO)a_>Cl zJgFKeaA@gZR(Npjz8Nz}%~Z@;fXPHI_oGKu?-TQTdwOy**lZ_Fr>@vU2uU8-AZ6va z${3ycWYDFqf#uRQ*r|8~#XXEsqb_oQf%XWjcImb6+F;R%l0o?3MD9x)T#G3BWLYF% zJbJjpir&>FvvkfK>hvxuJ>|OcOPV?RW(|@adwv$s@B9mtSae*IHbkpW0q^!}$8A|$ z)&)mli#??v4@-j~Y#*)V>ZQq5)yY0dM#|eGl@HO5S`&F_HdqUb`HD$7RT>Ez?aohk zjoIXVl>vHcDQcKhCf^b=<-$vr;u{y>t)jKD5eRh+sJ|r}HSD*dSaI}D{k_>n=*2*O zoXWs~>EsdKs9GVT01r1;pvgRFDj;4RjzaPv`}uy@^3lEN4P>p)>2?>hYo7 zFz21z32^O=4SvO@;~7dS@$rdU?CQ#=s24md9Y8~t|0hf6q?a)cB9Ify6gP-tyEPxb zy?JaGG<5|$t=QrM9}gOI`|Nqx1IaE%HC8;at9$l8WWKJc;!A`ynMD=P3B z_$dpN9U|ia<%fCIJNcz<^!|JQyNc;+rR~Q{=4WK{M^fgeZ1YD`<_GS&7i+;k>f?9Z zS?|=ByU}~E!T0tb{oz^pF#VxN{p0UCi2(HmPQ-|}sO0rB%Mp4ar9 zl?mMfuOFoE!5f+OIR$_Ifii=q?)6KjA{kON?O`N~>$-jLa2*7!ZCB9|9w*}#j z`*+?f(}8XgUd!H{qviKltnY;ITkd%JbNIN$d7u{q`-bcTgdFaBAdy?4EQk`8do{3C z=n}$Iq)F#dBWCE3Iqsr!c0m99c7H~i-7Ja=n96Yu(Ufb#0}ktidxY-*6+Ai7DODSI zl_G)~&u2&$hL{WnX4JoPs)%43pXj4x04?f*ZT3h=JzW_7@kLr%mm4NjSlHYF-;k6@ zRL9|z*6JIR^^VBO(*m%*omhm0knAQhJ=I&<#(RK8!TEp(`+@=g|;)bFQ>k2VuMLezVnCkN>RyQglv9;~O z24%VvH3~`86KiUi-)nzm#4Mv_F+kvmHXvDzUzV5}Ch_RQY@km#g|fsAOG+fDyW#vF z#?G<3vM|clsj8%6qhi~(ZQJ&VSwY3Njf%|^`^2{GRBR_VJ^GGuyZg)Sf3Uyp_0F~C z^N=PVWPy9hS17AB6;*6jDFwXGPd;lY*$`nZ3Q^BrFDEO(%KU`n_J9md-ceEyk$}L# z2SwP`DUbX3a|9g+pU18L^vSs-HdcuW6Gy8-MxP1Wbu|tMcIT-C?OiG;QX~UU_ zTO=|-h`j?S!AQpYCuNloE&Rl5ivJs@J0ac?4AB}A{kV!5icMfoMqt@7O%3$eG$Q8==Tpn<{4Xy_>4KXua_2fyKgvcA#h-kqO#MhjWkyij#+Q z110c#0p&D`z9MNZ;=tq+CG82)t6@a&U*Tsk`wrW2sun@^Gw?z-5r*r_B;Ruf|1@jq zP=9hN)D;LHLk?Xi_ksSYuYZ2{SFNN^AX@|a7Xq{`m0sY{yX~2miHEDGr>kK`QJt@n zKF@cqhQ(E}eTiKNrw&4X5^W9foNcx(E<}=(G^3rier4?dOiUg3-x}sQQAXqmNGOb` z45pMqwc`=+Bj<5SDRV#5xw7}j|cBTUT%p9GTuqZUg8QXm{P!2g_=*@1wx5RTr)-*+90I6Hq`N)l@k0hH^0B3pXKgv}c_L4zTvwVkKI||R#4%NV^bqURiB#h3b&}uJPzA@O9NgcT8su zl_~Jl#irXyD9w=hOaArBb;@tZmdR>w>GuqJv?EC6RJidC-(+t%47v4fRTah`szRpx zorMfg6A{1-*Qy*Srd-#H3o78$Tf;IiwMCfMq&e(`ak)*?l(Cr)(_zv%n5Ix8O+bg{ z#CA5`EqZc^;AzKmD!x~E@P&23IVB@+OMiHRzC0{p3MYneR{KU?#S{?`SaoF_!wfF} z>}#bwon91IGtklv0V>p>t!E5Y$o?q_I zWhQ8HV*<+lE=I_?{H!mmX$+@~0}|~3(e_U5j@hR{BuQQjU2{AD7+$q+-4t78i^WkZ zw;qt%W7h%quuZxgsj{t<1w+S)hp;32b(6h=)q$HcK&z7~5viMaV7q)z!aHnvdwUgDnfvmIt$OB&^=k)QoM#>`7k^ za(4KEu}7X2o9PJc`y+MN^|<$RCUOn)Pn>xSy+IQ#nh}CgQLxkUNnm z0Ejuv9Ys!mQnya=`B1>^ESq90IifkOnjc*ERWL0#J8j1QEU7<*$~X5bF%-dI4Vpc!a~ z11Eh(QSuFQmm77Gk^7#ZDQ(s3OOa@2v;D@nJZ^2|8&FQb(bzHrC<%~v5*8flxELT2 z=e8ljEDD&bcR{4v&W4~PF11`g{U@K}Xa=YCw{L}eR4q^j0liPm6d@Wt(KUUV-qGie zu4z#MMp%Dfo}Ye>J(0^iu&-UW+YWV`^6->W1eIru^cRJ5kaOfUL?oPZCgMyth`^afOcBZO)?ds=Jcss9Lg993+`vRRbWRGc&_3JY+k z0Gkdq_)!2RJ6~lSk=Tkkp8*I+5glC3uUr6^HDx)p^Q@4XFw-_;Kq$6DmqlH-UKEbA zbc#QoWG~43%iLSYZBGC<#*bhHV9XU!-7-;BBGaP>QpffMsJq9OZJVr^&rigN>g~MN zJCB9HTQDd$&dO>RW7ClvtGi1Y?~ME_EU;7Rr}iUp`?N)`n@f9XWY^Smfx}QUJLiRo zgn(%839v=KmGShIrqYO(F~9amMiUCOw+<~z#9IaDlj}CR%6Z6g^{gN^a)**|938}OTX?@dPfm8A99i0Vj8>Ok4 z6>w#G7BTZc$H3{({4(uJ$TTWnGrBh&I?jTVzB=yJfj53EW;;86K_R`}sS0UzXL z$;c}xvW<-WQ(@YHQ!kAc;<@ypl^*8!&hQ&`_YB!EwPwzMpZT+D^0%P%9y$b zniaA{kx9NpnKqA^w&b}bi@GiY!x)~f&s8-T-UWhPna!>^xg}bC2jOOyUOW0x5&nWq zfM5D6&MqGkLF*|wmbNV+=M~4fer<$Sm{EJe){C~E#dw3z3%s0hePYs!{gVfH!rBe&%obNo)^D2h9X>zC(a93z43}FT>k;M1jSt6qVdTI6k8ly+|hQ*OwD-R1w^Pf z3!z9g=JuwiTYfvL?jLcKQkXRby>RQnPnK&X0 zaX|77uM~ydaw)+^4Ynpwok(F$u4LP&aSzsMPtv<_4|wTQ(~#bX{UvQyO)`}qCBBZ& z*&Z&DiAi48T%~e@!>`h}?V@&aprAsxUd?|f)}!{WJHd@Fqt$#hx=NC0*BX<_O?L&OBW8# zh`ze1aE*9YFB@h{GT26}tH7ZX%%07^HE7sqy9$OAy$J~7h*a4T_m!(B2t2QMvuVr5 zs^Wv;7;D2jA&!u6$tb&y`XkT{t0nEuDRm>0!ytF$E<3dxk|0PYviBpMS?(X!(_jPrh6(!hO5%wS5CAh zp4sJ;ocjm7!@;rf`BKC+L_RajVp|LGyy08{v;bRMg^K+7(0gfQKNWv#1u>P zT3H=1*Hz=vrE5YHwqSygc ztElagd(h}V1e6Yzqt&?%69kMKVdj2mGE>DIHgqk@ITi9GwUdwXP(~aUj+1L8Tp)Fy zl7V97ogCbf7EQkAx?cKx&#~Kk#=Odg{ENXWOw9^_=VTSAFu|)J>G=oMhe-#H+DJ}0 z%`RBhM0F_b+ci+ySgZxy_cjwL)Hc>&SMSr+ouq@*2%@Q7MX|(Kixwm+Iy14;PRq1! z2JPwDu>);P{*4z>0!bsWcciPKCVt<;x*kkX*u~^23{TJ=9bFDrV3Fg6yq6GOW8#)_ z!zl3Ef8yg-&hGy%tRGF$8{zsR;3Rf^W!%(W4~4X*-sBnRB*_n(6{LFa>37};k8qo} z@5Qf#%iV7qbztm?-KZTk6<})a&9mHyXK2|hXmGARJZ%@)yL!&3z6Oy9Y&Xnk%B(t- zr<}hCAwI`Xt2sA{Y(soo)rYb~6#wdwX_-|#5tcGVv+~2eBoPP9RKyW3Ze!E8*a&rT z5aAjoKRH&Fp~yC=q8KOhlBrF*AKc1_l1U^3vX-piW;`p1bsLDgcPrbxM zq2?`FDbdOj6mU?|;`sV5U*23j0I>4B7w1qq){?mar+}ecu&K%HzKz}Y5!*73W zw0%?=?Y>QX{)`izar{kqFxQ0>66$z|nd=Lq#LY(*1u2(6*ce!mq z#7aaUiYHr#Cafziyd3&&%!Sm`3zmbjRx*%i5j5UF#2cC$e&AV$ivksj{ss9OKsqF3 zNJ;(fp`{xebOqx}PwGo#`iDwTA01I2HLWJ{AR7A(#y;c~Y}2 z5Sp507RNgdL0>nZb_ z;uNOWMi-$+vSvDgx7-DaRO!+YtME>3<;&R+SLpj}k=3xpj78>=Mg2KRvxHO11WB7` zZwqytX?SS&r0~Wq4?(Wa7gchzO@@4~`cv~Ps(JN$skpU7&Pb!8^Vi%hmTK zbnf-ggMXQbKiup_4-Kgqh*s0t5~@Hefn_e*Ht5^WLGh#MReBle*fY&n;<0$xdYQ?i zX>IW{vphE)Leg$hmJx3T@*(UeTp|jV#r%Z%`4QDf%86}ORI4tNk(K4*rS6I*U^e9| zxx~f#r^LGk%@NgJ%6Gj(-q^)KMJ$R5wah5FL@f--SksS*1)O{n=$1xf=bqZd^BV$% z6ta=TTVbU=BSnY2DYb6m`s$Dm30~0GYo@>q4jc19EjBe*g+<9@`EQ%P)nb~hol@!s z;#)_5N3bf|yq`tchblCtYH{D7>6j?3o!LE)S2E9-o~9WQ*WF&+)ZoVxC1ui7Rw%rY zWHGrj3nV;nWY>?sDFguLIg|Nf$W*o%{F2`cdszp9wD^l^1 z_*HT2**s$;9M76;_+-iBrtrNwJ>#qUaWd~C0V$Ijcb;X7%OsoQiZM1#f5LvB9SV5` zc#>2sv*vHw`j1>nhFh_H7CX)pBdJvmQc!nAUY0%a`x5$YmTVVBC^$+FQ2LJ5=@f$u zK+mSIGWo%YvICb_Ug)tqj_7{`n*-*kKf90hcGCAg3%bb z0S2MZ{Wd9*8Zfxh=pEWpmEFz==&pGBxmErIS?w4npnd2@f=2@36|WvICf_T-byQ4e z%M-0$zpNi=ua{Qo$}|fbl5ZjVxXG7wI)~ws7J=i`>Jnk`Gj{jkMue63#4yb}YLe|v zcagCfo!Q)4bITS}Yfm2Fmt;lIk#WXd|fQIF}OfyvF3 z86$y!6S)2~P`oNXnSNw_(`)ixc|YIKf}RSPom_g+QoCJ2MckpK!JoNx7ns{cExPRQ zVcXMHF?L`}?Q+jm3hIBueF-W*oi&pP~9}v)DmOqo?Ob1S@JF*I`i`a?$ z3I6gE(uZXRVwCo8EJ!1$J0cvvblE&T%^tR$+?A)PQdIZYGtY%lIX}cIxS`hTTw4;2EieUmK{HzFUGEM1HIPuEPL&XkYeS zQtFO8cdvV9-!pV?fk3lKh=furCSeo1c4-+<`MZOB$DM|Qr+naCTGo$44@%VIUAb3x z>pbv^i>4UZDZtzIsH`r6as{pvddU-F(iksVa~%Tmwi?#FXKG{hG}aCgUnv+F&blMo z3KT&fHHu4Y5mhs{SBg8B-;K5?F$@N?vQ0{xFDI*Vhsegi=jw=xWIAEF@*LFmh3aE? zYdFtw9>P8yGOf=L!nP9>RC6s7jwzryTBsoJ;6U4(DExrn=Iz_y9|sB1_Ni$4mq@L! zz&&xn?IPvk9%lb~`XuX!NOgp((VXWUY^_bXyHlE#83}%3x<^Cql38+m>(Bq>tk9nZ zB97rkgKhTFCs57(Yf#VdZq(~3knPOvza?ABzjx+`M&A3a8Wpq3&P9vzK=o$y95t4L zf-~@U#5A0A9o@O*CfdY5uOloN5HXJdMT1%jPh+$tMtieO$u0>H>fHlB43kN_iChaP zfC}H(0Q5RI2yb&-M8%j$adL)ug&~Jw)ZG!Mcp@R_g6hR2W-Lqkj|xSPmCU(rQ4nB) zq30PR9Q>eRAnoSY=_g6I*%EHJDeiI7B00D;x6FgPK;}NFd=L019s~;0bEGPYJ&>}a zp&s}IN-y9i@8A^A(2n>ePv7|?D&7>+daT}XaLM0e`KGctoB9}!rz#J23VcMq_Z>Xoe z3ysCh3bJW%M);So2ylKkvw4TE8?74w8EU7coZqDno8~c*d8U$&2kNOhr?Y3@92^)Q zm9!f@oX4#}$xLoLpzjSMeR{6*<>U;1JQalEC5XHfQlkxD(>nTx8Rmw6h3!P}aHy_N zP}Oh3RIb2RVqx7-e%}j?-0L@|sD*H2R5H58Mq{W@u#F7EE6;i{NF4z7M4w8@j6VI3 z`ANx}xA*F6e){{>>1F!g%ulNJ4*zY0n$S4^qjG@NCGVWz?DX3Y1>z9AfN36xRM&o8rL}(Gy%7%|7dI z+x)hlp!NH#LMtoOlZRW7@B2O1)akp^#*&YK0{_$Fvk@4_9s{*5ybv1eyh(1r`+eL@ z$+llaAU1w~GrG5gH-Yk1?Xr_3Yi!t|(u}u;Sa-ZkbSYm=Eb(E(@d!#z(X4o1c%Sehla*WT>~wQWOkX!~)A5APzi*%LF?SvucjKVYrN} zsJGr&u)*PR*O5xKxxb!&-$-faHaYavjd%^KA|-Or;m&l^kWNFzavog+ZnCSS%r&{- zK-4s;qy$-=&S}|*7&dj2ol!ezG7PlBf^9g+$Ug~63MTu7ZxhD^6 z08yq(x*s~DTEwPeg3hJ-@QBjhq)me-Tyi^$TS@ve?nZ&Ux{Hl^ZgNzKx)&P5Vvv2n z!lywip(}FR#xoOeFn6+;mOL!OS$aExLDX+TF*Ok&Av(0@DWK(<*iv{0!87P)n|p*-Dd?I z8?K^cWT8{^%eAsPDlCj6u}Nl2f9{;>zFyt4Y`d7Hp!2xbrJD7oROLiTck>6gK?aFz zdVNrrrEm8z7sTa1%H61#22Kj25z>>20{CX=?#Wwq+}vSOL8{-r3aEj0ktln6fZ;`H z^yOJpykA$RtJFhB88MN|6(*QoQl;@|OV{}HCoNH1Uxtd!rJ3lUn5{2G#RUi*;?MN8 zgm>Pa!js}q?sdE+e@g9D2KUJ#lmYLttWTzZlO*ZY2{S#gq6ZPE1^KutW zb6RnOl3iBH3D9?{j*~8xm6?>CKM&_Q-J4s)TiZFZ8(G}gg`ha=3bFIlY6LsS%==QF z>2@mA5aeg~-$?06dfS@9`@d$dUPnDRplqDWdlXRPu$Keo*@2_&1(9a%4H>TVS?uh>d6hMiEr3rWzw&>Dz1jTzS zs5JC%hQn$O69@~<=R-7Kxv#jkpc{k)seg2of;1Q*4MZxL?Y7ena^AU~xYgAU?L+$* zF4-s7dpD`2%l9~1WD%sIEfn2n*P1e_4(V)zBIH^UJGF|UH3NZuOFE(Llp*6nURvw& z5w~8u*r_;9$X)pnEnv-HI($maDeTe6t{jVAr$Xz2@MdB-E4QAVaxJL=WY>k1G%sN& z-`|>Km|CqokfP zesL9CEi>&*GP8p?A>{%tyhOpBG`%hwirq$ptO95DL>$1hu!Ic<$;BCg1DDLVqS)7q zfxPUQiX?jnS+<`zD3eA2JBb%$4IZIMnDOQPbtxcvjnv$?S?J54=wqa$t^_J3EE1=@ zu;G8YBssJ{so)=z`D)1q%7q*;A|harD2(gvW>XlvhFyzr`h{LYA?#2!Nj&j|3_Vlg zZU>%2cSKS+=FnX3G4c=2J>hic?qV^>zeg#9|7`L?J{^kIX9%O2C;gq#vk{5ekrS4- zf8Q03uzE5?q2KS_cvZ7MtUYMQw8hLbf+|4gm7=>MHUfD(^q!?+nJc!L7IgxBXhD%M zPaZF%o<8y;i7>4rFW!-QS0*rR1dKi#;51uS2gePPdl`bz00Y6Om(QAykW0+|S zOhjYzk!u1!*KcwYA!Qhh>hcC|$%b zu@g_ZvqZ8RCYnf#*rzTtv_eGyT>?42wa z0QSGFY;BDgtiNbO&L&P)4lWGxMlM!vW^zU@mj9VMMQcENCoKR!bM2e#$wipq6628E z;z&s=|6+oyQHYqZQi9Y-4t-($hcJ$>r)XV7~Rc$*9EeHxW&H=x=3te>hqcYmL4rYzjUd4)TwwLhg9-2eBq z$S=ZUzqAR7v48wD$^X7lXW{)RM|J+b#{XV%rq#O(zjgYw$^TxXV35Z5FIyH*K#`&q zFz`}u;p*@6BG7)iiy}vhD^*Ef7oKf{6k2{Fz1?{Ei8eSTHUOvAa(>!<0r*!CA**J( zvQ(maE>L)XUHZ3%x}*HKr1C|TP6wUKdi$e1r6PitqUeVzodNm}HKySYmb(m`ak>Pe za?J7wBLu7qVG;yx)1V$y#6e;It3E?o{0MOjRW+zW?dcL;>~M*Eqs>k-bNqm zrzw2T9fCF4S_19)zK68_&E{%`u7xv2G)U-IE zcP{F^!z+MI2A?IM*GMl8#HXaQb%&C0Zn_n5Oa&+BpZ>ReUS; zWs~v}jOnE;qqjFrVWAo-S-O&3!Ul75Js%N(+4~t6I=ppz6`BThzJj5NPj#KeN^v^& zXV5jwVVb%1+aUcNhlL`G#iD3|MKzb$F7#e>2(N!6yzA}Zl7b~;8ysVMDaMbZIm7eu zfkQaqctv4FMNQObV3bX?J`zmmkG=Vw!A#@)rv4W0KnQG5Z+(#%>`FfG>iFD5`InRF z<6&{ouu>m7Sw=MTSoT{Rnq&D4hJ8d+d@Sd;+blI+Oeo0A6CN3e6wAGGf|FxJQsIg~ zpnt#gf@6gCAgdcS>tUKERs`%iU9YGoCsOR|kE*P|np(;Un^TlJ#lm2p2Gyn3I!odV z%_WS=-Q&eRYLImQ@gbi&1x{+Z=1_PwnIjGm>9sY$CQwdo;=tcQbJ}wqugaRgfp0d+ zaJY#0$Ri>OBiX|zjHO0^t4y6NsLw#2M77i;%v11YF}qY z$+qK?5^pUMgxOFojF?#-fS@4@MQbk-9dtO}46-sxP{rwsD#mnLGgVe8`e(!RFlI;2K#eUGIZ6to8?DAUMTdG|YNt;&eud>0cCGRX*rX!!q%;6jBW5-LSvd*kl%w^h!V?P4Nv8g`5Q||Fgq5V3i zyt5`kr2I(`ouJ;ZB;C%tQ1v4}qD1vNJZopLMEN2G=FD}ErRc4dx=V3jNOcE=b32`R zjIJS=|Lf`)5$oF!yx->4zr}k9Oyr7IPd<4~oNX%4^a$DH9Jk&xRH?Qh_-+t$2@k$( zGw;73T9zTRa$kQ<#xD#KDp00q`(gm?tuWqhV*HShM1ii24pSxkx)L?LcP8G`1%pw! z?nqMXW#0OpJH0_z%wvHG^_7Vvckl%-<;o@+4J1O(JGd-?!&uC6BazD9&6faGmI(rq zV_33WO0s1}+-YS@WEDNuu3#$Av!$EB`DAr+Z4%+7=U~Os{J4G*97E=r^Z7-~W;aDm zLguQ__GgFb#wl64JH2y)I=@V2PI7FBRnI7`nlbsQ&qX55M72*BJ4%eJ#({D6ukCWC z`cGpP)I)e(d0gIZKBO2EUV?`S?-n>A`T$L#`M>yyn&IE5vC1eA`Yg|_Vv!`~9B{6m ztvJPT6+qCt53C&-9&*_FG9C2r27=y3*j-^yyR6>O*DtJZEW5cSJMjIf#XDnR3<@9( zB!l#j8sZNz?5>QbRI4YA{?GW3&qNOs?5>cfRaS4j>zde}rIH<-uumFzd*aQkkY*%% zIS>cRR#J#P`DRK;Gb+X06mEhtS5`ZmOmhP+9OT%XWgS{NCmt822!F95c=2D% zIY-DM5xLhE)K7pnPx3bXTS~zxW_Y_JBAwMgeT9i5Qzs<@%7Vw91)jJ_T+YBmI*zC| zIkL0jZ@$nw{Oh^QjO1oLy9<}+Cw3ee)N^gx%6e5EVA|GGq17;mOG!oBmbMf@X0 zu6&LRfBN1*d~Crc*v+LGLGkEFymL_SgkojnQocTrAfpxO}wBsbCB>CT5vTgA{Lrl$`0%wLaNj zvTlfNfo2Lol$f2CT>8WdoFQ&FmK4V!P?+#Q@=}W%#-l1x1%^iDq2D{PY|Q;;0<^Yn zr$&0RW~a5GYZXMw4DM^)+IlgbZ|=&=3aCvjE+|$~hdaF1hri*f0Ry zEm6G|oX+QI9*oSZeQqZ(b8M!F$EFs~rA+r%+Z8vz>0QG-B-(qIs=nQBe(0qYY3pAC zMjEuVPWx;ZK1AEhldVtA0N44y=P+8-ib5J3W`A3=cF(>o>}2R9m;PAU_-E}Ha)Vp6 z9>+heyP%xe^vn9k@2V-4-MW>wp={L&Hax{2Nvm`v+zr{DO+IT(bWs|?Q4Lx_m(+XENz67H9S__T`Uh;BytyX~>dpLiQy zbpyKV7`g?At(NsHLnj@+u*^=Y3>ztW#Ew>Q_7HmN z@_$tm*$%e$tmLk;4*PGl|8(TR_e8EDbrix6jjdYZ&Qo8NyJ373PYl_tDtF{VToq&V z>1g9@F7A3L=tLs|Wv=4gSomiWo^;#s3@jhFWdIyqv-tf>t0YgUZeUy1e|oy3`)5Po zCQC41)46r)Q zGwQ}2<*H3dX*am}hno-U13*>TRM)(mmJA?<@IXxL4%|YitV)FZS6R~bxbpq(cQu17 zHKd94M)(!6a@A|o{%;3ZVmK5$PPiJslx!?xKtO#@qdy|in~md&mHEUS5^e*q5VD_R zGJw`M=QD|j@nt-f9^8g!@fd?VUe2P9#Aui;&A5S^5ZQ&Mx?z_!kQXPs7H`p?oO}XV zEv}LtT#|OLfCao-?3V+G;;MQAz1VcHl>6$ECDH2hoE#q8AGy*+rz@RE^S z1w{4RIH7DNfA^*h?$C@7O`X|IF~%Y_F%5`H#9}U61A4Sz@QOgz61A7ONh<(66#y{g zJ6dg-ft|{LEGu^$yuu@K8V+3Ps8#1dANOx~V~xfGw;ew4OZ6SY8`~tZJf`W?zMEF? zgL6MtS;}zaD55DQ8130tL{>CidEy@u5YTkE9ji;2%Qm*J<<6(w(md>x+dG!at<|K? zg%#MzG_X+krOmzpxKt3+Jy}eFY}oHqzLMH|YTD(6?z4k2y5aM5pNjm75qUE16N$VpD+f zgJ)I}FF;y5!O2}ASBDQP>5Q4QM7yCXM-t^-){2r!!{bHq#fE)un7e^1E~#{A;xJOy z*(PCj+QiPEA~8W+1w~5QEVhhU!9d#lQ8L1-68`qCz|=N$A6xD)GM6CgA2dSOh+r(! zBaj(b11uZ56LuzeK4gACrrR{`rm(Pv%(;EIUK=5Je7N_*t$f?$nZCTPck1SttHHjw zF@J8=Y5Bq$xa3m#sQM73S#bNSN^tYJHXRhAQ)xvt_VDyxjuZupU!M3X@YBe2;CD+z zb1$9Vdg)e<-ymFh@m9*73Z^qf)D5snwR9%FuoBGVtxv#2oz-!?lT=L3lM_GTqx{Mz>Hz=9kU~vEVW4i23 ziEf-IjYVuBT{dpqGnpc$Ooq%QQ=NdlLIk{tdot@DpCNQ+D;b}A8TAJE&0CQa>eHk^ ztd7(x@~B~08EI7l$575uw956UENqsBnE{bm1skMe!0g$)4T>Y{SgC@CC{`;5DMhbX z1-)ck@-l~o&D}@YU%7QGg@OLl*6VnozwI(bJmQu8i#siNP1t^(%kUX^kVGkP5t=Yy zKM$<95QLmF8@E4-08qvRu-0ylKL3aCM`MHGZz~KKm^3;V7}ftT5|DQV7@PfH5OK05 zw5IL?`UgQn$I#VxP9x$VQ595p8_B=MU(o@1pP#?sbkkFsXHOvrZju)&yveODdeP3U zp;%6?lF52uuv9RbT)Wx2O6H$_6`)EF0DLvB`grUz!t67Qzsz*M+OgfNTeLuQ*met7eDIL0>&3fykj;Ath#1@Qbw^>0 zMyhA*xrQHtp!Wa|!D0T=9im=uO|5RE-tKjf2XEOf72;%{9l8YiKE=4la+pinwJ0aX##xO< zo~XEtP%A_QZN)Uh(J)Zv*XRcI|m$HRZcB-z?B;LvIee0`LU#N$=cBam z)UVXm2x%6vIRcG#I<~Eon$GR5?5!?s0mmrFBhUjs+ewO}An=HXuwp{!AR=WljITG# zKbB)0NR3s)ElC5eul&>&$RPtO)N?gfdm&uwkd_YFf(y(IYrEH?nj=$*L;9u=0<{RU zP1{gti00=Ve%`x*P(| zO3@Va9y8SS`Xx!fiwm4nQBujtv}WU2Q~ldvcSS7&M9+Oiv+QN%#;ZurBGG{}c>}`~ zbtLder|3zO9>}SfDFbAleW(|<1C{4LiUml$Z(x(PjF2<>O-v~c(yOOx2dBED@<#A68F(``a`TF_@XUGDQ7-{0 zMY~48Vkkbcb=+ca{RrEW6REVy{z}p2fIh0%d4z{M$-J-bdqKX`@l~=cuzY^16tKe} z`D+QBWMtPN2@2QqY;X<}1O2z|Zz4M62+b;%QZ76KA<-d)tHw0FqCL>DG2D-l-_GDs zei0Tfypcz$yfu3e9m5maI;(Hz9|&#*f&~KG_LuY5DjlSimYN1EClGtoFB%eZbB8~f z9wEMrsm{{&9`8$`6)YQYY&lI ze~17bSAeZ~M^ci#ETOa&;E&gbg7>EnhudveF5qvY>iAC=-H;Rl} z$_vL8-o(0S9k%djK>Y!=CEfMZv9~9|gwu@Izctq3@d)uta)bk+giV&y11d?fNQ)K% zWDI645Az#A!%VsnMOUnhkjiF&qlsY$qc?Bv?7lLj=11LXkmX@WV%>J@)R`2dM1$4+ zK-m3k0-U*=8X=wQBUZRu!DAZT;43SlS(Sk`Iv}*Op8*!o*8peZF>n=J(5v|g<^>r@ zA43K$2QhKECzvf?Pqb_==~{m~^rmz=e=w&hY~p;rCg@duFhx~1g=^f*#AqmfVrEvX zX>mMRAE2QiWiP!$l`cC^x+KpfL}skBV?o!DGg{gukq!Iar4i*5i$q z_3^3(Hun# z(%!VR$VYN5rC1=eTe9reopI;Njg02x8L%hb$P$N?Y%ZLsDx8uk;E1=ADOi)TmoMOv z%*_M48=MFl=2tyfhji zvCa9&-pV*^QH`b*Xj>Wl>lBF?*rWdwmG7nj!2WwiqG)BEFse#7oow=OpFKJW<0hwG ziE|8N3wo(;)y7hiPGd>x-1$j9ZB;?;VaOzD@Rr;k^JfA#4cP<(R?VxRbh=Lcq6}Hv zJ9k+>Rm|D`>}jGt$3cb7Sm!?>%jbVk^<$km-}j@8)DuSO1UJE5b-#6>stSGc-c!|j zri{sTI3^WOYikvu$>xE)O`Bjgw})t$AEwQc(;ydKPI9V;hSqGH7UG3hrjArcFw&Vl zY~Ch@KcnrEk{;@Z%zcacS^mTm*v(RONjTf{PI$Xii+IBw~|Z`Rm`7q`!9XCeaL1 z_UDEgqr8qYbj-J-@xycMjK}YiDB*_7Cl-tf>Mk|A}EAsv4gfI-k zY=KSKskM;a2}bK92+mk4PFx@l2)#Cxr5&0UER7xHvp&@2=+xTO$9|uVnhipgd6DRa zs~r>31Zk`2wn_8&h)-71xxtkoGV6ge)O8A(Nl_h#;gu3j=h2m-Csrn2#F`P&cB=t4 z@WAQHFdH+JqmmJqNcCQ{eJ|0gn6e9<*>bNAF^~Ri*0LSIg)mNCYryj~-on2(>my&< zvRakDUm_?Q23~$P0T(=&&JwAQ6O&T?BF`zx*}>Y~VWLXYCiSY>2-e)hn+sTZEYLq< z0Jsf#6cs9EKNJU!nc<-3KX;a=M?+);6Re8?>Gi3Y2e8QNUR6f6wks{}8f9S<6gNpx zK+3m}tZ+iJk(DFTn}M_2EUtqy*sRw5vq19R3b&W6=SBSE&1Zk_$JO_+1pL)N z{mTwN@%oB&K6>=EKwNuAL9!)#hVpw12whSQxl$OI{64?Lb+M*t@5^w1@BH!}FJVH1 z%E{|V_^>M6WW-(#tuDmpk z^xm8K*mc=?>2>+uz2^h_c;0zS4>klf*Aw2N3qt>irb{niuyhUoLt~d3Z)-k&u}*6U z15e}hDJ90nMYm#)8*hWVdg&Sf&w;rdfde1aFDE4ZD2dL2^Mqg*pV3Vtv9^D-NZ1v6 zDKpUd(++g*boYbmRpj|O{%xPkzWwbkSTT}k|43fyV*1MD$HG(i+j@~vN!Ch{QFB&@ z&X58;>o)!m0T6!Kk$!9M)WNEOWy@3#+&V)zX4 zJmOtm(V$Ar>QJs4AsF&&N^haw)av%;@W6uB$~wLWQeL(=aT52Nf$N0yHz3oT9jq$- zZpwAFYn7W@Ye!0u-Y$??2oz7xsAeI@OyMy9SGLJywQZbhM3tIJE`wqzMb3?TZWo%O zb(3CODp?0wwi@61ow+%&&7vly1^$s^Xn3+CTDLSN(<3C1}_0W*-BJoYbX(eAq7Cyn(L>MsitzTr*7=7Cil z)UqT&-(j!8)n6_}Yq;EhzGdcPFcaf?fu?WC9tj2$VlN1|*$)0n(GsU=@hm0(1-^~A zw0HW0?K6L8gWM`A9msXaqWy+?T2{q2!_Oh(z0hbAhKyHj!fwF_iJrzu`aP)L(10)f z)S%i$a=-$ATkus#HlJPJq^~y*W4cg-L*`NG3n4o*%-l1hhM98yLzhguv)g{Y-(yD@fEo{d3qKrn^&4 z69!jNA>A1s7*pvU_zYjjF)%Lqv9G{E!i&D)369d*&Wn! zs<(j4X=F&3yw(+4;{qzy{7hm>IF+C)uT|698kW%zxcXi&M%pv@?DR?&4)=e|9JesE zWijwHJAeEX`EUGQQrwEN3uRf9+6)7<#uIh)$8UxZk07XDRf8aJP3MP3>FF}zpAw>Q zuli}5ve~c>WBw0g-xwoG{A@XQ=8k>Gwr$(CZQHhO+qP}nwr$VsWdGT0-utlolKS>8Y>*7@6_n@ASAR{Ar4^2rnZwUh0>`8$R_E)hds z1uvnn@E968r}tJLtw{OQvA*X)0r^!1D7XC=ptTON~ahcz+0-j z|0B1gV?4B;(Lh&Iu4;RW0dr%TG|3cQ;b@j;o8~CHG{57;7(yu)l8|3mW}Fmut`{CW zJx$DhVnk2I5tmF`McpOpH_Bk2Uk18@GL=BP0@XzJoAbYQ!z2Q;VITzo>Fm3hnje4s%3$#gDvaV6!X-+ zg8g}?uzi!bVq*E|&qrmoAbCjG=a3J+&z#b}Y-S)E9IM)Q{ZNQqDrGP$H`K$N;vo%g zS8X77kYi;achaL7(IftRgv2T9+3`Pj@Uxi2SqU*3ioBErZ8`oLLN9mluJA`RqDS+2 z9I8AX;r9a|(<}q!!B6k_OtZ_NPb_XDjzO#I_`uJtEBY9|iqE-jddc zemjT@h>k^+=+lT-4^XVz!+4-~2v9^(6rq=`YFNL%{)dT8X(5oT?AlbRYVqx7x|Y_G z&S@oTqFw*C*s8QE$7bYam}aPrHOm}>5BiNFOO-MQ{Plfo$Jb*)$7ia`fJ+$@n_8P= z&(JUaXX1~9HI-VP><5BXnTMG$#rm8{?n!UXlZw?CV;nu5HXwo-)P)ea4frj#BWFzd z;_F*Z;TwiN&cHXWDDJM%@Agz~l#;V_w=p8dUU_X-H0Ifb=>iw8Acl-np`F4K#|4Mx zJ9D?{L|Li3T~b~m5tFv;r9jG`!`2PXZ%td#kI^GoP}tF4RzPh&psDhsy?a(iNb-`! zs!N_JU%I5nhm8?5~`F13$KpD7);CLnmKF}VeREoH_qd~V+#w^afnmSTTOGL-;5juo2E+Z7Pm^bBg2y0A(xTW3OaSj?&t~v=@oSRkmE@-IPRMW3b;wO zG;XEVp%oWh^+T<@6SJh8DAb6Q*0vqj!_=d+&_-yWZX?SP#2jGoE1SXsabQoJP4VL>DMxAVjgnG2Jq`a&1)3ZQlvq_Of0C#LBR zYfKzEa39=OMD|kD!mAu$ZU)ZmDtjWoFyL{GuaVpWb50FDqG$%9*wXnF`as(-h+Pd4 z=k3$W1x*Z*YT^;^i_@X0M7VoOV1`%>iM2{k3be2SuS6idHk%GX%OoxF=S4V_mC64+V$=d6zLB;29BND|3g5Btl^;G4IkH0diJr`jI47+!fX%$&j%e z%#1s87F_l=jBmM0y8+Bl$m|Op0e2R52KkWQ>>C-;Xg|E&wa@foOj6st=etg@AlrNl zA7JgoxvsFF-MpEn*{ALW1{8#@IkIG!307y1b%xE%@1)H!!|6qlD#2|K{|!^}6Zu=A z1)kLk3~>=nElx<6p8U!PmCxk=Y|0=2sTvqyc&1FF2!N0{7wona*-Y_q@y% zMAvwVet*4}aDE@E;Y)$Rrarbw-DEmw#a$(>md`S<5rw);H<1GyAR0YzLWY6QT%hGe z4BrS@4_h02YnXGGu{YNJyA)3Zh3^6NRSJ)nw(y|?6x|(4GqySPt9eZ~gf&L8eG=W> zA9o(z9S-@{7+r*P_yLdmg8!cXa>^~h#`6KPBZfbnqUZne96oT!^WG4p&k^J73W-4!8ulN zNjSmgb^}&kOHo=j*2U^8ceM^@^Oo&m=Zusl>ndkgph~Rsb#t1Hb_tgcj^~eTuWc5* zzmkO9GCr#bCx=~`FCIUhJv%R+&pR(90GlyB6|VEpz%pSyIIVI)C0dzW2ZIf4t}r}~ zdv2Y(gE5<~@HAzwbr@`{gwa^``?UxnnXYSLUF6>T!!mc_7}%ZUr#c9i+AasspOTo| z2=fD8OjI2&sDB!y`!scCs(o{#VSpz^6F)tb+a={< z2Uv^?ry@ZHy!0pdo$qgZb!iPlu_^$QIEHKC;UqAgEUZ`SDx5SVJS03+E`G(kctj}S zpkdM>k}abIKg>b!LH+Y$wFwl%ddkcafSl@p2l%ix)!a`K-mhcjS{f#p9yLSHiHU+ovsGX2ZVaAc3T7%b*O4u!JU%m((zYsm|V#AY`v0kklD!3L(Fhktis zXq^#V-%}-kDpRSoM3y)&gg5q~E#|#om>iD9j(B_eL(bOINJ*r5M+$~AR~hRsfQE(u zUQB1XY@}y^EYfZhBB{oXs0KIyA#S`7W((ik45qXGXo^#nog(ZHsPZok0>&GuxVVV` z1F;n~sY6OtGhf}heUU{JipSD%I`$fzxMFCebetk!oYC2VZil=0tIGOLJoTUX#QBQA1c z@m!dHB35E8F`RfJ6ET0tDHVO7)cpFVB99^@ab<&AtK@((qXlZ88=Z&d06QnYBFJWe=#B(1qD3Y6N5$*~DU02=)69zTFKOvj~eS1VnZxHmCjJ1UB9RiND!l*d{ z4efQha_iwp;TsOigxM#8{)}I~XRx^l*Owct@fzqPsEVpfQG=Y+oemEn49*Lkv(Lcy z+!oBU8-xBGNQ2tPWG9j&NGN{6^oiypcc%jFGmwJ*9qnWKO482s3CXgWX>zQ03|F;c zAVwn>Nk_@M0Jkwu%#rB7EU%-?^-eACa)@g{AP-40c_vR0s_uL}B*)NFh zB;rIDyDG7WviW&NXbzxwe?2`cNYX2$7TB^B|KrOV+%zXhsMC0?Bg(@s@@+MBg1X#X z>u_O^bxE$<)K(*>k`?M0#fA5bTB?Rlw5(eEfi`I28g9h&G1aRggqN_6aGrvz1tP<$ z(M&M_qJN))?Wr@!yOSivViE}}E?yGIEN!y;?w7RBFlTwF;;(8NLo<9N*L+Oot?ESG z*l$SPvW&vhDEk+#v~53dE3hS%J$+7AVri@ctv8>e_Y;BEsu~=^m4|$5S~^g)pHKJalO&K?fo;sx7>#KA=ME$D-P3lRWt~djR!h1L>2q-e*x(M4B^N4mX8{}epo@oU==s-&u!Ctt1mW1=o{-)T zUb5SVBS-OLkkP0!2D34AvGG1N& z9qr3erUIVO6GPr|m9s?3Uz*Tk>7rv3qT-Nr=I8=sOM||bH#B)WGzgpDMVGH)cXqs zF5-TLFtYnd$qCf5V(q1iDb!?Mq=Ge)uU;Z*QIp`Nb#dQbK3unYfqu76J}jqM;jScH zwtVKajgN>Dt>~V$EJulUm*{#wT=%GcpSr~!ZNw>3EKP6p?7jrQ*9Iuk?B z)=A~%k?LzkRD%0e8b9Hw29Xi%w{28coitAn~@nt*r4!DhNb{d;~h%qOA3*hJ4w^?Cx|b1Bw2@|2gZna zeWwWDBu(H%{#>IQ5s)o{;s9BP1AJLTOfLoXyLZc|shLqF`as)fiK>;0;xkEEL*k9} z8e?Q!9a(Y6qN2P}nWBI+>z}412*3pzwLT2B+^EsJbt3c$MDjg{WqIn7C@k-EV2SIR zA;i$B3M5$yyb(y0s<^^49g5{AGy}@Mxi^^t0%~Km(&wOs8Ycl-9jm;(>XCjIr%ofHd0&4!iaKRhiSR!ki#Q^ z_($rdP5cK{bG*#xmqPxL1N(D?Vf1=vD$qQ-dFEh$?xY<2SZ!oo5GE}BzyUIKN?$&a zirgGi@OT6%D~*C(Isfv*&xd>-$@hOFob;yOom}Ap0K5tOPs%_?doyd3|CE7U>Y$#A zO3OSa+hjBeDTepD{K0|S@_fAbf%$Oia3F;!NW^+z1!mI3sFtM>xX6xLDt{qEiI5jp z`4NYzH9j3z+IOzWpX)6&v_8sre!5@iALL&r-;rLoJZ9RCe#s_WFNrK~Td=U0g!yy& zMJY22t`RY*E#>E)I9lTy@&H=7cR}bXZ>AhNg~HUz1RF|DVdou-BRz)`i0>3kANEl` zRmNI*cQ8>ki>@WZ9gN-L2Ng`+!Uq;i+-e6~=r?n(>`^jvu64s6Ox@ZC7>IEgOxw>+PE(=AoG{Zgd;0 zy+1fOyP!yOA&8E$bnmt0*mw5@+TN2Q3$J!TJbAe!N>7REFO4Za2L)@LQU^Qb&o1WE zH%#8bcrs*%Jo2(!70w>gNBdf+KNClW#>jg-TCD_W#>Fh-wozJ`F3@~ zK1;7kQ5KBeQU?O)J=J#@<^e2A{Vj-(&E?x-M=oz%I6X5sudgUU-3-+84z#nKH@N;wvvGEqIU1Ulquo<-#~NbgbVFIE2C4|hGU9!+Dg=65maxRKz} zMO2?o;c)!qi$_S-OYXFCu3etQsQ=KBLlKv*fQaJGk=kR5@0n{v4enV4_2+D#=0z*< z)KxkPJ=qav^u#GDDy%|7EDj_FmZIQWz6}TBIHob<`wlf4UG>~dm(Pb3Oz6-YWFTz7 zV#;Awl%vvh?BomSx#P%+Jg?5rMXi)PxkQsBN~sx)CNtVSo!m_4_RI3>(JGdxy{54A zqmu60QI#trmX;E$U`NK!mxT{wUPlt6ug4DwixnLQFOY`}=GMuDR0!M8(G8N|mx%iC z+L=kKPihpns3Qu*XS2~&u>uuVpjTval_*8l9~Q$J9@nP)lK01}74_&=Z2UgWu0f z+o*%YR9p>&1pKLTn&`DzTCNvGD=9a1?UUEHI|{qG*D5qN)h?7o(x z*v+%xTy}xAbhR4E^rvYrsd{(Dh=a75hth4Gn)*E$+z^LK z$Gm#ct4gDnvny{YEgJLcwDr8!>mY)RG*D`*tC_dqxTXlP8~^6FlV6lyOfoz*salt$ z8qgtDS83Wrov35QDWDH59mBuVJ&8Lesw^!J;a>q>*wm>YM5|P*yaIeU#@SAuqnd&f zBA3;`X#B(YOQo{0q7+;~VC2N~w3oWZlUml|C1YMVUutN{b9^GPr2hyVl;f(1>PDtztE$5V}dqy1Gt$)5? zMw(ZQ`dtrcRx+&LkFq5x3IT}ly>_(NjBRlFQ2nn?5#1oi>1b`y8tN;c%x5HzTHII7 z#u-od3@CW}bUdL59o3^NqHv?>Z@{l#GrL%OK)>#|g(OhBcxA!0?s|nQL2@dGy6A*$ zAAfs((;VwUXlI*KUAY{SQ;AST#X!O0VDPwVBR98s+*%+-IRS#oG0hNQ5fyE|LqSuV ztbvpeVY4bU`Mvo^kzT6pu5(F8UVSz8RV;R_N~N%^Z&U3OMVg`3keK8EObabyv9<0o4NqqRuHR)fF6*&8eB-y6v6R6#u@dT4D6Fd;1*54BobIBYihVVA5gIpT{a=Mq zdqfoq>piW|A~_T+X5QE~1v443&DcL%1=8GUjg(ZvoGA>W`%M;wrL)j0{8c@i8lW8b zTf2iHQdg)^II8Tn+C?SHOgS+Jj`*X_FA|B%Z;SsGNm5}|mD9ngts)NYN1ZR3+G;H6 zJ!rdYI4<4cfmEnmb--MZXQYCBCr;XeJOLh8h#Wy=h|KA`T1QNo%*`ge>^OLxpA|%f zRODael9C)cA(^kB%r~8oRMXbQ4GP;%@3FFzqaVOk4JP~nsuLA3V5%0hh&iIw-=2Hz zyvG(T)bO&);8s}U)@*g#iYg^}4Ao^hk-ISqFaq%;VQSgaK0$ zEYEKW{pKCr>+CZqM4nkGq0BgHOv`4g6#wLysRd1ORc)h;RGcy`5AicwUoCjijQ*ie zsXE_=V|e5)!UOy<<08EQp_l?dj7asMg}wqOakZ@rrC)w3RraelX7?;a!!`0B4+vAT z)zdzzvcRCNb8)fU(_c?OfJV`u_=^0&XnR>)Z`+RxZk0!4@boucWM0ly8CpEYTH2%C zJ~x$Otd>4w#%nxoqq7$8Gr+=#R?aHtnl@0sTOj#ZqrtRX@ohrn+-_@@RQT6XvGVdD zM!~M!8w%8Kk8h&z>|h?iRL~$JTFG#u2%K=6c&_Jko7jnoK&+&^AqR;cQAD1{lrWMe zhs18g9(5!tgrlbjdr4j)N!_c~E{cK%!LDKw6^H3wX_uuDq=S;yKih`$vf>5+yVw@) z(3PJ;?H=Jf9pDx!tuhOX5 z%UULJw6qjgZp(xpGn_7JvcTD4Ny`WYP??vLjIt&qbp&5_C@;C!(~XLP)m?M!WLCNxzU_pB5(3u*c9}t;F!K_SC{?4mBl(!MS!;VM$;dee_peqVYjTC(Nb?!^30!dD5&J zWCkbhIk-d)vT0=w)RvKIN0`Ikll-FPo+V29kOdz z73FZO6Qwjpe@p<;M3ERo)uKe2aIDkZIZ)i?{6fXDFC{ zexZL?2JL{H76!NAj~zrp@sst4J1Zrd0$Y=ceU-@3_Aow?6oLJ|Ltk54$BeCXmhiHu z+S;vY#;-im2<8<>&aem*xKb@;Z)hSkThhh_;m~2LwJkN9f9X^M13ud+>gk0wDdf#^ z!i^aO&xJ@LIs9%rppP_U&UDN@9tL$I-M`hI@2bU-mBb_SH>B$o2AuO*?O#`k(zi$cd&xGzaUxuUnamX;HtX2qg+ zkweo~4YwNZb0y~*d?o$V=UD1REz1VoDc0vg!{Sjo`$XfH4^ils8k^^fj`;h}%jIfZ z!C5$#P9XZh+_{`GjVY>@f~{uMfrk`5nFICY4Y!kwRp_AIkaO)hC^MIQ7;AAgp843U z#v1lgj3jrob?Rkd^qhJ^h$~{fvW}hcp#J&f!*`U7 zL`Vi(K|Qf$e1@ra`T3kdix%UTwKb3^S!hOlEQ3 zHWY=H>$t1))Q=9??GI~*5)K8*%F;}fWvC)eJ$Kvmby(g_nwkt>>dG|_^|z0tj7R@Q z?|`Jb|KGoADd9U!ru$y&Fy@!31FWTNU^2MlFv3z1%&M(#_U^a~Ny{pmZMd7L)!~#@ zKeMw}(F5K0$U_*l#m@SvYPp{C4(xZGgQqfObGXok6`pZ#l4BA#Xb{U$=U1 z>~>!OduIGv0C#SBH++9DH~`+gemr2Gc%a^JuLCfj@VhbWw<2(Cw@Jurb zfPVhImcabVRq#0M<^cVa0Q~^Iroens?CNmb+W7vyLJ!b44d^%5Ee_^u%(=)e;WU&c zt1bBEQSVkS7tCfvzFqhmHPf>lIo(CCa(u+(PAx244eg+J{6qMs0HnS8Skoo7gHifB z^j0QAk|$%7yBu0c#ZFk2Q)ZtxKEk*m(8t^8NLMS1EAn|nbk~ezP{qzO@$y|Dw1?C%30FQYkZqh40&Ll7!H4Z5xx{{}gYS1=Pot)VvrH8Tg= zp6BsB%51ML8tvl@ibN|fN4~C-Ag=-pk1(!%xI>+e z)#fB=T2nZy5|@R~h_51(r8#Q|Sd{!uPW4=^OL!7P)E?as3`>l?RAgOQ-h$%J%!vj9 zzjn~NHo*@y3S9oZ4TBNJ)kIYi-Y3nCB=B}K)+daj2-Awa=Lqi*-nYdiWIm_GWfVTc z7U)lX zhMBy-5xrVsA6xer0}Yzlm{iW7BwGfPcrU}$n?xO z?m$|Ti^=Z>dxVf!BkMgVPa_T@j+6L@lt5NE4>QP~ahx*ojdVg*xj->*F)!1c9OO

3Df%e(ta%MH>rK1>i;F#$FjBN-t+8JOS-t;4PN+84UPTRE0)MLh?7-tS-);ow9 z@`~h|Oc9jSy$3b@E1oxoTk#!gV9lk-V%JFNxV{{tcX~ zIaAPFE{H4M-}_) ztOJhLM%)}ZaQIwqUE334@{qHoT)86Hu4Bx5qfHFV1iI_3fEDMzC?hZ}vsj$JWPa%K2~ zAlpXe4QJqM$;)WFxu2HR&E~1cNl7WmVcPw#zZlz!YLki+T>-I+j_zaM8{j3z+zelY zu;1N|Y#+VNVSh<-8?xCVZxu@rDO$ItgW#kj1&n!?!fmKW5Q!JEyAr!GVw~ak9*HTk zyfU7?_iW=YxiKST407*zhXs)WY33>BB5e>yVu>da0oH8AQPI`~2I6?50o6^gbBppd zlyiXUvmUlI!2a62*S^Q<490WDQ5im;xTjQ3pqzLAWFBC9`s4rE^j@q(?hvZO%r+wZ zx$!2aSTYn7$0gd`lJfF5cY|O~+ZJa?wvzr6_7ZTL#GtYGD_fX8#m~?NEq4yxo?Xm{ zT4aSs^#iYQJINl@>SFHU6b2<;- z#PWPiXE=Sm9X@M&6-PC`PjA5$omzJWvTlr}l?Mfu%05Gf0$?|@`fC2UV}#=DmT&~S zZUj>VLBO=jm(Q>1*`Z5fq47Fz5Ulrm$C4i^{w40;9z*(uj$|Sk@e-$%*g^6?J zz)wT}GP3`vqU$$D!KfDPO&V4Q#WV{^=+{sw2j=|t_OKPxb}}KGI&8=-XI9_wulp05 zQZcw8+2srMcV8}aL~EbQyrA@n6KMP6j1aa7v1xwHN)dWpyLC4`7v;Jh`H+&V^h&+V z+5%%qgR}Ik$}t=vtcjEY^>)>`cI)}hmK^jGLr|b6Na2&~Xug3nMf(KlkyvG3!_~v) z!OV1~*u|BhYhvS+t2^|2x~C9!FO+*<>yd6pG^ZEdYaBMuE0gjy49V=iuM(XNL=MjeqrxLC$$#yyKdQ)y}43cvDRqz+;PyNholw%N(6J zq|_!uxdXRn3OQo0j&0H;quE7&lc-MOXqDEUc)ACP9y5-f_;{myL$!(T*=smz@Qn71 zXc?Dz!++z_F<;+#DTA#MV3&o0tl(pRJ5Pa8FH znd*W~TB=Lduq)T^WI;;^4U59bze%=vL}7c0Rrrt;4MwrB87MibKV0HH-!QNxS^1!A zY2fG1N^SJ_MWJ&M%khJRECI!FfQ5;g!aZEq>I1KkW=9X(gJ6b{0Rec5-mB3+v2$q-!YbG+(blyn%{&WUKv=5tcRyWhO_Z<{cOM}Ojeo?&o8&YJ0OZ?9>g zUIuO^G3UL$`i74~$g^!v&2uR#6GF&;gvU7($&QHFe*|I4ibEIOWCh(EBrPXvl@YhO z?1b`6zAaNiG(bH7Wr96oEW^u@op0&Qj&>|dTc`IMv)i(KBYeI8)*E9{)--ZroU9w& zg2aiAk@{b!auRfO*{dzasGg5XbljNQ7ETZmj|R-LvL)$0DnbTk_U?ZGzPzx@)*yF} ziAZ}V7~y^wIVw0G*5bj-Bn&r)b+s+ED`DcO`V^EksibV5EHWzW#Hy!L6LNYCP>P6L z7o>Eh8H$_@?BZO%P0Ti1-lChRmplz4SNs?hga)M8|fMW2N~ zK?Ihc+Y&bE1GJVFioIu<1uvXd8SqHlS2vm#9oSS`u!Lh}arPR*o6*Bv3OZgOTomk7~M z9Z_mA#a%H&kv?XzFaGxrmNRbd%>Z_9E*VjopJH7`BQH5W6%?Vh5hS$#rgv}Er)c}F ztl#Y%X`J{%pmc)}dXOM775uN^qncyN%1_+5a)XW*c{$q%S|}&ql+D;7bWuCi9Wc*tArLNERH+=3zEg;#!fUx zqyUNXejVvdw#m9DJ)Y6STHvrcGuSLS?|fkN2t*2aRxb&;5pW|q1t)Q1@IdkPksUDZ zR3NzBjCY?G9B2soy!0Jw|I z--$1uU~gKep6=>RiB2o&sWsmY^dXINR9gn~j;OW@L))*t;Ss4#Z$kn|Zco%S$9Tq( zQn>r}kt;Vfa1|d;N^vXpW72yoW0J&^KHIU}dVNChK$j)eQoy@HVnDZusf3xjENtkGCa99b7FscObX)vt)b) zCWUZu4?F=Xh+@90dA)cE54`gU-vYM17YI;h7T2^cO`KXLbK13CuIeSr(G*Gm;~i%+~Eos*_LW zFYRNN!=1<{y#gotFf4^Wm795(ld#8@ncSPNvP+mvB{=;lz1w z=Ym75okuW~lWXr2-2N4G9NIGvct=i!QZskA53NqI9a!EaR1(@!Cf6x|G1MX3_Ht%< zm*=(xsW&iu5TAteI7=2f%ToHP5tjeO|0k-cpc!(?0L_PJZ4MTq#*QolJq0(5q3fc;3Ej zA&fq%+>l*~fW;yvdctz8Le)qBUwKV;gd9!Q2T2h8GRI^FQg$`5Yg|HFV$_WInt$x9 zvOgff!G(m#{%>9Jgq+ zJCWLf6xV@F1Sa3lo)$Vqz%&sPLJhj0;K()|*fV>w#Hb#?o;)x!oHV#uESk}%=+hkF z_`q>NCPqX#-(Cdvh=4=!*Z)M%kZh<}6E`T3aHgJ!?CcjJkwSN67^hMS_Zl;2b{X&% zj2Qc;Sv}8VsI1bY8=Y?Y`vW-4E`CJsqOVI`*NVH9nhU%n5fawq!1GeYg&s1`Rbvrv z#gTsf87W8NsYl}QBuF)|g}#nl(aA|gNsBsJh;f|8owq1cy{2b~f4z!CDiIaU|H z50WqF7Yt)7Qxez;DJ$O)0LOsK<=1G(H4~K+Rq$TXG5Dr)&xgi$z{H9~#EO^jGwKNW9)k$q0K}c4 z;7=Zd-+zNP5D=?hUitz(CgYy790_<1UkW@RZ_l~(6YLB}bAUVr@=z8g5wc_Ik%_F) z)$^5{bv%4HGz+pjfo`fT=^+HXfgT$oz43fNd>IXRM|l8zCs2{@O{A=kZzA_&dsuvD zBDwK=Aberd-?Sc3iFwXxDDX+6n0Zpxjgo+zlf@IwF{~XQbAsxZP*Lw;2az=*weg^@ z)P`GQc~E!@;xO(@fJ&Lg`Mvuc0OIwW+hG9X`5Ye_zpF5K89?lG7NBb9&~Y9P z_iFHBEG9*PzXkN_0BpC0WYY-;a`NVgYG1N5Sy+zlplr2hR9Ms33wYz)T10N+^`!f> zmDv-Y2tHVCCw(L5QOcDSPkkUJf+VI1(;mtUjVB53#Oi?BX3|j}@@rTd27Sh2V=YJ~ zMD^kQ==O@Be+hhl13*B2sdJb(Aejj8f8!-AvB;L_!L8Hr*gFX*@VD~~0)-c_8UyK!PAlFTRAGj$QJ%yQKGlZ=UH z3cIFhj#wBXi5$5{kCC#BC%mG$(f1HmyeX*-+>EP#3ohTS)N9vr3cVUi7LI|?i46}q zu8|&(LF<=sDpe*+I;B_Zw5KTN3 z%2>w*Z<0G4zSZ|^5{ryN9>U-AvuSG+noL9-*}IihCZ%K~pNl?C5Wcc+I6_w#(oomQ zv#RZUFa3>uN@xY>36NyTy<_vN#wvuO>&b^J!p<$DcwQiSiPiB+)f>5aN$~sXM?5+H z0sOy9io(B3ipO&y!P397=Q7Cu1Kmy)v;U*pS)~%?f~bP@Bjw!CVHx}vFiSvW%vEVHM(9&;P)4Yec;7!XC+xK? zbVcYBKU`;cj;x*FH7S%u|J4Z-<*t~s6KTZeRwM7R1J#@6fXMA3g!CJAC@0^QBb>)V zHJ$})Vl*;Mdb_@1hA@QD)PsowOYTjMb%RXZ zd{&$LgC^sFOhZ-ZzBrC<;gGW$&oGD82{iu$dL^A1R^ys5ESO7yWl1Ab@`l<_fjUd$ zUcs}Yhvp*+)0?3o~ zMfFz|Jkz5>LQ*#uqWJ6-6t)PKMm=ApF+~QmiD>v@5(76%S#Is-GHOU}Ri37w;j=e4 zeUq;}@3N8g;YFX^LH1fc%F5AQPO*KYQ%TacAkJU!7FrdO> zQ#gB4Gl8~z({Y8iU@LywG~}Js3Eh&xAfkqW5ebi_(}(Qd2KJ1Cb+cC*{Q~?P9vX5N8x1OSIi!FO zbIKZ6A{2RwI>dkvbMeX^9g4c5w;LFZIL}T@Tb5UG8DL0kAdQ*^pQ6`eLHw(-5E|X% z&-on;%jhV1M8aI+%9J~5$lPG50iz~-mls{}DmpUKiag|m)zF$}0CPis6%jmnfPe-0 z%5j6Wq+N3}e*ad7zPV(g4MMGQo4m!7U(K@2X5+z?lA?q-*4O~&_7E=KT9Q{kCmS`z zB8xwm=nE5DS@j0Z#HxH+q!8@jj?1I!CKfRmr82G}?oh zFCPc7wxIR_WiffaLCq<&ge0-DGpF+na_nI~FPVi+?+|Hw3>4*kdu>EoOF*N?8MWS~ z=deEcI%R8i7q1MjcL1#gXu-sY=s>qZo&C`EBf``b@=(4S)bx3{77Ev+%Z%q|T*(jX z{#G5c10l6KX|l{Qt+MyWv+2>BqF;WW6;`6_z!gV-HCUu|UyfUAUm^9N8Q4_BI@e6c zMjttEdl0j~!Bm^~Q1nJ5Gz2kK3()v2UiS+?v~7{6W)nDX{t3G}Lf6WiaX8jKrC#D7|?yo^?^pr z9#i8}XzEBj9LDk$ZGn?2G(xXI(~ikdGxFc9Gd`NCAZ~fk_utB%h%uuG_6r)Py@2Ho zMjxP z!Gs08%>3m(_M)(MtAgI<=G@NQFLL#M%m2aEbu#b5jQvd4ME{!N@MMM;`)oGHKWRHj zg20da7Z*BiE9XfWD{8?Mrvem)2}?Y$E_KLs-6k6{I=~IDE$CHQ#U0n0GV@|qYW(01 zoZ%V<56h~We?YG@zkz8!qwTV-BeMq{(|2ScGbNN+C@ws{LQf+{y* z>MWwAJa)U9H#{j;UvRz5G|O1tUG$`lxWBF_$`b1;3-BorzItoiM4!QKQ|NOfSfqFo1wH#KiJ%JPFl-YHntSJ$X1kVHT7 zQLI_!os%{$=vo&Op0ZDy3CuTz zYEkDc*^w0XCKcs?$)(%R;naZ+60m8-J=o%%~1-bf!$+yjTL-=Uh&!7KVl8lYCfam?{h0XmQg8zqZn2n(kA>DrnoL-T9 z5dE}pLO-TV&B&M9e^IKTxdKRAWl^$mi}Q*H1>?{A3)*f0u*D_qZaj^HVQ+q3PTl}z z@lAB0(C|2Z$1UasQTT-(DrH6l*Z#C>8fKca&D&+qm*l~8ddHqqG}n1i@SO+#kMHaE z)GegoxQ7}RNjhlo{t$ur1+DPS#~}&@h7zgYWMs#6`5`-x1#nvae4pUKcg1!Mqp~OA zb145c!;Qpb@e?2bfQ8?kCF1{2hT=|Ew*N^oD{;pGK?!lBCxdv6P|9@OT#277NPmIw zs`+(;9~dGl%o$af{k5}DVy%4*dQC9G<~#%TJ@+>zPa}9-ebE?4fx1aqqq}!wK;8Oq zd_oRhwzZlwW{a1`Cc93yJ+5CeXV_dG26$F%08;z-|B-QK@zZ3(4>ahfA`S4_*^&ma zagtOHh+SjJ+X)WI0pA5{>(HS?1fyiVhbud2Gf+vaC_kwub3R}oLF4Eu0H^U%F zUt$pU65}zjGtr$ZJ6$&GvJP+RL9@za(4x~SwJSCR+2FpguV3il zDlFZG_rj%R;J%m4bwc!`6lx1uT&1xLEJLYkIPJd7C6jdUyS>j;dd)>)K30|@@({g6 zdqteFbP=q=LEeofxJZFC;51@fT!KVtSt7o1#%ma5UZx=3piPG?dFLO$@A~`moD1<| z1iAA?wbw^Q9uP&3(JcvoV~pN&MdygsgKmK+#$6c_>YJ95)}a-Gr+8#r*OaTxs6r}9 zFWR73kB~wxGso1aKy3;>TWvrMdTsQ>zI_k~Ru&{AHQBelJ^)W+FHM=RtX~glU zn@Mr{N;booK(?ux*m<1VPmx`I3tm;)RhZ79`G+i? zycJuY449HA-k4BA422^OY}v)T9!l)Z^SbXqRiiC6TPbKB2yQU}x{XwMx_+MQ12*A8C#n6L3aP(hV? zaL(Y7uUmAJIQ7adSi812WzrYa>{xnuPO^~_Q9M?px0Gz5d!7FZ73O6)|6uaNosIQDJk-km&lQv+&8GG@l9@(W zMPlSYIdjvv1igYn*pVJjBnA6fo;=m(j+)yflbVOEy-R+Dvu@C6GH$OB-2jw!VE<)1h-_6;S1PcUSBk_J0rT#WP2p*>6xQfc|H{)c>e5@{V@)(iTq6 z63!+z{}tMV$=}eTg#IjwDj6+n7VBOVM@C%?tQAw(LJ8(8i=6vvf@dd^k)}&NS8GGk zc>~}}ax=#e5G@B!@tr<=F{gX{xcdOh55|VkOyJ=p>sWWJ5wYjvSO|VI#e&JCoQ0

rt53YpQCLNGLb3ni2w@kj}FD9K*Wv`iA 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Ðup=kE}IfzyPmFlm$zU$3?ODLStR}i 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�k*?G6Iul2 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 Token: "+this.name+" ("+state.tmp.area+")"); + print(" next is: "+next+", success is: "+this.succeed+", fail is: "+this.fail); + } + if (this.evaluator){ + next = this.evaluator.call(this,state,Item); + }; + for each (var exec in this.execs){ + maybenext = exec.call(this,state,Item); + if (maybenext){ + next = maybenext; + }; + }; + if (false){ + print("---> done"); + } + return next; +}; +CSL.Core.Build = function(stylexml,xmlLingo) { + this._builder = _builder; + this.showXml = showXml; // for testing + this._getNavi = _getNavi; // exposed for testing + if (!xmlLingo){ + //xmlLingo = "JunkyardJavascript"; + xmlLingo = "E4X"; + } + var xmlParser = CSL.System.Xml[xmlLingo]; + var xml = xmlParser.parse(stylexml); + var xmlCommandInterface = CSL.System.Xml[xmlLingo].commandInterface; + var state = new CSL.Factory.State(xmlCommandInterface,xml); + this.state = state; + function _builder(state){ + this._build = _build; // exposed for testing + this.navi = navi; // exposed for testing + this.getObject = getObject; + var nodelist = state.build.nodeList; + var navi = new _getNavi(state); + function _build(){ // used to accept nodelist as arg + if (navi.getkids()){ + _build(navi.getXml()); + } else { + if (navi.getbro()){ + _build(navi.getXml()); + } else { + while (state.build.nodeList.length > 1) { + if (navi.remember()){ + _build(navi.getXml()); + } + } + } + } + return state; + } + function getObject(){ + // These startup loops are too complex + var state = this._build(); // used to have nodelist as arg + return state; + } + }; + function _getNavi(state){ + this.getkids = getkids; + this.getbro = getbro; + this.remember = remember; + this.getXml = getXml; + var depth = 0; + this.depth = depth; + function remember(){ + depth += -1; + state.build.nodeList.pop(); + // closing node, process result of children + var node = state.build.nodeList[depth][1][(state.build.nodeList[depth][0])]; + CSL.Factory.XmlToToken.call(node,state,CSL.END); + return getbro(); + } + function getbro(){ + var sneakpeek = state.build.nodeList[depth][1][(state.build.nodeList[depth][0]+1)]; + if (sneakpeek){ + state.build.nodeList[depth][0] += 1; + return true; + } else { + return false; + } + } + function getkids (){ + var currnode = state.build.nodeList[depth][1][state.build.nodeList[depth][0]]; + var sneakpeek = state.build.xmlCommandInterface.children.call(currnode); + if (state.build.xmlCommandInterface.numberofnodes.call(sneakpeek) == 0){ + // singleton, process immediately + CSL.Factory.XmlToToken.call(currnode,state,CSL.SINGLETON); + return false; + } else { + // if first node of a span, process it, then descend + CSL.Factory.XmlToToken.call(currnode,state,CSL.START); + depth += 1; + state.build.nodeList.push([0,sneakpeek]); + return true; + } + } + function getXml(){ + return state.build.nodeList[depth][1]; + } + } + function showXml(){ + return xml; + } +}; +CSL.Core.Build.prototype.build = function(locale){ + this.state.opt.locale = locale; + var engine = new this._builder(this.state); + var ret = engine.getObject(); + ret.registry = new CSL.Factory.Registry(ret); + return ret; +}; +CSL.Core.Configure = function(state,mode) { + this.state = state; + if (!mode){ + mode = "html"; + } + if (this.state.build){ + delete this.state.build; + } + this.state.fun.decorate = CSL.Factory.Mode(mode); + this.state.opt.mode = mode; +}; +CSL.Core.Configure.prototype.configure = function(){ + for each (var area in ["citation", "citation_sort", "bibliography","bibliography_sort"]){ + for (var pos=(this.state[area].tokens.length-1); pos>-1; pos--){ + var token = this.state[area].tokens[pos]; + token["next"] = (pos+1); + if (token.name && CSL.Lib.Elements[token.name].configure){ + CSL.Lib.Elements[token.name].configure.call(token,this.state,pos); + } + } + } + this.state["version"] = CSL.Factory.version; + return this.state; +}; +CSL.Util = {}; +CSL.Util.Dates = new function(){}; +CSL.Util.Dates.year = new function(){}; +CSL.Util.Dates.year["long"] = function(state,num){ + return num.toString(); +} +CSL.Util.Dates.year["short"] = function(state,num){ + num = num.toString(); + if (num && num.length == 4){ + return num.substr(2); + } +} +CSL.Util.Dates["month"] = new function(){}; +CSL.Util.Dates.month["numeric"] = function(state,num){ + return num.toString(); +} +CSL.Util.Dates.month["numeric-leading-zeros"] = function(state,num){ + num = num.toString(); + while (num.length < 2){ + num = "0"+num; + } + return num.toString(); +} +CSL.Util.Dates.month["long"] = function(state,num){ + num = num.toString(); + while (num.length < 2){ + num = "0"+num; + } + num = "month-"+num; + return state.opt.term[num]["long"][0]; +} +CSL.Util.Dates.month["short"] = function(state,num){ + num = num.toString(); + while (num.length < 2){ + num = "0"+num; + } + num = "month-"+num; + return state.opt.term[num]["short"][0]; +} +CSL.Util.Dates["day"] = new function(){}; +CSL.Util.Dates.day["numeric"] = function(state,num){ + return num.toString(); +} +CSL.Util.Dates.day["numeric-leading-zeros"] = function(state,num){ + num = num.toString(); + while (num.length < 2){ + num = "0"+num; + } + return num.toString(); +} +CSL.Util.Dates.day["ordinal"] = function(state,num){ + var suffixes = ["st","nd","rd","th"]; + var str = num.toString(); + if ( (num/10)%10 == 1){ + str += suffixes[3]; + } else if ( num%10 == 1) { + str += suffixes[0]; + } else if ( num%10 == 2){ + str += suffixes[1]; + } else if ( num%10 == 3){ + str += suffixes[2]; + } else { + str += suffixes[3]; + } + return str; +} +// +// This will probably become CSL.Util.Numbers +// +CSL.Util.Disambiguate = new function(){}; +CSL.Util.Disambiguate.Romanizer = function (){}; +CSL.Util.Disambiguate.Romanizer.prototype.format = function(num){ + var ret = ""; + if (num < 6000) { + var numstr = num.toString().split(""); + numstr.reverse(); + var pos = 0; + var n = 0; + for (var pos in numstr){ + n = parseInt(numstr[pos],10); + ret = CSL.ROMAN_NUMERALS[pos][n] + ret; + } + } + return ret; +}; +CSL.Util.Disambiguate.Suffixator = function(slist){ + this.slist = slist.split(","); +}; +CSL.Util.Disambiguate.Suffixator.prototype.format = function(num){ + var suffixes = this.get_suffixes(num); + return suffixes[(suffixes.length-1)]; +} +CSL.Util.Disambiguate.Suffixator.prototype.get_suffixes = function(num){ + var suffixes = new Array(); + for (var i=0; i <= num; i++){ + if (!i){ + suffixes.push([0]); + } else { + suffixes.push( this.incrementArray(suffixes[(suffixes.length-1)],this.slist) ); + } + }; + for (pos in suffixes){ + var digits = suffixes[pos]; + var chrs = ""; + for each (digit in digits){ + chrs = chrs+this.slist[digit]; + } + suffixes[pos] = chrs; + }; + return suffixes; +}; +CSL.Util.Disambiguate.Suffixator.prototype.incrementArray = function (array){ + array = array.slice(); + var incremented = false; + for (var i=(array.length-1); i > -1; i--){ + if (array[i] < (this.slist.length-1)){ + array[i] += 1; + if (i < (array.length-1)){ + array[(i+1)] = 0; + } + incremented = true; + break; + } + } + if (!incremented){ + for (var i in array){ + array[i] = 0; + } + var newdigit = [0]; + array = newdigit.concat(array); + } + return array; +}; +CSL.Util.Names = new function(){}; +CSL.Util.Names.outputNames = function(state,display_names){ + var segments = new this.StartMiddleEnd(state,display_names); + var sort_order = state.output.getToken("name").strings["name-as-sort-order"]; + if (sort_order == "first"){ + state.output.addToken("start"); + state.output.getToken("start").strings.name_as_sort_order = true; + } else if (sort_order == "all"){ + state.output.addToken("start"); + state.output.getToken("start").strings.name_as_sort_order = true; + state.output.addToken("middle"); + state.output.getToken("middle").strings.name_as_sort_order = true; + state.output.addToken("end"); + state.output.getToken("end").strings.name_as_sort_order = true; + } + state.output.openLevel("name"); + state.output.openLevel("inner"); + segments.outputSegmentNames("start"); + segments.outputSegmentNames("middle"); + state.output.closeLevel(); + segments.outputSegmentNames("end"); + state.output.closeLevel(); +}; +CSL.Util.Names.StartMiddleEnd = function(state,names){ + this.state = state; + this.nameoffset = 0; + var start = names.slice(0,1); + var middle = names.slice(1,(names.length-1)); + var endstart = 1; + if (names.length > 1){ + endstart = (names.length-1); + } + var end = names.slice(endstart,(names.length)); + var ret = {}; + ret["start"] = start; + ret["middle"] = middle; + ret["end"] = end; + this.segments = ret; +}; +CSL.Util.Names.StartMiddleEnd.prototype.outputSegmentNames = function(seg){ + var state = this.state; + for (var namenum in this.segments[seg]){ + this.namenum = parseInt(namenum,10); + this.name = this.segments[seg][namenum]; + if (this.name.literal){ + // + // XXXXX Separate formatting for institution names? + // XXXXX This needs to be firmly settled in xbib. + // + state.output.append(this.name.literal); + } else { + var sequence = CSL.Util.Names.getNamepartSequence(this.name,state.output.getToken(seg)); + state.output.openLevel(sequence[0][0]); + state.output.openLevel(sequence[0][1]); + state.output.openLevel(sequence[0][2]); + this.outputNameParts(sequence[1]); + state.output.closeLevel(); + state.output.openLevel(sequence[0][2]); + // XXX cloned code! make this a function. + this.outputNameParts(sequence[2]); + state.output.closeLevel(); + state.output.closeLevel(); + // + // articular goes here // + // + this.outputNameParts(sequence[3]); + state.output.closeLevel(); + // + // the articular goes in at a different level, but + // is nonetheless part of the name, so it goes into + // this function to avoid repetition. + // (special handling when comma is to be included) + //if (name.suffix){ + // state.output.squeeze(); + // if (name.comma_suffix){ + // state.tmp.delimiter.replace(", "); + // } + // state.output.append(name.suffix); + //} + } + }; + this.nameoffset += this.segments[seg].length; +} +CSL.Util.Names.StartMiddleEnd.prototype.outputNameParts = function(subsequence){ + var state = this.state; + for each (var key in subsequence){ + var namepart = this.name[key]; + if ("secondary-key" == key && !this.name.sticky){ + if (0 == state.tmp.disambig_settings["givens"][state.tmp.nameset_counter][(this.namenum+this.nameoffset)]){ + continue; + } else if (1 == state.tmp.disambig_settings["givens"][state.tmp.nameset_counter][(this.namenum+this.nameoffset)]){ + namepart = state.fun.initialize_with(namepart,state.tmp["initialize-with"]); + } + } + //state.output.openLevel(key); + state.output.append(namepart,key); + //state.output.closeLevel(); + } +} +CSL.Util.Names.getNamepartSequence = function(name,token){ + if (name.comma_suffix){ + var suffix_sep = "commasep"; + } else { + var suffix_sep = "space"; + } + var romanesque = name["primary-key"].match(/.*[a-zA-Z\u0400-\u052f].*/); + if (!romanesque ){ // neither roman nor Cyrillic characters + var sequence = [["empty","empty","empty"],["prefix", "primary-key"],["secondary-key"],[]]; + } else if (name.sticky) { // entry likes sort order + var sequence = [["space","space","space"],["prefix", "primary-key"],["secondary-key"],[]]; + } else if (token && token.strings.name_as_sort_order){ + var sequence = [["sortsep","sortsep","space"],["prefix", "primary-key"],["secondary-key"],["suffix"]]; + } else { // plain vanilla + var sequence = [[suffix_sep,"space","space"],["secondary-key"],["prefix","primary-key"],["suffix"]]; + } + return sequence; +}; +CSL.Util.Names.deep_copy = function(nameset){ + var nameset2 = new Array(); + for each (name in nameset){ + var name2 = new Object(); + for (var i in name){ + name2[i] = name[i]; + } + nameset2.push(name2); + } + return nameset2; +} +// +// XXXX A handy guide to variable assignments that need +// XXXX to be eliminated. :) +// +CSL.Util.Names.reinit = function(state,Item){ + for each (namevar in state.tmp.value){ + state.tmp.name_quash[namevar.type] = true; + } + state.tmp.value = new Array(); + state.tmp.names_substituting = false; + state.tmp.name_et_al_term = false; + state.tmp.name_et_al_decorations = false; + state.tmp.name_et_al_form = "long"; + state.tmp["et-al-min"] = false; + state.tmp["et-al-use-first"] = false; + state.tmp["initialize-with"] = false; + state.tmp["name-as-sort-order"] = false; + state.tmp.et_al_prefix = false; +}; +CSL.Util.Names.getCommonTerm = function(state,namesets){ + if (namesets.length < 2){ + return false; + } + var base_nameset = namesets[0]; + var varnames = new Array(); + if (varnames.indexOf(base_nameset.type) == -1){ + varnames.push(base_nameset.type); + } + var name; + for each (nameset in namesets.slice(1)){ + if (base_nameset.length != nameset.length){ + return false; + } + if (varnames.indexOf(nameset.type) == -1){ + varnames.push(nameset.type); + } + for (var n in nameset.names){ + name = nameset.names[n]; + for each (var part in ["primary-key","secondary-key","prefix","suffix"]){ + if (base_nameset.names[n][part] != name[part]){ + return false; + } + } + } + } + varnames.sort(); + return state.opt.term[varnames.join("")]; +}; +CSL.Util.Names.initialize_with = function(name,terminator){ + var namelist = name.split(/\s+/); + var nstring = ""; + for each (var n in namelist){ + var m = n.match( CSL.NAME_INITIAL_REGEXP); + if (m){ + var extra = ""; + if (m[2]){ + extra = m[2].toLocaleLowerCase(); + } + nstring = nstring + m[1].toLocaleUpperCase() + extra + terminator; + }; + }; + if (nstring){ + return nstring; + } + return name; +}; +CSL.Util.Sort = new function(){}; +CSL.Util.Sort.strip_prepositions = function(str){ + var m = str.toLocaleLowerCase().match(/((a|an|the)\s+)/); + if (m){ + str = str.substr(m[1].length); + }; + return str; +}; +CSL.Factory = {}; +CSL.Factory.version = function(){ + var msg = "\"Entropy\" citation processor (a.k.a. citeproc-js) ver.0.01"; + print(msg); + return msg; +}; +CSL.Factory.XmlToToken = function(state,tokentype){ + var name = state.build.xmlCommandInterface.nodename.call(this); + if (state.build.skip && state.build.skip != name){ + return; + } + if (!name){ + var txt = state.build.xmlCommandInterface.content.call(this); + if (txt){ + state.build.text = txt; + } + return; + } + if ( ! CSL.Lib.Elements[state.build.xmlCommandInterface.nodename.call(this)]){ + throw "Undefined node name \""+name+"\"."; + } + var attrfuncs = new Array(); + var attributes = state.build.xmlCommandInterface.attributes.call(this); + var decorations = CSL.Factory.setDecorations.call(this,state,attributes); + var token = new CSL.Factory.Token(name,tokentype); + for (var key in attributes){ + try { + var attrfunc = CSL.Lib.Attributes[key].call(token,state,attributes[key]); + } catch (e) { + if (e == "TypeError: Cannot call method \"call\" of undefined"){ + throw "Unknown attribute \""+key+"\" in node \""+name+"\" while processing CSL file"; + } else { + throw "CSL processor error, "+key+" attribute: "+e; + } + } + if (attrfunc){ + attrfuncs.push(attrfunc); + } + } + token.decorations = decorations; + if (state.build.children.length){ + var target = state.build.children[0]; + } else { + var target = state[state.build.area].tokens; + } + CSL.Lib.Elements[name].build.call(token,state,target); +}; +CSL.Factory.mark_output = function(state,content){ + if (content){ + state.tmp.term_sibling.replace( true ); + } else { + if (undefined == state.tmp.term_sibling.value()) { + state.tmp.term_sibling.replace( false, CSL.LITERAL ); + } + } +} +CSL.Factory.setDecorations = function(state,attributes){ + var ret = new Array(); + for each (var key in CSL.FORMAT_KEY_SEQUENCE){ + if (attributes[key]){ + ret.push([key,attributes[key]]); + delete attributes[key]; + } + } + return ret; +}; +CSL.Factory.renderDecorations = function(state){ + var ret = new Array(); + for each (hint in this.decorations){ + ret.push(state.fun.decorate[hint[0]][hint[1]]); + } + this.decorations = ret; +}; +CSL.Factory.substituteOne = function(template) { + return function(list) { + if ("string" == typeof list){ + return template.replace("%%STRING%%",list); + } + var decor = template.split("%%STRING%%"); + var ret = [{"is_delimiter":true,"value":decor[0]}].concat(list); + ret.push({"is_delimiter":true,"value":decor[1]}); + return ret; + }; +}; +CSL.Factory.substituteTwo = function(template) { + return function(param) { + var template2 = template.replace("%%PARAM%%", param); + return function(list) { + if ("string" == typeof list){ + return template2.replace("%%STRING%%",list); + } + var decor = template2.split("%%STRING"); + var ret = [{"is_delimiter":true,"value":decor[0]}].concat(list); + ret.push({"is_delimiter":true,"value":decor[1]}); + return ret; + }; + }; +}; +CSL.Factory.Mode = function(mode){ + var decorations = new Object(); + var params = CSL.Output.Formats[mode]; + for (var param in params) { + var func = false; + var val = params[param]; + var args = param.split('/'); + if (typeof val == "string" && val.indexOf("%%STRING%%") > -1) { + if (val.indexOf("%%PARAM%%") > -1) { + func = CSL.Factory.substituteTwo(val); + } else { + func = CSL.Factory.substituteOne(val); + } + } else if (typeof val == "boolean" && !val) { + func = CSL.Output.Formatters.passthrough; + } else if (typeof val == "function") { + func = val; + } else { + throw "CSL.Compiler: Bad "+mode+" config entry for "+param+": "+val; + } + if (args.length == 1) { + decorations[args[0]] = func; + } else if (args.length == 2) { + if (!decorations[args[0]]) { + decorations[args[0]] = new Object(); + } + decorations[args[0]][args[1]] = func; + } + } + return decorations; +}; +CSL.Factory.expandMacro = function(macro_key_token){ + var mkey = macro_key_token.postponed_macro; + if (this.build.macro_stack.indexOf(mkey) > -1){ + throw "CSL processor error: call to macro \""+mkey+"\" would cause an infinite loop"; + } else { + this.build.macro_stack.push(mkey); + } + var ret = new Array(); + var start_token = new CSL.Factory.Token("group",CSL.START); + ret.push(start_token); + for (var i in this.build.macro[mkey]){ + // + // could use for each; this was an attempt to get a + // fresh copy of the token to defeat a loop involving + // interaction between sort and citation render. had + // no effect, probably not needed. + var token = this.build.macro[mkey][i]; + if (token.postponed_macro){ + // + // nested expansion + ret.concat(CSL.Factory.expandMacro.call(this,token)); + } else { + // + // clone the token, so that navigation pointers are + // specific to the token list into which the macro + // is being expanded. + var newtoken = new Object(); + for (i in token) { + newtoken[i] = token[i]; + } + ret.push(newtoken); + } + } + var end_token = new CSL.Factory.Token("group",CSL.END); + ret.push(end_token); + this.build.macro_stack.pop(); + return ret; +}; +CSL.Factory.cloneAmbigConfig = function(config){ + var ret = new Object(); + ret["names"] = new Array(); + ret["givens"] = new Array(); + ret["year_suffix"] = false; + ret["disambiguate"] = false; + for (var i in config["names"]){ + var param = config["names"][i]; + ret["names"][i] = param; + } + for (var i in config["givens"]){ + var param = new Array(); + for (var j in config["givens"][i]){ + param.push(config["givens"][i][j]); + } + ret["givens"].push(param); + } + ret["year_suffix"] = config["year_suffix"]; + ret["disambiguate"] = config["disambiguate"]; + return ret; +}; +CSL.Factory.State = function (xmlCommandInterface,nodelist){ + this.init = new Array(); + this.stop = new Array(); + this.opt = new Object(); + this.tmp = new Object(); + this.fun = new Object(); + this.fun.retriever = new CSL.System.Retrieval.GetInput(); + this.build = new Object(); + this.build["alternate-term"] = false; + this.configure = new Object(); + this.citation = new Object(); + this.citation.opt = new Object(); + this.citation.tokens = new Array(); + this.bibliography = new Object(); + this.bibliography.opt = new Object(); + this.bibliography.tokens = new Array(); + this.citation.opt["et-al-min"] = 0; + this.citation.opt["et-al-use-first"] = 1; + this.citation.opt["et-al-subsequent-min"] = false; + this.citation.opt["et-al-subsequent-use-first"] = false; + this.bibliography.opt["et-al-min"] = 0; + this.bibliography.opt["et-al-use-first"] = 1; + this.bibliography.opt["et-al-subsequent-min"] = 0; + this.bibliography.opt["et-al-subsequent-use-first"] = 1; + this.bibliography_sort = new Object(); + this.citation_sort = new Object(); + this.bibliography_sort.tokens = new Array(); + this.bibliography_sort.opt = new Object(); + this.bibliography_sort.opt.sort_directions = new Array(); + this.bibliography_sort.keys = new Array(); + this.citation_sort.tokens = new Array(); + this.citation_sort.opt = new Object(); + this.citation_sort.opt.sort_directions = new Array(); + this.citation_sort.keys = new Array(); + this.opt.lang = false; + this.opt.term = new Object(); + this.citation.opt.collapse = new Array(); + this.bibliography.opt.collapse = new Array(); + this.citation.opt["disambiguate-add-names"] = false; + this.citation.opt["disambiguate-add-givenname"] = false; + this.bibliography.opt["disambiguate-add-names"] = false; + this.bibliography.opt["disambiguate-add-givenname"] = false; + this.tmp.names_max = new CSL.Factory.Stack(); + this.tmp.names_base = new CSL.Factory.Stack(); + this.tmp.givens_base = new CSL.Factory.Stack(); + this.build.in_bibliography = false; + this.tmp.disambig_request = false; + this.tmp["name-as-sort-order"] = false; + this.tmp.suppress_decorations = false; + this.tmp.disambig_settings = new CSL.Factory.AmbigConfig(); + this.tmp.bib_sort_keys = new Array(); + this.tmp.prefix = new CSL.Factory.Stack("",CSL.LITERAL); + this.tmp.suffix = new CSL.Factory.Stack("",CSL.LITERAL); + this.tmp.delimiter = new CSL.Factory.Stack("",CSL.LITERAL); + this.fun.names_reinit = CSL.Util.Names.reinit; + this.fun.initialize_with = CSL.Util.Names.initialize_with; + this.fun.clone_ambig_config = CSL.Factory.cloneAmbigConfig; + this.tmp.initialize_with = new CSL.Factory.Stack(); + this.fun.get_common_term = CSL.Util.Names.getCommonTerm; + this.fun.suffixator = new CSL.Util.Disambiguate.Suffixator(CSL.SUFFIX_CHARS); + this.fun.romanizer = new CSL.Util.Disambiguate.Romanizer(); + this.tmp.tokenstore_stack = new CSL.Factory.Stack(); + this.tmp.name_quash = new Object(); + this.tmp.last_suffix_used = ""; + this.tmp.last_names_used = new Array(); + this.tmp.last_years_used = new Array(); + this.tmp.years_used = new Array(); + this.tmp.names_used = new Array(); + this.splice_delimiter = false; + this.tmp.names_substituting = false; + this.tmp.nameset_counter = 0; + this.fun.mark_output = CSL.Factory.mark_output; + this.tmp.term_sibling = new CSL.Factory.Stack( undefined, CSL.LITERAL); + this.tmp.term_predecessor = false; + this.tmp.jump = new CSL.Factory.Stack(0,CSL.LITERAL); + this.tmp.decorations = new CSL.Factory.Stack(); + this.fun.decorate = false; + this.tmp.area = "citation"; + this.build.area = "citation"; + this.tmp.value = new Array(); + this.tmp.namepart_decorations = new Object(); + this.tmp.namepart_type = false; + this.output = new CSL.Output.Queue(this); + this.configure.fail = new Array(); + this.configure.succeed = new Array(); + this.build.xmlCommandInterface = xmlCommandInterface; + this.build.text = false; + this.build.lang = false; + this.opt["class"] = false; + this.build.in_style = false; + this.build.skip = false; + this.build.postponed_macro = false; + this.build.layout_flag = false; + this.build.children = new Array(); + this.build.name = false; + this.build.form = false; + this.build.term = false; + this.build.macro = new Object(); + this.build.macro_stack = new Array(); + this.build.nodeList = new Array(); + this.build.nodeList.push([0, nodelist]); +}; +CSL.Factory.State.prototype.getAmbiguousCite = CSL.Core.Render.getAmbiguousCite; +CSL.Factory.State.prototype.getSortKeys = CSL.Core.Render.getSortKeys; +CSL.Factory.State.prototype.getAmbigConfig = CSL.Core.Render.getAmbigConfig; +CSL.Factory.State.prototype.getMaxVals = CSL.Core.Render.getMaxVals; +CSL.Factory.State.prototype.getMinVal = CSL.Core.Render.getMinVal; +CSL.Factory.State.prototype.getModes = CSL.Core.Render.getModes; +CSL.Factory.State.prototype.getSpliceDelimiter = CSL.Core.Render.getSpliceDelimiter; +CSL.makeStyle = function(xml,locale){ + var builder = new CSL.Core.Build(xml); + var raw = builder.build(locale); + var conf = new CSL.Core.Configure(raw); + var ret = conf.configure(); + return ret; +} +CSL.Factory.State.prototype.makeCitationCluster = function(inputList){ + this.insertItems(inputList); + if (inputList && inputList.length > 1 && this["citation_sort"].tokens.length > 0){ + var newlist = new Array(); + var keys_list = new Array(); + for each (var Item in inputList){ + var keys = this.getSortKeys(Item,"citation_sort"); + keys["cheaters_hack"] = Item; + keys_list.push(keys); + } + var srt = new CSL.Factory.Registry.Comparifier(this,"citation_sort"); + keys_list.sort(srt.compareKeys); + for each (key in keys_list){ + newlist.push(key.cheaters_hack); + } + // + // XXXXX this is all one-time, one-way, slice probably isn't needed here? + inputList = newlist; + } + this.tmp.last_suffix_used = ""; + this.tmp.last_names_used = new Array(); + this.tmp.last_years_used = new Array(); + var str = CSL.Core.Render._unit_of_reference.call(this,inputList); + return str; +}; +CSL.Factory.State.prototype.makeBibliography = function(){ + var debug = false; + if (debug){ + for each (tok in this.bibliography.tokens){ + print("bibtok: "+tok.name); + } + print("---"); + for each (tok in this.citation.tokens){ + print("cittok: "+tok.name); + } + print("---"); + for each (tok in this.bibliography_sort.tokens){ + print("bibsorttok: "+tok.name); + } + } + return CSL.Core.Render._bibliography_entries.call(this); +}; +CSL.Factory.State.prototype.insertItems = function(inputList){ + for each (item in inputList){ + this.fun.retriever.input[item.id] = item; + this.registry.insert(this,item); + }; +}; +CSL.Factory.Blob = function(token,str){ + if (token){ + this.strings = token.strings; + this.decorations = token.decorations; + } else { + this.strings = new Object(); + }; + if ("string" == typeof str){ + this.blobs = str; + } else { + this.blobs = new Array(); + }; +}; +CSL.Factory.Token = function(name,tokentype){ + this.name = name; + this.strings = new Object(); + this.strings["delimiter"] = ""; + this.strings["prefix"] = ""; + this.strings["suffix"] = ""; + this.decorations = false; + this.variables = []; + this.execs = new Array(); + this.tokentype = tokentype; + this.evaluator = false; + this.tests = new Array(); + this.succeed = false; + this.fail = false; + this.next = false; +}; +CSL.Factory.Stack = function(val,literal){ + this.mystack = new Array(); + if (literal || val){ + this.mystack.push(val); + } +}; +CSL.Factory.Stack.prototype.clear = function(){ + this.mystack = new Array(); +}; +CSL.Factory.Stack.prototype.push = function(val,literal){ + if (literal || val){ + this.mystack.push(val); + } else { + this.mystack.push(""); + } +}; +CSL.Factory.Stack.prototype.replace = function(val,literal){ + if (this.mystack.length == 0){ + throw "Internal CSL processor error: attempt to replace nonexistent stack item"; + } + if (literal || val){ + this.mystack[(this.mystack.length-1)] = val; + } else { + this.mystack[(this.mystack.length-1)] = ""; + } +}; +CSL.Factory.Stack.prototype.pop = function(){ + this.mystack.pop(); +}; +CSL.Factory.Stack.prototype.value = function(){ + return this.mystack[(this.mystack.length-1)]; +}; +CSL.Factory.Stack.prototype.length = function(){ + return this.mystack.length; +}; +CSL.Factory.AmbigConfig = function(){ + this.maxvals = new Array(); + this.minval = 1; + this.names = new Array(); + this.givens = new Array(); + this.year_suffix = 0; + this.disambiguate = 0; +}; +// +// should allow batched registration of items by +// key. should behave as an update, with deletion +// of items and the tainting of disambiguation +// partner sets affected by a deletes and additions. +// +// +// we'll need a reset method, to clear the decks +// in the citation area and start over. +CSL.Factory.Registry = function(state){ + this.debug = false; + this.debug_sort = false; + if (this.debug){ + print("---> Instantiate registry"); + } + this.registry = new Object(); + this.ambigs = new Object(); + this.start = false; + this.end = false; + this.initialized = false; + this.skip = false; + this.maxlength = 0; + this.sorter = new CSL.Factory.Registry.Comparifier(state,"bibliography_sort"); + this.getSortedIds = function(){ + var step = "next"; + var item_id = this.start; + var ret = new Array(); + while (true){ + ret.push(item_id); + item_id = this.registry[item_id][step]; + if ( ! item_id){ + break; + } + } + return ret; + }; +}; +CSL.Factory.Registry.prototype.insert = function(state,Item){ + if (this.debug){ + print("---> Start of insert"); + } + if (this.registry[Item.id]){ + return; + } + var sortkeys = state.getSortKeys(Item,"bibliography_sort"); + var akey = state.getAmbiguousCite(Item); + var abase = state.getAmbigConfig(); + var modes = state.getModes(); + var newitem = { + "id":Item.id, + "seq":1, + "dseq":0, + "sortkeys":sortkeys, + "disambig":abase, + "prev":false, + "next":false + }; + if (this.debug){ + print("---> Begin manipulating registry"); + } + var breakme = false; + if (!this.initialized){ + if (this.debug_sort){ + print("-->initializing registry with "+newitem.id); + } + this.registry[newitem.id] = newitem; + this.start = newitem.id; + this.end = newitem.id; + this.initialized = true; + // + // XXXXX + //this.registerAmbigToken(state,akey,Item.id,abase.slice()); + this.registerAmbigToken(state,akey,Item.id,abase); + return; + } + if (-1 == this.sorter.compareKeys(newitem.sortkeys,this.registry[this.start].sortkeys)){ + if (this.debug_sort){ + print("-->inserting "+newitem.id+" before "+this.start+" as first entry"); + } + newitem.next = this.registry[this.start].id; + this.registry[this.start].prev = newitem.id; + newitem.prev = false; + newitem.seq = 1; + var tok = this.registry[this.start]; + this.incrementSubsequentTokens(tok); + this.start = newitem.id; + this.registry[newitem.id] = newitem; + breakme = true; + } + if (-1 == this.sorter.compareKeys(this.registry[this.end].sortkeys,newitem.sortkeys) && !breakme){ + if (this.debug_sort){ + print("-->inserting "+newitem.id+" after "+this.end+" as last entry"); + } + newitem.prev = this.registry[this.end].id; + this.registry[this.end].next = newitem.id; + newitem.next = false; + newitem.seq = (this.registry[this.end].seq + 1); + this.end = newitem.id; + this.registry[newitem.id] = newitem; + breakme = true; + } + var curr = this.registry[this.end]; + while (true && !breakme){ + // compare the new token to be added with + // the one we're thinking about placing it after. + var cmp = this.sorter.compareKeys(curr.sortkeys,newitem.sortkeys); + if (cmp == -1){ + if (this.debug_sort){ + print("-->inserting "+newitem.id+" after "+curr.id); + } + // insert mid-list, after the tested item + this.registry[curr.next].prev = newitem.id; + newitem.next = curr.next; + newitem.prev = curr.id; + curr.next = newitem.id; + newitem.seq = (curr.seq+1); + this.incrementSubsequentTokens(this.registry[newitem.next]); + this.registry[newitem.id] = newitem; + breakme = true; + break; + } else if (cmp == 2){ + breakme = true; + } else if (cmp == 0) { + // insert _after_, but this one is equivalent + // to the comparison partner for sortkey purposes + // (so we needed to provide for cases where the + // inserted object ends up at the end of + // the virtual list.) + if (false == curr.next){ + if (this.debug_sort){ + print("-->inserting "+newitem.id+" after "+curr.id+" as last entry, although equal"); + } + newitem.next = false; + newitem.prev = curr.id; + curr.next = newitem.id; + newitem.seq = (curr.seq+1); + //this.incrementSubsequentTokens(curr); + this.registry[newitem.id] = newitem; + this.end = newitem.id; + breakme = true; + break; + } else { + if (this.debug_sort){ + print("-->inserting "+newitem.id+" after "+curr.id+", although equal"); + } + this.registry[curr.next].prev = newitem.id; + newitem.next = curr.next; + newitem.prev = curr.id; + curr.next = newitem.id; + newitem.seq = curr.seq; + this.registry[newitem.id] = newitem; + this.incrementSubsequentTokens(newitem); + breakme = true; + break; + } + } + if (breakme){ + break; + } + // + // we scan in reverse order, because working + // from the initial draft of the code, this + // makes it simpler to order cites in submission + // order, when no sort keys are available. + curr = this.registry[curr.prev]; + }; + if (this.debug){ + print("---> End of registry insert"); + } + this.registerAmbigToken(state,akey,Item.id,abase); + if (this.ambigs[akey].length > 1){ + if (modes.length){ + if (this.debug){ + print("---> Names disambiguation begin"); + } + var leftovers = this.disambiguateCites(state,akey,modes); + if (this.debug){ + print("---> Names disambiguation done"); + } + // + // leftovers is a list of registry tokens. sort them. + leftovers.sort(this.compareRegistryTokens); + } else { + // + // if we didn't disambiguate with names, everything is + // a leftover. + var leftovers = new Array(); + for each (var key in this.ambigs[akey]){ + leftovers.push(this.registry[key]); + leftovers.sort(this.compareRegistryTokens); + } + } + } + if (leftovers && leftovers.length && state.opt.has_disambiguate){ + var leftovers = this.disambiguateCites(state,akey,modes,leftovers); + } + if ( leftovers && leftovers.length && state[state.tmp.area].opt["disambiguate-add-year-suffix"]){ + var suffixes = state.fun.suffixator.get_suffixes(leftovers.length); + for (var i in leftovers){ + this.registry[ leftovers[i].id ].disambig[2] = suffixes[i]; + this.registry[ leftovers[i].id ].dseq = i; + } + } + if (this.debug) { + print("---> End of registry cleanup"); + } +}; +CSL.Factory.Registry.Comparifier = function(state,keyset){ + var sort_directions = state[keyset].opt.sort_directions.slice(); + this.compareKeys = function(a,b){ + for (var i=0; i < a.length; i++){ + // + // for ascending sort 1 uses 1, -1 uses -1. + // For descending sort, the values are reversed. + var cmp = a[i].toLocaleLowerCase().localeCompare(b[i].toLocaleLowerCase()); + if (0 < cmp){ + return sort_directions[i][1]; + } else if (0 > cmp){ + return sort_directions[i][0]; + } + } + return 0; + }; +}; +CSL.Factory.Registry.prototype.compareRegistryTokens = function(a,b){ + if (a.seq > b.seq){ + return 1; + } else if (a.seq < b.seq){ + return -1; + } + return 0; +}; +CSL.Factory.Registry.prototype.incrementSubsequentTokens = function (tok){ + while (tok.next){ + tok.seq += 1; + tok = this.registry[tok.next]; + } + tok.seq += 1; +}; +CSL.Factory.Registry.prototype.disambiguateCites = function (state,akey,modes,candidate_list){ + if ( ! candidate_list){ + // + // We start with the state and an ambig key. + // We acquire a copy of the list of ambigs that relate to the key from state. + var ambigs = this.ambigs[akey].slice(); + // + // We clear the list of ambigs so it can be rebuilt + this.ambigs[akey] = new Array(); + } else { + // candidate list consists of registry tokens. + // extract the ids and build an ambigs list. + // This is roundabout -- we already collected + // these once for the first-phase disambiguation. + // Maybe it can be cleaned up later. + var ambigs = new Array(); + for each (var reg_token in candidate_list){ + ambigs.push(reg_token.id); + } + } + var id_vals = new Array(); + for each (var a in ambigs){ + id_vals.push(a); + } + var tokens = state.fun.retriever.getInput(id_vals); + var checkerator = new this.Checkerator(tokens,modes); + checkerator.lastclashes = (ambigs.length-1); + var base = false; + checkerator.pos = 0; + while (checkerator.run()){ + var token = tokens[checkerator.pos]; + if (debug){ + print("<<<<<<<<<<<<<<<<<<<<<<<<< "+ token.id +" >>>>>>>>>>>>>>>>>>>>>>>>>>>"); + } + // + // skip items that have been finally resolved. + if (this.ambigs[akey].indexOf(token.id) > -1){ + if (debug){ + print("---> Skip registered token for: "+token.id); + } + checkerator.pos += 1; + continue; + } + checkerator.candidate = token.id; + if (base == false){ + checkerator.mode = modes[0]; + } + if (debug){ + print (" ---> Mode: "+checkerator.mode); + } + if (debug){ + print("base in (givens):"+base["givens"]); + } + var str = state.getAmbiguousCite(token,base); + var maxvals = state.getMaxVals(); + var minval = state.getMinVal(); + base = state.getAmbigConfig(); + if (debug){ + print("base out (givens):"+base["givens"]); + } + if (candidate_list && candidate_list.length){ + base["disambiguate"] = true; + } + checkerator.setBase(base); + checkerator.setMaxVals(maxvals); + checkerator.setMinVal(minval); + for each (testpartner in tokens){ + if (token.id == testpartner.id){ + continue; + } + var otherstr = state.getAmbiguousCite(testpartner,base); + if (debug){ + print(" ---> last clashes: "+checkerator.lastclashes); + print(" ---> master: "+token.id); + print(" ---> master: "+str); + print(" ---> partner: "+testpartner.id); + print(" ---> partner: "+otherstr); + } + if(checkerator.checkForClash(str,otherstr)){ + break; + } + } + if (checkerator.evaluateClashes()){ + var base_return = this.decrementNames(state,base); + this.registerAmbigToken(state,akey,token.id,base_return); + checkerator.seen.push(token.id); + if (debug){ + print(" ---> Evaluate: storing token config: "+base); + } + continue; + } + if (checkerator.maxAmbigLevel()){ + if ( ! state["citation"].opt["disambiguate-add-year-suffix"]){ + //this.registerAmbigToken(state,akey,token.id,base); + checkerator.mode1_counts = false; + checkerator.maxed_out_bases[token.id] = base; + if (debug){ + print(" ---> Max out: remembering token config for: "+token.id); + print(" ("+base["names"]+":"+base["givens"]+")"); + } + } else { + if (debug){ + print(" ---> Max out: NOT storing token config for: "+token.id); + print(" ("+base["names"]+":"+base["givens"]+")"); + } + } + checkerator.seen.push(token.id); + base = false; + continue; + } + if (debug){ + print(" ---> Incrementing"); + } + checkerator.incrementAmbigLevel(); + } + var ret = new Array(); + for each (id in checkerator.ids){ + if (id){ + ret.push(this.registry[id]); + } + } + for (i in checkerator.maxed_out_bases){ + this.registry[i].disambig = checkerator.maxed_out_bases[i]; + } + return ret; +}; +CSL.Factory.Registry.prototype.Checkerator = function(tokens,modes){ + this.seen = new Array(); + this.modes = modes; + this.mode = this.modes[0]; + this.tokens_length = tokens.length; + this.pos = 0; + this.clashes = 0; + this.maxvals = false; + this.base = false; + this.ids = new Array(); + this.maxed_out_bases = new Object(); + for each (token in tokens){ + this.ids.push(token.id); + } + this.lastclashes = -1; + this.namepos = 0; + this.modepos = 0; + this.mode1_counts = false; +}; +CSL.Factory.Registry.prototype.Checkerator.prototype.run = function(){ + if (this.seen.length < this.tokens_length){ + return true; + } + return false; +} +CSL.Factory.Registry.prototype.Checkerator.prototype.setMaxVals = function(maxvals){ + this.maxvals = maxvals; +}; +CSL.Factory.Registry.prototype.Checkerator.prototype.setMinVal = function(minval){ + this.minval = minval; +}; +CSL.Factory.Registry.prototype.Checkerator.prototype.setBase = function(base){ + this.base = base; + if (! this.mode1_counts){ + this.mode1_counts = new Array(); + for each (i in this.base["givens"]){ + this.mode1_counts.push(0); + } + } +}; +CSL.Factory.Registry.prototype.Checkerator.prototype.setMode = function(mode){ + this.mode = mode; +}; +CSL.Factory.Registry.prototype.Checkerator.prototype.checkForClash = function(str,otherstr){ + if (str == otherstr){ + if (this.mode == "names"){ + this.clashes += 1; + if (debug){ + print(" (mode 0 clash, returning true)"); + } + return true; + } + if (this.mode == "givens"){ + this.clashes += 1; + if (debug){ + print(" (mode 1 clash, returning false)"); + } + } + return false; + } +}; +CSL.Factory.Registry.prototype.Checkerator.prototype.evaluateClashes = function(){ + if (!this.maxvals.length){ + return false; + } + if (this.mode == "names"){ + if (this.clashes){ + this.lastclashes = this.clashes; + this.clashes = 0; + return false; + } else { + // cleared, so increment. also quash the id as done. + this.ids[this.pos] = false; + this.pos += 1; + this.lastclashes = this.clashes; + return true; + } + } + if (this.mode == "givens"){ + var ret = true; + if (debug){ + print(" ---> Comparing in mode 1: clashes="+this.clashes+"; lastclashes="+this.lastclashes); + } + var namepos = this.mode1_counts[this.modepos]; + if (this.clashes && this.clashes == this.lastclashes){ + if (debug){ + print(" ---> Applying mode 1 defaults: "+this.mode1_defaults); + } + if (this.mode1_defaults){ + var old = this.mode1_defaults[(namepos-1)]; + if (debug){ + print(" ---> Resetting to default: ("+old+")"); + } + this.base["givens"][this.modepos][(namepos-1)] = old; + } + ret = false; + } else if (this.clashes) { + if (debug){ + print(" ---> Expanding given name helped a little, retaining it"); + } + ret = false; + } else { // only non-clash should be possible + if (debug){ + print(" ---> No clashes, storing token config and going to next"); + } + this.mode1_counts = false; + ret = true; + } + this.lastclashes = this.clashes; + this.clashes = 0; + if (ret){ + this.ids[this.pos] = false; + } + return ret; + } +}; +CSL.Factory.Registry.prototype.Checkerator.prototype.maxAmbigLevel = function (){ + if (!this.maxvals.length){ + return true; + } + if (this.mode == "names"){ + //print(this.modepos+" : "+this.base[0].length+" : "+this.base[0][this.modepos]); + if (this.modepos == (this.base["names"].length-1) && this.base["names"][this.modepos] == this.maxvals[this.modepos]){ + if (this.modes.length == 2){ + this.mode = "givens"; + this.modepos = 0; + //this.pos = 0; + } else { + this.pos += 1; + return true; + } + } + } + if (this.mode == "givens"){ + if (this.modepos == (this.mode1_counts.length-1) && this.mode1_counts[this.modepos] == (this.maxvals[this.modepos])){ + if (debug){ + print("----- Item maxed out -----"); + } + if (this.modes.length == 2){ + this.mode = "givens"; + this.pos += 1; + } else { + this.pos += 1; + } + //this.ids[this.pos] = false; + return true; + } + } + return false; +}; +CSL.Factory.Registry.prototype.Checkerator.prototype.incrementAmbigLevel = function (){ + if (this.mode == "names"){ + var val = this.base["names"][this.modepos]; + if (val < this.maxvals[this.modepos]){ + this.base["names"][this.modepos] += 1; + } else if (this.modepos < (this.base["names"].length-1)){ + this.modepos +=1; + this.base["names"][this.modepos] = 0; + } + } + if (this.mode == "givens"){ + var val = (this.mode1_counts[this.modepos]); + if (val < this.maxvals[this.modepos]){ + this.mode1_counts[this.modepos] += 1; + this.mode1_defaults = this.base["givens"][this.modepos].slice(); + this.base["givens"][this.modepos][val] += 1; + if (debug){ + print(" ---> (A) Set expanded givenname param with base: "+this.base["givens"]); + } + } else if (this.modepos < (this.base["givens"].length-1)){ + this.modepos +=1; + this.base["givens"][this.modepos][0] += 1; + this.mode1_defaults = this.base["givens"][this.modepos].slice(); + if (debug){ + print(" ---> (B) Set expanded givenname param with base: "+this.base["givens"]); + } + } else { + this.mode = "names"; + this.pos += 1; + } + } +}; +CSL.Factory.Registry.prototype.registerAmbigToken = function (state,akey,id,ambig_config){ + if ( ! this.ambigs[akey]){ + this.ambigs[akey] = new Array(); + }; + var found = false; + for (var i in this.ambigs[akey]){ + if (this.ambigs[akey].indexOf(id) > -1){ + found = true; + } + } + if (!found){ + this.ambigs[akey].push(id); + } + this.registry[id].disambig = state.fun.clone_ambig_config(ambig_config); +}; +CSL.Factory.Registry.prototype.decrementNames = function(state,base){ + var base_return = state.fun.clone_ambig_config(base); + var do_me = false; + for (var i=(base_return["givens"].length-1); i > -1; i--){ + for (var j=(base_return["givens"][i].length-1); j > -1; j--){ + if (base_return["givens"][i][j] == 2){ + do_me = true; + } + } + } + if (do_me){ + for (var i=(base_return["givens"].length-1); i > -1; i--){ + for (var j=(base_return["givens"][i].length-1); j > -1; j--){ + if (base_return["givens"][i][j] == 2){ + i = -1; + break; + } + base_return["names"][i] += -1; + } + } + } + return base_return; +}; +CSL.Lib = {}; +// +// XXXXX Fix initialization of given name count. +// Should this be removed from the base? not sure. +// +CSL.Lib.Elements = {}; +CSL.Lib.Elements.style = new function(){ + this.build = build; + function build (state,target){ + if (this.tokentype == CSL.START){ + if (!state.build.lang){ + state.build.lang = "en"; + } + state.opt.lang = state.build.lang; + state.build.in_style = true; + state.build.lang = false; + state.opt.term = CSL.System.Retrieval.getLocaleObjects(state.opt.lang,state.opt.locale); + state.tmp.term_predecessor = false; + } else { + state.tmp.disambig_request = false; + state.build.in_style = false; + } + if (this.tokentype == CSL.START){ + var func = function(state,Item){ + if (state.tmp.disambig_request && ! state.tmp.disambig_override){ + state.tmp.disambig_settings = state.tmp.disambig_request; + } else if (state.registry.registry[Item.id] && ! state.tmp.disambig_override) { + state.tmp.disambig_request = state.registry.registry[Item.id].disambig; + state.tmp.disambig_settings = state.registry.registry[Item.id].disambig; + } else { + state.tmp.disambig_settings = new CSL.Factory.AmbigConfig(); + } + }; + state["init"].push(func); + var tracking_info_init = function(state,Item){ + state.tmp.names_used = new Array(); + state.tmp.nameset_counter = 0; + state.tmp.years_used = new Array(); + }; + state["init"].push(tracking_info_init); + var splice_init = function(state,Item) { + state.tmp.splice_delimiter = state[state.tmp.area].opt.delimiter; + }; + state["init"].push(splice_init); + var sort_keys_init = function(state,Item) { + state["bibliography_sort"].keys = new Array(); + state["citation_sort"].keys = new Array(); + }; + state["init"].push(sort_keys_init); + }; + if (this.tokentype == CSL.END){ + var set_splice = function(state,Item){ + // + // set the inter-cite join delimiter + // here. + if (state.tmp.last_suffix_used && state.tmp.last_suffix_used.match(/.*[-.,;:]$/)){ + state.tmp.splice_delimiter = " "; + } else if (state.tmp.prefix.value() && state.tmp.prefix.value().match(/^[,,:;a-z].*/)){ + state.tmp.splice_delimiter = " "; + } else if (state.tmp.last_suffix_used || state.tmp.prefix.value()){ + // + // forcing the delimiter back to normal if a + // suffix or prefix touch the join, even if + // a year-suffix is the only output. + state.tmp.splice_delimiter = state[state.tmp.area].opt.delimiter; + } else { + // XXXX year-suffix must have been used for special + // XXXX delimiter to be invoked here. + } + }; + state["stop"].push(set_splice); + var set_lastvals = function(state,Item){ + state.tmp.last_suffix_used = state.tmp.suffix.value(); + state.tmp.last_years_used = state.tmp.years_used.slice(); + state.tmp.last_names_used = state.tmp.names_used.slice(); + }; + state["stop"].push(set_lastvals); + var func = function(state,Item){ + state.tmp.disambig_request = false; + }; + state["stop"].push(func); + } + } +}; +CSL.Lib.Elements.info = new function(){ + this.build = build; + function build (state,target){ + if (this.tokentype == CSL.START){ + state.build.skip = "info"; + } else { + state.build.skip = false; + } + }; +}; +CSL.Lib.Elements.text = new function(){ + this.build = build; + function build (state,target){ + // + // CSL permits macros to be called before they + // are declared. We file a placeholder token unless we are + // in the layout area, and when in the layout area we scan + // any inserted macros for nested macro calls, and explode + // them. + if (state.build.postponed_macro){ + // + // XXXX Could catch undeclared macros here. + // + if ( ! state.build.layout_flag && ! state.build.sort_flag){ + // + // Fudge it with a placeholder if we're not yet + // inside the layout area. + this.postponed_macro = state.build.postponed_macro; + target.push(this); + } else { + // + // tag this token with the name of the postponed macro + this.postponed_macro = state.build.postponed_macro; + // + // push an implict group token with the strings and + // decorations of the invoking text tag + var start_token = new CSL.Factory.Token("group",CSL.START); + for (i in this.strings){ + start_token.strings[i] = this.strings[i]; + } + start_token.decorations = this.decorations; + var newoutput = function(state,Item){ + state.output.startTag("group",this); + //state.tmp.decorations.push(this.decorations); + }; + start_token["execs"].push(newoutput); + target.push(start_token); + // + // Special handling for text macros inside a substitute + // environment. + if (state.build.names_substituting){ + // + // A text macro inside a substitute environment is + // treated as a special conditional. + var choose_start = new CSL.Factory.Token("choose",CSL.START); + target.push(choose_start); + var if_start = new CSL.Factory.Token("if",CSL.START); + // + // Here's the Clever Part. + // Set a test of the shadow if token to skip this + // macro if we have acquired a name value. + var check_for_variable = function(state,Item){ + if (state.tmp.value){ + return true; + } + return false; + }; + if_start.tests.push(check_for_variable); + // + // this is cut-and-paste of the "any" evaluator + // function, from Attributes. These functions + // should be defined in a namespace for reuse. + var evaluator = function(state,Item){ + var res = this.fail; + state.tmp.jump.replace("fail"); + for each (var func in this.tests){ + if (func.call(this,state,Item)){ + res = this.succeed; + state.tmp.jump.replace("succeed"); + break; + } + } + return res; + }; + if_start.evaluator = evaluator; + target.push(if_start); + var macro = CSL.Factory.expandMacro.call(state,this); + for each (var t in macro){ + target.push(t); + } + var if_end = new CSL.Factory.Token("if",CSL.END); + target.push(if_end); + var choose_end = new CSL.Factory.Token("choose",CSL.END); + target.push(choose_end); + } else { + var macro = CSL.Factory.expandMacro.call(state,this); + for each (var t in macro){ + target.push(t); + } + } + var end_token = new CSL.Factory.Token("group",CSL.END); + var mergeoutput = function(state,Item){ + // + // rendering happens inside the + // merge method, by applying decorations to + // each token to be merged. + state.output.endTag(); + }; + end_token["execs"].push(mergeoutput); + target.push(end_token); + state.build.names_substituting = false; + } + state.build.postponed_macro = false; + } else { + // ... + // + // Do non-macro stuff + var variable = this.variables[0]; + if ("citation-number" == variable || "year-suffix" == variable){ + // + // citation-number and year-suffix are super special, + // because they are rangeables, and require a completely + // different set of formatting parameters on the output + // queue. + if (variable == "citation-number"){ + this.strings.is_rangeable = true; + var func = function(state,Item){ + var id = Item["id"]; + if (!state.tmp.force_subsequent){ + var num = state.registry.registry[id].seq; + // + // DO SOMETHING USEFUL HERE + // + var number = new CSL.Output.Number(num,this); + state.output.append(number,"literal"); + } + }; + this["execs"].push(func); + } else if (variable == "year-suffix"){ + var func = function(state,Item){ + if (state.registry.registry[Item.id] && state.registry.registry[Item.id].disambig[2]){ + state.tmp.delimiter.replace(""); + state.output.append(state.registry.registry[Item.id].disambig[2],this); + // + // don't ask :) + // obviously the variable naming scheme needs + // a little touching up + var firstoutput = state.tmp.term_sibling.mystack.indexOf(true) == -1; + var specialdelimiter = state[state.tmp.area].opt["year-suffix-delimiter"]; + if (firstoutput && specialdelimiter && !state.tmp.sort_key_flag){ + state.tmp.splice_delimiter = state[state.tmp.area].opt["year-suffix-delimiter"]; + } + } + }; + this["execs"].push(func); + } + } else { + if (state.build.term){ + var term = state.build.term; + var form = "long"; + var plural = 0; + if (state.build.form){ + form = state.build.form; + } + if (state.build.plural){ + plural = state.build.plural; + } + term = state.opt.term[term][form][plural]; + var printterm = function(state,Item){ + // capitalize the first letter of a term, if it is the + // first thing rendered in a citation (or if it is + // being rendered immediately after terminal punctuation, + // I guess, actually). + if (!state.tmp.term_predecessor){ + //print("Capitalize"); + term = CSL.Output.Formatters.capitalize_first(term); + state.tmp.term_predecessor = false; + }; + state.output.append(term,this); + }; + this["execs"].push(printterm); + state.build.term = false; + state.build.form = false; + state.build.plural = false; + } else if (variable){ + var func = function(state,Item){ + if (this.variables.length){ + state.fun.mark_output(state,Item[variable]); + state.output.append(Item[variable],this); + //state.tmp.value.push(Item[variable]); + } + }; + this["execs"].push(func); + } else if (this.strings.value){ + var func = function(state,Item){ + state.output.append(this.strings.value,this); + }; + this["execs"].push(func); + } else { + var weird_output_function = function(state,Item){ + if (state.tmp.value.length){ + print("Weird output pattern. Can this be revised?"); + for each (var val in state.tmp.value){ + state.output.append(val,this); + } + state.tmp.value = new Array(); + } + }; + this["execs"].push(weird_output_function); + } + } + target.push(this); + }; + } +}; +CSL.Lib.Elements.macro = new function(){ + this.build = build; + function build (state,target){ + if (this.tokentype == CSL.START){ + state.build.name = this.strings.name; + var bufferlist = new Array(); + state.build.children.push(bufferlist); + } else { + // + // catch repeated declarations of the same macro name + if (state.build.macro[state.build.name]){ + throw "CSL processor error: repeated declaration of macro \""+state.build.name+"\""; + } + // + // is this slice really needed? + state.build.macro[state.build.name] = target.slice(); + state.build.name = false; + state.build.children = new Array();; + } + } +}; +CSL.Lib.Elements.locale = new function(){ + this.build = build; + function build(state,target){ + if (this.tokentype == CSL.START){ + if (state.opt.lang && state.build.lang != state.opt.lang){ + state.build.skip = true; + } else { + state.build.skip = false; + } + } + } +}; +CSL.Lib.Elements.terms = new function(){ + this.build = build; + function build(state,target){ + } +}; +CSL.Lib.Elements.term = new function(){ + this.build = build; + function build (state,target){ + if (this.tokentype == CSL.START){ + var bufferlist = new Array(); + state.build.children.push(bufferlist); + state.build.name = this.strings.name; + state.build.form = this.strings.form; + } else { + if (state.build.text){ + var single = new CSL.Factory.Token("single",CSL.SINGLETON); + var multiple = new CSL.Factory.Token("multiple",CSL.SINGLETON); + target.push(single); + target.push(multiple); + for (i in target){ + target[i]["string"] = state.build.text; + } + state.build.text = false; + } + // set strings from throwaway tokens to term object + var termstrings = new Array(); + // target should be pointing at the state.build.children + // array, set by the start tag above + for (i in target){ + termstrings.push(target[i].string); + } + // initialize object for this term + if (!state.opt.term[state.build.name]){ + state.opt.term[state.build.name] = new Object(); + } + // + // long writes to long and any unused form key. + // + // short writes to short and to symbol if it is unused + // + // verb writes to verb and to verb-short if it is unused + // + // symbol and verb-short write only to themselves + if (!state.build.form){ + state.build.form = "long"; + } + var keywrites = new Object(); + keywrites["long"] = ["verb-short","symbol","verb","short","long"]; + keywrites["short"] = ["symbol"]; + keywrites["verb"] = ["verb-short"]; + keywrites["symbol"] = []; + keywrites["verb-short"] = []; + // forced write + state.opt.term[state.build.name][state.build.form] = termstrings; + if ( !state.build.in_style ){ + // shy write, performed only when external locale + // is loaded. + for each (var key in keywrites[state.build.form]){ + if (!state.opt.term[state.build.name][key]){ + state.opt.term[state.build.name][key] = termstrings; + } + } + } + state.build.name = false; + state.build.form = false; + state.build.children = new Array(); + } + } +}; +CSL.Lib.Elements.single = new function(){ + this.build = build; + function build(state,target){ + if (this.tokentype == CSL.END){ + this["string"] = state.build.text; + this["key"] = state.build.name; + state.build.text = false; + target.push(this); + } + } +}; +CSL.Lib.Elements.multiple = new function(){ + this.build = build; + function build(state,target){ + if (this.tokentype == CSL.END){ + this["string"] = state.build.text; + this["key"] = state.build.name; + state.build.text = false; + target.push(this); + } + } +}; +CSL.Lib.Elements.group = new function(){ + this.build = build; + function build (state,target){ + if (this.tokentype == CSL.START){ + var newoutput = function(state,Item){ + state.output.startTag("group",this); + }; + // + // Paranoia. Assure that this init function is the first executed. + var execs = new Array(); + execs.push(newoutput); + this.execs = execs.concat(this.execs); + var fieldcontentflag = function(state,Item){ + state.tmp.term_sibling.push( undefined, CSL.LITERAL ); + }; + this["execs"].push(fieldcontentflag); + } else { + var quashnonfields = function(state,Item){ + var flag = state.tmp.term_sibling.value(); + if (false == flag){ + state.output.clearlevel(); + } + state.tmp.term_sibling.pop(); + }; + this["execs"].push(quashnonfields); + var mergeoutput = function(state,Item){ + // + // rendering happens inside the + // merge method, by applying decorations to + // each token to be merged. + state.output.endTag(); + }; + this["execs"].push(mergeoutput); + } + target.push(this); + } +}; +CSL.Lib.Elements.citation = new function(){ + this.build = build; + function build (state,target){ + if (this.tokentype == CSL.START) { + state.build.area_return = state.build.area; + state.build.area = "citation"; + } + if (this.tokentype == CSL.END) { + state.build.area = state.build.area_return; + } + } +}; +CSL.Lib.Elements.choose = new function(){ + this.build = build; + this.configure = configure; + function build (state,target){ + if (this.tokentype == CSL.START){ + var func = function(state,Item){ //open condition + state.tmp.jump.push(undefined, CSL.LITERAL); + }; + } + if (this.tokentype == CSL.END){ + var func = function(state,Item){ //close condition + state.tmp.jump.pop(); + }; + } + this["execs"].push(func); + target.push(this); + } + function configure(state,pos){ + if (this.tokentype == CSL.END){ + state.configure["fail"].push((pos+1)); + state.configure["succeed"].push((pos+1)); + } else { + state.configure["fail"].pop(); + state.configure["succeed"].pop(); + } + } +}; +CSL.Lib.Elements["if"] = new function(){ + this.build = build; + this.configure = configure; + function build (state,target){ + if (this.tokentype == CSL.START){ + if (! this.evaluator){ + // + // cut and paste of "any" + this.evaluator = function(state,Item){ + var res = this.fail; + state.tmp.jump.replace("fail"); + for each (var func in this.tests){ + if (func.call(this,state,Item)){ + res = this.succeed; + state.tmp.jump.replace("succeed"); + break; + } + } + return res; + }; + }; + } + if (this.tokentype == CSL.END){ + var closingjump = function(state,Item){ + var next = this[state.tmp.jump.value()]; + return next; + }; + this["execs"].push(closingjump); + }; + target.push(this); + } + function configure(state,pos){ + if (this.tokentype == CSL.START){ + // jump index on failure + this["fail"] = state.configure["fail"][(state.configure["fail"].length-1)]; + this["succeed"] = this["next"]; + } else { + // jump index on success + this["succeed"] = state.configure["succeed"][(state.configure["succeed"].length-1)]; + this["fail"] = this["next"]; + } + } +}; +CSL.Lib.Elements["else-if"] = new function(){ + this.build = build; + this.configure = configure; + function build (state,target){ + if (this.tokentype == CSL.START){ + if (! this.evaluator){ + // + // cut and paste of "any" + this.evaluator = function(state,Item){ + var res = this.fail; + state.tmp.jump.replace("fail"); + for each (var func in this.tests){ + if (func.call(this,state,Item)){ + res = this.succeed; + state.tmp.jump.replace("succeed"); + break; + } + } + return res; + }; + }; + } + if (this.tokentype == CSL.END){ + var closingjump = function(state,Item){ + var next = this[state.tmp.jump.value()]; + return next; + }; + this["execs"].push(closingjump); + }; + target.push(this); + } + function configure(state,pos){ + if (this.tokentype == CSL.START){ + // jump index on failure + this["fail"] = state.configure["fail"][(state.configure["fail"].length-1)]; + this["succeed"] = this["next"]; + state.configure["fail"][(state.configure["fail"].length-1)] = pos; + } else { + // jump index on success + this["succeed"] = state.configure["succeed"][(state.configure["succeed"].length-1)]; + this["fail"] = this["next"]; + } + } +}; +CSL.Lib.Elements["else"] = new function(){ + this.build = build; + this.configure = configure; + function build (state,target){ + target.push(this); + } + function configure(state,pos){ + if (this.tokentype == CSL.START){ + state.configure["fail"][(state.configure["fail"].length-1)] = pos; + } + } +}; +CSL.Lib.Elements.name = new function(){ + this.build = build; + function build(state,target){ + state.build.form = this.strings.form; + state.build.name_flag = true; + var func = function(state,Item){ + state.output.addToken("name",false,this); + }; + this["execs"].push(func); + var set_initialize_with = function(state,Item){ + state.tmp["initialize-with"] = this.strings["initialize-with"]; + }; + this["execs"].push(set_initialize_with); + target.push(this); + }; +}; +CSL.Lib.Elements["name-part"] = new function(){ + this.build = build; + function build(state,target){ + // XXXXX problem. can't be global. don't want to remint + // for every rendering. somehow get tokens stored on + // closing names tag static. always safe, b/c + // no conditional branching inside names. + // same treatment for etal styling element. + var set_namepart_format = function(state,Item){ + state.output.addToken(state.tmp.namepart_type,false,this); + }; + this["execs"].push(set_namepart_format); + target.push(this); + }; +}; +CSL.Lib.Elements.label = new function(){ + this.build = build; + function build(state,target){ + if (state.build.name_flag){ + this.strings.label_position = CSL.AFTER; + } else { + this.strings.label_position = CSL.BEFORE; + } + var set_label_info = function(state,Item){ + if (!this.strings.form){ + this.strings.form = "long"; + } + state.output.addToken("label",false,this); + }; + this["execs"].push(set_label_info); + target.push(this); + }; +}; +CSL.Lib.Elements.substitute = new function(){ + this.build = build; + function build(state,target){ + if (this.tokentype == CSL.START){ + state.build.names_substituting = true; + var declare_thyself = function(state,Item){ + state.tmp.names_substituting = true; + }; + this["execs"].push(declare_thyself); + }; + target.push(this); + }; +}; +CSL.Lib.Elements["et-al"] = new function(){ + this.build = build; + function build(state,target){ + var set_et_al_format = function(state,Item){ + state.output.addToken("etal",false,this); + }; + this["execs"].push(set_et_al_format); + target.push(this); + }; +}; +CSL.Lib.Elements.layout = new function(){ + this.build = build; + function build(state,target){ + if (this.tokentype == CSL.START){ + state.build.layout_flag = true; + var set_opt_delimiter = function(state,Item){ + // just in case + state.tmp.sort_key_flag = false; + state[state.tmp.area].opt.delimiter = ""; + if (this.strings.delimiter){ + state[state.tmp.area].opt.delimiter = this.strings.delimiter; + }; + }; + this["execs"].push(set_opt_delimiter); + var reset_nameset_counter = function(state,Item){ + state.tmp.nameset_counter = 0; + }; + this["execs"].push(reset_nameset_counter); + var declare_thyself = function(state,Item){ + // + // This is not very pretty. + // + //state.tmp.delimiter.mystack[0] = this.strings.delimiter; + //state.tmp.prefix.mystack[0] = this.strings.prefix; + //state.tmp.suffix.mystack[0] = this.strings.suffix; + //state.tmp.tokenstore["layout"] = new CSL.Factory.Token("layout"); + state[state.tmp.area].opt.layout_prefix = this.strings.prefix; + state[state.tmp.area].opt.layout_suffix = this.strings.suffix; + state.output.openLevel("empty"); + }; + this["execs"].push(declare_thyself); + }; + if (this.tokentype == CSL.END){ + state.build.layout_flag = false; + var mergeoutput = function(state,Item){ + state.output.closeLevel(); + state.tmp.name_quash = new Object(); + }; + this["execs"].push(mergeoutput); + } + target.push(this); + }; +}; +CSL.Lib.Elements.number = new function(){ + this.build = build; + function build(state,target){ + target.push(this); + }; +}; +CSL.Lib.Elements.date = new function(){ + this.build = build; + function build(state,target){ + if (this.tokentype == CSL.START){ + var set_value = function(state,Item){ + state.tmp.value.push(Item[this.variables[0]]); + }; + this["execs"].push(set_value); + var newoutput = function(state,Item){ + state.output.startTag("date",this); + }; + this["execs"].push(newoutput); + } else if (this.tokentype == CSL.END){ + var mergeoutput = function(state,Item){ + state.output.endTag(); + }; + this["execs"].push(mergeoutput); + } + target.push(this); + }; +}; +CSL.Lib.Elements["date-part"] = new function(){ + this.build = build; + function build(state,target){ + var value = ""; + if (!this.strings.form){ + this.strings.form = "long"; + } + var render_date_part = function(state,Item){ + for each (var val in state.tmp.value){ + value = val[this.strings.name]; + break; + }; + var real = !state.tmp.suppress_decorations; + var invoked = state[state.tmp.area].opt.collapse == "year-suffix"; + var precondition = state[state.tmp.area].opt["disambiguate-add-year-suffix"]; + if (real && precondition && invoked){ + state.tmp.years_used.push(value); + var known_year = state.tmp.last_years_used.length >= state.tmp.years_used.length; + if (known_year){ + if (state.tmp.last_years_used[(state.tmp.years_used.length-1)] == value){ + value = false; + } + } + } + if (value){ + if (this.strings.form){ + value = CSL.Util.Dates[this.strings.name][this.strings.form](state,value); + } + //state.output.startTag(this.strings.name,this); + state.output.append(value,this); + //state.output.endTag(); + }; + state.tmp.value = new Array(); + }; + this["execs"].push(render_date_part); + target.push(this); + }; +}; +CSL.Lib.Elements.option = new function(){ + this.build = build; + function build(state,target){ + if (this.strings.name == "collapse"){ + // only one collapse value will be honoured. + if (this.strings.value){ + state[state.tmp.area].opt.collapse = this.strings.value; + } + } + if (CSL.ET_AL_NAMES.indexOf(this.strings.name) > -1){ + if (this.strings.value){ + state[state.tmp.area].opt[this.strings.name] = parseInt(this.strings.value, 10); + } + } + if (CSL.DISAMBIGUATE_OPTIONS.indexOf(this.strings.name) > -1){ + state[state.tmp.area].opt[this.strings.name] = true; + } + if ("year-suffix-delimiter" == this.strings.name){ + state[state.tmp.area].opt["year-suffix-delimiter"] = this.strings.value; + } + target.push(this); + }; +}; +CSL.Lib.Elements.bibliography = new function(){ + this.build = build; + function build(state,target){ + if (this.tokentype == CSL.START){ + state.build.area_return = state.build.area; + state.build.area = "bibliography"; + //var init_sort_keys = function(state,Item){ + // state.tmp.sort_keys = new Array(); + //}; + //this["execs"].push(init_sort_keys); + } + if (this.tokentype == CSL.END){ + state.build.area = state.build.area_return; + } + target.push(this); + }; +}; +CSL.Lib.Elements.sort = new function(){ + this.build = build; + function build(state,target){ + if (this.tokentype == CSL.START){ + state.build.sort_flag = true; + state.build.area_return = state.build.area; + state.build.area = state.build.area+"_sort"; + } + if (this.tokentype == CSL.END){ + state.build.area = state.build.area_return; + state.build.sort_flag = false; + } + }; +}; +CSL.Lib.Elements.key = new function(){ + this.build = build; + function build(state,target){ + var start_key = new CSL.Factory.Token("key",CSL.START); + start_key.strings["et-al-min"] = this.strings["et-al-min"]; + start_key.strings["et-al-use-first"] = this.strings["et-al-use-first"]; + var sort_direction = new Array(); + if (this.strings.sort_direction == CSL.DESCENDING){ + sort_direction.push(1); + sort_direction.push(-1); + } else { + sort_direction.push(-1); + sort_direction.push(1); + } + state[state.build.area].opt.sort_directions.push(sort_direction); + var et_al_init = function(state,Item){ + // + // should default to the area value, with these as override. + // be sure that the area-level value is set correctly, then + // do this up. lots of inheritance, so lots of explicit + // conditions, but it's all very systematic and boring. + // + state.tmp.sort_key_flag = true; + if (this.strings["et-al-min"]){ + state.tmp["et-al-min"] = this.strings["et-al-min"]; + } + if (this.strings["et-al-use-first"]){ + state.tmp["et-al-use-first"] = this.strings["et-al-use-first"]; + } + }; + start_key["execs"].push(et_al_init); + target.push(start_key); + // + // ops to initialize the key's output structures + if (state.build.key_is_variable){ + state.build.key_is_variable = false; + var single_text = new CSL.Factory.Token("text",CSL.SINGLETON); + single_text["execs"] = this["execs"].slice(); + var output_variables = function(state,Item){ + for each(var val in state.tmp.value){ + if (val == "citation-number"){ + state.output.append(state.registry.registry[Item["id"]].seq.toString(),"empty"); + } else { + state.output.append(val,"empty"); + } + } + }; + single_text["execs"].push(output_variables); + target.push(single_text); + } else { + // + // if it's not a variable, it's a macro + var token = new CSL.Factory.Token("text",CSL.SINGLETON); + token.postponed_macro = state.build.postponed_macro; + var macro = CSL.Factory.expandMacro.call(state,token); + for each (var t in macro){ + target.push(t); + } + state.build.postponed_macro = false; + } + // + // ops to output the key string result to an array go + // on the closing "key" tag before it is pushed. + // Do not close the level. + var end_key = new CSL.Factory.Token("key",CSL.END); + var store_key_for_use = function(state,Item){ + var keystring = state.output.string(state,state.output.queue); + if (false){ + print("keystring: "+keystring); + } + state[state.tmp.area].keys.push(keystring); + state.tmp.value = new Array(); + }; + end_key["execs"].push(store_key_for_use); + var reset_key_params = function(state,Item){ + state.tmp.name_quash = new Object(); + state.tmp["et-al-min"] = false; + state.tmp["et-al-use-first"] = false; + state.tmp.sort_key_flag = false; + }; + end_key["execs"].push(reset_key_params); + target.push(end_key); + }; +}; +CSL.Lib.Elements.names = new function(){ + this.build = build; + function build(state,target){ + if (this.tokentype == CSL.START || this.tokentype == CSL.SINGLETON){ + var init_names = function(state,Item){ + if (state.tmp.value.length == 0){ + for each (var variable in this.variables){ + // + // If the item has been marked for quashing, skip it. + if (Item[variable] && ! state.tmp.name_quash[variable]){ + state.fun.mark_output(state,Item[variable]); + state.tmp.names_max.push(Item[variable].length); + state.tmp.value.push({"type":variable,"names":Item[variable]}); + // saving relevant names separately, for reference + // in splice collapse + state.tmp.names_used.push(state.tmp.value.slice()); + } + }; + } + }; + this["execs"].push(init_names); + }; + if (this.tokentype == CSL.START){ + state.build.names_flag = true; + var set_et_al_params = function(state,Item){ + state.output.startTag("names",this); + // + // No value or zero means a first reference, + // anything else is a subsequent reference. + if (Item.position || state.tmp.force_subsequent){ + if (! state.tmp["et-al-min"]){ + if (state[state.tmp.area].opt["et-al-subsequent-min"]){ + state.tmp["et-al-min"] = state[state.tmp.area].opt["et-al-subsequent-min"]; + } else { + state.tmp["et-al-min"] = state[state.tmp.area].opt["et-al-min"]; + } + } + if (! state.tmp["et-al-use-first"]){ + if (state[state.tmp.area].opt["et-al-subsequent-use-first"]){ + state.tmp["et-al-use-first"] = state[state.tmp.area].opt["et-al-subsequent-use-first"]; + } else { + state.tmp["et-al-use-first"] = state[state.tmp.area].opt["et-al-use-first"]; + } + } + } else { + if (! state.tmp["et-al-min"]){ + state.tmp["et-al-min"] = state[state.tmp.area].opt["et-al-min"]; + } + if (! state.tmp["et-al-use-first"]){ + state.tmp["et-al-use-first"] = state[state.tmp.area].opt["et-al-use-first"]; + } + } + }; + this["execs"].push(set_et_al_params); + }; + if (this.tokentype == CSL.END){ + var handle_names = function(state,Item){ + var namesets = new Array(); + var common_term = state.fun.get_common_term(state,state.tmp.value); + if (common_term){ + namesets = state.tmp.value.slice(0,1); + } else { + namesets = state.tmp.value; + } + var local_count = 0; + var nameset = new Object(); + state.output.addToken("space"," "); + state.output.addToken("sortsep",state.output.getToken("name").strings["sort-separator"]); + if (!state.output.getToken("etal")){ + state.output.addToken("etal-join",", "); + state.output.addToken("etal"); + } else { + state.output.addToken("etal-join",""); + } + if (!state.output.getToken("label")){ + state.output.addToken("label"); + } + if (!state.output.getToken("etal").strings.et_al_term){ + state.output.getToken("etal").strings.et_al_term = state.opt.term["et-al"]["long"][0]; + } + state.output.addToken("commasep",", "); + for each (namepart in ["secondary-key","primary-key","prefix","suffix"]){ + if (!state.output.getToken(namepart)){ + state.output.addToken(namepart); + } + } + for (var namesetIndex in namesets){ + nameset = namesets[namesetIndex]; + if (!state.tmp.suppress_decorations && (state[state.tmp.area].opt.collapse == "year" || state[state.tmp.area].opt.collapse == "year-suffix")){ + if (state.tmp.last_names_used.length == state.tmp.names_used.length){ + var lastones = state.tmp.last_names_used[state.tmp.nameset_counter]; + var currentones = state.tmp.names_used[state.tmp.nameset_counter]; + var compset = currentones.concat(lastones); + if (state.fun.get_common_term(state,compset)){ + continue; + } + } + } + if (!state.tmp.disambig_request){ + state.tmp.disambig_settings["givens"][state.tmp.nameset_counter] = new Array(); + } + // + // Here is where we maybe truncate the list of + // names, to satisfy the et-al constraints. + var display_names = nameset.names.slice(); + var sane = state.tmp["et-al-min"] >= state.tmp["et-al-use-first"]; + // + // if there is anything on name request, we assume that + // it was configured correctly via state.names_request + // by the function calling the renderer. + var discretionary_names_length = state.tmp["et-al-min"]; + // + // if rendering for display, do not honor a disambig_request + // to set names length below et-al-use-first + // + if (state.tmp.suppress_decorations){ + if (state.tmp.disambig_request){ + discretionary_names_length = state.tmp.disambig_request["names"][state.tmp.nameset_counter]; + } else if (display_names.length >= state.tmp["et-al-min"]){ + discretionary_names_length = state.tmp["et-al-use-first"]; + } + } else { + if (state.tmp.disambig_request && state.tmp["et-al-use-first"] < state.tmp.disambig_request["names"][state.tmp.nameset_counter]){ + discretionary_names_length = state.tmp.disambig_request["names"][state.tmp.nameset_counter]; + } else if (display_names.length >= state.tmp["et-al-min"]){ + discretionary_names_length = state.tmp["et-al-use-first"]; + } + } + var overlength = display_names.length > discretionary_names_length; + var et_al = false; + var and_term = false; + if (sane && overlength){ + if (! state.tmp.sort_key_flag){ + et_al = state.output.getToken("etal").strings.et_al_term; + } + display_names = display_names.slice(0,discretionary_names_length); + } else { + if (state.output.getToken("name").strings["and"] && ! state.tmp.sort_key_flag && display_names.length > 1){ + and_term = state.output.getToken("name").strings["and"]; + } + } + state.tmp.disambig_settings["names"][state.tmp.nameset_counter] = display_names.length; + local_count += display_names.length; + // + // "name" is the format for the outermost nesting of a nameset + // "inner" is a format consisting only of a delimiter, used for + // joining all but the last name in the set together. + var delim = state.output.getToken("name").strings.delimiter; + state.output.addToken("inner",delim); + //state.tmp.tokenstore["and"] = new CSL.Factory.Token("and"); + if (and_term){ + state.output.formats.value()["name"].strings.delimiter = and_term; + } + for (var i in nameset.names){ + // + // set the display mode default for givennames if required + if (state.tmp.disambig_request){ + // + // fix a request for initials that makes no sense. + // can't do this in disambig, because the availability + // of initials is not a global parameter. + var val = state.tmp.disambig_settings["givens"][state.tmp.nameset_counter][i]; + if (val == 1 && ! state.tmp["initialize-with"]){ + val = 2; + } + var param = val; + } else { + var param = 2; + if (state.output.getToken("name").strings.form == "short"){ + param = 0; + } else if ("string" == typeof state.tmp["initialize-with"]){ + param = 1; + } + } + state.tmp.disambig_settings["givens"][state.tmp.nameset_counter][i] = param; + } + // + // configure label if poss + var label = false; + if (state.output.getToken("label").strings.label_position){ + var term; + if (common_term){ + term = common_term; + } else { + term = state.opt.term[nameset.type]; + } + if (nameset.names.length > 1){ + label = term[state.output.getToken("label").strings.form][1]; + } else { + label = term[state.output.getToken("label").strings.form][0]; + } + }; + // + // Nesting levels are opened to control joins with + // content at the end of the names block + // + // Gotcha. Don't want to use startTag here, it pushes + // a fresh format token namespace, and we lose our pointer.] + // Use openLevel (and possibly addToken) instead. + state.output.openLevel("empty"); // for term join + if (label && state.output.getToken("label").strings.label_position == CSL.BEFORE){ + state.output.append(label,"label"); + } + state.output.openLevel("etal-join"); // join for etal + CSL.Util.Names.outputNames(state,display_names); + if (et_al){ + state.output.append(et_al,"etal"); + } + state.output.closeLevel(); // etal + if (label && state.tmp.name_label_position != CSL.BEFORE){ + state.output.append(label,"label"); + } + state.output.closeLevel(); // term + state.tmp.nameset_counter += 1; + }; + if (state.output.getToken("name").strings.form == "count"){ + state.output.clearlevel(); + state.output.append(local_count.toString()); + state.tmp["et-al-min"] = false; + state.tmp["et-al-use-first"] = false; + } + }; + this["execs"].push(handle_names); + }; + if (this.tokentype == CSL.END && state.build.form == "count" && false){ + state.build.form = false; + var output_name_count = function(state,Item){ + var name_count = 0; + for each (var v in this.variables){ + if(Item[v] && Item[v].length){ + name_count += Item[v].length; + } + } + state.output.append(name_count.toString()); + }; + this["execs"].push(output_name_count); + }; + if (this.tokentype == CSL.END){ + var unsets = function(state,Item){ + state.fun.names_reinit(state,Item); + state.output.endTag(); // names + }; + this["execs"].push(unsets); + state.build.names_flag = false; + state.build.name_flag = false; + } + target.push(this); + } +};CSL.Lib.Attributes = {}; +CSL.Lib.Attributes["@value"] = function(state,arg){ + this.strings.value = arg; +}; +CSL.Lib.Attributes["@name"] = function(state,arg){ + this.strings.name = arg; +}; +CSL.Lib.Attributes["@form"] = function(state,arg){ + this.strings.form = arg; +}; +CSL.Lib.Attributes["@macro"] = function(state,arg){ + state.build.postponed_macro = arg; +}; +CSL.Lib.Attributes["@term"] = function(state,arg){ + if (this.name == "et-al"){ + if (state.opt.term[arg]){ + this.strings.et_al_term = state.opt.term[arg]["long"][0]; + } else { + this.strings.et_al_term = arg; + } + } + state.build.term = arg; +}; +CSL.Lib.Attributes["@xmlns"] = function(state,arg){}; +CSL.Lib.Attributes["@lang"] = function(state,arg){ + if (arg){ + state.build.lang = arg; + } +}; +CSL.Lib.Attributes["@class"] = function(state,arg){ + state.opt["class"] = arg; +}; +CSL.Lib.Attributes["@type"] = function(state,arg){ + if (this.name == "name-part") { + // + // Note that there will be multiple name-part items, + // and they all need to be collected before doing anything. + // So this must be picked up when the + // element is processed, and used as a key on an + // object holding the formatting attribute functions. + state.tmp.namepart_type = arg; + } else { + var func = function(state,Item){ + if(Item.type == arg){ + return true; + } + return false; + }; + this["tests"].push(func); + } +}; +CSL.Lib.Attributes["@variable"] = function(state,arg){ + if (this.tokentype == CSL.SINGLETON){ + if (this.name == "text"){ + this.variables = arg.split(/\s+/); + }; + if (this.name == "key"){ + // + // this one is truly wild. the key element + // will be recast as a start and end tag, so this + // function will be copied across to the TEXT + // tag that the key tags will enclose. the text + // of the variable will render to an output queue + // that is dedicated to producing sort keys. + state.build.key_is_variable = true; + var func = function(state,Item){ + if ("citation-number" == arg){ + state.tmp.value.push("citation-number"); + } else { + state.tmp.value.push(Item[arg]); + } + }; + this["execs"].push(func); + }; + if (this.name == "label"){ + // + // labels treat the "locator" variable specially. + print("Note to self: do something for variable= on label elements."); + } + }; + if (this.tokentype == CSL.START){ + if (["if","else-if"].indexOf(this.name) > -1){ + var variables = arg.split(/\s+/); + for each (var variable in variables){ + var func = function(state,Item){ + if (Item[variable]){ + return true; + } + return false; + }; + this["tests"].push(func); + }; + }; + if (this.name == "date"){ + var func = function(state,Item){ + state.fun.mark_output(state,Item[arg]); + state.tmp.value.push(Item[arg]); + }; + this["execs"].push(func); + }; + }; + if (this.name == "names" && (this.tokentype == CSL.START || this.tokentype == CSL.SINGLETON)){ + if (arg){ + this.variables = arg.split(/\s+/); + }; + }; +}; +CSL.Lib.Attributes["@and"] = function(state,arg){ + if ("symbol" == arg){ + this.strings["and"] = " & "; + } else { + var and = state.opt.term["and"]["long"][0]; + if (and.match(/.*[a-zA-Z\u0400-\u052f].*/)){ + and = ", "+and+" "; + } + this.strings["and"] = and; + } +}; +CSL.Lib.Attributes["@initialize-with"] = function(state,arg){ + this.strings["initialize-with"] = arg; +}; +CSL.Lib.Attributes["@suffix"] = function(state,arg){ + this.strings.suffix = arg; +}; +CSL.Lib.Attributes["@prefix"] = function(state,arg){ + this.strings.prefix = arg; +}; +CSL.Lib.Attributes["@delimiter"] = function(state,arg){ + this.strings.delimiter = arg; +}; +CSL.Lib.Attributes["@match"] = function(state,arg){ + if (this.tokentype == CSL.START){ + if ("none" == arg){ + var evaluator = function(state,Item){ + var res = this.succeed; + state.tmp.jump.replace("succeed"); + for each (var func in this.tests){ + if (func.call(this,state,Item)){ + res = this.fail; + state.tmp.jump.replace("fail"); + break; + } + } + return res; + }; + } else if ("any" == arg){ + var evaluator = function(state,Item){ + var res = this.fail; + state.tmp.jump.replace("fail"); + for each (var func in this.tests){ + if (func.call(this,state,Item)){ + res = this.succeed; + state.tmp.jump.replace("succeed"); + break; + } + } + return res; + }; + } else if ("all" == arg){ + var evaluator = function(state,Item){ + var res = this.succeed; + state.tmp.jump.replace("succeed"); + for each (var func in this.tests){ + if (!func.call(this,state,Item)){ + res = this.fail; + state.tmp.jump.replace("fail"); + break; + } + } + return res; + }; + } else { + throw "Unknown match condition \""+arg+"\" in @match"; + } + this.evaluator = evaluator; + }; +}; +CSL.Lib.Attributes["@sort-separator"] = function(state,arg){ + this.strings["sort-separator"] = arg; +}; +CSL.Lib.Attributes["@delimiter-precedes-last"] = function(state,arg){ + this.strings["delimiter-precedes-last"] = arg; +}; +CSL.Lib.Attributes["@name-as-sort-order"] = function(state,arg){ + this.strings["name-as-sort-order"] = arg; +}; +CSL.Lib.Attributes["@is-numeric"] = function(state,arg){ + var variables = arg.split(/\s+/); + for each (var variable in variables){ + var func = function(state,Item){ + if (CSL.NUMERIC_VARIABLES.indexOf(variable) == -1){ + return false; + } + var val = Item[variable]; + if (typeof val == "undefined"){ + return false; + } + if (typeof val == "number"){ + val = val.toString(); + } + if (typeof val != "string"){ + return false; + } + if (val.match(CSL.QUOTED_REGEXP)){ + return false; + } + if (val.match(CSL.NUMBER_REGEXP)){ + return true; + } + return false; + }; + this["tests"].push(func); + }; +}; +CSL.Lib.Attributes["@names-min"] = function(state,arg){ + this.strings["et-al-min"] = parseInt(arg, 10); +}; +CSL.Lib.Attributes["@names-use-first"] = function(state,arg){ + this.strings["et-al-use-first"] = parseInt(arg,10); +}; +CSL.Lib.Attributes["@sort"] = function(state,arg){ + if (arg == "descending"){ + this.strings.sort_direction = CSL.DESCENDING; + } +} +CSL.Lib.Attributes["@plural"] = function(state,arg){ +}; +CSL.Lib.Attributes["@locator"] = function(state,arg){ +}; +CSL.Lib.Attributes["@include-period"] = function(state,arg){ +}; +CSL.Lib.Attributes["@position"] = function(state,arg){ +}; +CSL.Lib.Attributes["@disambiguate"] = function(state,arg){ + if (this.tokentype == CSL.START && ["if","else-if"].indexOf(this.name) > -1){ + if (arg == "true"){ + state.opt.has_disambiguate = true; + var func = function(state,Item){ + if (state.tmp.disambig_settings["disambiguate"]){ + return true; + } + return false; + }; + this["tests"].push(func); + }; + }; +}; +CSL.Output = {}; +CSL.Output.Queue = function(state){ + this.state = state; + this.queue = new Array(); + this.empty = new CSL.Factory.Token("empty"); + var tokenstore = {}; + tokenstore["empty"] = this.empty; + this.formats = new CSL.Factory.Stack( tokenstore ); + this.current = new CSL.Factory.Stack( this.queue ); + this.suppress_join_punctuation = false; +}; +CSL.Output.Queue.prototype.getToken = function(name){ + var ret = this.formats.value()[name]; + return ret; +}; +// Store a new output format token based on another +CSL.Output.Queue.prototype.addToken = function(name,modifier,token){ + var newtok = new CSL.Factory.Token("output"); + if ("string" == typeof token){ + token = this.formats.value()[token]; + } + if (token && token.strings){ + for (attr in token.strings){ + newtok.strings[attr] = token.strings[attr]; + } + newtok.decorations = token.decorations; + } + if ("string" == typeof modifier){ + newtok.strings.delimiter = modifier; + } + this.formats.value()[name] = newtok; +}; +// +// newFormat adds a new bundle of formatting tokens to +// the queue's internal stack of such bundles +CSL.Output.Queue.prototype.pushFormats = function(tokenstore){ + if (!tokenstore){ + tokenstore = new Object(); + } + tokenstore["empty"] = this.empty; + this.formats.push(tokenstore); +}; +CSL.Output.Queue.prototype.popFormats = function(tokenstore){ + this.formats.pop(); +}; +CSL.Output.Queue.prototype.startTag = function(name,token){ + var tokenstore = {}; + tokenstore[name] = token; + this.pushFormats( tokenstore ); + this.openLevel(name); +} +CSL.Output.Queue.prototype.endTag = function(){ + this.closeLevel(); + this.popFormats(); +} +// +// newlevel adds a new blob object to the end of the current +// list, and adjusts the current pointer so that subsequent +// appends are made to blob list of the new object. +CSL.Output.Queue.prototype.openLevel = function(token){ + if (!this.formats.value()[token]){ + throw "CSL processor error: call to nonexistent format token \""+token+"\""; + } + var blob = new CSL.Factory.Blob(this.formats.value()[token]); + var curr = this.current.value(); + curr.push( blob ); + this.current.push( blob.blobs ); +}; +CSL.Output.Queue.prototype.closeLevel = function(name){ + this.current.pop(); +} +// +// append does the same thing as newlevel, except +// that the blob it pushes has text content, +// and the current pointer is not moved after the push. +CSL.Output.Queue.prototype.append = function(str,tokname){ + var blob = false; + if (!tokname){ + var token = this.formats.value()["empty"]; + } else if (tokname == "literal"){ + var token = true; + blob = str; + } else if ("string" == typeof tokname){ + var token = this.formats.value()[tokname]; + } else { + var token = tokname; + } + if (!token){ + throw "CSL processor error: unknown format token name: "+tokname; + } + if (!blob){ + blob = new CSL.Factory.Blob(token,str); + } + var curr = this.current.value(); + curr.push( blob ); + this.state.tmp.term_predecessor = true; +} +CSL.Output.Queue.prototype.string = function(state,blobs,blob){ + var ret; + ret = { "str": [], "obj": [] }; + if (blobs.length == 1 && "string" == blobs[0].blobs){ + ret["str"] = blobs[0]; + } else { + for each (var blobjr in blobs){ + var strPlus = {"str":"","obj":[]}; + if ("string" == typeof blobjr.blobs){ + if ("number" == typeof blobjr.num){ + strPlus["obj"] = blobjr; + } else { + strPlus["str"] = blobjr.blobs; + } + } else { + strPlus = this.string(state,blobjr.blobs,blobjr); + }; + // + // If there is a suffix, or any decorations, trailing rangeable + // objects must be rendered immediately here. + // + if (strPlus["str"]){ + if (!state.tmp.suppress_decorations){ + for each (var params in blobjr.decorations){ + strPlus["str"] = state.fun.decorate[params[0]][params[1]](strPlus["str"]); + } + } + //print(str+" (with is_rangeable="+blobjr.strings.is_rangeable+")"); + strPlus["str"] = blobjr.strings.prefix + strPlus["str"] + blobjr.strings.suffix; + ret["str"].push(strPlus["str"]); + } + // + // this passes rangeable objects through + ret["obj"] = ret["obj"].concat(strPlus["obj"]); + }; + // + // The join only applies to non-rangeable objects. + // + if (blob) { + ret["str"] = ret["str"].join(blob.strings.delimiter); + } else { + // + // The list always seems to consist of a single string when this happens, + // which is fine by me. + // + //ret["str"] = ret["str"].join(""); + // XXX Obviously something needs to be done with rangeable + // XXX objects here! + // (will need to reverse the condition below after + // providing for force_render) + if (state.tmp.handle_ranges){ + ret["str"] = ret["str"].join(""); + //ret = ret["str"].join("") + this.renderBlobs(ret["obj"]); + } else { + ret = ret["str"].join(""); + } + //if (state.tmp.handle_ranges){ + // ret = ret["str"].join("") + this.renderBlobs(ret["obj"]); + // //ret = "OK"; + //} else { + // ret = ret["str"].join("") + this.renderBlobs(ret["obj"]); + //} + } + }; + this.queue = new Array(); + this.current.mystack = new Array(); + this.current.mystack.push( this.queue ); + return ret; +}; +CSL.Output.Queue.prototype.clearlevel = function(){ + var blobs = this.current.value(); + for (var i=(blobs.length-1); i > -1; i--){ + blobs.pop(); + } +}; +CSL.Output.Queue.prototype.dumbBlobs = function(state,blobs){ +}; +CSL.Output.Queue.prototype.renderBlobs = function(blobs){ + var state = this.state; + var ret = ""; + for (var i=0; i < blobs.length; i++){ + blobs[i].checkNext(blobs[(i+1)]); + } + for each (var blob in blobs){ + if (blob.status != CSL.SUPPRESS){ + // print("doing rangeable blob"); + var str = blob.blobs; + if (!state.tmp.suppress_decorations){ + for each (var params in blob.decorations){ + str = state.fun.decorate[params[0]][params[1]](str); + } + } + str = blob.strings.prefix + str + blob.strings.suffix; + if (blob.status == CSL.END){ + // + // XXXXX needs to be drawn from the object + ret += "-"; + } else if (blob.status == CSL.SUCCESSOR){ + // + // XXXXX needs to be drawn from the object + ret += ", "; + } else if (blob.status == CSL.START){ + // + // XXXXX needs to be drawn from the object + ret += ""; + } + ret += str; + } + } + return ret; +}; +CSL.Output.Formatters = new function(){}; +CSL.Output.Formatters.passthrough = function(string){ + return string; +}; +// +// XXXXX +// A bit of interest coming up with vertical-align. +// This needs to include the prefixes and suffixes +// in its scope, so it's applied last, AFTER they +// are appended to the string. I think it's the +// only one that will need to work that way. +CSL.Output.Formatters.lowercase = function(string) { + if ("object" == typeof string){ + var ret = new Array(); + for each (item in string){ + ret.push(item.LowerCase()); + } + return ret; + } + return string.LowerCase(); +}; +CSL.Output.Formatters.uppercase = function(string) { + if ("object" == typeof string){ + var ret = new Array(); + for each (item in string){ + ret.push(item.toUpperCase()); + } + return ret; + } + return string.toUpperCase(); +}; +CSL.Output.Formatters.capitalize_first = function(string) { + return string[0].toUpperCase()+string.substr(1); +}; +CSL.Output.Formatters.sentence_capitalization = function(string) { + return string[0].toUpperCase()+string.substr(1).toLowerCase(); +}; +CSL.Output.Formatters.capitalize_all = function(string) { + var strings = string.split(" "); + for(var i=0; i 1) { + strings[i] = strings[i][0].toUpperCase()+strings[i].substr(1).toLowerCase(); + } else if(strings[i].length == 1) { + strings[i] = strings[i].toUpperCase(); + } + } + return strings.join(" "); +}; +CSL.Output.Formatters.title_capitalization = function(string) { + if (!string) { + return ""; + } + var words = string.split(delimiterRegexp); + var isUpperCase = string.toUpperCase() == string; + var newString = ""; + var delimiterOffset = words[0].length; + var lastWordIndex = words.length-1; + var previousWordIndex = -1; + for(var i=0; i<=lastWordIndex; i++) { + // only do manipulation if not a delimiter character + if(words[i].length != 0 && (words[i].length != 1 || !delimiterRegexp.test(words[i]))) { + var upperCaseVariant = words[i].toUpperCase(); + var lowerCaseVariant = words[i].toLowerCase(); + // only use if word does not already possess some capitalization + if(isUpperCase || words[i] == lowerCaseVariant) { + if( + // a skip word + skipWords.indexOf(lowerCaseVariant.replace(/[^a-zA-Z]+/, "")) != -1 + // not first or last word + && i != 0 && i != lastWordIndex + // does not follow a colon + && (previousWordIndex == -1 || words[previousWordIndex][words[previousWordIndex].length-1] != ":") + ) { + words[i] = lowerCaseVariant; + } else { + // this is not a skip word or comes after a colon; + // we must capitalize + words[i] = upperCaseVariant[0] + lowerCaseVariant.substr(1); + } + } + previousWordIndex = i; + } + newString += words[i]; + } + return newString; +}; +CSL.Output.Formats = function(){}; +CSL.Output.Formats.prototype.html = { + "@font-family":"%%STRING%%", + "@font-style/italic":"%%STRING%%", + "@font-style/normal":false, + "@font-style/oblique":"%%STRING%%", + "@font-variant/small-caps":"%%STRING%%", + "@font-variant/normal":false, + "@font-weight/bold":"%%STRING%%", + "@font-weight/normal":false, + "@font-weight/light":false, + "@text-decoration/none":false, + "@text-decoration/underline":"%%STRING%%", + "@vertical-align/baseline":false, + "@vertical-align/sup":"%%STRING%%", + "@vertical-align/sub":"%%STRING%%", + "@text-case/lowercase":CSL.Output.Formatters.lowercase, + "@text-case/uppercase":CSL.Output.Formatters.uppercase, + "@text-case/capitalize-first":CSL.Output.Formatters.capitalize_first, + "@text-case/capitalize-all":CSL.Output.Formatters.capitalize_all, + "@text-case/title":CSL.Output.Formatters.title_capitalization, + "@text-case/sentence":CSL.Output.Formatters.sentence_capitalization, + "@quotes":"&lquo;%%STRING%%&rquo;" +}; +CSL.Output.Formats = new CSL.Output.Formats();CSL.Output.Number = function(num,mother_token){ + this.num = num; + this.blobs = num.toString(); + this.status = CSL.START; + this.strings = new Object(); + if (mother_token){ + this.decorations = mother_token.decorations; + this.strings.prefix = mother_token.strings.prefix; + this.strings.suffix = mother_token.strings.suffix; + this.successor_prefix = mother_token.successor_prefix; + this.range_prefix = mother_token.range_prefix; + this.formatter = mother_token.formatter; + if (this.formatter){ + this.type = this.formatter.format(1); + } + } else { + this.decorations = new Array(); + this.strings.prefix = ""; + this.strings.suffix = ""; + this.successor_prefix = ""; + this.range_prefix = ""; + this.formatter = new CSL.Output.DefaultFormatter(); + } +}; +CSL.Output.Number.prototype.setFormatter = function(formatter){ + this.formatter = formatter; + this.type = this.formatter.format(1); +}; +CSL.Output.DefaultFormatter = function (){}; +CSL.Output.DefaultFormatter.prototype.format = function (num){ + return num.toString(); +}; +CSL.Output.Number.prototype.checkNext = function(next){ + if ( ! next || ! next.num || this.type != next.type || next.num != (this.num+1)){ + if (this.status == CSL.SUCCESSOR_OF_SUCCESSOR){ + this.status = CSL.END; + } + } else { // next number is in the sequence + if (this.status == CSL.START){ + next.status = CSL.SUCCESSOR; + } else if (this.status == CSL.SUCCESSOR || this.status == CSL.SUCCESSOR_OF_SUCCESSOR){ + next.status = CSL.SUCCESSOR_OF_SUCCESSOR; + this.status = CSL.SUPPRESS; + } + }; +}; +CSL.System = {}; +CSL.System.Xml = {}; +CSL.System.Xml.E4X = function(){}; +CSL.System.Xml.E4X.prototype.clean = function(xml){ + xml = xml.replace(/<\?[^?]+\?>/g,""); + xml = xml.replace(/]+>/g,""); + xml = xml.replace(/^\s+/g,""); + xml = xml.replace(/\s+$/g,""); + return xml; +}; +CSL.System.Xml.E4X.prototype.parse = function(xml){ + default xml namespace = "http://purl.org/net/xbiblio/csl"; + return XML( this.clean(xml) ); +}; +CSL.System.Xml.E4X.prototype.commandInterface = new function(){ + this.children = children; + this.nodename = nodename; + this.attributes = attributes; + this.content = content; + this.numberofnodes = numberofnodes; + function children(){ + return this.children(); + }; + function nodename(){ + return this.localName(); + } + function attributes(){ + var ret = new Object(); + var attrs = this.attributes(); + for (var idx in attrs){ + var key = "@"+attrs[idx].localName(); + var value = attrs[idx].toString(); + ret[key] = value; + } + return ret; + } + function content(){ + return this.toString(); + } + function numberofnodes(){ + return this.length(); + } +}; +CSL.System.Xml.E4X = new CSL.System.Xml.E4X(); +CSL.System.Xml.JunkyardJavascript = function(){}; +CSL.System.Xml.JunkyardJavascript.prototype.clean = function(xml) { + xml = xml.replace(/\n/g,""); + xml = xml.replace(/\>\s+/g,">"); + xml = xml.replace(/\s+\]+>)/); + var newlist = new Array(); + var i; + var tag = false; + var tagname = false; + for (i=0; i 12) { + // swap day and month + var tmp = date.day; + date.day = date.month; + date.month = tmp; + } + } + if((!date.month || date.month <= 12) && (!date.day || date.day <= 31)) { + if(date.year && date.year < 100) { // for two digit years, determine proper + // four digit year + var today = new Date(); + var year = today.getFullYear(); + var twoDigitYear = year % 100; + var century = year - twoDigitYear; + if(date.year <= twoDigitYear) { + // assume this date is from our century + date.year = century + date.year; + } else { + // assume this date is from the previous century + date.year = century - 100 + date.year; + } + } + // subtract one for JS style + if(date.month){ + date.month--; + } + date.part = pre+post; + } else { + // + // give up; we failed the sanity check + date = {"part":string}; + } + } else { + date.part = string; + } + } else { + date.part = string; + } + if(!date.year) { + var m = _yearRe.exec(date.part); + if(m) { + date.year = num1; + date.part = pre+d1_2; + } + } + if(!date.month) { + // compile month regular expression + var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', + 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; + // If using a non-English bibliography locale, try those too + if (Zotero.CSL.Global.locale != 'en-US') { + months = months.concat(Zotero.CSL.Global.getMonthStrings("short")); + } + if(!_monthRe) { + _monthRe = new RegExp("^(.*)\\b("+months.join("|")+")[^ ]*(?: (.*)$|$)", "i"); + } + var m = _monthRe.exec(date.part); + if(m) { + // Modulo 12 in case we have multiple languages + date.month = months.indexOf(m[2][0].toUpperCase()+m[2].substr(1).toLowerCase()) % 12; + date.part = m[1]+m[3]; + } + } + if(!date.day) { + // compile day regular expression + if(!_dayRe) { + var daySuffixes = Zotero.getString("date.daySuffixes").replace(/, ?/g, "|"); + _dayRe = new RegExp("\\b([0-9]{1,2})(?:"+daySuffixes+")?\\b(.*)", "i"); + } + var m = _dayRe.exec(date.part); + if(m) { + var day = parseInt(m[1], 10); + // Sanity check + if (day <= 31) { + date.day = day; + if(m.index > 0) { + date.part = date.part.substr(0, m.index); + if(m[2]) { + date.part += " "+m[2];; + } + } else { + date.part = m[2]; + } + } + } + } + if(date.part) { + date.part = date.part.replace(/^[^A-Za-z0-9]+/, "").replace(/[^A-Za-z0-9]+$/, ""); + if(!date.part.length) { + date.part = undefined; + } + } + return date; +}; +CSL.System.Tests = function(){}; +CSL.System.Tests.getTest = function(myname){ + var test; + var filename = "std/machines/" + myname + ".json"; + var teststring = readFile(filename); + try { + eval( "test = "+teststring ); + } catch(e){ + throw e + teststring; + } + if (test.mode == "bibliography"){ + var render = "makeBibliography"; + } else { + var render = "makeCitationCluster"; + } + test.run = function(){ + var builder = new CSL.Core.Build(this.csl); + var raw = builder.build(); + var configurator = new CSL.Core.Configure(raw); + var style = configurator.configure(); + CSL.System.Tests.fixNames(this.input,myname); + for each (var item in this.input){ + style.fun.retriever.setInput(style,item); + style.registry.insert(style,item); + } + var ret = style[render](this.input); + return ret; + }; + return test; +}; +CSL.System.Tests.fixNames = function(itemlist,myname){ + for each (obj in itemlist){ + if (!obj.id){ + throw "No id for object in: "+myname; + } + for each (key in ["author","editor","translator"]){ + if (obj[key]){ + for each (var entry in obj[key]){ + var one_char = entry.name.length-1; + var two_chars = one_char-1; + entry.sticky = false; + if ("!!" == entry.name.substr(two_chars)){ + entry.literal = entry.name.substr(0,two_chars).replace(/\s+$/,""); + } else { + var parsed = entry.name; + if ("!" == entry.name.substr(one_char)){ + entry.sticky = true; + parsed = entry.name.substr(0,one_char).replace(/\s+$/,""); + } + parsed = parsed.split(/\s*,\s*/); + if (parsed.length > 0){ + var m = parsed[0].match(/^\s*([a-z]+)\s+(.*)/); + if (m){ + entry.prefix = m[1]; + entry["primary-key"] = m[2]; + } else { + entry["primary-key"] = parsed[0]; + } + } + if (parsed.length > 1){ + entry["secondary-key"] = parsed[1]; + } + if (parsed.length > 2){ + var m = parsed[2].match(/\!\s*(.*)/); + if (m){ + entry.suffix = m[1]; + entry.comma_suffix = true; + } else { + entry.suffix = parsed[2]; + } + } + } + } + } + } + } + return itemlist; +}; diff --git a/rpc-stuff/citeproc-js-rpc.py b/rpc-stuff/citeproc-js-rpc.py new file mode 100755 index 000000000..dc201bc95 --- /dev/null +++ b/rpc-stuff/citeproc-js-rpc.py @@ -0,0 +1,329 @@ +#! /usr/bin/env python +"""Simple JSON-RPC Server. + +This module can be used to create simple JSON-RPC servers +by creating a server and either installing functions, a +class instance, or by extending the SimpleJSONRPCServer +class. + +It can also be used to handle JSON-RPC requests in a CGI +environment using CGIJSONRPCRequestHandler. + +A list of possible usage patterns follows: + +1. Install functions: + +server = SimpleJSONRPCServer(("localhost", 8000)) +server.register_function(pow) +server.register_function(lambda x,y: x+y, 'add') +server.serve_forever() + +2. Install an instance: + +class MyFuncs: + def __init__(self): + # make all of the string functions available through + # string.func_name + import string + self.string = string + def _listMethods(self): + # implement this method so that system.listMethods + # knows to advertise the strings methods + return list_public_methods(self) + \ + ['string.' + method for method in list_public_methods(self.string)] + def pow(self, x, y): return pow(x, y) + def add(self, x, y) : return x + y + +server = SimpleJSONRPCServer(("localhost", 8000)) +server.register_introspection_functions() +server.register_instance(MyFuncs()) +server.serve_forever() + +3. Install an instance with custom dispatch method: + +class Math: + def _listMethods(self): + # this method must be present for system.listMethods + # to work + return ['add', 'pow'] + def _methodHelp(self, method): + # this method must be present for system.methodHelp + # to work + if method == 'add': + return "add(2,3) => 5" + elif method == 'pow': + return "pow(x, y[, z]) => number" + else: + # By convention, return empty + # string if no help is available + return "" + def _dispatch(self, method, params): + if method == 'pow': + return pow(*params) + elif method == 'add': + return params[0] + params[1] + else: + raise 'bad method' + +server = SimpleXMLRPCServer(("localhost", 8000)) +server.register_introspection_functions() +server.register_instance(Math()) +server.serve_forever() + +4. Subclass SimpleJSONRPCServer: + +class MathServer(SimpleJSONRPCServer): + def _dispatch(self, method, params): + try: + # We are forcing the 'export_' prefix on methods that are + # callable through JSON-RPC to prevent potential security + # problems + func = getattr(self, 'export_' + method) + except AttributeError: + raise Exception('method "%s" is not supported' % method) + else: + return func(*params) + + def export_add(self, x, y): + return x + y + +server = MathServer(("localhost", 8000)) +server.serve_forever() + +5. CGI script: + +server = CGIJSONRPCRequestHandler() +server.register_function(pow) +server.handle_request() +""" + +# This implementation was converted from SimpleXMLRPCServer by +# David McNab (david@rebirthing.co.nz) + +# Original SimpleXMLRPCServer module was written by Brian +# Quinlan (brian@sweetapp.com), Based on code written by Fredrik Lundh. + +import xmlrpclib +from xmlrpclib import Fault +import SocketServer +import BaseHTTPServer +import sys +import os + +import SimpleXMLRPCServer +try: + import json +except: + import simplejson as json + +import traceback + + +class SimpleJSONRPCDispatcher(SimpleXMLRPCServer.SimpleXMLRPCDispatcher): + """Mix-in class that dispatches JSON-RPC requests. + Based on SimpleXMLRPCDispatcher, but overrides + _marshaled_dispatch for JSON-RPC + + This class is used to register JSON-RPC method handlers + and then to dispatch them. There should never be any + reason to instantiate this class directly. + """ + def _marshaled_dispatch(self, data, dispatch_method = None): + """Dispatches a JSON-RPC method from marshalled (JSON) data. + + JSON-RPC methods are dispatched from the marshalled (JSON) data + using the _dispatch method and the result is returned as + marshalled data. For backwards compatibility, a dispatch + function can be provided as an argument (see comment in + SimpleJSONRPCRequestHandler.do_POST) but overriding the + existing method through subclassing is the prefered means + of changing method dispatch behavior. + """ + rawreq = json.loads(data) + + + #params, method = xmlrpclib.loads(data) + id = rawreq.get('id', 0) + method = rawreq['method'] + params = rawreq.get('params', []) + + responseDict = {'id':id} + + # generate response + try: + if dispatch_method is not None: + response = dispatch_method(method, params) + else: + response = self._dispatch(method, params) + ## wrap response in a singleton tuple + #response = (response,) + #response = xmlrpclib.dumps(response, methodresponse=1) + responseDict['result'] = response + except Fault, fault: + #response = xmlrpclib.dumps(fault) + responseDict['error'] = repr(response) + except: + # report exception back to server + #response = xmlrpclib.dumps( + # xmlrpclib.Fault(1, "%s:%s" % (sys.exc_type, sys.exc_value)) + # ) + responseDict['error'] = "%s:%s" % (sys.exc_type, sys.exc_value) + + return json.dumps(responseDict) + + +#class SimpleXMLRPCRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): +class SimpleJSONRPCRequestHandler(SimpleXMLRPCServer.SimpleXMLRPCRequestHandler): + """Simple JSON-RPC request handler class. + + Handles all HTTP POST requests and attempts to decode them as + XML-RPC requests. + """ + def do_POST(self): + """Handles the HTTP POST request. + + Attempts to interpret all HTTP POST requests as JSON-RPC calls, + which are forwarded to the server's _dispatch method for handling. + """ + try: + # get arguments + data = self.rfile.read(int(self.headers["content-length"])) + # In previous versions of SimpleXMLRPCServer, _dispatch + # could be overridden in this class, instead of in + # SimpleXMLRPCDispatcher. To maintain backwards compatibility, + # check to see if a subclass implements _dispatch and dispatch + # using that method if present. + response = self.server._marshaled_dispatch( + data, getattr(self, '_dispatch', None) + ) + except: # This should only happen if the module is buggy + # internal error, report as HTTP server error + self.send_response(500) + self.end_headers() + else: + # got a valid XML RPC response + self.send_response(200) + self.send_header("Content-type", "text/json") + self.send_header("Content-length", str(len(response))) + self.end_headers() + self.wfile.write(response) + + # shut down the connection + self.wfile.flush() + self.connection.shutdown(1) + +class SimpleJSONRPCServer(SocketServer.TCPServer, + SimpleJSONRPCDispatcher): + """Simple JSON-RPC server. + + Simple JSON-RPC server that allows functions and a single instance + to be installed to handle requests. The default implementation + attempts to dispatch JSON-RPC calls to the functions or instance + installed in the server. Override the _dispatch method inhereted + from SimpleJSONRPCDispatcher to change this behavior. + """ + def __init__(self, addr, requestHandler=SimpleJSONRPCRequestHandler, + logRequests=1): + self.logRequests = logRequests + + SimpleJSONRPCDispatcher.__init__(self,addr[0],addr[1]) + SocketServer.TCPServer.__init__(self, addr, requestHandler) + +class CGIJSONRPCRequestHandler(SimpleJSONRPCDispatcher): + """Simple handler for JSON-RPC data passed through CGI.""" + def __init__(self): + SimpleJSONRPCDispatcher.__init__(self) + + def handle_get(self): + """Handle a single HTTP GET request. + + Default implementation indicates an error because + XML-RPC uses the POST method. + """ + + code = 400 + message, explain = \ + BaseHTTPServer.BaseHTTPRequestHandler.responses[code] + + response = BaseHTTPServer.DEFAULT_ERROR_MESSAGE % \ + { + 'code' : code, + 'message' : message, + 'explain' : explain + } + print 'Status: %d %s' % (code, message) + print 'Content-Type: text/html' + print 'Content-Length: %d' % len(response) + print + sys.stdout.write(response) + + def handle_request(self, request_text = None): + """Handle a single JSON-RPC request passed through a CGI post method. + + If no JSON data is given then it is read from stdin. The resulting + JSON-RPC response is printed to stdout along with the correct HTTP + headers. + """ + if request_text is None and \ + os.environ.get('REQUEST_METHOD', None) == 'GET': + self.handle_get() + else: + # POST data is normally available through stdin + if request_text is None: + request_text = sys.stdin.read() + + self.handle_jsonrpc(request_text) + + def handle_jsonrpc(self, request_text): + """Handle a single JSON-RPC request""" + + response = self._marshaled_dispatch(request_text) + + print 'Content-Type: text/json' + print 'Content-Length: %d' % len(response) + print + sys.stdout.write(response) + +if __name__ == '__main__': + + server = SimpleJSONRPCServer(("localhost", 8027)) + server.register_function(pow) + + from spidermonkey import Runtime + rt = Runtime() + cx = rt.new_context() + + cslcode = open("citeproc-js-combined.js").read() + cx.eval_script(cslcode) + + ## Hack in English locale. Should inspect the + ## CSL for other locales needed. + locale_en = open("../locale/locales-en-US.xml").read() + locale_en = json.dumps(locale_en) + + def makeStyle(csl): + csl = json.dumps(csl) + #print 'style = CSL.makeStyle(%s,%s)' %(csl,locale_en) + cx.eval_script('var style = CSL.makeStyle(%s,%s)' %(csl,locale_en)) + return "Style init OK" + + def insertItems(input): + theinput = json.dumps(input) + cx.eval_script("style.insertItems(%s)" %(theinput,)) + return "Insert items OK" + + def makeCitationCluster(input): + theinput = json.dumps(input) + result = cx.eval_script("style.makeCitationCluster(%s)" %(theinput,)) + return result + + def makeBibliography(): + result = cx.eval_script("style.makeBibliography()") + return result + # + # Register citeproc-js control functions here. + server.register_function(lambda csl: makeStyle(csl), 'setStyle') + server.register_function(lambda input: insertItems(input), 'insertItems') + server.register_function(lambda input: makeCitationCluster(input), 'makeCitationCluster') + server.register_function(lambda: makeBibliography(), 'makeBibliography') + server.serve_forever() diff --git a/rpc-stuff/citeproc-js.py b/rpc-stuff/citeproc-js.py new file mode 100755 index 000000000..b2a386588 --- /dev/null +++ b/rpc-stuff/citeproc-js.py @@ -0,0 +1,17 @@ +#!/usr/bin/python + +from spidermonkey import Runtime +rt = Runtime() +cx = rt.new_context() + +cslcode = open("stripped.js").read() + +cx.eval_script(cslcode) + +test = ''' +var builder = new CSL.Core.Build(''); +var obj = builder.build(); +obj.citation.tokens.length +''' + +cx.eval_script(test) diff --git a/rpc-stuff/gen_set_style_json.py b/rpc-stuff/gen_set_style_json.py new file mode 100755 index 000000000..1ee924615 --- /dev/null +++ b/rpc-stuff/gen_set_style_json.py @@ -0,0 +1,16 @@ +#! /usr/bin/env python + +try: + import json +except: + import simplejson as json + + +style = open("./set_style.csl").read() + +method = "setStyle" +params = [style] + +command = { "method": method, "params": params } + +open("./set_style.json","w+").write( json.dumps(command) ) diff --git a/rpc-stuff/insert_items.json b/rpc-stuff/insert_items.json new file mode 100644 index 000000000..d5ea32a01 --- /dev/null +++ b/rpc-stuff/insert_items.json @@ -0,0 +1,23 @@ +{ + "method": "insertItems", + "params": [[ + { + "id": "ITEM-1", + "type": "book", + "author": [ + { "name":"Doe, John", "primary-key":"Doe", "secondary-key":"John" } + ], + "title": "Book A", + "issued": { "year": "2006" } + }, + { + "id": "ITEM-2", + "type": "book", + "author": [ + { "name":" Roe, Jane", "primary-key":"Roe", "secondary-key":"Jane" } + ], + "title": "Book B", + "issued": { "year": "2007" } + } + ]] +} diff --git a/rpc-stuff/make_bibliography.json b/rpc-stuff/make_bibliography.json new file mode 100644 index 000000000..35e868259 --- /dev/null +++ b/rpc-stuff/make_bibliography.json @@ -0,0 +1,4 @@ +{ + "method": "makeBibliography", + "params": [] +} diff --git a/rpc-stuff/make_citation_cluster.json b/rpc-stuff/make_citation_cluster.json new file mode 100644 index 000000000..344d40ee0 --- /dev/null +++ b/rpc-stuff/make_citation_cluster.json @@ -0,0 +1,25 @@ +{ + "method": "makeCitationCluster", + "params": [[ + { + "id": "ITEM-3", + "type": "book", + "author": [ + { "name":"Anderson, Margaret", "primary-key":"Anderson", "secondary-key":"Margaret" } + ], + "title": "Book D", + "issued": { "year": "1950" } + }, + { + "id": "ITEM-4", + "type": "book", + "author": [ + { "name":"Zinfandel, William", "primary-key":"Zinfandel", "secondary-key":"William" } + ], + "title": "Book C", + "issued": { "year": "1945" } + } + ]] +} + + diff --git a/rpc-stuff/set_style.csl b/rpc-stuff/set_style.csl new file mode 100644 index 000000000..d1b649aba --- /dev/null +++ b/rpc-stuff/set_style.csl @@ -0,0 +1,61 @@ + diff --git a/rpc-stuff/set_style.json b/rpc-stuff/set_style.json new file mode 100644 index 000000000..cf3367b4f --- /dev/null +++ b/rpc-stuff/set_style.json @@ -0,0 +1 @@ +{"params": ["\n"], "method": "setStyle"} \ No newline at end of file diff --git a/rpc-stuff/wgetdemo.sh b/rpc-stuff/wgetdemo.sh new file mode 100755 index 000000000..551871b46 --- /dev/null +++ b/rpc-stuff/wgetdemo.sh @@ -0,0 +1,76 @@ +#!/bin/bash + +rm -f *.result + +## +## Configure processor +## +wget -q --post-file set_style.json -O set_style.result http://localhost:8027/ + + +echo ------------------------- +echo result of set_style.json +echo ------------------------- + +echo -n '---> ' +cat set_style.result +echo +echo + +## +## Insert items to bibliography without rendering citations +## +wget -q --post-file insert_items.json -O insert_items.result http://localhost:8027/ + + +echo --------------------------- +echo result of insert_items.json +echo --------------------------- + +echo -n '---> ' +cat insert_items.result +echo +echo + +## +## Render bibliography +## +wget -q --post-file make_bibliography.json -O make_bibliography.result http://localhost:8027/ + +echo -------------------------------- +echo result of make_bibliography.json +echo -------------------------------- + +echo -n '---> ' +cat make_bibliography.result +echo +echo + +## +## Render citations +## +wget -q --post-file make_citation_cluster.json -O make_citation_cluster.result http://localhost:8027/ + +echo ------------------------------------ +echo result of make_citation_cluster.json +echo ------------------------------------ + +echo -n '---> ' +cat make_citation_cluster.result +echo +echo + +## +## Render bibliography +## +wget -q --post-file make_bibliography.json -O make_bibliography.result http://localhost:8027/ + +echo -------------------------------- +echo result of make_bibliography.json +echo -------------------------------- + +echo -n '---> ' +cat make_bibliography.result +echo +echo + diff --git a/runtests.bat b/runtests.bat new file mode 100644 index 000000000..da4760ce6 --- /dev/null +++ b/runtests.bat @@ -0,0 +1,19 @@ +@echo off +setlocal + +echo Started test-run +set starttime=%time% + +cd %~dp0 + +set RHINO=%~dp0\rhino\js-1.7R1.jar +set DOJO=%~dp0\dojo\dojo\dojo.js +set DOH=%~dp0\dojo\util\doh\ + +set TARGET=%~dp0\tests\run.js + +java -client -jar %RHINO% %TARGET% dojoUrl=%DOJO% testModule="" + +echo Finished test-run +echo Start Time = %starttime% +echo End Time = %time% diff --git a/runtests.sh b/runtests.sh new file mode 100755 index 000000000..5c72e4a61 --- /dev/null +++ b/runtests.sh @@ -0,0 +1,28 @@ +#!/bin/sh +START="$(date) <--------------START" +cd $(dirname $0) +RHINO="${PWD}"/rhino/js-1.7R1.jar +DOJO="${PWD}"/dojo/dojo/dojo.js +DOH="${PWD}"/dojo/util/doh/ + +TARGET="${PWD}"/tests/run.js + +java -client -jar "${RHINO}" -opt 1 "${TARGET}" dojoUrl="${DOJO}" testModule="" + +# +# Ah, Spidermonkey has no I/O capabilities. How very interesting. +# +#if [ $(which smjs | grep -c "/" ) -gt 0 ]; then +# echo "Using spidermonkey" +# rm dojo +# ln -sf dojo-spidermonkey dojo +# smjs "${TARGET}" dojoUrl="${DOJO}" testModule="" +#else +# echo "Using java/rhino" +# rm dojo +# ln -sf dojo-rhino dojo +# java -client -jar "${RHINO}" "${TARGET}" dojoUrl="${DOJO}" testModule="" +#fi + +echo $START +echo $(date) \<--------------END diff --git a/src/ambigconfig.js b/src/ambigconfig.js new file mode 100644 index 000000000..281b130b3 --- /dev/null +++ b/src/ambigconfig.js @@ -0,0 +1,17 @@ +dojo.provide("csl.ambigconfig"); +if (!CSL) { + load("./src/csl.js"); +} + +/** + * Ambiguous Cite Configuration Object + * @class + */ +CSL.Factory.AmbigConfig = function(){ + this.maxvals = new Array(); + this.minval = 1; + this.names = new Array(); + this.givens = new Array(); + this.year_suffix = 0; + this.disambiguate = 0; +}; diff --git a/src/attributes.js b/src/attributes.js new file mode 100644 index 000000000..698b5e4aa --- /dev/null +++ b/src/attributes.js @@ -0,0 +1,430 @@ +dojo.provide("csl.attributes"); +if (!CSL) { + load("./src/csl.js"); +} + +/** + * Functions corresponding to CSL attribute + * names (no idea why JsDoc insists on printing + * the function names twice). + *

Used by Build. + * Non-formatting attributes are distilled into + * functions ready to execute without arguments + * when {@link CSL.Core.Build} is run.

+ *

JsDoc is definitely not happy with my coding + * style here; none of the attribute functions come + * through in the online documentation. You'll have + * to refer directly to the source code for information + * on these.

+ * @class + */ +CSL.Lib.Attributes = {}; + + +/** + * Store the value attribute on the token. + * @name CSL.Lib.Attributes.@value + * @function + */ +CSL.Lib.Attributes["@value"] = function(state,arg){ + this.strings.value = arg; +}; + + +/** + * Store the name attribute (of a macro or term node) + * on the state object. + *

For reference when the closing node of a macro + * or locale definition is encountered.

+ * @name CSL.Lib.Attributes.@name + * @function + */ +CSL.Lib.Attributes["@name"] = function(state,arg){ + this.strings.name = arg; +}; + + +/** + * Store the form attribute (of a term node) on the state object. + *

For reference when the closing node of a macro + * or locale definition is encountered.

+ * @name CSL.Lib.Attributes.@form + * @function + */ +CSL.Lib.Attributes["@form"] = function(state,arg){ + // + // This looks meaningless + // + //if (!arg){ + // arg = "long"; + //} + this.strings.form = arg; +}; + +/** + * Store macro tokens in a buffer on the state object. + *

For reference when the enclosing text token is + * processed.

+ * @name CSL.Lib.Attributes.@macro + * @function + */ +CSL.Lib.Attributes["@macro"] = function(state,arg){ + state.build.postponed_macro = arg; +}; + + +/* + * Store the term tokens on the singleton buffer. + *

This works the same as a macro

+ * XXXXX Terms have to be + * carried in a hash object anyway, to account for + * singular and plural forms. This should be a function + * that ends up in execs, the same as value and + * variable. the string content should come from + * state.opt.term[key][key][0 or 1]. + * @name CSL.Lib.Attributes.@suffix + * @function + */ +CSL.Lib.Attributes["@term"] = function(state,arg){ + if (this.name == "et-al"){ + if (state.opt.term[arg]){ + this.strings.et_al_term = state.opt.term[arg]["long"][0]; + } else { + this.strings.et_al_term = arg; + } + } + state.build.term = arg; +}; + + +/* + * Ignore xmlns attribute. + *

This should always be

http://purl.org/net/xbiblio/csl + * anyway. At least for the present we will blindly assume + * that it is.

+ * @name CSL.Lib.Attributes.@xmlns + * @function + */ +CSL.Lib.Attributes["@xmlns"] = function(state,arg){}; + + +/* + * Store language attribute to a buffer field. + *

Will be placed in the appropriate location + * when the element is processed.

+ * @name CSL.Lib.Attributes.@lang + * @function + */ +CSL.Lib.Attributes["@lang"] = function(state,arg){ + if (arg){ + state.build.lang = arg; + } +}; + +/* + * Store class attribute in state config object. + * @name CSL.Lib.Attributes.@class + * @function + */ +CSL.Lib.Attributes["@class"] = function(state,arg){ + state.opt["class"] = arg; +}; + + + +/* + * Store item type evaluation function on token. + * @name CSL.Lib.Attributes.@type + * @function + */ +CSL.Lib.Attributes["@type"] = function(state,arg){ + if (this.name == "name-part") { + // + // Note that there will be multiple name-part items, + // and they all need to be collected before doing anything. + // So this must be picked up when the + // element is processed, and used as a key on an + // object holding the formatting attribute functions. + state.tmp.namepart_type = arg; + } else { + var func = function(state,Item){ + if(Item.type == arg){ + return true; + } + return false; + }; + this["tests"].push(func); + } + +}; + + +/* + * Store variable retrieval function on token. + *

Returned function will return the variable value + * or values as an array.

+ * @name CSL.Lib.Attributes.@variable + * @function + */ +CSL.Lib.Attributes["@variable"] = function(state,arg){ + + if (this.tokentype == CSL.SINGLETON){ + if (this.name == "text"){ + this.variables = arg.split(/\s+/); + }; + if (this.name == "key"){ + // + // this one is truly wild. the key element + // will be recast as a start and end tag, so this + // function will be copied across to the TEXT + // tag that the key tags will enclose. the text + // of the variable will render to an output queue + // that is dedicated to producing sort keys. + state.build.key_is_variable = true; + var func = function(state,Item){ + if ("citation-number" == arg){ + state.tmp.value.push("citation-number"); + } else { + state.tmp.value.push(Item[arg]); + } + }; + this["execs"].push(func); + }; + if (this.name == "label"){ + // + // labels treat the "locator" variable specially. + print("Note to self: do something for variable= on label elements."); + } + }; + if (this.tokentype == CSL.START){ + if (["if","else-if"].indexOf(this.name) > -1){ + var variables = arg.split(/\s+/); + for each (var variable in variables){ + var func = function(state,Item){ + if (Item[variable]){ + return true; + } + return false; + }; + this["tests"].push(func); + }; + }; + if (this.name == "date"){ + var func = function(state,Item){ + state.fun.mark_output(state,Item[arg]); + state.tmp.value.push(Item[arg]); + }; + this["execs"].push(func); + }; + }; + if (this.name == "names" && (this.tokentype == CSL.START || this.tokentype == CSL.SINGLETON)){ + if (arg){ + this.variables = arg.split(/\s+/); + }; + }; +}; + + +/** + * Store "and" flag on the token + * @name CSL.Lib.Attributes.@and + * @function + */ +CSL.Lib.Attributes["@and"] = function(state,arg){ + if ("symbol" == arg){ + this.strings["and"] = " & "; + } else { + var and = state.opt.term["and"]["long"][0]; + if (and.match(/.*[a-zA-Z\u0400-\u052f].*/)){ + and = ", "+and+" "; + } + this.strings["and"] = and; + } +}; + +/** + * Store "initialize-with" string in build object + * @name CSL.Lib.Attributes.@initialize_with + * @function + */ +CSL.Lib.Attributes["@initialize-with"] = function(state,arg){ + this.strings["initialize-with"] = arg; +}; + + +/* + * Store suffix string on token. + * @name CSL.Lib.Attributes.@suffix + * @function + */ +CSL.Lib.Attributes["@suffix"] = function(state,arg){ + this.strings.suffix = arg; +}; + + +/* + * Store prefix string on token. + * @name CSL.Lib.Attributes.@prefix + * @function + */ +CSL.Lib.Attributes["@prefix"] = function(state,arg){ + this.strings.prefix = arg; +}; + + +/* + * Store delimiter string on token. + * @name CSL.Lib.Attributes.@delimiter + * @function + */ +CSL.Lib.Attributes["@delimiter"] = function(state,arg){ + this.strings.delimiter = arg; +}; + + +/* + * Store match evaluator on token. + */ +CSL.Lib.Attributes["@match"] = function(state,arg){ + if (this.tokentype == CSL.START){ + if ("none" == arg){ + var evaluator = function(state,Item){ + var res = this.succeed; + state.tmp.jump.replace("succeed"); + for each (var func in this.tests){ + if (func.call(this,state,Item)){ + res = this.fail; + state.tmp.jump.replace("fail"); + break; + } + } + return res; + }; + } else if ("any" == arg){ + var evaluator = function(state,Item){ + var res = this.fail; + state.tmp.jump.replace("fail"); + for each (var func in this.tests){ + if (func.call(this,state,Item)){ + res = this.succeed; + state.tmp.jump.replace("succeed"); + break; + } + } + return res; + }; + } else if ("all" == arg){ + var evaluator = function(state,Item){ + var res = this.succeed; + state.tmp.jump.replace("succeed"); + for each (var func in this.tests){ + if (!func.call(this,state,Item)){ + res = this.fail; + state.tmp.jump.replace("fail"); + break; + } + } + return res; + }; + } else { + throw "Unknown match condition \""+arg+"\" in @match"; + } + this.evaluator = evaluator; + }; +}; + +CSL.Lib.Attributes["@sort-separator"] = function(state,arg){ + this.strings["sort-separator"] = arg; +}; + + +CSL.Lib.Attributes["@delimiter-precedes-last"] = function(state,arg){ + this.strings["delimiter-precedes-last"] = arg; +}; + + +CSL.Lib.Attributes["@name-as-sort-order"] = function(state,arg){ + this.strings["name-as-sort-order"] = arg; +}; + + +CSL.Lib.Attributes["@is-numeric"] = function(state,arg){ + var variables = arg.split(/\s+/); + for each (var variable in variables){ + var func = function(state,Item){ + if (CSL.NUMERIC_VARIABLES.indexOf(variable) == -1){ + return false; + } + var val = Item[variable]; + if (typeof val == "undefined"){ + return false; + } + if (typeof val == "number"){ + val = val.toString(); + } + if (typeof val != "string"){ + return false; + } + if (val.match(CSL.QUOTED_REGEXP)){ + return false; + } + if (val.match(CSL.NUMBER_REGEXP)){ + return true; + } + return false; + }; + this["tests"].push(func); + }; + +}; + + +CSL.Lib.Attributes["@names-min"] = function(state,arg){ + this.strings["et-al-min"] = parseInt(arg, 10); +}; + +CSL.Lib.Attributes["@names-use-first"] = function(state,arg){ + this.strings["et-al-use-first"] = parseInt(arg,10); +}; + +CSL.Lib.Attributes["@sort"] = function(state,arg){ + if (arg == "descending"){ + this.strings.sort_direction = CSL.DESCENDING; + } +} + + +CSL.Lib.Attributes["@plural"] = function(state,arg){ + +}; + + +CSL.Lib.Attributes["@locator"] = function(state,arg){ + +}; + + +CSL.Lib.Attributes["@include-period"] = function(state,arg){ + +}; + + +CSL.Lib.Attributes["@position"] = function(state,arg){ + +}; + + +CSL.Lib.Attributes["@disambiguate"] = function(state,arg){ + if (this.tokentype == CSL.START && ["if","else-if"].indexOf(this.name) > -1){ + if (arg == "true"){ + state.opt.has_disambiguate = true; + var func = function(state,Item){ + if (state.tmp.disambig_settings["disambiguate"]){ + return true; + } + return false; + }; + this["tests"].push(func); + }; + }; +}; diff --git a/src/blob.js b/src/blob.js new file mode 100644 index 000000000..b2988ae66 --- /dev/null +++ b/src/blob.js @@ -0,0 +1,16 @@ +dojo.provide("csl.blob"); + +CSL.Factory.Blob = function(token,str){ + if (token){ + this.strings = token.strings; + this.decorations = token.decorations; + } else { + this.strings = new Object(); + }; + if ("string" == typeof str){ + this.blobs = str; + } else { + this.blobs = new Array(); + }; +}; + diff --git a/src/build.js b/src/build.js new file mode 100644 index 000000000..48244cfd4 --- /dev/null +++ b/src/build.js @@ -0,0 +1,258 @@ +dojo.provide("csl.build"); + + +/** + * First-stage compiler. + *

After instantiation, this object provides a method + * for creating the tokenized representation of the style + * used in onward processing. Note that an alternative + * to the default E4X parser for XML may be specified + * when the object is instantiated. The comment to + * {@link CSL} provides an overview of the processing flow.

+ * @param {String} stylexml A serialized CSL style definition in + * XML format. + * @param {String} xmlLingo XML processor to use for parsing. + * Parsers are defined in the {@link CSL.System.Xml} namespace. + * @example + * builder = Build(myxml) + * @example + * builder = Build(myxml,"JQuery") + * @example + * builder = CSL.Core.Build(myxml); + * raw_engine = builder.build(); + * + * @class Raw style generator. + */ +CSL.Core.Build = function(stylexml,xmlLingo) { + this._builder = _builder; + this.showXml = showXml; // for testing + this._getNavi = _getNavi; // exposed for testing + if (!xmlLingo){ + //xmlLingo = "JunkyardJavascript"; + xmlLingo = "E4X"; + } + var xmlParser = CSL.System.Xml[xmlLingo]; + var xml = xmlParser.parse(stylexml); + + var xmlCommandInterface = CSL.System.Xml[xmlLingo].commandInterface; + var state = new CSL.Factory.State(xmlCommandInterface,xml); + this.state = state; + + + /* + * First-stage build function. + * + * This function performs a + * depth-first walk of an XML tree, using wrapper functions + * drawn from {@link CSL.System.Xml}. This _builder function controls + * the recursion loop. Navigation and action-points during the + * walk are peformed by an instance of {@link CSL.Core.Build._getNavi} + * (see below). + * + * @param {Object} state An instance of the {@link CSL.Factory.State} + * object, configured with a parsed XML object and a + * corresponding set of wrapper functions for manipulating + * it. + */ + function _builder(state){ + this._build = _build; // exposed for testing + this.navi = navi; // exposed for testing + this.getObject = getObject; + var nodelist = state.build.nodeList; + var navi = new _getNavi(state); + function _build(){ // used to accept nodelist as arg + if (navi.getkids()){ + _build(navi.getXml()); + } else { + if (navi.getbro()){ + _build(navi.getXml()); + } else { + while (state.build.nodeList.length > 1) { + if (navi.remember()){ + _build(navi.getXml()); + } + } + } + } + return state; + } + function getObject(){ + // These startup loops are too complex + var state = this._build(); // used to have nodelist as arg + return state; + } + }; + + /* + * Navigation and action for XML tree walk. + * + * This function performs the three navigation + * actions needed for a depth-first tree walk (find + * children, find sibling, retrace to parent), and + * builds a token list by applying {@link CSL.Factory.XmlToToken} + * to the appropriate nodes. + * + * @param {Object} state The freshly minted state object + * from {@link CSL.Factory.State} that will represent the style. + */ + function _getNavi(state){ + this.getkids = getkids; + this.getbro = getbro; + this.remember = remember; + this.getXml = getXml; + var depth = 0; + this.depth = depth; + + function remember(){ + depth += -1; + state.build.nodeList.pop(); + // closing node, process result of children + var node = state.build.nodeList[depth][1][(state.build.nodeList[depth][0])]; + CSL.Factory.XmlToToken.call(node,state,CSL.END); + return getbro(); + } + function getbro(){ + var sneakpeek = state.build.nodeList[depth][1][(state.build.nodeList[depth][0]+1)]; + if (sneakpeek){ + state.build.nodeList[depth][0] += 1; + return true; + } else { + return false; + } + } + + function getkids (){ + var currnode = state.build.nodeList[depth][1][state.build.nodeList[depth][0]]; + var sneakpeek = state.build.xmlCommandInterface.children.call(currnode); + if (state.build.xmlCommandInterface.numberofnodes.call(sneakpeek) == 0){ + // singleton, process immediately + CSL.Factory.XmlToToken.call(currnode,state,CSL.SINGLETON); + return false; + } else { + // if first node of a span, process it, then descend + CSL.Factory.XmlToToken.call(currnode,state,CSL.START); + depth += 1; + state.build.nodeList.push([0,sneakpeek]); + + return true; + } + } + + function getXml(){ + return state.build.nodeList[depth][1]; + } + } + + /* + * Expose tokens for testing. + */ + function showXml(){ + return xml; + } + +}; + + +/** + * Tokenize the CSL style. + *

This method casts a CSL style file as a state + * object with the properties listed below (see the + * code of {@link CSL.Factory.State} for more + * particulars on the sub-fields inside this object). The state + * object is passed to {@link CSL.Core.Configure} for the final + * preparation of the style engine.

+ *
+ *
build
+ *
Holds scratch variables and + * stacks used during the first stage of compilation, + * including the XML command interface wrapper. + * This area is deleted after the Build phase is complete. + *
+ *
configure
+ *
Holds stacks used when setting + * jump points on tokens during the second stage of + * compilation. This area is deleted after the Configure + * phase is complete. + *
+ *
registry
+ *
Persistent item registry providing bibliography + * sort order and disambiguated title hints for use by + * rendering functions.
+ *
opt
+ *
Holds global configuration options, + * the hash of localized terms, and output rendering + * functions. It also contains scratch variables used + * to pass state information from an opening tag and its children + * to the relevant closing tag. + *
+ *
citation
+ *
Holds the token list and output + * queue for the <citation> object defined in the CSL + * style file. + *
+ *
tokens
+ *
The token list representing the citation definition + * of the style.
+ *
opt
+ *
Holds the output queue + * (formatted) for this formatting area, + * and configuration options specific to <citation>.
+ *
+ *
+ *
bibliography
+ *
Holds the token list and output + * queue for the <bibliography> object defined in CSL. + *
+ *
tokens
+ *
The token list representing the bibliography definition + * of the style.
+ *
opt
+ *
Holds the output queue + * (formatted) and configuration options specific + * to <bibliography>.
+ *
+ *
+ *
citation-sortkey
+ *
Holds the token list and output + * queue for the <sort> object (if any) defined in + * the CSL <citation> object. This is + * called by, and the keys are registered in, the persistent + * item registry. + *
+ *
tokens
+ *
The token list representing the sort key definition.
+ *
opt
+ *
Holds the output queue + * (formatted) and configuration options specific + * to sort key generation. This should suppress all output + * decorations, supplying only a plain text string for use + * as the item sort key.
+ *
+ *
+ *
bibliography-sortkey
+ *
Holds the token list and output + * queue for the <sort> object (if any) defined in + * the CSL <bibliography> object. This is + * called by, and the keys are registered in, the persistent + * item registry. + *
+ *
tokens
+ *
The token list representing the sort key definition.
+ *
opt
+ *
Holds the output queue + * (formatted) and configuration options specific + * to sort key generation. This should suppress all output + * decorations, supplying only a plain text string for use + * as the item sort key.
+ *
+ *
+ *
+ * @function + */ +CSL.Core.Build.prototype.build = function(locale){ + this.state.opt.locale = locale; + var engine = new this._builder(this.state); + var ret = engine.getObject(); + ret.registry = new CSL.Factory.Registry(ret); + return ret; +}; diff --git a/src/commands.js b/src/commands.js new file mode 100644 index 000000000..e72f78337 --- /dev/null +++ b/src/commands.js @@ -0,0 +1,96 @@ +dojo.provide("csl.commands"); + +/** + * This module provides the commands used to instantiate + * and control the processor. For integration purposes, + * this should provide everything you need, once System + * and Retrieval have been adapted to your environment. + */ +CSL.makeStyle = function(xml,locale){ + var builder = new CSL.Core.Build(xml); + var raw = builder.build(locale); + var conf = new CSL.Core.Configure(raw); + var ret = conf.configure(); + return ret; +} + + +/** + * Compose a citation "cluster". + *

Accepts an Item object or a list of Item objects as a + * single argument. Citation clusters are typically used in the + * body of a document. Because locator information may be + * needed to correctly render cites within a cluster, the + * argument should be a list of actual objects, rather + * than item keys. (The code in {@link CSL.System.Retrieval} + * does recognize keys, but this is intended only for testing + * purposes.)

+ */ +CSL.Factory.State.prototype.makeCitationCluster = function(inputList){ + this.insertItems(inputList); + // + // don't bother sorting unless there is more than one item. + // this is really ugly and hackish. uses a hashed reference + // tacked onto the end of an array to squeeze the object + // ID into the sorted list. + if (inputList && inputList.length > 1 && this["citation_sort"].tokens.length > 0){ + var newlist = new Array(); + var keys_list = new Array(); + for each (var Item in inputList){ + var keys = this.getSortKeys(Item,"citation_sort"); + keys["cheaters_hack"] = Item; + keys_list.push(keys); + } + var srt = new CSL.Factory.Registry.Comparifier(this,"citation_sort"); + keys_list.sort(srt.compareKeys); + for each (key in keys_list){ + newlist.push(key.cheaters_hack); + } + // + // XXXXX this is all one-time, one-way, slice probably isn't needed here? + inputList = newlist; + } + + // + // sort thingie goes here + // + this.tmp.last_suffix_used = ""; + this.tmp.last_names_used = new Array(); + this.tmp.last_years_used = new Array(); + var str = CSL.Core.Render._unit_of_reference.call(this,inputList); + return str; +}; + + +/** + * Compose a bibliography. + *

Returns the bibliography for the session as + * a single string. Entries in the bibliography are + * sorted according to the system locale, with + * disambiguation adjustments requested by the style.

+ */ +CSL.Factory.State.prototype.makeBibliography = function(){ + var debug = false; + if (debug){ + for each (tok in this.bibliography.tokens){ + print("bibtok: "+tok.name); + } + print("---"); + for each (tok in this.citation.tokens){ + print("cittok: "+tok.name); + } + print("---"); + for each (tok in this.bibliography_sort.tokens){ + print("bibsorttok: "+tok.name); + } + } + return CSL.Core.Render._bibliography_entries.call(this); +}; + + +CSL.Factory.State.prototype.insertItems = function(inputList){ + for each (item in inputList){ + this.fun.retriever.input[item.id] = item; + this.registry.insert(this,item); + }; +}; diff --git a/src/configure.js b/src/configure.js new file mode 100644 index 000000000..c2a22d4f0 --- /dev/null +++ b/src/configure.js @@ -0,0 +1,62 @@ +dojo.provide("csl.configure"); +if (!CSL) { + load("./src/csl.js"); +} + + +/** + * Second-stage compiler. + *

Instantiates with the raw style object returned by + * {@link CSL.Core.Build#build}, and provides a method that + * returns a copy of the object stripped of its build + * and configure areas, and complete with token jump + * points for conditional branching, output rendering + * functions, and methods for processing data items.

+ * @namespace Style configuration + * @param {Object} builderobject The object output + * by {@link CSL.Core.Build#build}. + * @param {String} mode Optional. Default is "html". + * @example + * builder = CSL.Core.Build(myxml) + * raw_engine = builder.build() + * configurator = CSL.Core.Configure(raw_engine,"rtf") + * style_engine = configurator.configure() + */ +CSL.Core.Configure = function(state,mode) { + this.state = state; + if (!mode){ + mode = "html"; + } + + if (this.state.build){ + delete this.state.build; + } + this.state.fun.decorate = CSL.Factory.Mode(mode); + this.state.opt.mode = mode; +}; + + +/** + * Configure the citation style. + *

In a single back-to-front pass over the token list, this sets + * jump positions on conditional tokens (if, + * else-if, else), installs rendering + * functions used to generate output, + * deletes the build and + * configure areas, and attaches the iterface methods + * from {@link CSL.Core.Render} that are needed for processing data + * items.

+ */ +CSL.Core.Configure.prototype.configure = function(){ + for each (var area in ["citation", "citation_sort", "bibliography","bibliography_sort"]){ + for (var pos=(this.state[area].tokens.length-1); pos>-1; pos--){ + var token = this.state[area].tokens[pos]; + token["next"] = (pos+1); + if (token.name && CSL.Lib.Elements[token.name].configure){ + CSL.Lib.Elements[token.name].configure.call(token,this.state,pos); + } + } + } + this.state["version"] = CSL.Factory.version; + return this.state; +}; diff --git a/src/core.js b/src/core.js new file mode 100644 index 000000000..f065d9409 --- /dev/null +++ b/src/core.js @@ -0,0 +1,14 @@ +dojo.provide("csl.core"); +if (!CSL) { + load("./src/csl.js"); +} + +/** + * Core logic for building and rendering. + *

This contains the three core tools for building + * a compiled representation of the CSL style, and + * rendering one or more data items with it. + * @namespace Core facilities. + */ +CSL.Core = {}; + diff --git a/src/disambiguate.js b/src/disambiguate.js new file mode 100644 index 000000000..2eedd75e6 --- /dev/null +++ b/src/disambiguate.js @@ -0,0 +1,429 @@ +dojo.provide("csl.disambiguate"); + +var debug = false; + +/** + * Disambiguate a list of cites + */ +CSL.Factory.Registry.prototype.disambiguateCites = function (state,akey,modes,candidate_list){ + if ( ! candidate_list){ + // + // We start with the state and an ambig key. + // We acquire a copy of the list of ambigs that relate to the key from state. + var ambigs = this.ambigs[akey].slice(); + // + // We clear the list of ambigs so it can be rebuilt + this.ambigs[akey] = new Array(); + } else { + // candidate list consists of registry tokens. + // extract the ids and build an ambigs list. + // This is roundabout -- we already collected + // these once for the first-phase disambiguation. + // Maybe it can be cleaned up later. + var ambigs = new Array(); + for each (var reg_token in candidate_list){ + ambigs.push(reg_token.id); + } + } + // + // We get the ids of the partners from the copy + // (what's the point of this? why not just push + // ambigs itself?) + var id_vals = new Array(); + for each (var a in ambigs){ + id_vals.push(a); + } + // + // We get the tokens of the partners + var tokens = state.fun.retriever.getInput(id_vals); + + // The processing sequence is the same for all modes, + // but there are important differences at the decision + // points. + var checkerator = new this.Checkerator(tokens,modes); + + checkerator.lastclashes = (ambigs.length-1); + + // We iterate through every cite in the list, front to back. + // But we use a while loop, because repeated renderings + // of the same cite might be needed. + var base = false; + checkerator.pos = 0; + + // + // OKAY! It's now all working right, but the loop isn't + // exiting. We need to know which items we have seen, + // and exit when we've seen them all. + // + while (checkerator.run()){ + var token = tokens[checkerator.pos]; + if (debug){ + print("<<<<<<<<<<<<<<<<<<<<<<<<< "+ token.id +" >>>>>>>>>>>>>>>>>>>>>>>>>>>"); + } + // + // skip items that have been finally resolved. + if (this.ambigs[akey].indexOf(token.id) > -1){ + if (debug){ + print("---> Skip registered token for: "+token.id); + } + checkerator.pos += 1; + continue; + } + checkerator.candidate = token.id; + + if (base == false){ + checkerator.mode = modes[0]; + } + if (debug){ + print (" ---> Mode: "+checkerator.mode); + } + if (debug){ + print("base in (givens):"+base["givens"]); + } + var str = state.getAmbiguousCite(token,base); + var maxvals = state.getMaxVals(); + var minval = state.getMinVal(); + base = state.getAmbigConfig(); + if (debug){ + print("base out (givens):"+base["givens"]); + } + if (candidate_list && candidate_list.length){ + base["disambiguate"] = true; + } + checkerator.setBase(base); + checkerator.setMaxVals(maxvals); + checkerator.setMinVal(minval); + + for each (testpartner in tokens){ + + if (token.id == testpartner.id){ + continue; + } + var otherstr = state.getAmbiguousCite(testpartner,base); + if (debug){ + print(" ---> last clashes: "+checkerator.lastclashes); + print(" ---> master: "+token.id); + print(" ---> master: "+str); + print(" ---> partner: "+testpartner.id); + print(" ---> partner: "+otherstr); + } + + if(checkerator.checkForClash(str,otherstr)){ + break; + } + } + if (checkerator.evaluateClashes()){ + var base_return = this.decrementNames(state,base); + this.registerAmbigToken(state,akey,token.id,base_return); + checkerator.seen.push(token.id); + if (debug){ + print(" ---> Evaluate: storing token config: "+base); + } + continue; + } + if (checkerator.maxAmbigLevel()){ + if ( ! state["citation"].opt["disambiguate-add-year-suffix"]){ + //this.registerAmbigToken(state,akey,token.id,base); + checkerator.mode1_counts = false; + checkerator.maxed_out_bases[token.id] = base; + if (debug){ + print(" ---> Max out: remembering token config for: "+token.id); + print(" ("+base["names"]+":"+base["givens"]+")"); + } + } else { + if (debug){ + print(" ---> Max out: NOT storing token config for: "+token.id); + print(" ("+base["names"]+":"+base["givens"]+")"); + } + } + checkerator.seen.push(token.id); + base = false; + continue; + } + if (debug){ + print(" ---> Incrementing"); + } + checkerator.incrementAmbigLevel(); + } + // return tuples of registry tokens and item tokens. + // the former are useful for second-run disambiguation, + // the latter for sorting. + var ret = new Array(); + for each (id in checkerator.ids){ + if (id){ + ret.push(this.registry[id]); + } + } + // if we don't have year-suffix available, we may + // have maxed out bases lying around + for (i in checkerator.maxed_out_bases){ + this.registry[i].disambig = checkerator.maxed_out_bases[i]; + } + return ret; +}; + +/** + * Management object to support the disambiguation control loop. + */ +CSL.Factory.Registry.prototype.Checkerator = function(tokens,modes){ + this.seen = new Array(); + this.modes = modes; + this.mode = this.modes[0]; + this.tokens_length = tokens.length; + this.pos = 0; + this.clashes = 0; + this.maxvals = false; + this.base = false; + this.ids = new Array(); + this.maxed_out_bases = new Object(); + for each (token in tokens){ + this.ids.push(token.id); + } + // + // used in givens mode (mode 1) + this.lastclashes = -1; + // + // used to address into the base array in both modes + this.namepos = 0; + this.modepos = 0; + this.mode1_counts = false; +}; + +CSL.Factory.Registry.prototype.Checkerator.prototype.run = function(){ + if (this.seen.length < this.tokens_length){ + return true; + } + return false; +} + +CSL.Factory.Registry.prototype.Checkerator.prototype.setMaxVals = function(maxvals){ + this.maxvals = maxvals; +}; + + +CSL.Factory.Registry.prototype.Checkerator.prototype.setMinVal = function(minval){ + this.minval = minval; +}; + +CSL.Factory.Registry.prototype.Checkerator.prototype.setBase = function(base){ + this.base = base; + if (! this.mode1_counts){ + this.mode1_counts = new Array(); + for each (i in this.base["givens"]){ + this.mode1_counts.push(0); + } + } +}; + + +CSL.Factory.Registry.prototype.Checkerator.prototype.setMode = function(mode){ + this.mode = mode; +}; + +CSL.Factory.Registry.prototype.Checkerator.prototype.checkForClash = function(str,otherstr){ + if (str == otherstr){ + if (this.mode == "names"){ + this.clashes += 1; + if (debug){ + print(" (mode 0 clash, returning true)"); + } + return true; + } + if (this.mode == "givens"){ + this.clashes += 1; + if (debug){ + print(" (mode 1 clash, returning false)"); + } + } + return false; + } +}; + +CSL.Factory.Registry.prototype.Checkerator.prototype.evaluateClashes = function(){ + // + // necessary for the odd case of static cites with no authors + if (!this.maxvals.length){ + return false; + } + // mode 0 is pretty simple + if (this.mode == "names"){ + if (this.clashes){ + this.lastclashes = this.clashes; + this.clashes = 0; + return false; + } else { + // cleared, so increment. also quash the id as done. + this.ids[this.pos] = false; + this.pos += 1; + this.lastclashes = this.clashes; + return true; + } + } + // compare the clash counts + // if clash counts not reduced, reverse change in base + // if clash counts reduced, hold the change steady + // in the above two cases, just return false. leave the incementing to the + // incrementing function + // if no clashes at all on expanded pass, just return true, it's a wrap + if (this.mode == "givens"){ + var ret = true; + if (debug){ + print(" ---> Comparing in mode 1: clashes="+this.clashes+"; lastclashes="+this.lastclashes); + } + var namepos = this.mode1_counts[this.modepos]; + if (this.clashes && this.clashes == this.lastclashes){ + if (debug){ + print(" ---> Applying mode 1 defaults: "+this.mode1_defaults); + } + if (this.mode1_defaults){ + var old = this.mode1_defaults[(namepos-1)]; + if (debug){ + print(" ---> Resetting to default: ("+old+")"); + } + this.base["givens"][this.modepos][(namepos-1)] = old; + } + ret = false; + } else if (this.clashes) { + if (debug){ + print(" ---> Expanding given name helped a little, retaining it"); + } + ret = false; + } else { // only non-clash should be possible + if (debug){ + print(" ---> No clashes, storing token config and going to next"); + } + this.mode1_counts = false; + ret = true; + } + this.lastclashes = this.clashes; + this.clashes = 0; + if (ret){ + this.ids[this.pos] = false; + } + return ret; + } +}; + +CSL.Factory.Registry.prototype.Checkerator.prototype.maxAmbigLevel = function (){ + // + // like the above, necessary for the odd case of static cites with no authors + if (!this.maxvals.length){ + return true; + } + + if (this.mode == "names"){ + //print(this.modepos+" : "+this.base[0].length+" : "+this.base[0][this.modepos]); + if (this.modepos == (this.base["names"].length-1) && this.base["names"][this.modepos] == this.maxvals[this.modepos]){ + if (this.modes.length == 2){ + this.mode = "givens"; + this.modepos = 0; + //this.pos = 0; + } else { + this.pos += 1; + return true; + } + } + } + if (this.mode == "givens"){ + if (this.modepos == (this.mode1_counts.length-1) && this.mode1_counts[this.modepos] == (this.maxvals[this.modepos])){ + if (debug){ + print("----- Item maxed out -----"); + } + if (this.modes.length == 2){ + this.mode = "givens"; + this.pos += 1; + } else { + this.pos += 1; + } + //this.ids[this.pos] = false; + return true; + } + } + return false; +}; + + +/** + * Increment disambiguation level + */ +CSL.Factory.Registry.prototype.Checkerator.prototype.incrementAmbigLevel = function (){ + // + // this is a little tricky. the counters are arrays. + // ... and for mode 1, this only gives us the position, + // not the values of the array of booleans, which of + // course are not subject to incrementing in this + // sense. + if (this.mode == "names"){ + var val = this.base["names"][this.modepos]; + if (val < this.maxvals[this.modepos]){ + this.base["names"][this.modepos] += 1; + } else if (this.modepos < (this.base["names"].length-1)){ + this.modepos +=1; + this.base["names"][this.modepos] = 0; + } + } + if (this.mode == "givens"){ + var val = (this.mode1_counts[this.modepos]); + if (val < this.maxvals[this.modepos]){ + this.mode1_counts[this.modepos] += 1; + this.mode1_defaults = this.base["givens"][this.modepos].slice(); + this.base["givens"][this.modepos][val] += 1; + if (debug){ + print(" ---> (A) Set expanded givenname param with base: "+this.base["givens"]); + } + } else if (this.modepos < (this.base["givens"].length-1)){ + this.modepos +=1; + this.base["givens"][this.modepos][0] += 1; + this.mode1_defaults = this.base["givens"][this.modepos].slice(); + if (debug){ + print(" ---> (B) Set expanded givenname param with base: "+this.base["givens"]); + } + } else { + this.mode = "names"; + this.pos += 1; + } + } +}; + +CSL.Factory.Registry.prototype.registerAmbigToken = function (state,akey,id,ambig_config){ + if ( ! this.ambigs[akey]){ + this.ambigs[akey] = new Array(); + }; + var found = false; + for (var i in this.ambigs[akey]){ + if (this.ambigs[akey].indexOf(id) > -1){ + found = true; + } + } + if (!found){ + this.ambigs[akey].push(id); + } + this.registry[id].disambig = state.fun.clone_ambig_config(ambig_config); +}; + +CSL.Factory.Registry.prototype.decrementNames = function(state,base){ + // two reverse scans, one to determine if there are any expanded + // names to stop the unwind, and another to perform the + // unwind + var base_return = state.fun.clone_ambig_config(base); + var do_me = false; + for (var i=(base_return["givens"].length-1); i > -1; i--){ + for (var j=(base_return["givens"][i].length-1); j > -1; j--){ + if (base_return["givens"][i][j] == 2){ + do_me = true; + } + } + } + if (do_me){ + for (var i=(base_return["givens"].length-1); i > -1; i--){ + for (var j=(base_return["givens"][i].length-1); j > -1; j--){ + if (base_return["givens"][i][j] == 2){ + i = -1; + break; + } + base_return["names"][i] += -1; + } + } + } + return base_return; +}; diff --git a/src/elements.js b/src/elements.js new file mode 100644 index 000000000..dd1dd8f70 --- /dev/null +++ b/src/elements.js @@ -0,0 +1,1138 @@ +dojo.provide("csl.elements"); +if (!CSL) { + load("./src/csl.js"); +} + +// +// XXXXX Fix initialization of given name count. +// Should this be removed from the base? not sure. +// + + +/** + * Functions corresponding to CSL element names. + *

These are static function used during build and + * configuration. The build method is called + * on a token generated from the XML node at build time, and + * may manipulate either the content of the state object or that + * of the token.

+ *

The configure method is invoked on the + * node during a back-to-front pass through the tokens, + * and sets skip positions for conditionals.

+ *

Tokens that do not affect citation rendering in any + * way can be discarded by not pushing them to the target. + * In this case, the configure method need + * not be defined.

+ * @class + */ +CSL.Lib.Elements = {}; + + +/** + * The style element. + * @name CSL.Lib.Elements.style + * @function + */ +CSL.Lib.Elements.style = new function(){ + this.build = build; + function build (state,target){ + if (this.tokentype == CSL.START){ + if (!state.build.lang){ + state.build.lang = "en"; + } + state.opt.lang = state.build.lang; + state.build.in_style = true; + state.build.lang = false; + state.opt.term = CSL.System.Retrieval.getLocaleObjects(state.opt.lang,state.opt.locale); + state.tmp.term_predecessor = false; + } else { + state.tmp.disambig_request = false; + state.build.in_style = false; + } + if (this.tokentype == CSL.START){ + var func = function(state,Item){ + if (state.tmp.disambig_request && ! state.tmp.disambig_override){ + state.tmp.disambig_settings = state.tmp.disambig_request; + } else if (state.registry.registry[Item.id] && ! state.tmp.disambig_override) { + state.tmp.disambig_request = state.registry.registry[Item.id].disambig; + state.tmp.disambig_settings = state.registry.registry[Item.id].disambig; + } else { + + state.tmp.disambig_settings = new CSL.Factory.AmbigConfig(); + } + }; + state["init"].push(func); + var tracking_info_init = function(state,Item){ + state.tmp.names_used = new Array(); + state.tmp.nameset_counter = 0; + state.tmp.years_used = new Array(); + }; + state["init"].push(tracking_info_init); + + var splice_init = function(state,Item) { + state.tmp.splice_delimiter = state[state.tmp.area].opt.delimiter; + }; + state["init"].push(splice_init); + + var sort_keys_init = function(state,Item) { + state["bibliography_sort"].keys = new Array(); + state["citation_sort"].keys = new Array(); + }; + state["init"].push(sort_keys_init); + + }; + if (this.tokentype == CSL.END){ + var set_splice = function(state,Item){ + // + // set the inter-cite join delimiter + // here. + if (state.tmp.last_suffix_used && state.tmp.last_suffix_used.match(/.*[-.,;:]$/)){ + state.tmp.splice_delimiter = " "; + } else if (state.tmp.prefix.value() && state.tmp.prefix.value().match(/^[,,:;a-z].*/)){ + state.tmp.splice_delimiter = " "; + } else if (state.tmp.last_suffix_used || state.tmp.prefix.value()){ + // + // forcing the delimiter back to normal if a + // suffix or prefix touch the join, even if + // a year-suffix is the only output. + state.tmp.splice_delimiter = state[state.tmp.area].opt.delimiter; + } else { + // XXXX year-suffix must have been used for special + // XXXX delimiter to be invoked here. + } + }; + state["stop"].push(set_splice); + var set_lastvals = function(state,Item){ + state.tmp.last_suffix_used = state.tmp.suffix.value(); + state.tmp.last_years_used = state.tmp.years_used.slice(); + state.tmp.last_names_used = state.tmp.names_used.slice(); + }; + state["stop"].push(set_lastvals); + var func = function(state,Item){ + state.tmp.disambig_request = false; + }; + state["stop"].push(func); + } + } +}; + + +/** + * The info element. + *

Everything in this scope is a total + * noop.

+ * @name CSL.Lib.Elements.info + */ +CSL.Lib.Elements.info = new function(){ + this.build = build; + function build (state,target){ + if (this.tokentype == CSL.START){ + state.build.skip = "info"; + } else { + state.build.skip = false; + } + }; +}; + +/** + * The text element. + * @name CSL.Lib.Elements.text + * @function + */ +CSL.Lib.Elements.text = new function(){ + this.build = build; + function build (state,target){ + // + // CSL permits macros to be called before they + // are declared. We file a placeholder token unless we are + // in the layout area, and when in the layout area we scan + // any inserted macros for nested macro calls, and explode + // them. + if (state.build.postponed_macro){ + // + // XXXX Could catch undeclared macros here. + // + if ( ! state.build.layout_flag && ! state.build.sort_flag){ + // + // Fudge it with a placeholder if we're not yet + // inside the layout area. + this.postponed_macro = state.build.postponed_macro; + target.push(this); + } else { + // + // tag this token with the name of the postponed macro + this.postponed_macro = state.build.postponed_macro; + // + // push an implict group token with the strings and + // decorations of the invoking text tag + var start_token = new CSL.Factory.Token("group",CSL.START); + for (i in this.strings){ + start_token.strings[i] = this.strings[i]; + } + start_token.decorations = this.decorations; + var newoutput = function(state,Item){ + state.output.startTag("group",this); + //state.tmp.decorations.push(this.decorations); + }; + start_token["execs"].push(newoutput); + target.push(start_token); + + // + // Special handling for text macros inside a substitute + // environment. + if (state.build.names_substituting){ + // + // A text macro inside a substitute environment is + // treated as a special conditional. + var choose_start = new CSL.Factory.Token("choose",CSL.START); + target.push(choose_start); + var if_start = new CSL.Factory.Token("if",CSL.START); + // + // Here's the Clever Part. + // Set a test of the shadow if token to skip this + // macro if we have acquired a name value. + var check_for_variable = function(state,Item){ + if (state.tmp.value){ + return true; + } + return false; + }; + if_start.tests.push(check_for_variable); + // + // this is cut-and-paste of the "any" evaluator + // function, from Attributes. These functions + // should be defined in a namespace for reuse. + var evaluator = function(state,Item){ + var res = this.fail; + state.tmp.jump.replace("fail"); + for each (var func in this.tests){ + if (func.call(this,state,Item)){ + res = this.succeed; + state.tmp.jump.replace("succeed"); + break; + } + } + return res; + }; + if_start.evaluator = evaluator; + target.push(if_start); + + var macro = CSL.Factory.expandMacro.call(state,this); + for each (var t in macro){ + target.push(t); + } + + var if_end = new CSL.Factory.Token("if",CSL.END); + target.push(if_end); + var choose_end = new CSL.Factory.Token("choose",CSL.END); + target.push(choose_end); + } else { + var macro = CSL.Factory.expandMacro.call(state,this); + for each (var t in macro){ + target.push(t); + } + } + + var end_token = new CSL.Factory.Token("group",CSL.END); + var mergeoutput = function(state,Item){ + // + // rendering happens inside the + // merge method, by applying decorations to + // each token to be merged. + state.output.endTag(); + }; + end_token["execs"].push(mergeoutput); + target.push(end_token); + + state.build.names_substituting = false; + } + state.build.postponed_macro = false; + } else { + // ... + // + // Do non-macro stuff + var variable = this.variables[0]; + if ("citation-number" == variable || "year-suffix" == variable){ + // + // citation-number and year-suffix are super special, + // because they are rangeables, and require a completely + // different set of formatting parameters on the output + // queue. + if (variable == "citation-number"){ + this.strings.is_rangeable = true; + var func = function(state,Item){ + var id = Item["id"]; + if (!state.tmp.force_subsequent){ + var num = state.registry.registry[id].seq; + // + // DO SOMETHING USEFUL HERE + // + var number = new CSL.Output.Number(num,this); + state.output.append(number,"literal"); + } + }; + this["execs"].push(func); + } else if (variable == "year-suffix"){ + var func = function(state,Item){ + if (state.registry.registry[Item.id] && state.registry.registry[Item.id].disambig[2]){ + state.tmp.delimiter.replace(""); + state.output.append(state.registry.registry[Item.id].disambig[2],this); + // + // don't ask :) + // obviously the variable naming scheme needs + // a little touching up + var firstoutput = state.tmp.term_sibling.mystack.indexOf(true) == -1; + var specialdelimiter = state[state.tmp.area].opt["year-suffix-delimiter"]; + if (firstoutput && specialdelimiter && !state.tmp.sort_key_flag){ + state.tmp.splice_delimiter = state[state.tmp.area].opt["year-suffix-delimiter"]; + } + } + }; + this["execs"].push(func); + } + + } else { + if (state.build.term){ + var term = state.build.term; + var form = "long"; + var plural = 0; + if (state.build.form){ + form = state.build.form; + } + if (state.build.plural){ + plural = state.build.plural; + } + term = state.opt.term[term][form][plural]; + var printterm = function(state,Item){ + // capitalize the first letter of a term, if it is the + // first thing rendered in a citation (or if it is + // being rendered immediately after terminal punctuation, + // I guess, actually). + if (!state.tmp.term_predecessor){ + //print("Capitalize"); + term = CSL.Output.Formatters.capitalize_first(term); + state.tmp.term_predecessor = false; + }; + state.output.append(term,this); + }; + this["execs"].push(printterm); + state.build.term = false; + state.build.form = false; + state.build.plural = false; + } else if (variable){ + var func = function(state,Item){ + if (this.variables.length){ + state.fun.mark_output(state,Item[variable]); + state.output.append(Item[variable],this); + //state.tmp.value.push(Item[variable]); + } + }; + this["execs"].push(func); + } else if (this.strings.value){ + var func = function(state,Item){ + state.output.append(this.strings.value,this); + }; + this["execs"].push(func); + } else { + var weird_output_function = function(state,Item){ + if (state.tmp.value.length){ + print("Weird output pattern. Can this be revised?"); + for each (var val in state.tmp.value){ + state.output.append(val,this); + } + state.tmp.value = new Array(); + } + }; + this["execs"].push(weird_output_function); + } + } + target.push(this); + }; + } +}; + + +/** + * Macro node, start and end. + *

Because macros are expanded into the body of the style, + * their element function requires only a build method.

+ * @name CSL.Lib.Elements.macro + * @function + */ +CSL.Lib.Elements.macro = new function(){ + this.build = build; + /* + * Executed on token + */ + function build (state,target){ + if (this.tokentype == CSL.START){ + state.build.name = this.strings.name; + var bufferlist = new Array(); + state.build.children.push(bufferlist); + } else { + // + // catch repeated declarations of the same macro name + if (state.build.macro[state.build.name]){ + throw "CSL processor error: repeated declaration of macro \""+state.build.name+"\""; + } + // + // is this slice really needed? + state.build.macro[state.build.name] = target.slice(); + state.build.name = false; + state.build.children = new Array();; + } + } +}; + + +/** + * Locale node, start and end. + *

Sets a flag on the state, to cause terms to + * be stored in a state object for later processing.

+ * @name CSL.Lib.Elements.locale + */ +CSL.Lib.Elements.locale = new function(){ + this.build = build; + function build(state,target){ + if (this.tokentype == CSL.START){ + if (state.opt.lang && state.build.lang != state.opt.lang){ + state.build.skip = true; + } else { + state.build.skip = false; + } + } + } +}; + + +/** + * Terms node. + *

This is a noop.

+ * @name CSL.Lib.Elements.terms + * @function + */ +CSL.Lib.Elements.terms = new function(){ + this.build = build; + function build(state,target){ + } +}; + + +/** + * Term node, start and end. + * @name CSL.Lib.Elements.term + * @function + */ +CSL.Lib.Elements.term = new function(){ + this.build = build; + function build (state,target){ + if (this.tokentype == CSL.START){ + var bufferlist = new Array(); + state.build.children.push(bufferlist); + state.build.name = this.strings.name; + state.build.form = this.strings.form; + + } else { + if (state.build.text){ + var single = new CSL.Factory.Token("single",CSL.SINGLETON); + var multiple = new CSL.Factory.Token("multiple",CSL.SINGLETON); + target.push(single); + target.push(multiple); + for (i in target){ + target[i]["string"] = state.build.text; + } + state.build.text = false; + } + // set strings from throwaway tokens to term object + var termstrings = new Array(); + // target should be pointing at the state.build.children + // array, set by the start tag above + for (i in target){ + termstrings.push(target[i].string); + } + // initialize object for this term + if (!state.opt.term[state.build.name]){ + state.opt.term[state.build.name] = new Object(); + } + // + // long writes to long and any unused form key. + // + // short writes to short and to symbol if it is unused + // + // verb writes to verb and to verb-short if it is unused + // + // symbol and verb-short write only to themselves + if (!state.build.form){ + state.build.form = "long"; + } + var keywrites = new Object(); + keywrites["long"] = ["verb-short","symbol","verb","short","long"]; + keywrites["short"] = ["symbol"]; + keywrites["verb"] = ["verb-short"]; + keywrites["symbol"] = []; + keywrites["verb-short"] = []; + // forced write + state.opt.term[state.build.name][state.build.form] = termstrings; + if ( !state.build.in_style ){ + // shy write, performed only when external locale + // is loaded. + for each (var key in keywrites[state.build.form]){ + if (!state.opt.term[state.build.name][key]){ + state.opt.term[state.build.name][key] = termstrings; + } + } + } + state.build.name = false; + state.build.form = false; + state.build.children = new Array(); + } + } +}; + + +/** + * Single term node. + * @name CSL.Lib.Elements.single + * @function + */ +CSL.Lib.Elements.single = new function(){ + this.build = build; + function build(state,target){ + if (this.tokentype == CSL.END){ + this["string"] = state.build.text; + this["key"] = state.build.name; + state.build.text = false; + target.push(this); + } + } +}; + +/** + * Multiple term node. + * @name CSL.Lib.Elements.multiple + * @function + */ +CSL.Lib.Elements.multiple = new function(){ + this.build = build; + function build(state,target){ + if (this.tokentype == CSL.END){ + this["string"] = state.build.text; + this["key"] = state.build.name; + state.build.text = false; + target.push(this); + } + } +}; + +/** + * The group node, start and end. + * @name CSL.Lib.Elements.group + * @function + */ +CSL.Lib.Elements.group = new function(){ + this.build = build; + function build (state,target){ + if (this.tokentype == CSL.START){ + + var newoutput = function(state,Item){ + state.output.startTag("group",this); + }; + // + // Paranoia. Assure that this init function is the first executed. + var execs = new Array(); + execs.push(newoutput); + this.execs = execs.concat(this.execs); + + var fieldcontentflag = function(state,Item){ + state.tmp.term_sibling.push( undefined, CSL.LITERAL ); + }; + this["execs"].push(fieldcontentflag); + } else { + var quashnonfields = function(state,Item){ + var flag = state.tmp.term_sibling.value(); + if (false == flag){ + state.output.clearlevel(); + } + state.tmp.term_sibling.pop(); + }; + this["execs"].push(quashnonfields); + + var mergeoutput = function(state,Item){ + // + // rendering happens inside the + // merge method, by applying decorations to + // each token to be merged. + state.output.endTag(); + }; + this["execs"].push(mergeoutput); + } + target.push(this); + } +}; + +/** + * Citation element + */ +CSL.Lib.Elements.citation = new function(){ + this.build = build; + function build (state,target){ + if (this.tokentype == CSL.START) { + state.build.area_return = state.build.area; + state.build.area = "citation"; + } + if (this.tokentype == CSL.END) { + state.build.area = state.build.area_return; + } + } +}; + +/** + * The choose node, start and end. + * @name CSL.Lib.Elements.choose + * @function + */ +CSL.Lib.Elements.choose = new function(){ + this.build = build; + this.configure = configure; + function build (state,target){ + if (this.tokentype == CSL.START){ + var func = function(state,Item){ //open condition + state.tmp.jump.push(undefined, CSL.LITERAL); + }; + } + if (this.tokentype == CSL.END){ + var func = function(state,Item){ //close condition + state.tmp.jump.pop(); + }; + } + this["execs"].push(func); + target.push(this); + } + function configure(state,pos){ + if (this.tokentype == CSL.END){ + state.configure["fail"].push((pos+1)); + state.configure["succeed"].push((pos+1)); + } else { + state.configure["fail"].pop(); + state.configure["succeed"].pop(); + } + } +}; + + +/** + * The if node, start and end. + * @name CSL.Lib.Elements.if + * @function + */ +CSL.Lib.Elements["if"] = new function(){ + this.build = build; + this.configure = configure; + function build (state,target){ + if (this.tokentype == CSL.START){ + if (! this.evaluator){ + // + // cut and paste of "any" + this.evaluator = function(state,Item){ + var res = this.fail; + state.tmp.jump.replace("fail"); + for each (var func in this.tests){ + if (func.call(this,state,Item)){ + res = this.succeed; + state.tmp.jump.replace("succeed"); + break; + } + } + return res; + }; + }; + } + if (this.tokentype == CSL.END){ + var closingjump = function(state,Item){ + var next = this[state.tmp.jump.value()]; + return next; + }; + this["execs"].push(closingjump); + }; + target.push(this); + } + function configure(state,pos){ + if (this.tokentype == CSL.START){ + // jump index on failure + this["fail"] = state.configure["fail"][(state.configure["fail"].length-1)]; + this["succeed"] = this["next"]; + } else { + // jump index on success + this["succeed"] = state.configure["succeed"][(state.configure["succeed"].length-1)]; + this["fail"] = this["next"]; + } + } +}; + + +/** + * The else-if node, start and end. + * @name CSL.Lib.Elements.else-if + * @function + */ +CSL.Lib.Elements["else-if"] = new function(){ + this.build = build; + this.configure = configure; + // + // these function are the same as those in if, might just clone + function build (state,target){ + if (this.tokentype == CSL.START){ + if (! this.evaluator){ + // + // cut and paste of "any" + this.evaluator = function(state,Item){ + var res = this.fail; + state.tmp.jump.replace("fail"); + for each (var func in this.tests){ + if (func.call(this,state,Item)){ + res = this.succeed; + state.tmp.jump.replace("succeed"); + break; + } + } + return res; + }; + }; + } + if (this.tokentype == CSL.END){ + var closingjump = function(state,Item){ + var next = this[state.tmp.jump.value()]; + return next; + }; + this["execs"].push(closingjump); + }; + target.push(this); + } + function configure(state,pos){ + if (this.tokentype == CSL.START){ + // jump index on failure + this["fail"] = state.configure["fail"][(state.configure["fail"].length-1)]; + this["succeed"] = this["next"]; + state.configure["fail"][(state.configure["fail"].length-1)] = pos; + } else { + // jump index on success + this["succeed"] = state.configure["succeed"][(state.configure["succeed"].length-1)]; + this["fail"] = this["next"]; + } + } +}; + + +/** + * The else node, start and end. + * @name CSL.Lib.Elements.else + * @function + */ +CSL.Lib.Elements["else"] = new function(){ + this.build = build; + this.configure = configure; + function build (state,target){ + target.push(this); + } + function configure(state,pos){ + if (this.tokentype == CSL.START){ + state.configure["fail"][(state.configure["fail"].length-1)] = pos; + } + } +}; + + +/** + * The name node. + * @name CSL.Lib.Elements.name + * @function + */ +CSL.Lib.Elements.name = new function(){ + this.build = build; + function build(state,target){ + + state.build.form = this.strings.form; + state.build.name_flag = true; + + var func = function(state,Item){ + state.output.addToken("name",false,this); + }; + this["execs"].push(func); + + var set_initialize_with = function(state,Item){ + state.tmp["initialize-with"] = this.strings["initialize-with"]; + }; + this["execs"].push(set_initialize_with); + + + target.push(this); + }; +}; + + +/** + * The name node. + * @name CSL.Lib.Elements.name-part + * @function + */ +CSL.Lib.Elements["name-part"] = new function(){ + this.build = build; + function build(state,target){ + // XXXXX problem. can't be global. don't want to remint + // for every rendering. somehow get tokens stored on + // closing names tag static. always safe, b/c + // no conditional branching inside names. + // same treatment for etal styling element. + var set_namepart_format = function(state,Item){ + state.output.addToken(state.tmp.namepart_type,false,this); + }; + this["execs"].push(set_namepart_format); + target.push(this); + }; +}; + + +/** + * The label node. + *

A plural-sensitive localized label.

+ * @name CSL.Lib.Elements.label + * @function + */ +CSL.Lib.Elements.label = new function(){ + this.build = build; + /* + * Account for form option. + */ + function build(state,target){ + if (state.build.name_flag){ + this.strings.label_position = CSL.AFTER; + } else { + this.strings.label_position = CSL.BEFORE; + } + var set_label_info = function(state,Item){ + if (!this.strings.form){ + this.strings.form = "long"; + } + state.output.addToken("label",false,this); + }; + this["execs"].push(set_label_info); + target.push(this); + }; +}; + + +/** + * The substitute node. + *

A special conditional environment for use inside a names node.

+ * @name CSL.Lib.Elements.substitute + * @function + */ +CSL.Lib.Elements.substitute = new function(){ + this.build = build; + function build(state,target){ + if (this.tokentype == CSL.START){ + state.build.names_substituting = true; + var declare_thyself = function(state,Item){ + state.tmp.names_substituting = true; + }; + this["execs"].push(declare_thyself); + }; + target.push(this); + }; +}; + + +/** + * The et-al node. + *

This is a formatting hook for the et-al string + * that is appended to truncated name sets. It also + * permits the specification of the "and others" localized + * term for use instead of the standard et-al string.

+ */ +CSL.Lib.Elements["et-al"] = new function(){ + this.build = build; + function build(state,target){ + var set_et_al_format = function(state,Item){ + state.output.addToken("etal",false,this); + }; + this["execs"].push(set_et_al_format); + target.push(this); + }; +}; + + +/** + * The layout node. + *

The tag environment that marks the end of option declarations + * and encloses the renderable tags.

+ * @name CSL.Lib.Elements.layout + * @function + */ +CSL.Lib.Elements.layout = new function(){ + this.build = build; + function build(state,target){ + if (this.tokentype == CSL.START){ + state.build.layout_flag = true; + + var set_opt_delimiter = function(state,Item){ + // just in case + state.tmp.sort_key_flag = false; + state[state.tmp.area].opt.delimiter = ""; + if (this.strings.delimiter){ + state[state.tmp.area].opt.delimiter = this.strings.delimiter; + }; + }; + this["execs"].push(set_opt_delimiter); + + var reset_nameset_counter = function(state,Item){ + state.tmp.nameset_counter = 0; + }; + this["execs"].push(reset_nameset_counter); + + var declare_thyself = function(state,Item){ + // + // This is not very pretty. + // + state[state.tmp.area].opt.layout_prefix = this.strings.prefix; + state[state.tmp.area].opt.layout_suffix = this.strings.suffix; + state[state.tmp.area].opt.layout_decorations = this.decorations; + state.output.openLevel("empty"); + }; + this["execs"].push(declare_thyself); + + }; + if (this.tokentype == CSL.END){ + state.build.layout_flag = false; + var mergeoutput = function(state,Item){ + state.output.closeLevel(); + state.tmp.name_quash = new Object(); + }; + this["execs"].push(mergeoutput); + } + target.push(this); + }; +}; + + +CSL.Lib.Elements.number = new function(){ + this.build = build; + function build(state,target){ + target.push(this); + }; +}; + + +CSL.Lib.Elements.date = new function(){ + this.build = build; + function build(state,target){ + if (this.tokentype == CSL.START){ + var set_value = function(state,Item){ + state.tmp.value.push(Item[this.variables[0]]); + }; + this["execs"].push(set_value); + + var newoutput = function(state,Item){ + state.output.startTag("date",this); + }; + this["execs"].push(newoutput); + + } else if (this.tokentype == CSL.END){ + var mergeoutput = function(state,Item){ + state.output.endTag(); + }; + this["execs"].push(mergeoutput); + } + target.push(this); + }; +}; + + +CSL.Lib.Elements["date-part"] = new function(){ + this.build = build; + function build(state,target){ + var value = ""; + if (!this.strings.form){ + this.strings.form = "long"; + } + var render_date_part = function(state,Item){ + for each (var val in state.tmp.value){ + value = val[this.strings.name]; + break; + }; + var real = !state.tmp.suppress_decorations; + var invoked = state[state.tmp.area].opt.collapse == "year-suffix"; + var precondition = state[state.tmp.area].opt["disambiguate-add-year-suffix"]; + if (real && precondition && invoked){ + state.tmp.years_used.push(value); + var known_year = state.tmp.last_years_used.length >= state.tmp.years_used.length; + if (known_year){ + if (state.tmp.last_years_used[(state.tmp.years_used.length-1)] == value){ + value = false; + } + } + } + if (value){ + if (this.strings.form){ + value = CSL.Util.Dates[this.strings.name][this.strings.form](state,value); + } + //state.output.startTag(this.strings.name,this); + state.output.append(value,this); + //state.output.endTag(); + }; + state.tmp.value = new Array(); + }; + this["execs"].push(render_date_part); + target.push(this); + }; +}; + + +CSL.Lib.Elements.option = new function(){ + this.build = build; + function build(state,target){ + if (this.strings.name == "collapse"){ + // only one collapse value will be honoured. + if (this.strings.value){ + state[state.tmp.area].opt.collapse = this.strings.value; + } + } + if (CSL.ET_AL_NAMES.indexOf(this.strings.name) > -1){ + if (this.strings.value){ + state[state.tmp.area].opt[this.strings.name] = parseInt(this.strings.value, 10); + } + } + if (CSL.DISAMBIGUATE_OPTIONS.indexOf(this.strings.name) > -1){ + state[state.tmp.area].opt[this.strings.name] = true; + } + if ("year-suffix-delimiter" == this.strings.name){ + state[state.tmp.area].opt["year-suffix-delimiter"] = this.strings.value; + } + target.push(this); + }; +}; + + +CSL.Lib.Elements.bibliography = new function(){ + this.build = build; + function build(state,target){ + if (this.tokentype == CSL.START){ + state.build.area_return = state.build.area; + state.build.area = "bibliography"; + + //var init_sort_keys = function(state,Item){ + // state.tmp.sort_keys = new Array(); + //}; + //this["execs"].push(init_sort_keys); + } + if (this.tokentype == CSL.END){ + state.build.area = state.build.area_return; + } + target.push(this); + }; +}; + + +CSL.Lib.Elements.sort = new function(){ + this.build = build; + function build(state,target){ + if (this.tokentype == CSL.START){ + state.build.sort_flag = true; + state.build.area_return = state.build.area; + state.build.area = state.build.area+"_sort"; + } + if (this.tokentype == CSL.END){ + state.build.area = state.build.area_return; + state.build.sort_flag = false; + } + }; +}; + + +CSL.Lib.Elements.key = new function(){ + this.build = build; + function build(state,target){ + var start_key = new CSL.Factory.Token("key",CSL.START); + start_key.strings["et-al-min"] = this.strings["et-al-min"]; + start_key.strings["et-al-use-first"] = this.strings["et-al-use-first"]; + + var sort_direction = new Array(); + if (this.strings.sort_direction == CSL.DESCENDING){ + sort_direction.push(1); + sort_direction.push(-1); + } else { + sort_direction.push(-1); + sort_direction.push(1); + } + state[state.build.area].opt.sort_directions.push(sort_direction); + + var et_al_init = function(state,Item){ + // + // should default to the area value, with these as override. + // be sure that the area-level value is set correctly, then + // do this up. lots of inheritance, so lots of explicit + // conditions, but it's all very systematic and boring. + // + state.tmp.sort_key_flag = true; + if (this.strings["et-al-min"]){ + state.tmp["et-al-min"] = this.strings["et-al-min"]; + } + if (this.strings["et-al-use-first"]){ + state.tmp["et-al-use-first"] = this.strings["et-al-use-first"]; + } + }; + start_key["execs"].push(et_al_init); + target.push(start_key); + // + // ops to initialize the key's output structures + if (state.build.key_is_variable){ + state.build.key_is_variable = false; + var single_text = new CSL.Factory.Token("text",CSL.SINGLETON); + single_text["execs"] = this["execs"].slice(); + var output_variables = function(state,Item){ + for each(var val in state.tmp.value){ + if (val == "citation-number"){ + state.output.append(state.registry.registry[Item["id"]].seq.toString(),"empty"); + } else { + state.output.append(val,"empty"); + } + } + }; + single_text["execs"].push(output_variables); + target.push(single_text); + } else { + // + + + // if it's not a variable, it's a macro + var token = new CSL.Factory.Token("text",CSL.SINGLETON); + token.postponed_macro = state.build.postponed_macro; + var macro = CSL.Factory.expandMacro.call(state,token); + for each (var t in macro){ + target.push(t); + } + state.build.postponed_macro = false; + } + // + // ops to output the key string result to an array go + // on the closing "key" tag before it is pushed. + // Do not close the level. + var end_key = new CSL.Factory.Token("key",CSL.END); + var store_key_for_use = function(state,Item){ + var keystring = state.output.string(state,state.output.queue); + if (false){ + print("keystring: "+keystring); + } + state[state.tmp.area].keys.push(keystring); + state.tmp.value = new Array(); + }; + end_key["execs"].push(store_key_for_use); + var reset_key_params = function(state,Item){ + state.tmp.name_quash = new Object(); + state.tmp["et-al-min"] = false; + state.tmp["et-al-use-first"] = false; + state.tmp.sort_key_flag = false; + }; + end_key["execs"].push(reset_key_params); + target.push(end_key); + }; +}; diff --git a/src/factory.js b/src/factory.js new file mode 100644 index 000000000..e4ab99633 --- /dev/null +++ b/src/factory.js @@ -0,0 +1,293 @@ +dojo.provide("csl.factory"); +if (!CSL) { + load("./src/csl.js"); +} + +/** + * Factory functions to build the token list representation of a style. + *

The functions here are invoked via {@link CSL.Core.Build} and {@link CSL.Core.Configure}.

+ * @namespace Factory functions to create precompiled token objects from XML source. + */ +CSL.Factory = {}; + + +CSL.Factory.version = function(){ + var msg = "\"Entropy\" citation processor (a.k.a. citeproc-js) ver.0.01"; + print(msg); + return msg; +}; + + +/** + * Convert XML node to token. + *

This is called on an XML node. After extracting the name and attribute + * information from the node, it performs three operations. Attribute information + * relating to output formatting is stored on the node as an array of tuples, + * which fixes the sequence of execution of output functions to be invoked + * in the next phase of processing. Other attribute information is reduced + * to functions, and is pushed into an array on the token in no particular + * order, for later execution. The element name is used as a key to + * invoke the relevant build method of the target element. + * Element methods are defined in {@link CSL.Lib.Elements}.

+ * @param {Object} state The state object returned by {@link CSL.Factory.State}. + * @param {Int} tokentype A CSL namespace constant (CSL.START, + * CSL.END or CSL.SINGLETON. + */ +CSL.Factory.XmlToToken = function(state,tokentype){ + var name = state.build.xmlCommandInterface.nodename.call(this); + // print(tokentype + " : " + name); + if (state.build.skip && state.build.skip != name){ + return; + } + if (!name){ + var txt = state.build.xmlCommandInterface.content.call(this); + if (txt){ + state.build.text = txt; + } + return; + } + if ( ! CSL.Lib.Elements[state.build.xmlCommandInterface.nodename.call(this)]){ + throw "Undefined node name \""+name+"\"."; + } + var attrfuncs = new Array(); + var attributes = state.build.xmlCommandInterface.attributes.call(this); + var decorations = CSL.Factory.setDecorations.call(this,state,attributes); + var token = new CSL.Factory.Token(name,tokentype); + for (var key in attributes){ + try { + var attrfunc = CSL.Lib.Attributes[key].call(token,state,attributes[key]); + } catch (e) { + if (e == "TypeError: Cannot call method \"call\" of undefined"){ + throw "Unknown attribute \""+key+"\" in node \""+name+"\" while processing CSL file"; + } else { + throw "CSL processor error, "+key+" attribute: "+e; + } + } + if (attrfunc){ + attrfuncs.push(attrfunc); + } + } + token.decorations = decorations; + if (state.build.children.length){ + var target = state.build.children[0]; + } else { + var target = state[state.build.area].tokens; + } + CSL.Lib.Elements[name].build.call(token,state,target); +}; + + +CSL.Factory.mark_output = function(state,content){ + if (content){ + state.tmp.term_sibling.replace( true ); + } else { + if (undefined == state.tmp.term_sibling.value()) { + state.tmp.term_sibling.replace( false, CSL.LITERAL ); + } + } +} + +/** + * Generate a separate list of formatting attributes. + *

This generates a list of tuples containing attribute + * information relevant to output formatting, in the order + * fixed in the constant {@link CSL.FORMAT_KEY_SEQUENCE}. + * This function is called during {@link CSL.Core.Build}. + * Formatting hints are distilled to functions + * later, in the second compilation pass ({@link CSL.Core.Configure}).

+ * @param {Object} state The state object returned by + * {@link CSL.Factory.State}. + * @param {Object} attributes The hash object containing + * the attributes and values extracted from an XML node. + */ +CSL.Factory.setDecorations = function(state,attributes){ + // This applies a fixed processing sequence + var ret = new Array(); + for each (var key in CSL.FORMAT_KEY_SEQUENCE){ + if (attributes[key]){ + ret.push([key,attributes[key]]); + delete attributes[key]; + } + } + return ret; +}; + +/** + * Generate string formatting functions. + *

This function is executed in the context of a token + * by {@link CSL.Core.Configure}. + * The list of formatting attributes stored on the token + * is replaced with a list of compiled functions. + * This is applied by {@link CSL.Core.Configure}. + * @param {Array} state The state object returned by + * {@link CSL.Factory.State}. + */ +CSL.Factory.renderDecorations = function(state){ + var ret = new Array(); + for each (hint in this.decorations){ + ret.push(state.fun.decorate[hint[0]][hint[1]]); + } + this.decorations = ret; +}; + + +/** + * Substitution gadget. + *

Creates a function for + * delivering a string merged to a pre-defined template + * with a minimum of fuss.

+ * @param {String} template A template containing + * a %%STRING%% placeholder. See + * {@link CSL.Output.Formats.html} for examples. + */ +CSL.Factory.substituteOne = function(template) { + return function(list) { + if ("string" == typeof list){ + return template.replace("%%STRING%%",list); + } + var decor = template.split("%%STRING%%"); + var ret = [{"is_delimiter":true,"value":decor[0]}].concat(list); + ret.push({"is_delimiter":true,"value":decor[1]}); + return ret; + }; +}; + + +/** + * Two-tiered substitutions gadget. + *

This is used for + * options like "font-family", where the option value + * cannot be determined until the attribute is processed.

+ * @param {String} template A template containing + * %%STRING%% and %%PARAM%% + * placeholders. See {@link CSL.Output.Formats.html} for + * examples. + */ +CSL.Factory.substituteTwo = function(template) { + return function(param) { + var template2 = template.replace("%%PARAM%%", param); + return function(list) { + if ("string" == typeof list){ + return template2.replace("%%STRING%%",list); + } + var decor = template2.split("%%STRING"); + var ret = [{"is_delimiter":true,"value":decor[0]}].concat(list); + ret.push({"is_delimiter":true,"value":decor[1]}); + return ret; + }; + }; +}; + +/** + * Generate string functions for designated output mode. + *

Only "html" (the default) is supported at present.

+ * @param {String} mode Either "html" or "rtf", eventually. + */ +CSL.Factory.Mode = function(mode){ + var decorations = new Object(); + + var params = CSL.Output.Formats[mode]; + for (var param in params) { + var func = false; + var val = params[param]; + var args = param.split('/'); + + if (typeof val == "string" && val.indexOf("%%STRING%%") > -1) { + if (val.indexOf("%%PARAM%%") > -1) { + func = CSL.Factory.substituteTwo(val); + } else { + func = CSL.Factory.substituteOne(val); + } + } else if (typeof val == "boolean" && !val) { + func = CSL.Output.Formatters.passthrough; + } else if (typeof val == "function") { + func = val; + } else { + throw "CSL.Compiler: Bad "+mode+" config entry for "+param+": "+val; + } + + if (args.length == 1) { + decorations[args[0]] = func; + } else if (args.length == 2) { + if (!decorations[args[0]]) { + decorations[args[0]] = new Object(); + } + decorations[args[0]][args[1]] = func; + } + } + return decorations; +}; + + +/** + * Macro expander. + *

Called on the state object.

+ */ +CSL.Factory.expandMacro = function(macro_key_token){ + var mkey = macro_key_token.postponed_macro; + if (this.build.macro_stack.indexOf(mkey) > -1){ + throw "CSL processor error: call to macro \""+mkey+"\" would cause an infinite loop"; + } else { + this.build.macro_stack.push(mkey); + } + var ret = new Array(); + // + // XXXXX This implicit group stuff can be dropped, I think. + // XXXXX Macros don't take decorations or anything. + var start_token = new CSL.Factory.Token("group",CSL.START); + ret.push(start_token); + + for (var i in this.build.macro[mkey]){ + // + // could use for each; this was an attempt to get a + // fresh copy of the token to defeat a loop involving + // interaction between sort and citation render. had + // no effect, probably not needed. + var token = this.build.macro[mkey][i]; + if (token.postponed_macro){ + // + // nested expansion + ret.concat(CSL.Factory.expandMacro.call(this,token)); + } else { + // + // clone the token, so that navigation pointers are + // specific to the token list into which the macro + // is being expanded. + var newtoken = new Object(); + for (i in token) { + newtoken[i] = token[i]; + } + ret.push(newtoken); + } + } + + var end_token = new CSL.Factory.Token("group",CSL.END); + ret.push(end_token); + + this.build.macro_stack.pop(); + + return ret; +}; + + +CSL.Factory.cloneAmbigConfig = function(config){ + var ret = new Object(); + ret["names"] = new Array(); + ret["givens"] = new Array(); + ret["year_suffix"] = false; + ret["disambiguate"] = false; + for (var i in config["names"]){ + var param = config["names"][i]; + ret["names"][i] = param; + } + for (var i in config["givens"]){ + var param = new Array(); + for (var j in config["givens"][i]){ + param.push(config["givens"][i][j]); + } + ret["givens"].push(param); + } + ret["year_suffix"] = config["year_suffix"]; + ret["disambiguate"] = config["disambiguate"]; + return ret; +}; diff --git a/src/formats.js b/src/formats.js new file mode 100644 index 000000000..7ea28ee30 --- /dev/null +++ b/src/formats.js @@ -0,0 +1,42 @@ +dojo.provide("csl.formats"); +if (!CSL) { + load("./src/csl.js"); +} + +/** + * Output specifications. + * @class + */ +CSL.Output.Formats = function(){}; + +/** + * HTML output format specification. + *

The headline says it all. The source code for this + * object can be used as a template for producing other + * output modes.

+ */ +CSL.Output.Formats.prototype.html = { + "@font-family":"%%STRING%%", + "@font-style/italic":"%%STRING%%", + "@font-style/normal":false, + "@font-style/oblique":"%%STRING%%", + "@font-variant/small-caps":"%%STRING%%", + "@font-variant/normal":false, + "@font-weight/bold":"%%STRING%%", + "@font-weight/normal":false, + "@font-weight/light":false, + "@text-decoration/none":false, + "@text-decoration/underline":"%%STRING%%", + "@vertical-align/baseline":false, + "@vertical-align/sup":"%%STRING%%", + "@vertical-align/sub":"%%STRING%%", + "@text-case/lowercase":CSL.Output.Formatters.lowercase, + "@text-case/uppercase":CSL.Output.Formatters.uppercase, + "@text-case/capitalize-first":CSL.Output.Formatters.capitalize_first, + "@text-case/capitalize-all":CSL.Output.Formatters.capitalize_all, + "@text-case/title":CSL.Output.Formatters.title_capitalization, + "@text-case/sentence":CSL.Output.Formatters.sentence_capitalization, + "@quotes":"&lquo;%%STRING%%&rquo;" +}; + +CSL.Output.Formats = new CSL.Output.Formats(); \ No newline at end of file diff --git a/src/formatters.js b/src/formatters.js new file mode 100644 index 000000000..ccf5ca778 --- /dev/null +++ b/src/formatters.js @@ -0,0 +1,156 @@ +dojo.provide("csl.formatters"); +if (!CSL) { + load("./src/csl.js"); +} + +/** + * A bundle of handy functions for text processing. + *

Several of these are ripped off from various + * locations in the Zotero source code.

+ * @namespace Toolkit of string functions + */ +CSL.Output.Formatters = new function(){}; + +/** + * A noop that just delivers the string. + */ +CSL.Output.Formatters.passthrough = function(string){ + return string; +}; + +// +// XXXXX +// A bit of interest coming up with vertical-align. +// This needs to include the prefixes and suffixes +// in its scope, so it's applied last, AFTER they +// are appended to the string. I think it's the +// only one that will need to work that way. + + +/** + * Force all letters in the string to lowercase. + */ +CSL.Output.Formatters.lowercase = function(string) { + // + // XXXXX + // this listiness in lowercase and uppercase should + // be handled when decorations are applied; these + // functions should not have to worry about it. + // XXXXX + // the listiness stuff can go away now. + if ("object" == typeof string){ + var ret = new Array(); + for each (item in string){ + ret.push(item.LowerCase()); + } + return ret; + } + return string.LowerCase(); +}; + + +/** + * Force all letters in the string to uppercase. + */ +CSL.Output.Formatters.uppercase = function(string) { + if ("object" == typeof string){ + var ret = new Array(); + for each (item in string){ + ret.push(item.toUpperCase()); + } + return ret; + } + return string.toUpperCase(); +}; + + +/** + * Force capitalization of the first letter in the string, leave + * the rest of the characters untouched. + */ +CSL.Output.Formatters.capitalize_first = function(string) { + return string[0].toUpperCase()+string.substr(1); +}; + + +/** + * Similar to capitalize_first, but force the + * subsequent characters to lowercase. + */ +CSL.Output.Formatters.sentence_capitalization = function(string) { + return string[0].toUpperCase()+string.substr(1).toLowerCase(); +}; + + +/** + * Force the first letter of each space-delimited + * word in the string to uppercase, and force remaining + * letters to lowercase. Single characters are forced + * to uppercase. + */ +CSL.Output.Formatters.capitalize_all = function(string) { + var strings = string.split(" "); + for(var i=0; i 1) { + strings[i] = strings[i][0].toUpperCase()+strings[i].substr(1).toLowerCase(); + } else if(strings[i].length == 1) { + strings[i] = strings[i].toUpperCase(); + } + } + return strings.join(" "); +}; + + +/** + * A complex function that attempts to produce a pattern + * of capitalization appropriate for use in a title. + * Will not touch words that have some capitalization + * already; to force reformatting, convert the string + * to all uppercase or lowercase before passing it to + * this function. + */ +CSL.Output.Formatters.title_capitalization = function(string) { + if (!string) { + return ""; + } + + // split words + var words = string.split(delimiterRegexp); + var isUpperCase = string.toUpperCase() == string; + + var newString = ""; + var delimiterOffset = words[0].length; + var lastWordIndex = words.length-1; + var previousWordIndex = -1; + for(var i=0; i<=lastWordIndex; i++) { + // only do manipulation if not a delimiter character + if(words[i].length != 0 && (words[i].length != 1 || !delimiterRegexp.test(words[i]))) { + var upperCaseVariant = words[i].toUpperCase(); + var lowerCaseVariant = words[i].toLowerCase(); + + // only use if word does not already possess some capitalization + if(isUpperCase || words[i] == lowerCaseVariant) { + if( + // a skip word + skipWords.indexOf(lowerCaseVariant.replace(/[^a-zA-Z]+/, "")) != -1 + // not first or last word + && i != 0 && i != lastWordIndex + // does not follow a colon + && (previousWordIndex == -1 || words[previousWordIndex][words[previousWordIndex].length-1] != ":") + ) { + words[i] = lowerCaseVariant; + } else { + // this is not a skip word or comes after a colon; + // we must capitalize + words[i] = upperCaseVariant[0] + lowerCaseVariant.substr(1); + } + } + previousWordIndex = i; + } + + newString += words[i]; + } + return newString; +}; + + diff --git a/src/lib.js b/src/lib.js new file mode 100644 index 000000000..3ee3b317f --- /dev/null +++ b/src/lib.js @@ -0,0 +1,12 @@ +dojo.provide("csl.lib"); +if (!CSL) { + load("./src/csl.js"); +} +/** + * Functions for processing CSL node elements and attributes. + *

Function names correspond to CSL element + * and attribute names.

+ * @namespace Functions corresponding CSL elements and attributes. + */ +CSL.Lib = {}; + diff --git a/src/libnames.js b/src/libnames.js new file mode 100644 index 000000000..3f462e65b --- /dev/null +++ b/src/libnames.js @@ -0,0 +1,287 @@ +dojo.provide("csl.libnames"); +if (!CSL) { + load("./src/csl.js"); +} + +/** + * The names node, start and end. + *

Name handling happens here. It's ... complicated.

+ * @name CSL.Lib.Elements.names + * @function + */ +CSL.Lib.Elements.names = new function(){ + this.build = build; + function build(state,target){ + if (this.tokentype == CSL.START || this.tokentype == CSL.SINGLETON){ + + var init_names = function(state,Item){ + if (state.tmp.value.length == 0){ + for each (var variable in this.variables){ + // + // If the item has been marked for quashing, skip it. + if (Item[variable] && ! state.tmp.name_quash[variable]){ + state.fun.mark_output(state,Item[variable]); + state.tmp.names_max.push(Item[variable].length); + state.tmp.value.push({"type":variable,"names":Item[variable]}); + // saving relevant names separately, for reference + // in splice collapse + state.tmp.names_used.push(state.tmp.value.slice()); + } + }; + } + }; + this["execs"].push(init_names); + }; + + if (this.tokentype == CSL.START){ + + state.build.names_flag = true; + + var set_et_al_params = function(state,Item){ + state.output.startTag("names",this); + // + // No value or zero means a first reference, + // anything else is a subsequent reference. + if (Item.position || state.tmp.force_subsequent){ + if (! state.tmp["et-al-min"]){ + if (state[state.tmp.area].opt["et-al-subsequent-min"]){ + state.tmp["et-al-min"] = state[state.tmp.area].opt["et-al-subsequent-min"]; + } else { + state.tmp["et-al-min"] = state[state.tmp.area].opt["et-al-min"]; + } + } + if (! state.tmp["et-al-use-first"]){ + if (state[state.tmp.area].opt["et-al-subsequent-use-first"]){ + state.tmp["et-al-use-first"] = state[state.tmp.area].opt["et-al-subsequent-use-first"]; + } else { + state.tmp["et-al-use-first"] = state[state.tmp.area].opt["et-al-use-first"]; + } + } + } else { + if (! state.tmp["et-al-min"]){ + state.tmp["et-al-min"] = state[state.tmp.area].opt["et-al-min"]; + } + if (! state.tmp["et-al-use-first"]){ + state.tmp["et-al-use-first"] = state[state.tmp.area].opt["et-al-use-first"]; + } + } + }; + this["execs"].push(set_et_al_params); + }; + + if (this.tokentype == CSL.END){ + + var handle_names = function(state,Item){ + var namesets = new Array(); + var common_term = state.fun.get_common_term(state,state.tmp.value); + if (common_term){ + namesets = state.tmp.value.slice(0,1); + } else { + namesets = state.tmp.value; + } + var local_count = 0; + var nameset = new Object(); + + state.output.addToken("space"," "); + state.output.addToken("sortsep",state.output.getToken("name").strings["sort-separator"]); + + if (!state.output.getToken("etal")){ + state.output.addToken("etal-join",", "); + state.output.addToken("etal"); + } else { + state.output.addToken("etal-join",""); + } + if (!state.output.getToken("label")){ + state.output.addToken("label"); + } + if (!state.output.getToken("etal").strings.et_al_term){ + state.output.getToken("etal").strings.et_al_term = state.opt.term["et-al"]["long"][0]; + } + state.output.addToken("commasep",", "); + for each (namepart in ["secondary-key","primary-key","prefix","suffix"]){ + if (!state.output.getToken(namepart)){ + state.output.addToken(namepart); + } + } + for (var namesetIndex in namesets){ + nameset = namesets[namesetIndex]; + if (!state.tmp.suppress_decorations && (state[state.tmp.area].opt.collapse == "year" || state[state.tmp.area].opt.collapse == "year-suffix")){ + if (state.tmp.last_names_used.length == state.tmp.names_used.length){ + var lastones = state.tmp.last_names_used[state.tmp.nameset_counter]; + var currentones = state.tmp.names_used[state.tmp.nameset_counter]; + var compset = currentones.concat(lastones); + if (state.fun.get_common_term(state,compset)){ + continue; + } + } + } + if (!state.tmp.disambig_request){ + state.tmp.disambig_settings["givens"][state.tmp.nameset_counter] = new Array(); + } + // + // Here is where we maybe truncate the list of + // names, to satisfy the et-al constraints. + var display_names = nameset.names.slice(); + var sane = state.tmp["et-al-min"] >= state.tmp["et-al-use-first"]; + // + // if there is anything on name request, we assume that + // it was configured correctly via state.names_request + // by the function calling the renderer. + var discretionary_names_length = state.tmp["et-al-min"]; + + // + // if rendering for display, do not honor a disambig_request + // to set names length below et-al-use-first + // + if (state.tmp.suppress_decorations){ + if (state.tmp.disambig_request){ + discretionary_names_length = state.tmp.disambig_request["names"][state.tmp.nameset_counter]; + } else if (display_names.length >= state.tmp["et-al-min"]){ + discretionary_names_length = state.tmp["et-al-use-first"]; + } + } else { + if (state.tmp.disambig_request && state.tmp["et-al-use-first"] < state.tmp.disambig_request["names"][state.tmp.nameset_counter]){ + discretionary_names_length = state.tmp.disambig_request["names"][state.tmp.nameset_counter]; + } else if (display_names.length >= state.tmp["et-al-min"]){ + discretionary_names_length = state.tmp["et-al-use-first"]; + } + } + var overlength = display_names.length > discretionary_names_length; + var et_al = false; + var and_term = false; + if (sane && overlength){ + if (! state.tmp.sort_key_flag){ + et_al = state.output.getToken("etal").strings.et_al_term; + } + display_names = display_names.slice(0,discretionary_names_length); + } else { + if (state.output.getToken("name").strings["and"] && ! state.tmp.sort_key_flag && display_names.length > 1){ + and_term = state.output.getToken("name").strings["and"]; + } + + } + state.tmp.disambig_settings["names"][state.tmp.nameset_counter] = display_names.length; + local_count += display_names.length; + + // + // "name" is the format for the outermost nesting of a nameset + // "inner" is a format consisting only of a delimiter, used for + // joining all but the last name in the set together. + var delim = state.output.getToken("name").strings.delimiter; + state.output.addToken("inner",delim); + //state.tmp.tokenstore["and"] = new CSL.Factory.Token("and"); + if (and_term){ + state.output.formats.value()["name"].strings.delimiter = and_term; + } + for (var i in nameset.names){ + // + // set the display mode default for givennames if required + if (state.tmp.disambig_request){ + // + // fix a request for initials that makes no sense. + // can't do this in disambig, because the availability + // of initials is not a global parameter. + var val = state.tmp.disambig_settings["givens"][state.tmp.nameset_counter][i]; + if (val == 1 && ! state.tmp["initialize-with"]){ + val = 2; + } + var param = val; + } else { + var param = 2; + if (state.output.getToken("name").strings.form == "short"){ + param = 0; + } else if ("string" == typeof state.tmp["initialize-with"]){ + param = 1; + } + } + state.tmp.disambig_settings["givens"][state.tmp.nameset_counter][i] = param; + } + // + // configure label if poss + var label = false; + if (state.output.getToken("label").strings.label_position){ + var term; + if (common_term){ + term = common_term; + } else { + term = state.opt.term[nameset.type]; + } + if (nameset.names.length > 1){ + label = term[state.output.getToken("label").strings.form][1]; + } else { + label = term[state.output.getToken("label").strings.form][0]; + } + }; + // + // Nesting levels are opened to control joins with + // content at the end of the names block + // + + // Gotcha. Don't want to use startTag here, it pushes + // a fresh format token namespace, and we lose our pointer.] + // Use openLevel (and possibly addToken) instead. + + state.output.openLevel("empty"); // for term join + + if (label && state.output.getToken("label").strings.label_position == CSL.BEFORE){ + state.output.append(label,"label"); + } + + + state.output.openLevel("etal-join"); // join for etal + + CSL.Util.Names.outputNames(state,display_names); + + if (et_al){ + state.output.append(et_al,"etal"); + } + + state.output.closeLevel(); // etal + + if (label && state.tmp.name_label_position != CSL.BEFORE){ + state.output.append(label,"label"); + } + + state.output.closeLevel(); // term + + state.tmp.nameset_counter += 1; + }; + + if (state.output.getToken("name").strings.form == "count"){ + state.output.clearlevel(); + state.output.append(local_count.toString()); + state.tmp["et-al-min"] = false; + state.tmp["et-al-use-first"] = false; + } + }; + this["execs"].push(handle_names); + }; + + if (this.tokentype == CSL.END && state.build.form == "count" && false){ + state.build.form = false; + + var output_name_count = function(state,Item){ + var name_count = 0; + for each (var v in this.variables){ + if(Item[v] && Item[v].length){ + name_count += Item[v].length; + } + } + state.output.append(name_count.toString()); + }; + this["execs"].push(output_name_count); + }; + + if (this.tokentype == CSL.END){ + var unsets = function(state,Item){ + state.fun.names_reinit(state,Item); + state.output.endTag(); // names + }; + this["execs"].push(unsets); + + state.build.names_flag = false; + state.build.name_flag = false; + } + target.push(this); + } +}; \ No newline at end of file diff --git a/src/output.js b/src/output.js new file mode 100644 index 000000000..934459259 --- /dev/null +++ b/src/output.js @@ -0,0 +1,13 @@ +dojo.provide("csl.output"); +if (!CSL){ + load("./src/csl.js"); +} + +/** + * Output functions and specifications. + *

Various bits and pieces related to output are + * collected here. To create or modify a format, check + * out the file formats.js.

+ * @namespace Output formats and configuration bundles. + */ +CSL.Output = {}; diff --git a/src/queue.js b/src/queue.js new file mode 100644 index 000000000..854da2b03 --- /dev/null +++ b/src/queue.js @@ -0,0 +1,248 @@ +dojo.provide("csl.queue"); +if (!CSL) { + load("./src/csl.js"); +} + + +/** + * Output queue object. + * @class + */ +CSL.Output.Queue = function(state){ + this.state = state; + this.queue = new Array(); + this.empty = new CSL.Factory.Token("empty"); + var tokenstore = {}; + tokenstore["empty"] = this.empty; + this.formats = new CSL.Factory.Stack( tokenstore ); + this.current = new CSL.Factory.Stack( this.queue ); + this.suppress_join_punctuation = false; +}; + +CSL.Output.Queue.prototype.getToken = function(name){ + var ret = this.formats.value()[name]; + return ret; +}; + +// Store a new output format token based on another +CSL.Output.Queue.prototype.addToken = function(name,modifier,token){ + var newtok = new CSL.Factory.Token("output"); + if ("string" == typeof token){ + token = this.formats.value()[token]; + } + if (token && token.strings){ + for (attr in token.strings){ + newtok.strings[attr] = token.strings[attr]; + } + newtok.decorations = token.decorations; + + } + if ("string" == typeof modifier){ + newtok.strings.delimiter = modifier; + } + this.formats.value()[name] = newtok; +}; + +// +// newFormat adds a new bundle of formatting tokens to +// the queue's internal stack of such bundles +CSL.Output.Queue.prototype.pushFormats = function(tokenstore){ + if (!tokenstore){ + tokenstore = new Object(); + } + tokenstore["empty"] = this.empty; + this.formats.push(tokenstore); +}; + + +CSL.Output.Queue.prototype.popFormats = function(tokenstore){ + this.formats.pop(); +}; + +CSL.Output.Queue.prototype.startTag = function(name,token){ + var tokenstore = {}; + tokenstore[name] = token; + this.pushFormats( tokenstore ); + this.openLevel(name); +} + +CSL.Output.Queue.prototype.endTag = function(){ + this.closeLevel(); + this.popFormats(); +} + +// +// newlevel adds a new blob object to the end of the current +// list, and adjusts the current pointer so that subsequent +// appends are made to blob list of the new object. + +CSL.Output.Queue.prototype.openLevel = function(token){ + if (!this.formats.value()[token]){ + throw "CSL processor error: call to nonexistent format token \""+token+"\""; + } + //print("newlevel: "+token); + // + // delimiter, prefix, suffix, decorations from token + var blob = new CSL.Factory.Blob(this.formats.value()[token]); + var curr = this.current.value(); + curr.push( blob ); + this.current.push( blob.blobs ); +}; + +/** + * "merge" used to be real complicated, now it's real simple. + */ +CSL.Output.Queue.prototype.closeLevel = function(name){ + //print("merge"); + this.current.pop(); +} + +// +// append does the same thing as newlevel, except +// that the blob it pushes has text content, +// and the current pointer is not moved after the push. + +CSL.Output.Queue.prototype.append = function(str,tokname){ + //print("append: "+str); + var blob = false; + if (!tokname){ + var token = this.formats.value()["empty"]; + } else if (tokname == "literal"){ + var token = true; + blob = str; + } else if ("string" == typeof tokname){ + var token = this.formats.value()[tokname]; + } else { + var token = tokname; + } + if (!token){ + throw "CSL processor error: unknown format token name: "+tokname; + } + if (!blob){ + blob = new CSL.Factory.Blob(token,str); + } + var curr = this.current.value(); + curr.push( blob ); + this.state.tmp.term_predecessor = true; +} + +CSL.Output.Queue.prototype.string = function(state,blobs,blob){ + //print("string"); + var ret; + ret = { "str": [], "obj": [] }; + if (blobs.length == 1 && "string" == blobs[0].blobs){ + ret["str"] = blobs[0]; + } else { + for each (var blobjr in blobs){ + var strPlus = {"str":"","obj":[]}; + if ("string" == typeof blobjr.blobs){ + if ("number" == typeof blobjr.num){ + strPlus["obj"] = blobjr; + } else { + strPlus["str"] = blobjr.blobs; + } + } else { + strPlus = this.string(state,blobjr.blobs,blobjr); + }; + // + // If there is a suffix, or any decorations, trailing rangeable + // objects must be rendered immediately here. + // + if (strPlus["str"]){ + if (!state.tmp.suppress_decorations){ + for each (var params in blobjr.decorations){ + strPlus["str"] = state.fun.decorate[params[0]][params[1]](strPlus["str"]); + } + } + //print(str+" (with is_rangeable="+blobjr.strings.is_rangeable+")"); + strPlus["str"] = blobjr.strings.prefix + strPlus["str"] + blobjr.strings.suffix; + ret["str"].push(strPlus["str"]); + } + // + // this passes rangeable objects through + ret["obj"] = ret["obj"].concat(strPlus["obj"]); + }; + // + // The join only applies to non-rangeable objects. + // + if (blob) { + ret["str"] = ret["str"].join(blob.strings.delimiter); + } else { + // + // The list always seems to consist of a single string when this happens, + // which is fine by me. + // + //ret["str"] = ret["str"].join(""); + // XXX Obviously something needs to be done with rangeable + // XXX objects here! + // (will need to reverse the condition below after + // providing for force_render) + if (state.tmp.handle_ranges){ + ret["str"] = ret["str"].join(""); + //ret = ret["str"].join("") + this.renderBlobs(ret["obj"]); + } else { + ret = ret["str"].join(""); + } + //if (state.tmp.handle_ranges){ + // ret = ret["str"].join("") + this.renderBlobs(ret["obj"]); + // //ret = "OK"; + //} else { + // ret = ret["str"].join("") + this.renderBlobs(ret["obj"]); + //} + } + }; + this.queue = new Array(); + this.current.mystack = new Array(); + this.current.mystack.push( this.queue ); + return ret; +}; + +CSL.Output.Queue.prototype.clearlevel = function(){ + var blobs = this.current.value(); + for (var i=(blobs.length-1); i > -1; i--){ + blobs.pop(); + } +}; + +CSL.Output.Queue.prototype.dumbBlobs = function(state,blobs){ + +}; + +CSL.Output.Queue.prototype.renderBlobs = function(blobs){ + var state = this.state; + var ret = ""; + for (var i=0; i < blobs.length; i++){ + if (blobs[i].checkNext){ + blobs[i].checkNext(blobs[(i+1)]); + } + } + for each (var blob in blobs){ + if ("string" == typeof blob){ + ret += blob; + } else if (blob.status != CSL.SUPPRESS){ + // print("doing rangeable blob"); + var str = blob.blobs; + if (!state.tmp.suppress_decorations){ + for each (var params in blob.decorations){ + str = state.fun.decorate[params[0]][params[1]](str); + } + } + str = blob.strings.prefix + str + blob.strings.suffix; + if (blob.status == CSL.END){ + // + // XXXXX needs to be drawn from the object + ret += "-"; + } else if (blob.status == CSL.SUCCESSOR){ + // + // XXXXX needs to be drawn from the object + ret += ", "; + } else if (blob.status == CSL.START){ + // + // XXXXX needs to be drawn from the object + ret += ""; + } + ret += str; + } + } + return ret; +}; diff --git a/src/range.js b/src/range.js new file mode 100644 index 000000000..9d01dc548 --- /dev/null +++ b/src/range.js @@ -0,0 +1,69 @@ +dojo.provide("csl.range"); +if (!CSL) { + load("./src/csl.js"); +} + +/** + * An output instance object representing a number or a range + * + * with attributes next and start, and + * methods isRange(), renderStart(), renderEnd() and renderRange(). + * At render time, the output queue will perform optional + * collapsing of these objects in the queue, according to + * configurable options, and apply any decorations registered + * in the object to the output elements. + * @namespace Range object and friends. + */ + +CSL.Output.Number = function(num,mother_token){ + this.num = num; + this.blobs = num.toString(); + this.status = CSL.START; + this.strings = new Object(); + if (mother_token){ + this.decorations = mother_token.decorations; + this.strings.prefix = mother_token.strings.prefix; + this.strings.suffix = mother_token.strings.suffix; + this.successor_prefix = mother_token.successor_prefix; + this.range_prefix = mother_token.range_prefix; + this.formatter = mother_token.formatter; + if (this.formatter){ + this.type = this.formatter.format(1); + } + } else { + this.decorations = new Array(); + this.strings.prefix = ""; + this.strings.suffix = ""; + this.successor_prefix = ""; + this.range_prefix = ""; + this.formatter = new CSL.Output.DefaultFormatter(); + } +}; + + +CSL.Output.Number.prototype.setFormatter = function(formatter){ + this.formatter = formatter; + this.type = this.formatter.format(1); +}; + + +CSL.Output.DefaultFormatter = function (){}; +CSL.Output.DefaultFormatter.prototype.format = function (num){ + return num.toString(); +}; + + +CSL.Output.Number.prototype.checkNext = function(next){ + if ( ! next || ! next.num || this.type != next.type || next.num != (this.num+1)){ + if (this.status == CSL.SUCCESSOR_OF_SUCCESSOR){ + this.status = CSL.END; + } + } else { // next number is in the sequence + if (this.status == CSL.START){ + next.status = CSL.SUCCESSOR; + } else if (this.status == CSL.SUCCESSOR || this.status == CSL.SUCCESSOR_OF_SUCCESSOR){ + next.status = CSL.SUCCESSOR_OF_SUCCESSOR; + this.status = CSL.SUPPRESS; + } + }; +}; diff --git a/src/registry.js b/src/registry.js new file mode 100644 index 000000000..324ad17d4 --- /dev/null +++ b/src/registry.js @@ -0,0 +1,310 @@ +dojo.provide("csl.registry"); + +// +// should allow batched registration of items by +// key. should behave as an update, with deletion +// of items and the tainting of disambiguation +// partner sets affected by a deletes and additions. +// +// +// we'll need a reset method, to clear the decks +// in the citation area and start over. + +/** + * Registry of cited items. + *

This is a persistent store of disambiguation and + * sort order information relating to individual items + * for which rendering is requested. Item data is stored + * in a hash, with the item key as hash key, for quick + * retrieval. A virtual sequence within the hashed store + * is maintained on the fly as items are added to the + * store, using *_next and *_prev + * attributes on each item. A separate hash of items + * based on their undisambiguated cite form is + * maintained, and the item id list and disambiguation + * level for each set of disambiguation partners is shared + * through the registry item.

+ * @class + */ +CSL.Factory.Registry = function(state){ + this.debug = false; + this.debug_sort = false; + // + // each entry has a sort key, navigation vectors, + // and a disambiguation config object + if (this.debug){ + print("---> Instantiate registry"); + } + this.registry = new Object(); + // + // each ambig is a list of the ids of other objects + // that have the same base-level rendering + this.ambigs = new Object(); + this.start = false; + this.end = false; + this.initialized = false; + this.skip = false; + this.maxlength = 0; + this.sorter = new CSL.Factory.Registry.Comparifier(state,"bibliography_sort"); + + this.getSortedIds = function(){ + var step = "next"; + var item_id = this.start; + var ret = new Array(); + while (true){ + ret.push(item_id); + item_id = this.registry[item_id][step]; + if ( ! item_id){ + break; + } + } + return ret; + }; +}; + +CSL.Factory.Registry.prototype.insert = function(state,Item){ + // + // abort if we've already inserted + if (this.debug){ + print("---> Start of insert"); + } + if (this.registry[Item.id]){ + return; + } + // + // get the sort key (it's an array containing + // multiple key strings). + var sortkeys = state.getSortKeys(Item,"bibliography_sort"); + // + // get the disambiguation key and register it + // + var akey = state.getAmbiguousCite(Item); + var abase = state.getAmbigConfig(); + var modes = state.getModes(); + // + // registryItem instantiates an object with a copy of the + // sort key, and a list shared with + // disambiguation partners, if any, maintained + // in sort key order. + // (after this, we're ready to roll for the insert) + var newitem = { + "id":Item.id, + "seq":1, + "dseq":0, + "sortkeys":sortkeys, + "disambig":abase, + "prev":false, + "next":false + }; + // + // if the registry is empty, initialize it with + // this object. + if (this.debug){ + print("---> Begin manipulating registry"); + } + var breakme = false; + if (!this.initialized){ + if (this.debug_sort){ + print("-->initializing registry with "+newitem.id); + } + this.registry[newitem.id] = newitem; + this.start = newitem.id; + this.end = newitem.id; + this.initialized = true; + // + // XXXXX + //this.registerAmbigToken(state,akey,Item.id,abase.slice()); + this.registerAmbigToken(state,akey,Item.id,abase); + return; + } + // if this object is less than the first one, + // insert it as the first. + if (-1 == this.sorter.compareKeys(newitem.sortkeys,this.registry[this.start].sortkeys)){ + if (this.debug_sort){ + print("-->inserting "+newitem.id+" before "+this.start+" as first entry"); + } + newitem.next = this.registry[this.start].id; + this.registry[this.start].prev = newitem.id; + newitem.prev = false; + newitem.seq = 1; + var tok = this.registry[this.start]; + this.incrementSubsequentTokens(tok); + this.start = newitem.id; + this.registry[newitem.id] = newitem; + breakme = true; + } + // if this object is greater than the + // last one, insert it as the last. + if (-1 == this.sorter.compareKeys(this.registry[this.end].sortkeys,newitem.sortkeys) && !breakme){ + if (this.debug_sort){ + print("-->inserting "+newitem.id+" after "+this.end+" as last entry"); + } + newitem.prev = this.registry[this.end].id; + this.registry[this.end].next = newitem.id; + newitem.next = false; + newitem.seq = (this.registry[this.end].seq + 1); + this.end = newitem.id; + this.registry[newitem.id] = newitem; + breakme = true; + } + // + // if we reach this, it's safe to iterate + var curr = this.registry[this.end]; + while (true && !breakme){ + // compare the new token to be added with + // the one we're thinking about placing it after. + var cmp = this.sorter.compareKeys(curr.sortkeys,newitem.sortkeys); + if (cmp == -1){ + if (this.debug_sort){ + print("-->inserting "+newitem.id+" after "+curr.id); + } + // insert mid-list, after the tested item + this.registry[curr.next].prev = newitem.id; + newitem.next = curr.next; + newitem.prev = curr.id; + curr.next = newitem.id; + newitem.seq = (curr.seq+1); + this.incrementSubsequentTokens(this.registry[newitem.next]); + this.registry[newitem.id] = newitem; + breakme = true; + break; + } else if (cmp == 2){ + breakme = true; + } else if (cmp == 0) { + // insert _after_, but this one is equivalent + // to the comparison partner for sortkey purposes + // (so we needed to provide for cases where the + // inserted object ends up at the end of + // the virtual list.) + if (false == curr.next){ + if (this.debug_sort){ + print("-->inserting "+newitem.id+" after "+curr.id+" as last entry, although equal"); + } + newitem.next = false; + newitem.prev = curr.id; + curr.next = newitem.id; + newitem.seq = (curr.seq+1); + //this.incrementSubsequentTokens(curr); + this.registry[newitem.id] = newitem; + this.end = newitem.id; + breakme = true; + break; + } else { + if (this.debug_sort){ + print("-->inserting "+newitem.id+" after "+curr.id+", although equal"); + } + this.registry[curr.next].prev = newitem.id; + newitem.next = curr.next; + newitem.prev = curr.id; + curr.next = newitem.id; + newitem.seq = curr.seq; + this.registry[newitem.id] = newitem; + this.incrementSubsequentTokens(newitem); + breakme = true; + break; + } + } + if (breakme){ + break; + } + // + // we scan in reverse order, because working + // from the initial draft of the code, this + // makes it simpler to order cites in submission + // order, when no sort keys are available. + curr = this.registry[curr.prev]; + }; + if (this.debug){ + print("---> End of registry insert"); + } + // + // register the notional ambiguation config + this.registerAmbigToken(state,akey,Item.id,abase); + // + // if there are multiple ambigs, disambiguate them + if (this.ambigs[akey].length > 1){ + if (modes.length){ + if (this.debug){ + print("---> Names disambiguation begin"); + } + var leftovers = this.disambiguateCites(state,akey,modes); + if (this.debug){ + print("---> Names disambiguation done"); + } + // + // leftovers is a list of registry tokens. sort them. + leftovers.sort(this.compareRegistryTokens); + } else { + // + // if we didn't disambiguate with names, everything is + // a leftover. + var leftovers = new Array(); + for each (var key in this.ambigs[akey]){ + leftovers.push(this.registry[key]); + leftovers.sort(this.compareRegistryTokens); + } + } + } + // + // for anything left over, set disambiguate to true, and + // try again from the base. + if (leftovers && leftovers.length && state.opt.has_disambiguate){ + var leftovers = this.disambiguateCites(state,akey,modes,leftovers); + } + + if ( leftovers && leftovers.length && state[state.tmp.area].opt["disambiguate-add-year-suffix"]){ + var suffixes = state.fun.suffixator.get_suffixes(leftovers.length); + for (var i in leftovers){ + this.registry[ leftovers[i].id ].disambig[2] = suffixes[i]; + this.registry[ leftovers[i].id ].dseq = i; + } + } + if (this.debug) { + print("---> End of registry cleanup"); + } +}; + +/** + * Compare two sort keys + *

Nested, because keys are an array.

+ */ +CSL.Factory.Registry.Comparifier = function(state,keyset){ + var sort_directions = state[keyset].opt.sort_directions.slice(); + this.compareKeys = function(a,b){ + for (var i=0; i < a.length; i++){ + // + // for ascending sort 1 uses 1, -1 uses -1. + // For descending sort, the values are reversed. + var cmp = a[i].toLocaleLowerCase().localeCompare(b[i].toLocaleLowerCase()); + if (0 < cmp){ + return sort_directions[i][1]; + } else if (0 > cmp){ + return sort_directions[i][0]; + } + } + return 0; + }; +}; + + +/** + * Compare two disambiguation tokens by their registry sort order + *

Disambiguation lists need to be sorted this way, to + * obtain the correct year-suffix when that's used.

+ */ +CSL.Factory.Registry.prototype.compareRegistryTokens = function(a,b){ + if (a.seq > b.seq){ + return 1; + } else if (a.seq < b.seq){ + return -1; + } + return 0; +}; + +CSL.Factory.Registry.prototype.incrementSubsequentTokens = function (tok){ + while (tok.next){ + tok.seq += 1; + tok = this.registry[tok.next]; + } + tok.seq += 1; +}; diff --git a/src/render.js b/src/render.js new file mode 100644 index 000000000..933906da9 --- /dev/null +++ b/src/render.js @@ -0,0 +1,265 @@ +dojo.provide("csl.render"); +if (!CSL) { + load("./src/csl.js"); +} + +/** + * Rendering functions. + *

This is a bundle of methods that are attached to the + * completed style object, and offer facilities for rendering + * citations and bibliographies.

+ * @namespace Rendering functions. + */ +CSL.Core.Render = {}; + +/** + * Get the undisambiguated version of a cite, without decorations + *

This is used internally by the Registry.

+ */ +CSL.Core.Render.getAmbiguousCite = function(Item,disambig){ + if (disambig){ + this.tmp.disambig_request = disambig; + } else { + this.tmp.disambig_request = false; + } + this.tmp.area = "citation"; + this.tmp.suppress_decorations = true; + this.tmp.force_subsequent = true; + CSL.Core.Render._cite.call(this,Item); + this.tmp.force_subsequent = false; + var ret = this.output.string(this,this.output.queue); + this.tmp.suppress_decorations = false; + if (false){ + print("ok"); + } + return ret; +} + + +/** + * Get the sort key of an item, without decorations + *

This is used internally by the Registry.

+ */ +CSL.Core.Render.getSortKeys = function(Item,key_type){ + if (false){ + print("KEY TYPE: "+key_type); + } + var area = this.tmp.area; + var strip_prepositions = CSL.Util.Sort.strip_prepositions; + this.tmp.area = key_type; + this.tmp.disambig_request = false; + this.tmp.suppress_decorations = true; + CSL.Core.Render._cite.call(this,Item); + this.tmp.suppress_decorations = false; + for (var i in this[key_type].keys){ + this[key_type].keys[i] = strip_prepositions(this[key_type].keys[i]); + } + if (false){ + print("sort keys ("+key_type+"): "+this[key_type].keys); + } + this.tmp.area = area; + return this[key_type].keys; +}; + +/** + * Return current base configuration for disambiguation + */ +CSL.Core.Render.getAmbigConfig = function(){ + var config = this.tmp.disambig_request; + if (!config){ + config = this.tmp.disambig_settings; + } + var ret = this.fun.clone_ambig_config(config); + return ret; +}; + + +/** + * Return max values for disambiguation + */ +CSL.Core.Render.getMaxVals = function(){ + return this.tmp.names_max.mystack.slice(); +}; + +/** + * Return min value for disambiguation + */ +CSL.Core.Render.getMinVal = function(){ + return this.tmp["et-al-min"]; +}; + +/** + * Return delimiter for use in join + *

Splice evaluation is done during cite + * rendering, and this method returns the + * result. Evaluation requires three items + * of information from the preceding cite, if + * one is present: the names used; the years + * used; and the suffix appended to the + * citation. These details are copied into + * the state object before processing begins, + * and are cleared by the processor on + * completion of the run.

+ */ +CSL.Core.Render.getSpliceDelimiter = function(){ + return this.tmp.splice_delimiter; +}; + +/** + * Return available modes for disambiguation + */ +CSL.Core.Render.getModes = function(){ + var ret = new Array(); + if (this[this.tmp.area].opt["disambiguate-add-names"]){ + ret.push("names"); + } + if (this[this.tmp.area].opt["disambiguate-add-givenname"]){ + ret.push("givens"); + } + return ret; +}; + + +/* + * Compose individual cites into a single string. (This requires + * further work to accomodate various adjustments to inter-cite + * splicing. There are lots of possibilities, which will require + * careful planning.) + */ +CSL.Core.Render._bibliography_entries = function (){ + this.tmp.area = "bibliography"; + var input = this.fun.retriever.getInput(this.registry.getSortedIds()); + this.tmp.disambig_override = true; + this.output.addToken("bibliography","\n"); + this.output.openLevel("bibliography"); + for each (item in input){ + if (false){ + print("BIB: "+item.id); + } + CSL.Core.Render._cite.call(this,item); + //this.output.squeeze(); + } + this.output.closeLevel(); + this.tmp.disambig_override = false; + return this.output.string(this,this.output.queue); +}; + +/** + * Register one or more citation items. + *

Accepts a single item key or a list of item keys as + * a single argument, fetches the relevant Items using the + * appropriate wrapper in {@link CSL.System.Retrieval}, + * and enters each Item into the persistent session + * registry.

+ */ +CSL.Core.Render.registerItemKeys = function() { + +}; + + +/* + * Compose individual cites into a single string. (This requires + * further work to accomodate various adjustments to inter-cite + * splicing. There are lots of possibilities, which will require + * careful planning.) + */ +CSL.Core.Render._unit_of_reference = function (inputList){ + this.tmp.area = "citation"; + var delimiter = ""; + + var result = ""; + + var objects = []; + + for each (var Item in inputList){ + CSL.Core.Render._cite.call(this,Item); + // + // This will produce a stack with one + // layer, and exactly one or two items. + // We merge these as we go along, to get + // the joins right for the pairs. + delimiter = this.getSpliceDelimiter(); + this.tmp.delimiter.replace(delimiter); + this.tmp.handle_ranges = true; + var composite = this.output.string(this,this.output.queue); + this.tmp.handle_ranges = false; + // + // At last! Ready to compose trailing blobs. + // We convert "string" output object to an array + // before collapsing blobs. + if (composite["str"]){ + if ("string" == typeof objects[(objects.length-1)]){ + var newstr = objects.pop() + this.tmp.splice_delimiter + composite["str"]; + objects.push(newstr); + } else { + objects.push(composite["str"]); + } + } + if (composite["obj"].length){ + objects = objects.concat(composite["obj"]); + } + } + result += this.output.renderBlobs(objects); + result = this.citation.opt.layout_prefix + result + this.citation.opt.layout_suffix; + if (!this.tmp.suppress_decorations){ + for each (var params in this.citation.opt.layout_decorations){ + result = this.fun.decorate[params[0]][params[1]](result); + } + } + return result; +}; + + +/* + * Render a single cite item. + * + * This is called on the state object, with a single + * Item as input. It iterates exactly once over the style + * citation tokens, and leaves the result of rendering in + * the top-level list in the relevant *.opt.output + * stack, as a list item consisting of a single string. + * + * (This might be dual-purposed for generating individual + * entries in a bibliography.) + */ +CSL.Core.Render._cite = function(Item){ + for each (var func in this.init){ + func(this,Item); + } + var next = 0; + while(next < this[this.tmp.area].tokens.length){ + next = CSL.Core.Render._render.call(this[this.tmp.area].tokens[next],this,Item); + } + for each (func in this.stop){ + func(this,Item); + } +}; + + +/* + * Render one style token. + * + * This is called on a token, with the state object + * and an Item object as arguments. + */ +CSL.Core.Render._render = function(state,Item){ + var next = this.next; + var maybenext = false; + if (false){ + print("---> Token: "+this.name+" ("+state.tmp.area+")"); + print(" next is: "+next+", success is: "+this.succeed+", fail is: "+this.fail); + } + if (this.evaluator){ + next = this.evaluator.call(this,state,Item); + }; + for each (var exec in this.execs){ + maybenext = exec.call(this,state,Item); + if (maybenext){ + next = maybenext; + }; + }; + if (false){ + print("---> done"); + } + return next; +}; diff --git a/src/retrieval.js b/src/retrieval.js new file mode 100644 index 000000000..94661e68a --- /dev/null +++ b/src/retrieval.js @@ -0,0 +1,304 @@ +dojo.provide("csl.retrieval"); +if (!CSL){ + load("./src/csl.js"); +} + +/** + * Static functions for retrieving field content. + *

What goes here will depend on the environment + * in which this is deployed. Functions take an item + * and a fieldname as argument.

+ * @namespace Retrieval + */ +CSL.System.Retrieval = function(){}; + +CSL.System.Retrieval.GetInput = function(){ + this.input = new Object(); +}; + +CSL.System.Retrieval.GetInput.prototype.setInput = function(state,item){ + this.input[item.id] = item; +} + +CSL.System.Retrieval.GetInput.prototype.getInput = function(name){ + var ret = new Array(); + if ("object" == typeof name && name.length){ + for each (filename in name){ + if (this.input[filename]){ + ret.push(this.input[filename]); + } else { + var datastring = readFile("data/" + filename + ".txt"); + eval( "obj = " + datastring ); + CSL.System.Tests.fixNames([obj],filename); + this.input[filename] = obj; + ret.push(obj); + } + } + } else if ("object" == typeof name){ + if (this.input[filename]){ + ret.push(this.input[filename]); + } else { + var datastring = readFile("data/" + filename + ".txt"); + this.input[filename] = obj; + eval( "obj = " + datastring ); + CSL.System.Tests.fixNames([obj],filename); + ret.push(obj); + } + } else { + throw "Failure reading test data file, WTF?"; + } + return ret; +} + +/** + * Get locale data for a specific language and return + * as a token list. + */ +CSL.System.Retrieval.getLocaleObjects = function(lang,locale){ + // + // we're a static function, so this refers to the + // global object + if ( ! locale ){ + try { + var locale = readFile( "./locale/"+localeRegistry()[lang] ); + } catch (e){ + throw "Unable to load locale for "+lang+"."; + } + } + var builder = new CSL.Core.Build(locale); + builder.build(); + return builder.state.opt.term; + + function localeRegistry (){ + return { + "af":"locales-af-AZ.xml", + "af":"locales-af-ZA.xml", + "ar":"locales-ar-AR.xml", + "bg":"locales-bg-BG.xml", + "ca":"locales-ca-AD.xml", + "cs":"locales-cs-CZ.xml", + "da":"locales-da-DK.xml", + "de":"locales-de-AT.xml", + "de":"locales-de-CH.xml", + "de":"locales-de-DE.xml", + "el":"locales-el-GR.xml", + "en":"locales-en-US.xml", + "es":"locales-es-ES.xml", + "et":"locales-et-EE.xml", + "fr":"locales-fr-FR.xml", + "he":"locales-he-IL.xml", + "hu":"locales-hu-HU.xml", + "is":"locales-is-IS.xml", + "it":"locales-it-IT.xml", + "ja":"locales-ja-JP.xml", + "ko":"locales-ko-KR.xml", + "mn":"locales-mn-MN.xml", + "nb":"locales-nb-NO.xml", + "nl":"locales-nl-NL.xml", + "pl":"locales-pl-PL.xml", + "pt":"locales-pt-BR.xml", + "pt":"locales-pt-PT.xml", + "ro":"locales-ro-RO.xml", + "ru":"locales-ru-RU.xml", + "sk":"locales-sk-SK.xml", + "sl":"locales-sl-SI.xml", + "sr":"locales-sr-RS.xml", + "sv":"locales-sv-SE.xml", + "th":"locales-th-TH.xml", + "tr":"locales-tr-TR.xml", + "uk":"locales-uk-UA.xml", + "vi":"locales-vi-VN.xml", + "zh":"locales-zh-CN.xml", + "zh":"locales-zh-TW.xml" + }; + }; +}; + +var _slashRe = /^(.*?)\b([0-9]{1,4})(?:([\-\/\.\u5e74])([0-9]{1,2}))?(?:([\-\/\.\u6708])([0-9]{1,4}))?\b(.*?)$/; +var _yearRe = /^(.*?)\b((?:circa |around |about |c\.? ?)?[0-9]{1,4}(?: ?B\.? ?C\.?(?: ?E\.?)?| ?C\.? ?E\.?| ?A\.? ?D\.?)|[0-9]{3,4})\b(.*?)$/i; +var _monthRe = null; +var _dayRe = null; + +/** + * Convert a string to an hash object + *

Object has the following content: + *

+ *
day
integer form of the day
+ *
month
integer form of the month (indexed from 0, not 1)
+ *
year
4 digit year (or, year + BC/AD/etc.)
+ *
part
anything that does not fall under any of the above categories + * (e.g., "Summer," etc.)
+ *
+ *

Note: the returned object is *not* a JS Date object

+ * + *

(shamelessly lifted from Zotero source)

+ */ +CSL.System.Retrieval.strToDate = function(string) { + var date = new Object(); + + // skip empty things + if(!string) { + return date; + } + + string = string.toString().replace(/^\s+/, "").replace(/\s+$/, "").replace(/\s+/, " "); + + // first, directly inspect the string + var m = _slashRe.exec(string); + var pre = m[1]; + var num1 = m[2]; + var div1_2 = m[3]; + var num2 = m[4]; + var div2_3 = m[5]; + var num3 = m[6]; + var post = m[7]; + if(m){ + var sane = (!m[5] || m[3] == m[5] || (m[3] == "\u5e74" && m[5] == "\u6708")); + var got_data = ((m[2] && m[4] && m[6]) || (!m[1] && !m[7])); + if (sane && got_data){ + // figure out date based on parts + if(num1.length == 3 || num1.length == 4 || div1_2 == "\u5e74") { + // ISO 8601 style date (big endian) + date.year = num1; + date.month = num2; + date.day = num3; + } else { + // local style date (middle or little endian) + date.year = num3; + // + // XXXX This is going to need some help + var country = "US"; + if(country == "US" || // The United States + country == "FM" || // The Federated States of Micronesia + country == "PW" || // Palau + country == "PH") { // The Philippines + date.month = num1; + date.day = num2; + } else { + date.month = num2; + date.day = num1; + } + } + + if(date.year) { + date.year = parseInt(date.year, 10); + } + + if(date.day) { + date.day = parseInt(date.day, 10); + } + + if(date.month) { + date.month = parseInt(date.month, 10); + + if(date.month > 12) { + // swap day and month + var tmp = date.day; + date.day = date.month; + date.month = tmp; + } + } + + if((!date.month || date.month <= 12) && (!date.day || date.day <= 31)) { + if(date.year && date.year < 100) { // for two digit years, determine proper + // four digit year + var today = new Date(); + var year = today.getFullYear(); + var twoDigitYear = year % 100; + var century = year - twoDigitYear; + + if(date.year <= twoDigitYear) { + // assume this date is from our century + date.year = century + date.year; + } else { + // assume this date is from the previous century + date.year = century - 100 + date.year; + } + } + + // subtract one for JS style + if(date.month){ + date.month--; + } + date.part = pre+post; + } else { + // + // give up; we failed the sanity check + date = {"part":string}; + } + } else { + date.part = string; + } + } else { + date.part = string; + } + + // couldn't find something with the algorithms; use regexp + // YEAR + if(!date.year) { + var m = _yearRe.exec(date.part); + if(m) { + date.year = num1; + date.part = pre+d1_2; + } + } + + // MONTH + if(!date.month) { + // compile month regular expression + var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', + 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; + // If using a non-English bibliography locale, try those too + if (Zotero.CSL.Global.locale != 'en-US') { + months = months.concat(Zotero.CSL.Global.getMonthStrings("short")); + } + if(!_monthRe) { + _monthRe = new RegExp("^(.*)\\b("+months.join("|")+")[^ ]*(?: (.*)$|$)", "i"); + } + + var m = _monthRe.exec(date.part); + if(m) { + // Modulo 12 in case we have multiple languages + date.month = months.indexOf(m[2][0].toUpperCase()+m[2].substr(1).toLowerCase()) % 12; + date.part = m[1]+m[3]; + } + } + + // DAY + if(!date.day) { + // compile day regular expression + if(!_dayRe) { + var daySuffixes = Zotero.getString("date.daySuffixes").replace(/, ?/g, "|"); + _dayRe = new RegExp("\\b([0-9]{1,2})(?:"+daySuffixes+")?\\b(.*)", "i"); + } + + var m = _dayRe.exec(date.part); + if(m) { + var day = parseInt(m[1], 10); + // Sanity check + if (day <= 31) { + date.day = day; + if(m.index > 0) { + date.part = date.part.substr(0, m.index); + if(m[2]) { + date.part += " "+m[2];; + } + } else { + date.part = m[2]; + } + } + } + } + + // clean up date part + if(date.part) { + date.part = date.part.replace(/^[^A-Za-z0-9]+/, "").replace(/[^A-Za-z0-9]+$/, ""); + if(!date.part.length) { + date.part = undefined; + } + } + return date; +}; + + + diff --git a/src/stack.js b/src/stack.js new file mode 100644 index 000000000..c3d22511b --- /dev/null +++ b/src/stack.js @@ -0,0 +1,87 @@ +dojo.provide("csl.stack"); +if (!CSL) { + load("./src/csl.js"); +} + + +/** + * String stack object. + *

Numerous string stacks are used to track nested + * parameters at runtime. This class provides methods + * that remove some of the aggravation of managing + * them.

+ * @class + */ +CSL.Factory.Stack = function(val,literal){ + this.mystack = new Array(); + if (literal || val){ + this.mystack.push(val); + } +}; + +/** + * Clear the stack + */ +CSL.Factory.Stack.prototype.clear = function(){ + this.mystack = new Array(); +}; + +/** + * Push a value onto the stack. + *

This just does what it says.

+ */ +CSL.Factory.Stack.prototype.push = function(val,literal){ + if (literal || val){ + this.mystack.push(val); + } else { + this.mystack.push(""); + } +}; + +/** + * Replace the top value on the stack. + *

This removes some ugly syntax from the + * main code.

+ */ +CSL.Factory.Stack.prototype.replace = function(val,literal){ + // + // safety fix after a bug was chased down. Rhino + // JS will process a negative index without error (!). + if (this.mystack.length == 0){ + throw "Internal CSL processor error: attempt to replace nonexistent stack item"; + } + if (literal || val){ + this.mystack[(this.mystack.length-1)] = val; + } else { + this.mystack[(this.mystack.length-1)] = ""; + } +}; + + +/** + * Remove the top value from the stack. + *

Just does what it says.

+ */ +CSL.Factory.Stack.prototype.pop = function(){ + this.mystack.pop(); +}; + + +/** + * Return the top value on the stack. + *

Removes a little hideous complication from + * the main code.

+ */ +CSL.Factory.Stack.prototype.value = function(){ + return this.mystack[(this.mystack.length-1)]; +}; + + +/** + * Return length (depth) of stack. + *

Used to identify if there is content to + * be handled on the stack

+ */ +CSL.Factory.Stack.prototype.length = function(){ + return this.mystack.length; +}; diff --git a/src/state.js b/src/state.js new file mode 100644 index 000000000..a4f086ce1 --- /dev/null +++ b/src/state.js @@ -0,0 +1,402 @@ +dojo.provide("csl.state"); +if (!CSL) { + load("./src/csl.js"); +} + +/** + * State object for storing options and tokens. + *

A container for objects passed between functions + * during processing.

+ * @param {Class} xmlCommandInterface The appropriate + * XML DOM interface class from {@link CSL.System.Xml}. + * @class + * @param {XML} xml A parsed XML object or XMLList. + */ +CSL.Factory.State = function (xmlCommandInterface,nodelist){ + this.init = new Array(); + this.stop = new Array(); + /** + * Global options. + *

Available in Render.

+ */ + this.opt = new Object(); + /** + * Scratch variables and stacks. + *

Available in Render.

+ */ + this.tmp = new Object(); + /** + * Generic functions. + *

Available in Render.

+ */ + this.fun = new Object(); + this.fun.retriever = new CSL.System.Retrieval.GetInput(); + /** + * Build-time scratch area. + *

Discarded after Build is complete.

+ */ + this.build = new Object(); + /** + * Alternate et-al term + *

Holds the localization key of the alternative term + * to be used for et-al in a names environment. Reduced + * to a term object when the element tag is processed during + * Build.

+ */ + this.build["alternate-term"] = false; + /** + * Configure-time scratch area. + *

Discarded after Configure is complete.

+ */ + this.configure = new Object(); + /** + * Item registry. + *

A persistent item registry. Each cite + * item is registered here before its first + * rendering. The registry can be queried for + * sort order information (for producing + * bibliographies) and for disambiguation + * hints (needed for producing citations + * in all styles, and for bibliographies in + * many styles). This registry does not + * carry all details of a citation; only the + * essential details needed to establish + * sort order and determine disambiguation + * handling is held here. + */ + // XXXXX MOVED to build.js. Registry now installed + // after initial build phase, so that comparison + // function can be instantiated with sort key + // configuration derived from initial token scan. + // + // this.registry = new CSL.Factory.Registry(); + // + /** + * Citation area. + *

Holds the options and token list for the style + * citation format (the form of a reference to be + * used in the body of a document).

+ */ + this.citation = new Object(); + /** + * Citation options area. + *

Holds a mixture of persistent and ephemeral + * options and scratch data used during processing of + * a citation.

+ */ + this.citation.opt = new Object(); + this.citation.tokens = new Array(); + /** + * Bibliography area. + *

Holds the options and token list for the + * style bibliography entry format (the form of + * a source reference to be used in a bibliography + * included in a document).

+ */ + this.bibliography = new Object(); + /** + * Bibliography options area. + *

Holds a mixture of persistent and ephemeral + * options and scratch data used during processing of + * a bibliography.

+ */ + this.bibliography.opt = new Object(); + this.bibliography.tokens = new Array(); + /** + * Default values. + *

The various et-al values are set globally, + * and the appropriate value is set by the names start + * tag at runtime, depending on whether the Item is a + * first or a subsequent reference.

+ */ + this.citation.opt["et-al-min"] = 0; + this.citation.opt["et-al-use-first"] = 1; + this.citation.opt["et-al-subsequent-min"] = false; + this.citation.opt["et-al-subsequent-use-first"] = false; + + this.bibliography.opt["et-al-min"] = 0; + this.bibliography.opt["et-al-use-first"] = 1; + this.bibliography.opt["et-al-subsequent-min"] = 0; + this.bibliography.opt["et-al-subsequent-use-first"] = 1; + /** + * Bibliography sort area. + *

Holds the options and token list for the + * style bibliography sort key format.

+ */ + this.bibliography_sort = new Object(); + this.citation_sort = new Object(); + /** + * Sort options area. + *

Holds a mixture of persistent and ephemeral + * options and scratch data used during processing of + * a bibliography.

+ */ + // + // XXXXX Hmm. This needs to be subdivided, with + // separate rendering areas for each key. Should + // permit an arbitrary number of keys, so the whole + // structure needs to be generated programmatically. + // Either that, or (MUCH more sensible!) wrap the + // rendering tokens in a key element that stores the + // strings separately. Ah, that's much better. + // So the key element will not be a noop. + + this.bibliography_sort.tokens = new Array(); + this.bibliography_sort.opt = new Object(); + this.bibliography_sort.opt.sort_directions = new Array(); + this.bibliography_sort.keys = new Array(); + + this.citation_sort.tokens = new Array(); + this.citation_sort.opt = new Object(); + this.citation_sort.opt.sort_directions = new Array(); + this.citation_sort.keys = new Array(); + + // + // the language setting will not be needed for processing, + // but the compiled object should be able to report it. + this.opt.lang = false; + // + // terms are needed globally for rendering, so this + // is saved into opt. + this.opt.term = new Object(); + // + // configuration array to hold the collapse + // options, if any. + this.citation.opt.collapse = new Array(); + this.bibliography.opt.collapse = new Array(); + // + // disambiguate options + this.citation.opt["disambiguate-add-names"] = false; + this.citation.opt["disambiguate-add-givenname"] = false; + this.bibliography.opt["disambiguate-add-names"] = false; + this.bibliography.opt["disambiguate-add-givenname"] = false; + // + // scratch variable to display the total + // number of names in all rendered variables + // in a cite. initialized to zero by the + // citation element, incremented by each + // name variable actually rendered + this.tmp.names_max = new CSL.Factory.Stack(); + this.tmp.names_base = new CSL.Factory.Stack(); + this.tmp.givens_base = new CSL.Factory.Stack(); + + // + // flags that we are in the bibliography area. + // used by sort. + this.build.in_bibliography = false; + // + // this is used to set a requested set of + // disambiguation parameters in the output. + // for the array elements, the base array + // (either zero for each nameset, or full-up + // if givens are already used) is set + // during names processing, if no value + // is set in the processor before a rendering + // run. to simplify things for the calling + // function, these are just bog-standard arrays, + // and can be safely overwritten. + this.tmp.disambig_request = false; + // + // scratch variable to toggle an attempt to set a + // name in sort order rather than display + // order. + this.tmp["name-as-sort-order"] = false; + // + // suppress decorations (used for generating + // sort keys and disambiguation keys) + this.tmp.suppress_decorations = false; + // + // empty settings array, used to report settings used + // if disambig_request is not set at runtime + this.tmp.disambig_settings = new CSL.Factory.AmbigConfig(); + // + // sort key array + this.tmp.bib_sort_keys = new Array(); + // + // holds the prefix between the start of a group + // and the closing token. + this.tmp.prefix = new CSL.Factory.Stack("",CSL.LITERAL); + // + // holds the suffix between the start of a group + // and the closing token. + this.tmp.suffix = new CSL.Factory.Stack("",CSL.LITERAL); + // + // holds the group delimiter between the start of a group + // and the closing token. + this.tmp.delimiter = new CSL.Factory.Stack("",CSL.LITERAL); + // + // reinitialize scratch variables used by names + this.fun.names_reinit = CSL.Util.Names.reinit; + // + // reduce a name to an initial. + this.fun.initialize_with = CSL.Util.Names.initialize_with; + // + // "deep" copy of nested array in very specific format + this.fun.clone_ambig_config = CSL.Factory.cloneAmbigConfig; + // + // scratch stack containing initialize-with strings or null values + this.tmp.initialize_with = new CSL.Factory.Stack(); + // + // return a common term iff namesets are all identical + // and a common term for them exists + this.fun.get_common_term = CSL.Util.Names.getCommonTerm; + // + // utility to get standard suffixes for disambiguation + this.fun.suffixator = new CSL.Util.Disambiguate.Suffixator(CSL.SUFFIX_CHARS); + this.fun.romanizer = new CSL.Util.Disambiguate.Romanizer(); + // + // token store stack. + this.tmp.tokenstore_stack = new CSL.Factory.Stack(); + + this.tmp.name_quash = new Object(); + // + // for collapsing + this.tmp.last_suffix_used = ""; + this.tmp.last_names_used = new Array(); + this.tmp.last_years_used = new Array(); + this.tmp.years_used = new Array(); + this.tmp.names_used = new Array(); + this.splice_delimiter = false; + // + // substituting flag. triggers creation of a special conditional + // wrapper around text tags when in force. + this.tmp.names_substituting = false; + // + // counter for total namesets + this.tmp.nameset_counter = 0; + // + // function to mark output. used to satisfy requirement + // that terms cannot render by themselves unless no + // attempt has been made to render a non-term variable + // within the same group or citation. + this.fun.mark_output = CSL.Factory.mark_output; + // + // stack flag used for term handling. Set to true + // if at least one variable has tried to render, and + // no variables had content. + this.tmp.term_sibling = new CSL.Factory.Stack( undefined, CSL.LITERAL); + // + // boolean flag used to control first-letter capitalization + // of terms. Set to true if any item preceding the term + // being handled has rendered successfully, otherwise + // false. + this.tmp.term_predecessor = false; + // + // stack flag used to control jumps in the closing + // token of a conditional. + this.tmp.jump = new CSL.Factory.Stack(0,CSL.LITERAL); + // + // holds string parameters for group formatting, between + // the start of a group and the closing token. + this.tmp.decorations = new CSL.Factory.Stack(); + // + // decorate contains font and formatting functions + // that are fixed during configure and used during + // render + this.fun.decorate = false; + // + // scratch variable to flag whether we are processing + // a citation or a bibiliography. this diverts token and + // configuration to the appropriateo objects inside + // state. the default is "citation". + this.tmp.area = "citation"; + // + // should be able to run uninitialized; may attract some + // cruft this way. + this.build.area = "citation"; + // + // this holds the field values collected by the @value + // and @variable attributes, for processing by the + // element functions. + this.tmp.value = new Array(); + /** + * Object to hold the decorations declared by a name-part + * element. + */ + this.tmp.namepart_decorations = new Object(); + /** + * String variable to hold the type of a name-part + * element. + */ + this.tmp.namepart_type = false; + /** + * Output queue. + *

A special list stack for the final collation + * and output of strings.

+ */ + this.output = new CSL.Output.Queue(this); + // + // the fail and succeed arrays are used for stack + // processing during configure. + this.configure.fail = new Array(); + this.configure.succeed = new Array(); + // + // We're not going to need this after the first phase + this.build.xmlCommandInterface = xmlCommandInterface; + // + // stores the content of an XML text node during processing + this.build.text = false; + // + // this is a scratch variable for holding an attribute + // value during processing + this.build.lang = false; + // + // this holds the class of the style (w/bib, author-date) + this.opt["class"] = false; + // + // scratch variable to alter behaviour when processing + // locale files + this.build.in_style = false; + // + // used to ignore info + this.build.skip = false; + // + // the macro ATTRIBUTE stores a macro name on this + // scratch variable anywhere outside the layout area + // during build. The macro name is picked up when + // the token is encountered inside the layout area, + // either through a direct call, or as part of a nested + // macro expansion, and the macro content is exploded + // into the token list. + this.build.postponed_macro = false; + // + // used especially for controlling macro expansion + // during Build. + this.build.layout_flag = false; + // + // (was stack.buffer) + // this is a stack for collecting child tokens + // during processing of macro ELEMENTS and locale + // term ELEMENTS. + this.build.children = new Array(); + // + // (was buffer_name) + // scratch variable to hold the name of a macro + // or a term until its children have been collected. + this.build.name = false; + // + // scratch variable to hold the value of a form + // attribute until other attributes needed for + // processing have been collected. + this.build.form = false; + this.build.term = false; + // + // the macros themselves are discarded after Build + this.build.macro = new Object(); + // + // the macro build stack. used to raise an error + // when macros would attempt to call themselves. + this.build.macro_stack = new Array(); + // + // XML-wise node navigation is needed only during Build. + this.build.nodeList = new Array(); + this.build.nodeList.push([0, nodelist]); +}; + +CSL.Factory.State.prototype.getAmbiguousCite = CSL.Core.Render.getAmbiguousCite; +CSL.Factory.State.prototype.getSortKeys = CSL.Core.Render.getSortKeys; +CSL.Factory.State.prototype.getAmbigConfig = CSL.Core.Render.getAmbigConfig; +CSL.Factory.State.prototype.getMaxVals = CSL.Core.Render.getMaxVals; +CSL.Factory.State.prototype.getMinVal = CSL.Core.Render.getMinVal; +CSL.Factory.State.prototype.getModes = CSL.Core.Render.getModes; +CSL.Factory.State.prototype.getSpliceDelimiter = CSL.Core.Render.getSpliceDelimiter; diff --git a/src/system.js b/src/system.js new file mode 100644 index 000000000..fd57ae910 --- /dev/null +++ b/src/system.js @@ -0,0 +1,13 @@ +dojo.provide("csl.retrieval"); +if (!CSL){ + load("./src/csl.js"); +} + +/** + * System localization wrappers. + *

Wrappers for commands that may require adaptation + * depending upon the environment in which citeproc-js + * is deployed. + * @namespace System wrappers + */ +CSL.System = {}; diff --git a/src/tests.js b/src/tests.js new file mode 100644 index 000000000..df11dd464 --- /dev/null +++ b/src/tests.js @@ -0,0 +1,99 @@ +dojo.provide("csl.tests"); +if (!CSL){ + load("./src/csl.js"); +} + +/** + * Static functions for reading and running standard CSL tests. + *

The functions here are specifically designed for test-bed + * operation of the distribution source. Implementors may wish + * to reimplement this module to confirm operation in their + * local environment.

+ * @namespace Tests + */ +CSL.System.Tests = function(){}; + +CSL.System.Tests.getTest = function(myname){ + var test; + var filename = "std/machines/" + myname + ".json"; + // + // Clean up the CSL token string. + var teststring = readFile(filename); + try { + eval( "test = "+teststring ); + } catch(e){ + throw e + teststring; + } + // + // Set up the token string to use for formatting. + if (test.mode == "bibliography"){ + var render = "makeBibliography"; + } else { + var render = "makeCitationCluster"; + } + // Build run function. + test.run = function(){ + var builder = new CSL.Core.Build(this.csl); + var raw = builder.build(); + var configurator = new CSL.Core.Configure(raw); + var style = configurator.configure(); + CSL.System.Tests.fixNames(this.input,myname); + for each (var item in this.input){ + style.fun.retriever.setInput(style,item); + style.registry.insert(style,item); + } + var ret = style[render](this.input); + return ret; + }; + return test; +}; + + +CSL.System.Tests.fixNames = function(itemlist,myname){ + for each (obj in itemlist){ + if (!obj.id){ + throw "No id for object in: "+myname; + } + for each (key in ["author","editor","translator"]){ + if (obj[key]){ + for each (var entry in obj[key]){ + var one_char = entry.name.length-1; + var two_chars = one_char-1; + entry.sticky = false; + if ("!!" == entry.name.substr(two_chars)){ + entry.literal = entry.name.substr(0,two_chars).replace(/\s+$/,""); + } else { + var parsed = entry.name; + if ("!" == entry.name.substr(one_char)){ + entry.sticky = true; + parsed = entry.name.substr(0,one_char).replace(/\s+$/,""); + } + parsed = parsed.split(/\s*,\s*/); + if (parsed.length > 0){ + var m = parsed[0].match(/^\s*([a-z]+)\s+(.*)/); + if (m){ + entry.prefix = m[1]; + entry["primary-key"] = m[2]; + } else { + entry["primary-key"] = parsed[0]; + } + } + if (parsed.length > 1){ + entry["secondary-key"] = parsed[1]; + } + if (parsed.length > 2){ + var m = parsed[2].match(/\!\s*(.*)/); + if (m){ + entry.suffix = m[1]; + entry.comma_suffix = true; + } else { + entry.suffix = parsed[2]; + } + } + } + } + } + } + } + return itemlist; +}; diff --git a/src/token.js b/src/token.js new file mode 100644 index 000000000..924e6fee8 --- /dev/null +++ b/src/token.js @@ -0,0 +1,105 @@ +dojo.provide("csl.token"); +if (!CSL) { + load("./src/csl.js"); +} + +/** + * Style token. + *

This function generates the tokens in the list that defines + * the style. Note that tokens are initially generated by + * {@link CSL.Core.Build}, but must be post-processed with + * {@link CSL.Core.Configure} before they can be used to generate + * citations.

+ * @param {String} name The node name represented by this token. + * @param {Int} tokentype A flag indicating whether this token + * marks the start of a node, the end of a node, or is a singleton. + * @class + */ +CSL.Factory.Token = function(name,tokentype){ + /** + * Name of the element. + *

This corresponds to the element name of the + * relevant tag in the CSL file. + */ + this.name = name; + /** + * Default strings. + */ + this.strings = new Object(); + this.strings["delimiter"] = ""; + this.strings["prefix"] = ""; + this.strings["suffix"] = ""; + /** + * Formatting parameters. + *

This is a placeholder at instantiation. It is + * replaced by the result of {@link CSL.Factory.setDecorations} + * when the tag is created and configured during {@link CSL.Core.Build} + * by {@link CSL.Factory.XmlToToken}. The parameters for particular + * formatting attributes are stored as string arrays, which + * map to formatting functions in the {@link CSL.Core.Render} phase, + * when the output format is known. Note that the order in which + * parameters are registered is fixed by the constant + * {@link CSL.FORMAT_KEY_SEQUENCE}. + */ + this.decorations = false; + this.variables = []; + /** + * Element functions. + *

Functions implementing the styling behaviour of the element + * are pushed into this array in the {@link CSL.Core.Build} phase. + */ + this.execs = new Array(); + /** + * Token type. + *

This is a flag constant indicating whether the token represents + * a start tag, an end tag, or is a singleton.

+ */ + this.tokentype = tokentype; + /** + * Condition evaluator. + *

This is a placeholder that receives a single function, and is + * only relevant for a conditional branching tag (if or + * else-if). The function implements the argument to + * the match= attribute (any, all + * or none), by executing the functions registered in the + * tests array (see below), and reacting accordingly. This + * function is invoked by the execution wrapper found in + * {@link CSL.Core.Render}.

+ */ + this.evaluator = false; + /** + * Conditions. + *

Functions that evaluate to true or false, implementing + * various posisble attributes to the conditional branching tags, + * are registered here during {@link CSL.Core.Build}. + *

+ */ + this.tests = new Array(); + /** + * Jump point on success. + *

This holds the list jump point to be used when the + * evaluator function of a conditional tag + * returns true (success). The jump index value is set during the + * back-to-front token pass performed during {@link CSL.Core.Configure}. + *

+ */ + this.succeed = false; + /** + * Jump point on failure. + *

This holds the list jump point to be used when the + * evaluator function of a conditional tag + * returns false (failure). Jump index values are set during the + * back-to-front token pass performed during {@link CSL.Core.Configure}. + *

+ */ + this.fail = false; + /** + * Index of next token. + *

This holds the index of the next token in the + * token list, which is the default "jump-point" for ordinary + * processing. Jump index values are set during the + * back-to-front token pass performed during {@link CSL.Core.Configure}. + *

+ */ + this.next = false; +}; diff --git a/src/util.js b/src/util.js new file mode 100644 index 000000000..f7a5464bc --- /dev/null +++ b/src/util.js @@ -0,0 +1,10 @@ +dojo.provide("csl.util"); +if (!CSL){ + load("./src/csl.js"); +} + +/** + * Utilities for various things. + * @namespace Utilities + */ +CSL.Util = {}; diff --git a/src/util_dates.js b/src/util_dates.js new file mode 100644 index 000000000..924fd4ac6 --- /dev/null +++ b/src/util_dates.js @@ -0,0 +1,140 @@ +dojo.provide("csl.util_dates"); +if (!CSL) { + load("./src/csl.js"); +} + +/** + * Date mangling functions. + * @namespace Date construction utilities + */ +CSL.Util.Dates = new function(){}; + +/** + * Year manglers + *

short, long

+ */ +CSL.Util.Dates.year = new function(){}; + +/** + * Convert year to long form + *

This just passes the number back as a string.

+ */ +CSL.Util.Dates.year["long"] = function(state,num){ + return num.toString(); +} + +/** + * Convert year to short form + *

Just crops any 4-digit year to the last two digits.

+ */ +CSL.Util.Dates.year["short"] = function(state,num){ + num = num.toString(); + if (num && num.length == 4){ + return num.substr(2); + } +} + + +/* + * MONTH manglers + * long, short, numeric, numeric-leading-zeros + */ +CSL.Util.Dates["month"] = new function(){}; + +/** + * Convert month to numeric form + *

This just passes the number back as a string.

+ */ +CSL.Util.Dates.month["numeric"] = function(state,num){ + return num.toString(); +} + +/** + * Convert month to numeric-leading-zeros form + *

This just passes the number back as string padded with zeros.

+ */ +CSL.Util.Dates.month["numeric-leading-zeros"] = function(state,num){ + num = num.toString(); + while (num.length < 2){ + num = "0"+num; + } + return num.toString(); +} + +/** + * Convert month to long form + *

This passes back the month of the locale in long form.

+ */ +CSL.Util.Dates.month["long"] = function(state,num){ + num = num.toString(); + while (num.length < 2){ + num = "0"+num; + } + num = "month-"+num; + return state.opt.term[num]["long"][0]; +} + +/** + * Convert month to long form + *

This passes back the month of the locale in short form.

+ */ +CSL.Util.Dates.month["short"] = function(state,num){ + num = num.toString(); + while (num.length < 2){ + num = "0"+num; + } + num = "month-"+num; + return state.opt.term[num]["short"][0]; +} + + +/* + * DAY manglers + * numeric, numeric-leading-zeros, ordinal + */ +CSL.Util.Dates["day"] = new function(){}; + +/** + * Convert day to numeric form + *

This just passes the number back as a string.

+ */ +CSL.Util.Dates.day["numeric"] = function(state,num){ + return num.toString(); +} + +/** + * Convert day to numeric-leading-zeros form + *

This just passes the number back as a string padded with zeros.

+ */ +CSL.Util.Dates.day["numeric-leading-zeros"] = function(state,num){ + num = num.toString(); + while (num.length < 2){ + num = "0"+num; + } + return num.toString(); +} + +/** + * Convert day to ordinal form + *

This will one day pass back the number as a string with the + * ordinal suffix appropriate to the locale. For the present, + * it just does what is most of the time right for English.

+ */ +CSL.Util.Dates.day["ordinal"] = function(state,num){ + var suffixes = ["st","nd","rd","th"]; + var str = num.toString(); + if ( (num/10)%10 == 1){ + str += suffixes[3]; + } else if ( num%10 == 1) { + str += suffixes[0]; + } else if ( num%10 == 2){ + str += suffixes[1]; + } else if ( num%10 == 3){ + str += suffixes[2]; + } else { + str += suffixes[3]; + } + return str; +} + + diff --git a/src/util_disambiguate.js b/src/util_disambiguate.js new file mode 100644 index 000000000..1a139058a --- /dev/null +++ b/src/util_disambiguate.js @@ -0,0 +1,97 @@ +dojo.provide("csl.util_disambiguate"); +if (!CSL) { + load("./src/csl.js"); +} + +// +// This will probably become CSL.Util.Numbers +// + +/** + * Auxiliary helper functions for disambiguation. + * @namespace Disambiguation utilities + */ +CSL.Util.Disambiguate = new function(){}; + +CSL.Util.Disambiguate.Romanizer = function (){}; + +CSL.Util.Disambiguate.Romanizer.prototype.format = function(num){ + var ret = ""; + if (num < 6000) { + var numstr = num.toString().split(""); + numstr.reverse(); + var pos = 0; + var n = 0; + for (var pos in numstr){ + n = parseInt(numstr[pos],10); + ret = CSL.ROMAN_NUMERALS[pos][n] + ret; + } + } + return ret; +}; + + +/** + * Create a suffix formed from a list of arbitrary characters of arbitrary length. + *

This is a lot harder than it seems.

+ */ +CSL.Util.Disambiguate.Suffixator = function(slist){ + this.slist = slist.split(","); +}; + +/** + * The format method. + *

This method is used in generating ranges. Every numeric + * formatter (of which Suffixator is one) must be an instantiated + * object with such a "format" method.

+ */ + +CSL.Util.Disambiguate.Suffixator.prototype.format = function(num){ + var suffixes = this.get_suffixes(num); + return suffixes[(suffixes.length-1)]; +} + +CSL.Util.Disambiguate.Suffixator.prototype.get_suffixes = function(num){ + var suffixes = new Array(); + + for (var i=0; i <= num; i++){ + if (!i){ + suffixes.push([0]); + } else { + suffixes.push( this.incrementArray(suffixes[(suffixes.length-1)],this.slist) ); + } + }; + for (pos in suffixes){ + var digits = suffixes[pos]; + var chrs = ""; + for each (digit in digits){ + chrs = chrs+this.slist[digit]; + } + suffixes[pos] = chrs; + }; + return suffixes; +}; + + +CSL.Util.Disambiguate.Suffixator.prototype.incrementArray = function (array){ + array = array.slice(); + var incremented = false; + for (var i=(array.length-1); i > -1; i--){ + if (array[i] < (this.slist.length-1)){ + array[i] += 1; + if (i < (array.length-1)){ + array[(i+1)] = 0; + } + incremented = true; + break; + } + } + if (!incremented){ + for (var i in array){ + array[i] = 0; + } + var newdigit = [0]; + array = newdigit.concat(array); + } + return array; +}; diff --git a/src/util_names.js b/src/util_names.js new file mode 100644 index 000000000..499fe891a --- /dev/null +++ b/src/util_names.js @@ -0,0 +1,245 @@ +dojo.provide("csl.util_names"); +if (!CSL) { + load("./src/csl.js"); +} + +/** + * Helper functions for constructing names and namesets. + * @namespace Name construction utilities + */ +CSL.Util.Names = new function(){}; + +/** + * Build a set of names, less any label or et al. tag + */ +CSL.Util.Names.outputNames = function(state,display_names){ + + var segments = new this.StartMiddleEnd(state,display_names); + var sort_order = state.output.getToken("name").strings["name-as-sort-order"]; + if (sort_order == "first"){ + state.output.addToken("start"); + state.output.getToken("start").strings.name_as_sort_order = true; + } else if (sort_order == "all"){ + state.output.addToken("start"); + state.output.getToken("start").strings.name_as_sort_order = true; + state.output.addToken("middle"); + state.output.getToken("middle").strings.name_as_sort_order = true; + state.output.addToken("end"); + state.output.getToken("end").strings.name_as_sort_order = true; + } + + state.output.openLevel("name"); + state.output.openLevel("inner"); + segments.outputSegmentNames("start"); + segments.outputSegmentNames("middle"); + state.output.closeLevel(); + segments.outputSegmentNames("end"); + state.output.closeLevel(); +}; + +CSL.Util.Names.StartMiddleEnd = function(state,names){ + this.state = state; + this.nameoffset = 0; + // + // what to do here? we need config for this, tokens to + // control the joining that will come. how do we get + // them into this function? + var start = names.slice(0,1); + var middle = names.slice(1,(names.length-1)); + var endstart = 1; + if (names.length > 1){ + endstart = (names.length-1); + } + var end = names.slice(endstart,(names.length)); + var ret = {}; + ret["start"] = start; + ret["middle"] = middle; + ret["end"] = end; + this.segments = ret; +}; + +CSL.Util.Names.StartMiddleEnd.prototype.outputSegmentNames = function(seg){ + var state = this.state; + for (var namenum in this.segments[seg]){ + this.namenum = parseInt(namenum,10); + this.name = this.segments[seg][namenum]; + if (this.name.literal){ + // + // XXXXX Separate formatting for institution names? + // XXXXX This needs to be firmly settled in xbib. + // + state.output.append(this.name.literal); + } else { + var sequence = CSL.Util.Names.getNamepartSequence(this.name,state.output.getToken(seg)); + + state.output.openLevel(sequence[0][0]); + state.output.openLevel(sequence[0][1]); + state.output.openLevel(sequence[0][2]); + this.outputNameParts(sequence[1]); + + state.output.closeLevel(); + state.output.openLevel(sequence[0][2]); + + // XXX cloned code! make this a function. + this.outputNameParts(sequence[2]); + + state.output.closeLevel(); + state.output.closeLevel(); + // + // articular goes here // + // + this.outputNameParts(sequence[3]); + + state.output.closeLevel(); + + // + // the articular goes in at a different level, but + // is nonetheless part of the name, so it goes into + // this function to avoid repetition. + // (special handling when comma is to be included) + //if (name.suffix){ + // state.output.squeeze(); + // if (name.comma_suffix){ + // state.tmp.delimiter.replace(", "); + // } + // state.output.append(name.suffix); + //} + } + }; + this.nameoffset += this.segments[seg].length; +} + +CSL.Util.Names.StartMiddleEnd.prototype.outputNameParts = function(subsequence){ + var state = this.state; + for each (var key in subsequence){ + var namepart = this.name[key]; + if ("secondary-key" == key && !this.name.sticky){ + if (0 == state.tmp.disambig_settings["givens"][state.tmp.nameset_counter][(this.namenum+this.nameoffset)]){ + continue; + } else if (1 == state.tmp.disambig_settings["givens"][state.tmp.nameset_counter][(this.namenum+this.nameoffset)]){ + namepart = state.fun.initialize_with(namepart,state.tmp["initialize-with"]); + } + } + //state.output.openLevel(key); + state.output.append(namepart,key); + //state.output.closeLevel(); + } +} + +CSL.Util.Names.getNamepartSequence = function(name,token){ + // Set the rendering order and separators of the core nameparts + // sequence[0][0] separates elements inside each of the the two lists + // sequence[0][1] separates the two lists + if (name.comma_suffix){ + var suffix_sep = "commasep"; + } else { + var suffix_sep = "space"; + } + var romanesque = name["primary-key"].match(/.*[a-zA-Z\u0400-\u052f].*/); + if (!romanesque ){ // neither roman nor Cyrillic characters + var sequence = [["empty","empty","empty"],["prefix", "primary-key"],["secondary-key"],[]]; + } else if (name.sticky) { // entry likes sort order + var sequence = [["space","space","space"],["prefix", "primary-key"],["secondary-key"],[]]; + } else if (token && token.strings.name_as_sort_order){ + var sequence = [["sortsep","sortsep","space"],["prefix", "primary-key"],["secondary-key"],["suffix"]]; + } else { // plain vanilla + var sequence = [[suffix_sep,"space","space"],["secondary-key"],["prefix","primary-key"],["suffix"]]; + } + return sequence; +}; + +CSL.Util.Names.deep_copy = function(nameset){ + var nameset2 = new Array(); + for each (name in nameset){ + var name2 = new Object(); + for (var i in name){ + name2[i] = name[i]; + } + nameset2.push(name2); + } + return nameset2; +} + + +/** + * Reinitialize scratch variables used by names machinery. + */ +// +// XXXX A handy guide to variable assignments that need +// XXXX to be eliminated. :) +// +CSL.Util.Names.reinit = function(state,Item){ + // + // Author vars should render only once. This flag + // can be used to quash unwanted renderings. + for each (namevar in state.tmp.value){ + state.tmp.name_quash[namevar.type] = true; + } + state.tmp.value = new Array(); + state.tmp.names_substituting = false; + state.tmp.name_et_al_term = false; + state.tmp.name_et_al_decorations = false; + + + state.tmp.name_et_al_form = "long"; + state.tmp["et-al-min"] = false; + state.tmp["et-al-use-first"] = false; + state.tmp["initialize-with"] = false; + state.tmp["name-as-sort-order"] = false; + state.tmp.et_al_prefix = false; +}; + +CSL.Util.Names.getCommonTerm = function(state,namesets){ + if (namesets.length < 2){ + return false; + } + var base_nameset = namesets[0]; + var varnames = new Array(); + if (varnames.indexOf(base_nameset.type) == -1){ + varnames.push(base_nameset.type); + } + var name; + for each (nameset in namesets.slice(1)){ + if (base_nameset.length != nameset.length){ + return false; + } + if (varnames.indexOf(nameset.type) == -1){ + varnames.push(nameset.type); + } + for (var n in nameset.names){ + name = nameset.names[n]; + for each (var part in ["primary-key","secondary-key","prefix","suffix"]){ + if (base_nameset.names[n][part] != name[part]){ + return false; + } + } + } + } + varnames.sort(); + return state.opt.term[varnames.join("")]; +}; + + +/** + * Initialize a name. + */ +CSL.Util.Names.initialize_with = function(name,terminator){ + var namelist = name.split(/\s+/); + var nstring = ""; + for each (var n in namelist){ + var m = n.match( CSL.NAME_INITIAL_REGEXP); + if (m){ + var extra = ""; + if (m[2]){ + extra = m[2].toLocaleLowerCase(); + } + nstring = nstring + m[1].toLocaleUpperCase() + extra + terminator; + }; + }; + if (nstring){ + return nstring; + } + return name; +}; + + diff --git a/src/util_sort.js b/src/util_sort.js new file mode 100644 index 000000000..d6fe9c8cd --- /dev/null +++ b/src/util_sort.js @@ -0,0 +1,23 @@ +dojo.provide("csl.util_sort"); +if (!CSL) { + load("./src/csl.js"); +} + +/** + * Helper functions for constructing sort keys. + * @namespace Sort key utilities + */ +CSL.Util.Sort = new function(){}; + +/** + * Strip prepositions from a string + *

Used when generating sort keys.

+ */ +CSL.Util.Sort.strip_prepositions = function(str){ + var m = str.toLocaleLowerCase().match(/((a|an|the)\s+)/); + if (m){ + str = str.substr(m[1].length); + }; + return str; +}; + diff --git a/src/util_token.js b/src/util_token.js new file mode 100644 index 000000000..eb8d4f8a6 --- /dev/null +++ b/src/util_token.js @@ -0,0 +1,3 @@ +dojo.provide("csl.util_token"); + + diff --git a/src/xml.js b/src/xml.js new file mode 100644 index 000000000..188c690a2 --- /dev/null +++ b/src/xml.js @@ -0,0 +1,13 @@ +dojo.provide("csl.xml"); + +if (!CSL) { + load("./src/csl.js"); +} + +/** + * Parser modules. + *

A namespace container for wrappers implementing basic + * commands needed for depth-first navigation of an XML object.

+ * @namespace XML parsers + */ +CSL.System.Xml = {}; diff --git a/src/xmle4x.js b/src/xmle4x.js new file mode 100644 index 000000000..409ce55ef --- /dev/null +++ b/src/xmle4x.js @@ -0,0 +1,69 @@ +dojo.provide("csl.xmle4x"); + +if (!CSL) { + load("./src/csl.js"); +} + +/** + * Functions for parsing an XML object using E4X. + */ +CSL.System.Xml.E4X = function(){}; + + +/** + * E4X can't handle XML declarations, so we lose them here. + */ +CSL.System.Xml.E4X.prototype.clean = function(xml){ + xml = xml.replace(/<\?[^?]+\?>/g,""); + xml = xml.replace(/]+>/g,""); + xml = xml.replace(/^\s+/g,""); + xml = xml.replace(/\s+$/g,""); + return xml; +}; + + +/** + * Make an E4X object from a style. + */ +CSL.System.Xml.E4X.prototype.parse = function(xml){ + default xml namespace = "http://purl.org/net/xbiblio/csl"; + return XML( this.clean(xml) ); +}; + + +/** + * Called on a node. + */ +CSL.System.Xml.E4X.prototype.commandInterface = new function(){ + this.children = children; + this.nodename = nodename; + this.attributes = attributes; + this.content = content; + this.numberofnodes = numberofnodes; + + function children(){ + return this.children(); + }; + function nodename(){ + return this.localName(); + } + function attributes(){ + var ret = new Object(); + var attrs = this.attributes(); + for (var idx in attrs){ + var key = "@"+attrs[idx].localName(); + var value = attrs[idx].toString(); + ret[key] = value; + } + return ret; + } + function content(){ + return this.toString(); + } + function numberofnodes(){ + return this.length(); + } +}; + + +CSL.System.Xml.E4X = new CSL.System.Xml.E4X(); diff --git a/src/xmljs.js b/src/xmljs.js new file mode 100644 index 000000000..8240717f7 --- /dev/null +++ b/src/xmljs.js @@ -0,0 +1,228 @@ +dojo.provide("csl.xmljs"); + +if (!CSL) { + load("./src/csl.js"); +} + +/** + * A barebones parser for CSL format files. + *

This parser was the end product of difficulties I + * experienced in working out the basics of the E4X XML + * parser. It is unnecessary where E4X is available, + * but I've retained it as a demonstration of how the + * wrapper code works. It's not really meant for production + * use (it's slower than E4X, and one could probably construct + * a valid CSL style file that would break it).

+ */ +CSL.System.Xml.JunkyardJavascript = function(){}; + + +/* + * Clean the XML string in preparation for parsing. + * + * Most parser implementations will have something like this. + * In most cases it will be a lot less complex, though. + */ +CSL.System.Xml.JunkyardJavascript.prototype.clean = function(xml) { + xml = xml.replace(/\n/g,""); + xml = xml.replace(/\>\s+/g,">"); + xml = xml.replace(/\s+\]+>)/); + var newlist = new Array(); + var i; + var tag = false; + var tagname = false; + for (i=0; i>= or <<= and the block name (which must be in all caps) are +signficant. Everything outside of the block delimiters is ignored, +but you may wish to set of comments with a comment character, for +clarity. + + +## Test ## + +# The MODE block is a single string, either "citation" or "bibliography" +# (without quotes). This specifies the type of output that the processor +# should deliver for testing. + + >>===== MODE =====>> +citation + <<===== MODE =====<< + + +# The RESULT block is a simple string. If quotes are included in the +# result, they should not be escaped; just write what would appear +# on the monitor if the result of processing were dumped to standard +# output. + + + >>===== RESULT =====>> +Doe 2000a,b;2001 + <<===== RESULT =====<< + + +# The CSL block should be a valid CSL style file. These blocks +# are separately saved to the ./csl subdirectory in the test +# archive, so that they can be validated if desired. + +>>===== CSL =====>> + +<<===== CSL =====<< + +# The INPUT block is a list of input objects, written as +# valid JSON. +# +# Note that names are written as a simple string that must +# be parsed into the internal representation required by the +# processor being tested. The hinting syntax of name strings +# is as follows: +# +# Literal name (for institutions and the like): +# name="Ministry of Fear, Loathing and Error !!" +# +# Simple western name: +# name="Doe, John" +# +# Western name with articular: +# name="van Doe, John" +# +# Western name with capitalized articular: +# name="VAN Doe, John" +# +# Western name with suffix (no comma in output): +# name="Doe, John, III" +# +# Western name with suffix (comma delimiter in output): +# name="Doe, John,! Jr." +# +# Names fixed in sort ordering (common in East and Southeast Asia): +# name="Takeda, Shingen !" +# +# Names in non-Roman, non-Cyrillic fonts are to be combined +# to single joined-up strings in sort ordering, with no other +# processing. + +>>===== INPUT =====>> +[ + { + "id":"ITEM-1", + "type": "book", + "author": [ + { "name":"Doe, John" } + ], + "issued": {"year": "2000"}, + "title": "Paper 1" + }, + { + "id":"ITEM-2", + "type": "book", + "author": [ + { "name":"Doe, John" } + ], + "issued": {"year": "2000"}, + "title": "Paper 2" + }, + { + "id":"ITEM-3", + "type": "book", + "author": [ + { "name":"Doe, John" } + ], + "issued": {"year": "2001"}, + "title": "Paper 3" + } +] +<<===== INPUT =====<< diff --git a/std/grind.sh b/std/grind.sh new file mode 100755 index 000000000..eea8f9387 --- /dev/null +++ b/std/grind.sh @@ -0,0 +1,58 @@ +#!/bin/bash + +set -e + +if [ $(which gsed | grep -c "/" ) -gt 0 ]; then + SED="gsed" +else + SED="sed" +fi + +echo using $SED + +cd $(dirname $0) + +for d in tmp csl machines; do + if [ ! -d ${d} ]; then + mkdir ${d} + fi +done + +rm -f csl/*.csl +rm -f machines/*.json + +for filename in humans/*.txt; do + BASENAME=$(basename ${filename} .txt) + SRC=humans/${BASENAME}.txt + RES=machines/${BASENAME}.json + + if [ $(echo ${BASENAME} | grep -c "_") -eq 0 ]; then + echo ERROR $(basename $0): bad filename \"${BASENAME}\": must contain a _ character. + exit 1 + fi + + CATEGORY=$(echo ${BASENAME} | $SED -e "s/^\([^_]*\)_.*/\\1/") + NAME=$(echo ${BASENAME} | $SED -e "s/^[^_]*_\(.*\)/\\1/;s/\(.\)\([A-Z]\)/\\1 \\2/g") + + cat ${SRC} | $SED -e "s/^[[:space:]]*<<=/<<=/;s/^[[:space:]]*>>=/>>=/" > tmp/TMP.txt + cat tmp/TMP.txt | $SED -e "/^>>=.*CSL/,/^<<=.*CSL/!d" | $SED -e "/^\(>>=\|<<=\)/d" > csl/${BASENAME}.csl + CSL=$(cat csl/${BASENAME}.csl | $SED -e 's~"~\\"~g' | $SED -e "s/$/\\\\n/" | tr -d '\r\n' | $SED -e "s/\\\\n$//") + RESULT=$(cat tmp/TMP.txt | $SED -e "/^>>=.*RESULT/,/^<<=.*RESULT/!d" | $SED -e "/^\(>>=\|<<=\)/d" | $SED -e 's~"~\\"~g' |$SED -e '$!s~$~\\n~' | tr -d '\r\n') + MODE=$(cat tmp/TMP.txt | $SED -e "/^>>=.*MODE/,/^<<=.*MODE/!d" | $SED -e "/^\(>>=\|<<=\)/d") + INPUT=$(cat tmp/TMP.txt | $SED -e "/^>>=.*INPUT/,/^<<=.*INPUT/!d" | $SED -e "/^\(>>=\|<<=\)/d") + SCHEMA=$(cat tmp/TMP.txt | $SED -e "/^>>=.*SCHEMA/,/^<<=.*SCHEMA/!d" | $SED -e "/^\(>>=\|<<=\)/d") + + echo '{' > ${RES} + + echo ' "name": "'${NAME}'",' >> ${RES} + echo ' "category": "'${CATEGORY}'",' >> ${RES} + echo ' "mode": "'${MODE}'",' >> ${RES} + echo ' "schema":"'${SCHEMA}'",' >> ${RES} + echo ' "result": "'${RESULT}'",' >> ${RES} + echo ' "csl": "'${CSL}'",' >> ${RES} + echo ' "input": '${INPUT} >> ${RES} + echo '}' >> ${RES} +done + +rm tmp/* +rmdir tmp diff --git a/std/humans/collapse_CitationNumberRangesWithAffixes.txt b/std/humans/collapse_CitationNumberRangesWithAffixes.txt new file mode 100644 index 000000000..8db126720 --- /dev/null +++ b/std/humans/collapse_CitationNumberRangesWithAffixes.txt @@ -0,0 +1,52 @@ +# CSL test file: testYearSuffix001.txt +# Rintze Zelle circa 2009.04.10 + +>>===== MODE =====>> +citation +<<===== MODE =====<< + + +>>===== SCHEMA =====>> +0.8 +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +([1]-[3]) +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[ + { + "id":"ITEM-1", + "type": "book", + "title": "Paper 1" + }, + { + "id":"ITEM-2", + "type": "book", + "title": "Paper 2" + }, + { + "id":"ITEM-3", + "type": "book", + "title": "Paper 3" + } +] +<<===== INPUT =====<< diff --git a/std/humans/collapse_YearSuffixCollapse.txt b/std/humans/collapse_YearSuffixCollapse.txt new file mode 100644 index 000000000..740373a93 --- /dev/null +++ b/std/humans/collapse_YearSuffixCollapse.txt @@ -0,0 +1,92 @@ +# CSL test file: testYearSuffix001.txt +# Rintze Zelle circa 2009.04.10 + +>>===== MODE =====>> +citation +<<===== MODE =====<< + + +>>===== SCHEMA =====>> +0.9 +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +Smith 2000a,c-e, 2001 +<<===== RESULT =====<< + + +>>===== CITATION =====>> +[{ "id": "ITEM-1" },{"id":"ITEM-3"},{"id":"ITEM-4"},{"id":"ITEM-5"},{"id":"ITEM-6"}] +<<===== CITATION =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[ + { + "id":"ITEM-1", + "type": "book", + "author": [{"name":"John Smith","primary-key":"Smith","secondary-key":"John"}], + "title": "Paper 1", + "issued": {"year":"2000"} + }, + { + "id":"ITEM-2", + "type": "book", + "author": [{"name":"John Smith","primary-key":"Smith","secondary-key":"John"}], + "title": "Paper 2", + "issued": {"year":"2000"} + }, + { + "id":"ITEM-3", + "type": "book", + "author": [{"name":"John Smith","primary-key":"Smith","secondary-key":"John"}], + "title": "Paper 3", + "issued": {"year":"2000"} + }, + { + "id":"ITEM-4", + "type": "book", + "author": [{"name":"John Smith","primary-key":"Smith","secondary-key":"John"}], + "title": "Paper 4", + "issued": {"year":"2000"} + }, + { + "id":"ITEM-5", + "type": "book", + "author": [{"name":"John Smith","primary-key":"Smith","secondary-key":"John"}], + "title": "Paper 5", + "issued": {"year":"2000"} + }, + { + "id":"ITEM-6", + "type": "book", + "author": [{"name":"John Smith","primary-key":"Smith","secondary-key":"John"}], + "title": "Paper 6", + "issued": {"year":"2001"} + } +] +<<===== INPUT =====<< diff --git a/std/humans/condition_RefTypeBranching.txt b/std/humans/condition_RefTypeBranching.txt new file mode 100644 index 000000000..cba247a09 --- /dev/null +++ b/std/humans/condition_RefTypeBranching.txt @@ -0,0 +1,162 @@ +>>===== MODE =====>> +bibliography +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.8 +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +Work 1 (John Doe), 2000. +John Doe, 2000. Work 2. +2000. Work 3, John Doe. +Work 4 (2000), John Doe. +Work 5, John Doe, 2000. +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[ + { + "id":"ITEM-1", + "type": "book", + "author": [ + { "name":"Doe, John" } + ], + "issued": {"year": "2000"}, + "title": "Work 1" + }, + { + "id":"ITEM-2", + "type": "article", + "author": [ + { "name":"Doe, John" } + ], + "issued": {"year": "2000"}, + "title": "Work 2" + }, + { + "id":"ITEM-3", + "type": "section-book", + "author": [ + { "name":"Doe, John" } + ], + "issued": {"year": "2000"}, + "title": "Work 3" + }, + { + "id":"ITEM-4", + "type": "paper-conference", + "author": [ + { "name":"Doe, John" } + ], + "issued": {"year": "2000"}, + "title": "Work 4" + }, + { + "id":"ITEM-5", + "type": "chapter", + "author": [ + { "name":"Doe, John" } + ], + "issued": {"year": "2000"}, + "title": "Work 5" + } +] +<<===== INPUT =====<< diff --git a/std/humans/date_YearSuffixDelimiter.txt b/std/humans/date_YearSuffixDelimiter.txt new file mode 100644 index 000000000..6b4b12fbd --- /dev/null +++ b/std/humans/date_YearSuffixDelimiter.txt @@ -0,0 +1,136 @@ +# CSL test file: testYearSuffix001.txt +# Frank Bennett 2009.04.05 + +### Intro ### + +This is a test source file for use in testing processors of the +Citation Style Language (CSL) + +Test source files (like this one) are ground into valid JSON by +the ./grind.sh script in the root directory of the test archive. + + +A test consists of four required blocks: MODE, RESULT, CSL and INPUT + +Blocks of the test are delimited as show below. Only the leading +>>= or <<= and the block name (which must be in all caps) are +signficant. Everything outside of the block delimiters is ignored, +but you may wish to set of comments with a comment character, for +clarity. + + +## Test ## + +# The MODE block is a single string, either "citation" or "bibliography" +# (without quotes). This specifies the type of output that the processor +# should deliver for testing. + + >>===== MODE =====>> +citation + <<===== MODE =====<< + +>>===== SCHEMA =====>> +0.8 +<<===== SCHEMA =====<< + + +# The RESULT block is a simple string. If quotes are included in the +# result, they should not be escaped; just write what would appear +# on the monitor if the result of processing were dumped to standard +# output. + + + >>===== RESULT =====>> +Doe 2000a,b;2001 + <<===== RESULT =====<< + + +# The CSL block should be a valid CSL style file. These blocks +# are separately saved to the ./csl subdirectory in the test +# archive, so that they can be validated if desired. + +>>===== CSL =====>> + +<<===== CSL =====<< + +# The INPUT block is a list of input objects, written as +# valid JSON. +# +# Note that names are written as a simple string that must +# be parsed into the internal representation required by the +# processor being tested. The hinting syntax of name strings +# is as follows: +# +# Literal name (for institutions and the like): +# name="Ministry of Fear, Loathing and Error !!" +# +# Simple western name: +# name="Doe, John" +# +# Western name with articular: +# name="van Doe, John" +# +# Western name with capitalized articular: +# name="VAN Doe, John" +# +# Western name with suffix (no comma in output): +# name="Doe, John, III" +# +# Western name with suffix (comma delimiter in output): +# name="Doe, John,! Jr." +# +# Names fixed in sort ordering (common in East and Southeast Asia): +# name="Takeda, Shingen !" +# +# Names in non-Roman, non-Cyrillic fonts are to be combined +# to single joined-up strings in sort ordering, with no other +# processing. + +>>===== INPUT =====>> +[ + { + "id":"ITEM-1", + "type": "book", + "author": [ + { "name":"Doe, John" } + ], + "issued": {"year": "2000"}, + "title": "Paper 1" + }, + { + "id":"ITEM-2", + "type": "book", + "author": [ + { "name":"Doe, John" } + ], + "issued": {"year": "2000"}, + "title": "Paper 2" + }, + { + "id":"ITEM-3", + "type": "book", + "author": [ + { "name":"Doe, John" } + ], + "issued": {"year": "2001"}, + "title": "Paper 3" + } +] +<<===== INPUT =====<< diff --git a/std/humans/disambiguate_BaseNameCountOnFailureIfYearSuffixAvailable.txt b/std/humans/disambiguate_BaseNameCountOnFailureIfYearSuffixAvailable.txt new file mode 100644 index 000000000..741005ccf --- /dev/null +++ b/std/humans/disambiguate_BaseNameCountOnFailureIfYearSuffixAvailable.txt @@ -0,0 +1,86 @@ +>>===== MODE =====>> +citation +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.9 +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +Asthma, et al. (1990a); Asthma, et al. (1990b); Dropsy, Enteritis, X. Fever (2000); Dropsy, Enteritis, Y. Fever (2000) +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[ + { + "id":"ITEM-1", + "type": "book", + "author": [ + { "name":"Asthma, Albert" }, + { "name":"Bronchitis, Bosworth" }, + { "name":"Cold, Crispin" } + ], + "issued": {"year": "1990"}, + "title": "Book A" +}, +{ + "id":"ITEM-2", + "type": "book", + "author": [ + { "name":"Asthma, Albert" }, + { "name":"Bronchitis, Beauregarde" }, + { "name":"Cold, Crispin" } + ], + "issued": {"year": "1990"}, + "title": "Book B" + }, +{ + "id":"ITEM-3", + "type": "book", + "author": [ + { "name":"Dropsy, Devon" }, + { "name":"Enteritis, Edward" }, + { "name":"Fever, Xavier" } + ], + "issued": {"year": "2000"}, + "title": "Book C" + }, +{ + "id":"ITEM-4", + "type": "book", + "author": [ + { "name":"Dropsy, Devon" }, + { "name":"Enteritis, Ernie" }, + { "name":"Fever, Yves" } + ], + "issued": {"year": "2000"}, + "title": "Book D" + } +] +<<===== INPUT =====<< diff --git a/std/humans/disambiguate_BasedOnEtAlSubsequent.txt b/std/humans/disambiguate_BasedOnEtAlSubsequent.txt new file mode 100644 index 000000000..b00242008 --- /dev/null +++ b/std/humans/disambiguate_BasedOnEtAlSubsequent.txt @@ -0,0 +1,118 @@ +This test illustrates a use case for the following rule, discussed on the Zotero forums: + + "When different groups of authors with the same first author and date + occur, they should be cited thus: (Able, Baker & Charles 1986a; Able, + David & Edwards 1986b), then subsequently abbreviated to (Able et al. + 1986a; Able et al. 1986b)." + + "Italicized letters 'a', 'b', 'c', etc., should be added to the date of + papers with the same first authorship and year" + +The test illustrates that the first rule can be satisfied with the CSL 0.8 +feature set, and the second using the year-suffix text variable introduced +in CSL 0.9. It differs slightly from the example given by the poster +(asplundj) in that the cites do not include author initials, but this conforms +to the cited style guide. + + +The discussion can be found at: + http://forums.zotero.org/discussion/5290/collapse-year-suffix/ + +The style guide containing the rule quoted above can be found +at: + http://www.wiley.com/bw/submit.asp?ref=0269-8463&site=1 + + +The point in all of this for implementers is that evaluation of +an in-text key for disambiguation purposes should be based on the +subsequent form of the cite, even if it occurs only once in the +text. + + +Frank Bennett +2009-04-14 + + + +>>===== MODE =====>> +citation +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.9 +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +(Baur, Fröberg, Baur, et al. 2000a; Baur, Schileyko & Baur 2000b; Doe 2000) +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[ + { + "id":"ITEM-1", + "type": "article-journal", + "author": [ + { "name":"Baur, Bruno" }, + { "name": "Fröberg, Lars" }, + { "name": "Baur, Anette" }, + { "name": "Guggenheim, Richard" }, + { "name": "Haase, Martin" } + ], + "issued": { "year": "2000" }, + "title": "Ultrastructure of snail grazing damage to calcicolous lichens", + "container-title": "Nordic Journal of Botany", + "volume": "20", + "page-range": "119-128" + }, + { + "id":"ITEM-2", + "type":"article-journal", + "author": [ + { "name": "Baur, Bruno" }, + { "name": "Schileyko, Anatoly A." }, + { "name": "Baur, Anette" } + ], + "issued": { "year": "2000" }, + "title": "Ecological observations on _Arianta aethiops aethiops_ (Helicidae), a land snail endemic to the South Carpathian mountains, Romania", + "container-title": "Journal of Molluscan Studies", + "volume": "66", + "page-range": "285-289" + }, + { + "id":"ITEM-3", + "type":"article-journal", + "author": [ + { "name": "Doe, John" } + ], + "issued": { "year": "2000" }, + "title": "Some bogus title", + "container-title": "Journal of Irreproducible Results", + "volume": "666", + "page-range": "000-1" + } +] +<<===== INPUT =====<< diff --git a/std/humans/disambiguate_DisambiguateCondition.txt b/std/humans/disambiguate_DisambiguateCondition.txt new file mode 100644 index 000000000..516554707 --- /dev/null +++ b/std/humans/disambiguate_DisambiguateCondition.txt @@ -0,0 +1,70 @@ +>>===== MODE =====>> +citation +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.8 +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +Doe, et al., Book A (2000); Doe, et al., Book B (2000) +<<===== RESULT =====<< + + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[ + { + "id":"ITEM-1", + "type": "book", + "author": [ + { "name":"Doe, John" }, + { "name":"Roe, Jane" } + ], + "issued": {"year": "2000"}, + "title": "Book A" + }, + { + "id":"ITEM-2", + "type": "book", + "author": [ + { "name":"Doe, John" }, + { "name":"Roe, Jane" } + ], + "issued": {"year": "2000"}, + "title": "Book B" + } +] +<<===== INPUT =====<< diff --git a/std/humans/disambiguate_GivennameExpandCrossNestedNames.txt b/std/humans/disambiguate_GivennameExpandCrossNestedNames.txt new file mode 100644 index 000000000..3df3ade00 --- /dev/null +++ b/std/humans/disambiguate_GivennameExpandCrossNestedNames.txt @@ -0,0 +1,66 @@ +>>===== MODE =====>> +citation +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.8 +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +J. Doe, Jane Roe, Robert Jones; J. Doe, Josephine Roe, Robert Jones; J. Doe, Jane Roe, Richard Jones +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[{ + "id":"ambigs-12", + "type": "book", + "author": [ + { "name":"Doe, John" }, + { "name":"Roe, Jane" }, + { "name":"Jones, Robert" } + ], + "issued": {"year": "1990"}, + "title": "Book C" +}, +{ + "id":"ambigs-13", + "type": "book", + "author": [ + { "name":"Doe, John" }, + { "name":"Roe, Josephine" }, + { "name":"Jones, Robert" } + ], + "issued": {"year": "1990"}, + "title": "Book B" +}, +{ + "id":"ambigs-14", + "type": "book", + "author": [ + { "name":"Doe, John" }, + { "name":"Roe, Jane" }, + { "name":"Jones, Richard" } + ], + "issued": {"year": "1990"}, + "title": "Book A" +}] +<<===== INPUT =====<< diff --git a/std/humans/disambiguate_MinimalGivennameExpandMinimalNames.txt b/std/humans/disambiguate_MinimalGivennameExpandMinimalNames.txt new file mode 100644 index 000000000..4e0015067 --- /dev/null +++ b/std/humans/disambiguate_MinimalGivennameExpandMinimalNames.txt @@ -0,0 +1,60 @@ +>>===== MODE =====>> +citation +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.8 +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +A. Asthma, Brandon Bronchitis, et al.; A. Asthma, Biff Bronchitis, et al. +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[{ + "id":"ambigs-16", + "type": "book", + "author": [ + { "name":"Asthma, Albert" }, + { "name":"Bronchitis, Brandon" }, + { "name":"Cold, Charles" } + ], + "issued": {"year": "1990"}, + "title": "Book M" +}, +{ + "id":"ambigs-17", + "type": "book", + "author": [ + { "name":"Asthma, Albert" }, + { "name":"Bronchitis, Biff" }, + { "name":"Cold, Curtis" } + ], + "issued": {"year": "1990"}, + "title": "Book M" +}] +<<===== INPUT =====<< diff --git a/std/humans/disambiguate_RetainNamesOnFailureIfYearSuffixNotAvailable.txt b/std/humans/disambiguate_RetainNamesOnFailureIfYearSuffixNotAvailable.txt new file mode 100644 index 000000000..a40894c42 --- /dev/null +++ b/std/humans/disambiguate_RetainNamesOnFailureIfYearSuffixNotAvailable.txt @@ -0,0 +1,85 @@ +>>===== MODE =====>> +citation +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.9 +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +Asthma, Bronchitis, Cold (1990); Asthma, Bronchitis, Cold (1990); Dropsy, Enteritis, X. Fever (2000); Dropsy, Enteritis, Y. Fever (2000) +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[ + { + "id":"ITEM-1", + "type": "book", + "author": [ + { "name":"Asthma, Albert" }, + { "name":"Bronchitis, Bosworth" }, + { "name":"Cold, Crispin" } + ], + "issued": {"year": "1990"}, + "title": "Book A" +}, +{ + "id":"ITEM-2", + "type": "book", + "author": [ + { "name":"Asthma, Albert" }, + { "name":"Bronchitis, Beauregarde" }, + { "name":"Cold, Crispin" } + ], + "issued": {"year": "1990"}, + "title": "Book B" + }, +{ + "id":"ITEM-3", + "type": "book", + "author": [ + { "name":"Dropsy, Devon" }, + { "name":"Enteritis, Edward" }, + { "name":"Fever, Xavier" } + ], + "issued": {"year": "2000"}, + "title": "Book C" + }, +{ + "id":"ITEM-4", + "type": "book", + "author": [ + { "name":"Dropsy, Devon" }, + { "name":"Enteritis, Ernie" }, + { "name":"Fever, Yves" } + ], + "issued": {"year": "2000"}, + "title": "Book D" + } +] +<<===== INPUT =====<< diff --git a/std/humans/disambiguate_YearSuffixAndSort.txt b/std/humans/disambiguate_YearSuffixAndSort.txt new file mode 100644 index 000000000..6fbac65db --- /dev/null +++ b/std/humans/disambiguate_YearSuffixAndSort.txt @@ -0,0 +1,191 @@ +>>===== MODE =====>> +citation +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.8 +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +1990m!; 1990l!; 1990k!; 1990j!; 1990i!; 1990h!; 1990g!; 1990f!; 1990e!; 1990d!; 1990c!; 1990b!; 1990a! +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[{ + "id":"ambigs-1", + "type": "book", + "author": [ + { "name":"Asthma, Albert" }, + { "name":"Bronchitis, Bosworth" }, + { "name":"Cold, Crispin" }, + { "name":"Dropsy, David" }, + { "name":"Ebola, Elvin" }, + { "name":"Fever, Fergus" } + ], + "issued": {"year": "1990"}, + "title": "Book M" +}, +{ + "id":"ambigs-2", + "type": "book", + "author": [ + { "name":"Asthma, Albert" }, + { "name":"Bronchitis, Bosworth" }, + { "name":"Cold, Crispin" }, + { "name":"Dropsy, David" }, + { "name":"Enteritis, Ernie" }, + { "name":"Fever, Fergus" } + ], + "issued": {"year": "1990"}, + "title": "Book L" +}, +{ + "id":"ambigs-3", + "type": "book", + "author": [ + { "name":"Asthma, Albert" }, + { "name":"Bronchitis, Bosworth" }, + { "name":"Cold, Crispin" }, + { "name":"Dropsy, David" }, + { "name":"Ebola, Elvin" }, + { "name":"Fever, Fergus" } + ], + "issued": {"year": "1990"}, + "title": "Book K" +}, +{ + "id":"ambigs-4", + "type": "book", + "author": [ + { "name":"Asthma, Albert" }, + { "name":"Bronchitis, Bosworth" }, + { "name":"Cold, Crispin" } + ], + "issued": {"year": "1990"}, + "title": "Book J" +}, +{ + "id":"ambigs-5", + "type": "book", + "author": [ + { "name":"Asthma, Albert" }, + { "name":"Bronchitis, Beauregarde" }, + { "name":"Cold, Crispin" } + ], + "issued": {"year": "1990"}, + "title": "Book I" +}, +{ + "id":"ambigs-6", + "type": "book", + "author": [ + { "name":"Asthma, Alan" }, + { "name":"Bronchitis, Bosworth" }, + { "name":"Cold, Crispin" }, + { "name":"Dropsy, David" }, + { "name":"Ebola, Elvin" }, + { "name":"Fever, Fergus" } + ], + "issued": {"year": "1990"}, + "title": "Book H" +}, +{ + "id":"ambigs-7", + "type": "book", + "author": [ + { "name":"Doe, John" }, + { "name":"Roe, Janet" } + ], + "issued": {"year": "1990"}, + "title": "Book G" +}, +{ + "id":"ambigs-8", + "type": "book", + "author": [ + { "name":"Doe, John" }, + { "name":"Roe, Jane" } + ], + "issued": {"year": "1990"}, + "title": "Book F" +}, +{ + "id":"ambigs-9", + "type": "book", + "author": [ + { "name":"Doe, John" }, + { "name":"Roe, Jane" } + ], + "issued": {"year": "1990"}, + "title": "Book E" +}, +{ + "id":"ambigs-10", + "type": "book", + "author": [ + { "name":"Doe, John" }, + { "name":"Roe, Janet" } + ], + "issued": {"year": "1990"}, + "title": "Book D" +}, +{ + "id":"ambigs-11", + "type": "book", + "author": [ + { "name":"Doe, John" }, + { "name":"Roe, Jane" }, + { "name":"Jones, Robert" } + ], + "issued": {"year": "1990"}, + "title": "Book C" +}, +{ + "id":"ambigs-12", + "type": "book", + "author": [ + { "name":"Doe, John" }, + { "name":"Roe, Josephine" }, + { "name":"Jones, Robert" } + ], + "issued": {"year": "1990"}, + "title": "Book B" +}, +{ + "id":"ambigs-13", + "type": "book", + "author": [ + { "name":"Doe, John" }, + { "name":"Roe, Jane" }, + { "name":"Jones, Richard" } + ], + "issued": {"year": "1990"}, + "title": "Book A" +}] +<<===== INPUT =====<< diff --git a/std/humans/name_ArticularPlain.txt b/std/humans/name_ArticularPlain.txt new file mode 100644 index 000000000..4fbbdb2f4 --- /dev/null +++ b/std/humans/name_ArticularPlain.txt @@ -0,0 +1,38 @@ +>>===== MODE =====>> +citation +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.8 +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +James Doe III +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[{ + "id":"item-1", + "type": "book", + "author": [ + { "name":"Doe, James, III" } + ], + "issued": "2001", + "title": "My Anonymous Heritage" +}] +<<===== INPUT =====<< diff --git a/std/humans/name_ArticularWithComma.txt b/std/humans/name_ArticularWithComma.txt new file mode 100644 index 000000000..98ba46651 --- /dev/null +++ b/std/humans/name_ArticularWithComma.txt @@ -0,0 +1,38 @@ +>>===== MODE =====>> +citation +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.8 +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +Jeffrey Doe, Jr. +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[{ + "id": "item-1", + "type": "book", + "author": [ + { "name":"Doe, Jeffrey,! Jr." } + ], + "issued": "2001", + "title": "My Life as an Anonymous Heir" +}] +<<===== INPUT =====<< diff --git a/std/humans/name_Asian.txt b/std/humans/name_Asian.txt new file mode 100644 index 000000000..7e80de919 --- /dev/null +++ b/std/humans/name_Asian.txt @@ -0,0 +1,38 @@ +>>===== MODE =====>> +citation +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.8 +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +Miyamoto Musashi +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[{ + "id":"simple-sticky-name-1", + "type": "book", + "author": [ + { "name":"Miyamoto, Musashi !" } + ], + "issued": {"year": "1645", "month":"12", "day":"27"}, + "title": "A Book of Five Rings" +}] +<<===== INPUT =====<< diff --git a/std/humans/name_AsianGlyphs.txt b/std/humans/name_AsianGlyphs.txt new file mode 100644 index 000000000..dbdb6718c --- /dev/null +++ b/std/humans/name_AsianGlyphs.txt @@ -0,0 +1,38 @@ +>>===== MODE =====>> +citation +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.8 +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +我妻栄 +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[{ + "id": "item-1", + "type": "book", + "author": [ + { "name":"我妻, 栄" } + ], + "issued": "1960", + "title": "民法" +}] +<<===== INPUT =====<< diff --git a/std/humans/name_AuthorCount.txt b/std/humans/name_AuthorCount.txt new file mode 100644 index 000000000..ee907fa2d --- /dev/null +++ b/std/humans/name_AuthorCount.txt @@ -0,0 +1,76 @@ +>>===== MODE =====>> +citation +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.9 experimental +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +33210 +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[ + { + "id":"item-1", + "type": "book", + "author": [ + { "name":"Doe, John" }, + { "name":"Roe, Jane" }, + { "name":"Brown, Robert" }, + { "name":"Smith, Tom" } + ] + }, + { + "id":"item-2", + "type": "book", + "author": [ + { "name":"Doe, John" }, + { "name":"Doe, Jake" }, + { "name":"Brown, Robert" } + ] + }, + { + "id":"item-3", + "type": "book", + "author": [ + { "name":"Doe, John" }, + { "name":"Doe, Jake" } + ] + }, + { + "id":"item-4", + "type": "book", + "author": [ + { "name":"Doe, John" } + ] + }, + { + "id":"item-5", + "type": "book", + "editor": [ + { "name":"Doe, John" } + ] + } +] +<<===== INPUT =====<< diff --git a/std/humans/name_CollapseRoleLabels.txt b/std/humans/name_CollapseRoleLabels.txt new file mode 100644 index 000000000..1e5115e77 --- /dev/null +++ b/std/humans/name_CollapseRoleLabels.txt @@ -0,0 +1,56 @@ +>>===== MODE =====>> +citation +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.8 +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +Albert Asthma, et al. (eds. & trans.) +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[{ + "id":"editor-translator-1", + "type": "book", + "editor": [ + { "name":"Asthma, Albert" }, + { "name":"Bronchitis, Bosworth" }, + { "name":"Cold, Crispin" } + ], + "translator": [ + { "name":"Asthma, Albert" }, + { "name":"Bronchitis, Bosworth" }, + { "name":"Cold, Crispin" } + ], + "issued": {"year": "1990"}, + "title": "Book One" +}] +<<===== INPUT =====<< diff --git a/std/humans/name_Delimiter.txt b/std/humans/name_Delimiter.txt new file mode 100644 index 000000000..c91dc111f --- /dev/null +++ b/std/humans/name_Delimiter.txt @@ -0,0 +1,40 @@ +>>===== MODE =====>> +citation +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.8 +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +John Doe; Jane Roe +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[{ + "id":"item-1", + "type": "book", + "author": [ + { "name":"Doe, John", "uri":"http://people.org/doej" }, + { "name":"Roe, Jane", "uri":"http://people.org/roej" } + ], + "issued": "2000", + "title": "Our Anonymous Lives" +}] +<<===== INPUT =====<< diff --git a/std/humans/name_Institution.txt b/std/humans/name_Institution.txt new file mode 100644 index 000000000..f00b7d761 --- /dev/null +++ b/std/humans/name_Institution.txt @@ -0,0 +1,38 @@ +>>===== MODE =====>> +citation +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.8 +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +Ministry of Education, Sports, Culture, Science and Technology +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[{ + "id":"institution-name-1", + "type": "book", + "author": [ + { "name":"Ministry of Education, Sports, Culture, Science and Technology !!" } + ], + "issued": "2006", + "title": "White Paper on Education, Sports, Culture, Science and Technology" +}] +<<===== INPUT =====<< diff --git a/std/humans/name_LabelAfterPlural.txt b/std/humans/name_LabelAfterPlural.txt new file mode 100644 index 000000000..fb43e15d6 --- /dev/null +++ b/std/humans/name_LabelAfterPlural.txt @@ -0,0 +1,40 @@ +>>===== MODE =====>> +citation +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.8 +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +John DoeJane Roeeditors +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[{ + "id":"item-1", + "type": "book", + "editor": [ + { "name":"Doe, John", "uri":"http://people.org/doej" }, + { "name":"Roe, Jane", "uri":"http://people.org/doej" } + ], + "issued": "2000", + "title": "His Anonymous Life" +}] +<<===== INPUT =====<< diff --git a/std/humans/name_LabelAfterPluralDecorations.txt b/std/humans/name_LabelAfterPluralDecorations.txt new file mode 100644 index 000000000..e539dce7c --- /dev/null +++ b/std/humans/name_LabelAfterPluralDecorations.txt @@ -0,0 +1,42 @@ +>>===== MODE =====>> +citation +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.8 +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +John Doe, et al. (editors) +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[{ + "id":"item-1", + "type": "book", + "editor": [ + { "name":"Doe, John", "uri":"http://people.org/doej" }, + { "name":"Roe, Jane", "uri":"http://people.org/doej" } + ], + "issued": "2000", + "title": "His Anonymous Life" +}] +<<===== INPUT =====<< diff --git a/std/humans/name_LongAbbreviation.txt b/std/humans/name_LongAbbreviation.txt new file mode 100644 index 000000000..807d55f3b --- /dev/null +++ b/std/humans/name_LongAbbreviation.txt @@ -0,0 +1,38 @@ +>>===== MODE =====>> +citation +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.8 +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +Ts. Tserendorj +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[{ + "id":"simple-mongolian-name-1", + "type": "book", + "author": [ + { "name":"Tserendorj, TSerendorjiin" } + ], + "issued": {"year": "1925", "month":"3", "day":"4"}, + "title": "An Altogether Unknown History of Soviet-Mongolian Relations" +}] +<<===== INPUT =====<< diff --git a/std/humans/name_MixedFormatsInitialSortOrderAllWithDecorationsEtAl.txt b/std/humans/name_MixedFormatsInitialSortOrderAllWithDecorationsEtAl.txt new file mode 100644 index 000000000..ca226cf24 --- /dev/null +++ b/std/humans/name_MixedFormatsInitialSortOrderAllWithDecorationsEtAl.txt @@ -0,0 +1,47 @@ +>>===== MODE =====>> +citation +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.8 +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +ЧАЙКОВСКИЙ, П.И., van WINKLE, R., 我妻栄, THUCYDIDES, C., III, TOKUGAWA Ieyasu, et al. +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[{ + "id":"item-1", + "type": "book", + "author": [ + { "name":"Чайковский, Пётр Ильич" }, + { "name":"van Winkle, Rip" }, + { "name":"我妻, 栄" }, + { "name":"Thucydides, Carl, III" }, + { "name":"Tokugawa, Ieyasu !" }, + { "name":"Ministry of Fear, Loathing and Error !!" }, + { "name":"Prince" } + ], + "issued": "2000", + "title": "Our Story" +}] +<<===== INPUT =====<< diff --git a/std/humans/name_MixedFormatsInitialSortOrderFirstWithDecorationsEtAl.txt b/std/humans/name_MixedFormatsInitialSortOrderFirstWithDecorationsEtAl.txt new file mode 100644 index 000000000..459c953b1 --- /dev/null +++ b/std/humans/name_MixedFormatsInitialSortOrderFirstWithDecorationsEtAl.txt @@ -0,0 +1,47 @@ +>>===== MODE =====>> +citation +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.8 +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +ЧАЙКОВСКИЙ, П.И., R. van WINKLE, 我妻栄, C. THUCYDIDES III, TOKUGAWA Ieyasu, et al. +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[{ + "id":"item-1", + "type": "book", + "author": [ + { "name":"Чайковский, Пётр Ильич" }, + { "name":"van Winkle, Rip" }, + { "name":"我妻, 栄" }, + { "name":"Thucydides, Carl, III" }, + { "name":"Tokugawa, Ieyasu !" }, + { "name":"Ministry of Fear, Loathing and Error !!" }, + { "name":"Prince" } + ], + "issued": "2000", + "title": "Our Story" +}] +<<===== INPUT =====<< diff --git a/std/humans/name_MixedFormatsInitialsWithDecorationsEtAl.txt b/std/humans/name_MixedFormatsInitialsWithDecorationsEtAl.txt new file mode 100644 index 000000000..5668e37cc --- /dev/null +++ b/std/humans/name_MixedFormatsInitialsWithDecorationsEtAl.txt @@ -0,0 +1,47 @@ +>>===== MODE =====>> +citation +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.8 +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +П.И. ЧАЙКОВСКИЙ, R. van WINKLE, 我妻栄, C. THUCYDIDES III, TOKUGAWA Ieyasu, et al. +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[{ + "id":"item-1", + "type": "book", + "author": [ + { "name":"Чайковский, Пётр Ильич" }, + { "name":"van Winkle, Rip" }, + { "name":"我妻, 栄" }, + { "name":"Thucydides, Carl, III" }, + { "name":"Tokugawa, Ieyasu !" }, + { "name":"Ministry of Fear, Loathing and Error !!" }, + { "name":"Prince" } + ], + "issued": "2000", + "title": "Our Story" +}] +<<===== INPUT =====<< diff --git a/std/humans/name_MixedFormatsPrimaryDecorations.txt b/std/humans/name_MixedFormatsPrimaryDecorations.txt new file mode 100644 index 000000000..b0467ef94 --- /dev/null +++ b/std/humans/name_MixedFormatsPrimaryDecorations.txt @@ -0,0 +1,45 @@ +>>===== MODE =====>> +citation +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.8 +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +Пётр Ильич ЧАЙКОВСКИЙ, Rip van WINKLE, 我妻栄, Carl THUCYDIDES III, TOKUGAWA Ieyasu, Ministry of Fear, Loathing and Error, PRINCE +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[{ + "id":"item-1", + "type": "book", + "author": [ + { "name":"Чайковский, Пётр Ильич" }, + { "name":"van Winkle, Rip" }, + { "name":"我妻, 栄" }, + { "name":"Thucydides, Carl, III" }, + { "name":"Tokugawa, Ieyasu !" }, + { "name":"Ministry of Fear, Loathing and Error !!" }, + { "name":"Prince" } + ], + "issued": "2000", + "title": "Our Story" +}] +<<===== INPUT =====<< diff --git a/std/humans/name_MixedFormatsWithDecorationsEtAl.txt b/std/humans/name_MixedFormatsWithDecorationsEtAl.txt new file mode 100644 index 000000000..fbff2ec19 --- /dev/null +++ b/std/humans/name_MixedFormatsWithDecorationsEtAl.txt @@ -0,0 +1,47 @@ +>>===== MODE =====>> +citation +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.8 +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +Пётр Ильич ЧАЙКОВСКИЙ, Rip van WINKLE, 我妻栄, Carl THUCYDIDES III, TOKUGAWA Ieyasu, et al. +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[{ + "id":"item-1", + "type": "book", + "author": [ + { "name":"Чайковский, Пётр Ильич" }, + { "name":"van Winkle, Rip" }, + { "name":"我妻, 栄" }, + { "name":"Thucydides, Carl, III" }, + { "name":"Tokugawa, Ieyasu !" }, + { "name":"Ministry of Fear, Loathing and Error !!" }, + { "name":"Prince" } + ], + "issued": "2000", + "title": "Our Story" +}] +<<===== INPUT =====<< diff --git a/std/humans/name_MixedFormatsWithDecorationsPlusAlternateEtAlDecorations.txt b/std/humans/name_MixedFormatsWithDecorationsPlusAlternateEtAlDecorations.txt new file mode 100644 index 000000000..cd9a3d3c2 --- /dev/null +++ b/std/humans/name_MixedFormatsWithDecorationsPlusAlternateEtAlDecorations.txt @@ -0,0 +1,48 @@ +>>===== MODE =====>> +citation +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.8 +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +Пётр Ильич ЧАЙКОВСКИЙ, Rip van WINKLE, 我妻栄, Carl THUCYDIDES III, TOKUGAWA Ieyasu and others +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[{ + "id":"item-1", + "type": "book", + "author": [ + { "name":"Чайковский, Пётр Ильич" }, + { "name":"van Winkle, Rip" }, + { "name":"我妻, 栄" }, + { "name":"Thucydides, Carl, III" }, + { "name":"Tokugawa, Ieyasu !" }, + { "name":"Ministry of Fear, Loathing and Error !!" }, + { "name":"Prince" } + ], + "issued": "2000", + "title": "Our Story" +}] +<<===== INPUT =====<< diff --git a/std/humans/name_MixedFormatsWithDecorationsPlusEtAlDecorations.txt b/std/humans/name_MixedFormatsWithDecorationsPlusEtAlDecorations.txt new file mode 100644 index 000000000..b60d35890 --- /dev/null +++ b/std/humans/name_MixedFormatsWithDecorationsPlusEtAlDecorations.txt @@ -0,0 +1,48 @@ +>>===== MODE =====>> +citation +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.8 +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +Пётр Ильич ЧАЙКОВСКИЙ, Rip van WINKLE, 我妻栄, Carl THUCYDIDES III, TOKUGAWA Ieyasuet al. +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[{ + "id":"item-1", + "type": "book", + "author": [ + { "name":"Чайковский, Пётр Ильич" }, + { "name":"van Winkle, Rip" }, + { "name":"我妻, 栄" }, + { "name":"Thucydides, Carl, III" }, + { "name":"Tokugawa, Ieyasu !" }, + { "name":"Ministry of Fear, Loathing and Error !!" }, + { "name":"Prince" } + ], + "issued": "2000", + "title": "Our Story" +}] +<<===== INPUT =====<< diff --git a/std/humans/name_SubsituteName.txt b/std/humans/name_SubsituteName.txt new file mode 100644 index 000000000..dd3237e75 --- /dev/null +++ b/std/humans/name_SubsituteName.txt @@ -0,0 +1,41 @@ +>>===== MODE =====>> +citation +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.8 +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +John Doe +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[{ + "id":"item-1", + "type": "book", + "editor": [ + { "name":"Doe, John", "uri":"http://people.org/doej" } + ], + "issued": "2000", + "title": "His Anonymous Life" +}] +<<===== INPUT =====<< diff --git a/std/humans/name_SubstituteInheritLabel.txt b/std/humans/name_SubstituteInheritLabel.txt new file mode 100644 index 000000000..48fca196f --- /dev/null +++ b/std/humans/name_SubstituteInheritLabel.txt @@ -0,0 +1,51 @@ +>>===== MODE =====>> +citation +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.8 +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +[[X]Jane Roe (ed.); [X]John Doe] +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[{ + "id":"item-1", + "type": "book", + "editor": [ + { "name":"Roe, Jane" } + ], + "issued": "2000", + "title": "Her Anonymous Anthology" +}, +{ + "id":"simple-western-name-1", + "type": "book", + "author": [ + { "name":"Doe, John", "uri":"http://people.org/doej" } + ], + "issued": {"year": "1965", "month":"6", "day":"1"}, + "title": "His Anonymous Life" +}] +<<===== INPUT =====<< diff --git a/std/humans/name_SubstituteMacroInheritDecorations.txt b/std/humans/name_SubstituteMacroInheritDecorations.txt new file mode 100644 index 000000000..043c3ce6b --- /dev/null +++ b/std/humans/name_SubstituteMacroInheritDecorations.txt @@ -0,0 +1,45 @@ +>>===== MODE =====>> +citation +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.8 +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +[I AM A BLOB] +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[{ + "id":"simple-western-name-1", + "type": "book", + "author": [ + { "name":"Doe, John", "uri":"http://people.org/doej" } + ], + "issued": {"year": "1965", "month":"6", "day":"1"}, + "title": "His Anonymous Life" +}] +<<===== INPUT =====<< diff --git a/std/humans/name_TwoRolesSameRenderingSeparateRoleLabels.txt b/std/humans/name_TwoRolesSameRenderingSeparateRoleLabels.txt new file mode 100644 index 000000000..d802f9fe9 --- /dev/null +++ b/std/humans/name_TwoRolesSameRenderingSeparateRoleLabels.txt @@ -0,0 +1,56 @@ +>>===== MODE =====>> +citation +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.8 +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +Albert Asthma, et al. (eds.), Albert Asthma, et al. (trans.) +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[{ + "id":"editor-translator-2", + "type": "book", + "editor": [ + { "name":"Asthma, Albert" }, + { "name":"Bronchitis, Bosworth" }, + { "name":"Cold, Crispin" } + ], + "translator": [ + { "name":"Asthma, Albert" }, + { "name":"Bronchitis, Bosworth" }, + { "name":"Cold, Constantine" } + ], + "issued": {"year": "1990"}, + "title": "Book One" +}] +<<===== INPUT =====<< diff --git a/std/humans/name_WesternArticularLowercase.txt b/std/humans/name_WesternArticularLowercase.txt new file mode 100644 index 000000000..67b082ca7 --- /dev/null +++ b/std/humans/name_WesternArticularLowercase.txt @@ -0,0 +1,38 @@ +>>===== MODE =====>> +citation +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.8 +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +Jacques van Doe +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[{ + "id":"item-1", + "type": "book", + "author": [ + { "name":"van Doe, Jacques" } + ], + "issued": "1645", + "title": "A Book of Five Rings" +}] +<<===== INPUT =====<< diff --git a/std/humans/name_WesternPrimaryFontStyle.txt b/std/humans/name_WesternPrimaryFontStyle.txt new file mode 100644 index 000000000..4b2d48a38 --- /dev/null +++ b/std/humans/name_WesternPrimaryFontStyle.txt @@ -0,0 +1,39 @@ +>>===== MODE =====>> +citation +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.8 +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +John Doe +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[{ + "id":"simple-western-name-1", + "type": "book", + "author": [ + { "name":"Doe, John", "uri":"http://people.org/doej" } + ], + "issued": {"year": "1965", "month":"6", "day":"1"}, + "title": "His Anonymous Life" +}] +<<===== INPUT =====<< diff --git a/std/humans/name_WesternPrimaryFontStyleTwoAuthors.txt b/std/humans/name_WesternPrimaryFontStyleTwoAuthors.txt new file mode 100644 index 000000000..08cb73d4a --- /dev/null +++ b/std/humans/name_WesternPrimaryFontStyleTwoAuthors.txt @@ -0,0 +1,40 @@ +>>===== MODE =====>> +citation +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.8 +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +John Doe; Jane Roe +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[{ + "id":"item-1", + "type": "book", + "author": [ + { "name":"Doe, John", "uri":"http://people.org/doej" }, + { "name":"Roe, Jane", "uri":"http://people.org/roej" } + ], + "issued": "2000", + "title": "Our Anonymous Lives" +}] +<<===== INPUT =====<< diff --git a/std/humans/name_WesternSimple.txt b/std/humans/name_WesternSimple.txt new file mode 100644 index 000000000..c4cac3b1f --- /dev/null +++ b/std/humans/name_WesternSimple.txt @@ -0,0 +1,38 @@ +>>===== MODE =====>> +citation +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.8 +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +John Doe +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[{ + "id":"simple-western-name-1", + "type": "book", + "author": [ + { "name":"Doe, John", "uri":"http://people.org/doej" } + ], + "issued": {"year": "1965", "month":"6", "day":"1"}, + "title": "His Anonymous Life" +}] +<<===== INPUT =====<< diff --git a/std/humans/name_WesternTwoAuthors.txt b/std/humans/name_WesternTwoAuthors.txt new file mode 100644 index 000000000..4f35a4636 --- /dev/null +++ b/std/humans/name_WesternTwoAuthors.txt @@ -0,0 +1,39 @@ +>>===== MODE =====>> +citation +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.8 +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +John DoeJane Roe +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[{ + "id":"item-1", + "type": "book", + "author": [ + { "name":"Doe, John", "uri":"http://people.org/doej" }, + { "name":"Roe, Jane", "uri":"http://people.org/roej" } + ], + "issued": "2000", + "title": "Our Anonymous Lives" +}] +<<===== INPUT =====<< diff --git a/std/humans/sort_AguStyle.txt b/std/humans/sort_AguStyle.txt new file mode 100644 index 000000000..bd7c5d28d --- /dev/null +++ b/std/humans/sort_AguStyle.txt @@ -0,0 +1,175 @@ +>>===== MODE =====>> +bibliography +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.9 experimental +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +Smith, A. (1989a) +Smith, A. (1989b) +Smith, A. (1991) +Smith, A., and C. Allen (1992) +Smith, A., and B. Frank (1995) +Smith, A., and B. Frank (1997) +Smith, A., L. Roberts, and T. Jones (1993) +Smith, A., T. Jones, and L. Roberts (1997) +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[ + { + "id":"item-1", + "type": "book", + "author": [ + { "name":"Smith, Al" }, + ], + "issued": {"year": "1989"}, + "title": "Book One" + }, + { + "id":"item-3", + "type": "book", + "editor": [ + { "name":"Smith, Al" } + ], + "issued": {"year": "1991"}, + "title": "Book Three" + }, + { + "id":"item-4", + "type": "book", + "editor": [ + { "name":"Smith, Al" }, + { "name":"Allen, Carl" } + ], + "issued": {"year": "1992"}, + "title": "Book Four" + }, + { + "id":"item-6", + "type": "book", + "editor": [ + { "name":"Smith, Al" }, + { "name":"Frank, Beauregarde" } + ], + "issued": {"year": "1997"}, + "title": "Book Six" + }, + { + "id":"item-2", + "type": "book", + "author": [ + { "name":"Smith, Al" } + ], + "issued": {"year": "1989"}, + "title": "Book Two" + }, + { + "id":"item-5", + "type": "book", + "editor": [ + { "name":"Smith, Al" }, + { "name":"Frank, Beauregarde" } + ], + "issued": {"year": "1995"}, + "title": "Book Five" + }, + { + "id":"item-7", + "type": "book", + "editor": [ + { "name":"Smith, Al" }, + { "name":"Roberts, Lionel" }, + { "name":"Jones, Theresa" } + ], + "issued": {"year": "1993"}, + "title": "Book Seven" + }, + { + "id":"item-8", + "type": "book", + "editor": [ + { "name":"Smith, Al" }, + { "name":"Jones, Theresa" }, + { "name":"Roberts, Lionel" } + ], + "issued": {"year": "1997"}, + "title": "Book Eight" + } +] +<<===== INPUT =====<< diff --git a/std/humans/sort_AguStyleReverseGroups.txt b/std/humans/sort_AguStyleReverseGroups.txt new file mode 100644 index 000000000..c5d4ad2a4 --- /dev/null +++ b/std/humans/sort_AguStyleReverseGroups.txt @@ -0,0 +1,175 @@ +>>===== MODE =====>> +bibliography +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.9 experimental +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +Smith, A., L. Roberts, and T. Jones (1993) +Smith, A., T. Jones, and L. Roberts (1997) +Smith, A., and C. Allen (2000) +Smith, A., and B. Frank (1995) +Smith, A., and B. Frank (1997) +Smith, A. (1989a) +Smith, A. (1989b) +Smith, A. (1991) +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[ + { + "id":"item-1", + "type": "book", + "author": [ + { "name":"Smith, Al" }, + ], + "issued": {"year": "1989"}, + "title": "Book One" + }, + { + "id":"item-2", + "type": "book", + "author": [ + { "name":"Smith, Al" } + ], + "issued": {"year": "1989"}, + "title": "Book Two" + }, + { + "id":"item-3", + "type": "book", + "editor": [ + { "name":"Smith, Al" } + ], + "issued": {"year": "1991"}, + "title": "Book Three" + }, + { + "id":"item-4", + "type": "book", + "editor": [ + { "name":"Smith, Al" }, + { "name":"Allen, Carl" } + ], + "issued": {"year": "2000"}, + "title": "Book Four" + }, + { + "id":"item-5", + "type": "book", + "editor": [ + { "name":"Smith, Al" }, + { "name":"Frank, Beauregarde" } + ], + "issued": {"year": "1995"}, + "title": "Book Five" + }, + { + "id":"item-6", + "type": "book", + "editor": [ + { "name":"Smith, Al" }, + { "name":"Frank, Beauregarde" } + ], + "issued": {"year": "1997"}, + "title": "Book Six" + }, + { + "id":"item-7", + "type": "book", + "editor": [ + { "name":"Smith, Al" }, + { "name":"Roberts, Lionel" }, + { "name":"Jones, Theresa" } + ], + "issued": {"year": "1993"}, + "title": "Book Seven" + }, + { + "id":"item-8", + "type": "book", + "editor": [ + { "name":"Smith, Al" }, + { "name":"Jones, Theresa" }, + { "name":"Roberts, Lionel" } + ], + "issued": {"year": "1997"}, + "title": "Book Eight" + } +] +<<===== INPUT =====<< diff --git a/std/humans/sort_Citation.txt b/std/humans/sort_Citation.txt new file mode 100644 index 000000000..4cea5c1f6 --- /dev/null +++ b/std/humans/sort_Citation.txt @@ -0,0 +1,56 @@ +>>===== MODE =====>> +citation +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.8 +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +Doe; Roe +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[ + { + "id":"ITEM-1", + "type": "book", + "author": [ + { "name":"Roe, Jane" } + ] + }, + { + "id":"ITEM-2", + "type": "book", + "author": [ + { "name":"Doe, John" } + ] + } +] diff --git a/std/humans/sort_NumberOfAuthorsAsKey.txt b/std/humans/sort_NumberOfAuthorsAsKey.txt new file mode 100644 index 000000000..016d37e57 --- /dev/null +++ b/std/humans/sort_NumberOfAuthorsAsKey.txt @@ -0,0 +1,96 @@ +>>===== MODE =====>> +bibliography +<<===== MODE =====<< + +>>===== SCHEMA =====>> +0.9 experimental +<<===== SCHEMA =====<< + + +>>===== RESULT =====>> +Book One +Book Two +Book Three +<<===== RESULT =====<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[ + { + "id":"item-1", + "type": "book", + "author": [ + { "name":"Doe, John" }, + ], + "issued": {"year": "2000"}, + "title": "Book One" + }, + { + "id":"item-2", + "type": "book", + "author": [ + { "name":"Doe, John" }, + { "name":"Doe, Jake" }, + { "name":"Jones, Robert" } + ], + "issued": {"year": "2000"}, + "title": "Book Three" + }, + { + "id":"item-3", + "type": "book", + "editor": [ + { "name":"Doe, John" }, + { "name":"Roe, Jane" }, + ], + "issued": {"year": "2000"}, + "title": "Book Two" + } +] +<<===== INPUT =====<< diff --git a/std/humans/term_MagicCapitalization.txt b/std/humans/term_MagicCapitalization.txt new file mode 100644 index 000000000..29b059bc3 --- /dev/null +++ b/std/humans/term_MagicCapitalization.txt @@ -0,0 +1,32 @@ +>>== MODE ==>> +citation +<<== MODE ==<< + +>>== SCHEMA ==>> +0.8 +<<== SCHEMA ==<< + + +>>== RESULT ==>> +And +<<== RESULT ==<< + + +>>===== CSL =====>> + +<<===== CSL =====<< + + +>>===== INPUT =====>> +[{ + "id":"item-1", + "type": "book", + "title": "Ignore me" +}] +<<===== INPUT =====<< diff --git a/style/ama.csl b/style/ama.csl new file mode 100644 index 000000000..8346c2257 --- /dev/null +++ b/style/ama.csl @@ -0,0 +1,184 @@ + + diff --git a/style/apa.csl b/style/apa.csl new file mode 100644 index 000000000..7f8e65f53 --- /dev/null +++ b/style/apa.csl @@ -0,0 +1,254 @@ + + + diff --git a/style/apsa.csl b/style/apsa.csl new file mode 100644 index 000000000..a8ff417de --- /dev/null +++ b/style/apsa.csl @@ -0,0 +1,175 @@ + + diff --git a/style/asa.csl b/style/asa.csl new file mode 100644 index 000000000..b66076a0e --- /dev/null +++ b/style/asa.csl @@ -0,0 +1,215 @@ + + diff --git a/style/bluebook_lawrev.csl b/style/bluebook_lawrev.csl new file mode 100644 index 000000000..604dd86ac --- /dev/null +++ b/style/bluebook_lawrev.csl @@ -0,0 +1,1150 @@ + + + diff --git a/style/chicago-author-date.csl b/style/chicago-author-date.csl new file mode 100644 index 000000000..53a4fbe5a --- /dev/null +++ b/style/chicago-author-date.csl @@ -0,0 +1,369 @@ + + diff --git a/style/chicago-fullnote-bibliography.csl b/style/chicago-fullnote-bibliography.csl new file mode 100644 index 000000000..2eedf105b --- /dev/null +++ b/style/chicago-fullnote-bibliography.csl @@ -0,0 +1,666 @@ + diff --git a/style/chicago-note-bibliography.csl b/style/chicago-note-bibliography.csl new file mode 100644 index 000000000..fc7a160dd --- /dev/null +++ b/style/chicago-note-bibliography.csl @@ -0,0 +1,446 @@ + + + diff --git a/style/chicago-note.csl b/style/chicago-note.csl new file mode 100644 index 000000000..fba372fcb --- /dev/null +++ b/style/chicago-note.csl @@ -0,0 +1,387 @@ + + + diff --git a/style/harvard1.csl b/style/harvard1.csl new file mode 100644 index 000000000..7edbfb1bc --- /dev/null +++ b/style/harvard1.csl @@ -0,0 +1,192 @@ + + diff --git a/style/ieee.csl b/style/ieee.csl new file mode 100644 index 000000000..8a366cf53 --- /dev/null +++ b/style/ieee.csl @@ -0,0 +1,135 @@ + + + diff --git a/style/mhra.csl b/style/mhra.csl new file mode 100644 index 000000000..07351789c --- /dev/null +++ b/style/mhra.csl @@ -0,0 +1,317 @@ + diff --git a/style/mhra_note_without_bibliography.csl b/style/mhra_note_without_bibliography.csl new file mode 100644 index 000000000..6a47079fb --- /dev/null +++ b/style/mhra_note_without_bibliography.csl @@ -0,0 +1,337 @@ + + + \ No newline at end of file diff --git a/style/mla.csl b/style/mla.csl new file mode 100644 index 000000000..1def5ba8d --- /dev/null +++ b/style/mla.csl @@ -0,0 +1,188 @@ + + diff --git a/style/nature.csl b/style/nature.csl new file mode 100644 index 000000000..3f8316dbb --- /dev/null +++ b/style/nature.csl @@ -0,0 +1,87 @@ + + + diff --git a/style/nlm.csl b/style/nlm.csl new file mode 100644 index 000000000..4c6d4d884 --- /dev/null +++ b/style/nlm.csl @@ -0,0 +1,116 @@ + + + diff --git a/style/schemas.xml b/style/schemas.xml new file mode 100644 index 000000000..1046b8b5f --- /dev/null +++ b/style/schemas.xml @@ -0,0 +1,4 @@ + + + + diff --git a/tests/run.js b/tests/run.js new file mode 100644 index 000000000..4d4478d66 --- /dev/null +++ b/tests/run.js @@ -0,0 +1,65 @@ +//This file is the command-line entry point for running the tests in +//Rhino + +/*===== +dojo.tests = { + // summary: D.O.H. Test files for Dojo unit testing. +}; +=====*/ + +load("./dojo/dojo/dojo.js"); +dojo.registerModulePath("dojo","./dojo/dojo"); +dojo.registerModulePath("dojox","./dojo/dojox"); +dojo.registerModulePath("tests","./tests"); +//dojo.registerModulePath("tests","/home/bennett/src/citeproc-js-fbennett/tests"); +dojo.registerModulePath("csl","./src"); +dojo.registerModulePath("csl.output","./src/output"); +dojo.registerModulePath("doh","./dojo/util/doh"); + +dojo.require("doh.runner"); +dojo.require("csl.csl"); + +// +// requested tests go here +if(true){ + dojo.require("tests.std_collapse"); + dojo.require("tests.test_registry"); + dojo.require("tests.test_term"); + dojo.require("tests.test_build"); + dojo.require("tests.test_configure"); + dojo.require("tests.std_condition"); + dojo.require("tests.std_name"); + + dojo.require("tests.test_dates"); + dojo.require("tests.test_render"); + dojo.require("tests.test_names_import"); + dojo.require("tests.test_formatters"); + dojo.require("tests.test_build_internals"); + dojo.require("tests.test_output"); + dojo.require("tests.test_range"); + dojo.require("tests.test_build_integration"); + dojo.require("tests.test_csl"); + dojo.require("tests.test_sequence"); + dojo.require("tests.test_factory"); + dojo.require("tests.test_xmljs"); + dojo.require("tests.test_conditions"); + dojo.require("tests.test_locale"); + dojo.require("tests.test_retrieval"); + dojo.require("tests.test_xmle4x"); + dojo.require("tests.test_list"); + dojo.require("tests.test_groups"); + dojo.require("tests.test_failing"); + dojo.require("tests.test_load_styles"); + dojo.require("tests.std_term"); + dojo.require("tests.test_commands"); + dojo.require("tests.std_disambiguate"); + dojo.require("tests.std_date"); + dojo.require("tests.test_util_names"); + dojo.require("tests.std_sort"); + dojo.require("tests.test_sort"); +} else { + + print("Nothing here"); +} + +tests.run(); diff --git a/tests/std_collapse.js b/tests/std_collapse.js new file mode 100644 index 000000000..6bd369cd1 --- /dev/null +++ b/tests/std_collapse.js @@ -0,0 +1,14 @@ +dojo.provide("tests.std_collapse"); + +dojo.require("csl.csl"); + +doh.register("tests.std_collapse", [ + function(){ + var test = CSL.System.Tests.getTest("collapse_CitationNumberRangesWithAffixes"); + doh.assertEqual(test.result, test.run()); + }, + function(){ + var test = CSL.System.Tests.getTest("collapse_YearSuffixCollapse"); + doh.assertEqual(test.result, test.run()); + }, +]); diff --git a/tests/std_condition.js b/tests/std_condition.js new file mode 100644 index 000000000..42a22b42d --- /dev/null +++ b/tests/std_condition.js @@ -0,0 +1,10 @@ +dojo.provide("tests.std_condition"); + +dojo.require("csl.csl"); + +doh.register("tests.std_condition", [ + function(){ + var test = CSL.System.Tests.getTest("condition_RefTypeBranching"); + doh.assertEqual(test.result, test.run()); + }, +]); diff --git a/tests/std_date.js b/tests/std_date.js new file mode 100644 index 000000000..e835c8e55 --- /dev/null +++ b/tests/std_date.js @@ -0,0 +1,10 @@ +dojo.provide("tests.std_date"); + +dojo.require("csl.csl"); + +doh.register("tests.std_date", [ + function(){ + var test = CSL.System.Tests.getTest("date_YearSuffixDelimiter"); + doh.assertEqual(test.result, test.run()); + }, +]); diff --git a/tests/std_disambiguate.js b/tests/std_disambiguate.js new file mode 100644 index 000000000..a4926806f --- /dev/null +++ b/tests/std_disambiguate.js @@ -0,0 +1,34 @@ +dojo.provide("tests.std_disambiguate"); + +dojo.require("csl.csl"); + +doh.register("tests.std_disambiguate", [ + function(){ + var test = CSL.System.Tests.getTest("disambiguate_BasedOnEtAlSubsequent"); + doh.assertEqual(test.result, test.run()); + }, + function(){ + var test = CSL.System.Tests.getTest("disambiguate_BaseNameCountOnFailureIfYearSuffixAvailable"); + doh.assertEqual(test.result, test.run()); + }, + function(){ + var test = CSL.System.Tests.getTest("disambiguate_DisambiguateCondition"); + doh.assertEqual(test.result, test.run()); + }, + function(){ + var test = CSL.System.Tests.getTest("disambiguate_GivennameExpandCrossNestedNames"); + doh.assertEqual(test.result, test.run()); + }, + function(){ + var test = CSL.System.Tests.getTest("disambiguate_MinimalGivennameExpandMinimalNames"); + doh.assertEqual(test.result, test.run()); + }, + function(){ + var test = CSL.System.Tests.getTest("disambiguate_RetainNamesOnFailureIfYearSuffixNotAvailable"); + doh.assertEqual(test.result, test.run()); + }, + function(){ + var test = CSL.System.Tests.getTest("disambiguate_YearSuffixAndSort"); + doh.assertEqual(test.result, test.run()); + }, +]); diff --git a/tests/std_name.js b/tests/std_name.js new file mode 100644 index 000000000..3056ae011 --- /dev/null +++ b/tests/std_name.js @@ -0,0 +1,114 @@ +dojo.provide("tests.std_name"); + +dojo.require("csl.csl"); + +doh.register("tests.std_name", [ + function(){ + var test = CSL.System.Tests.getTest("name_ArticularPlain"); + doh.assertEqual(test.result, test.run()); + }, + function(){ + var test = CSL.System.Tests.getTest("name_ArticularWithComma"); + doh.assertEqual(test.result, test.run()); + }, + function(){ + var test = CSL.System.Tests.getTest("name_AsianGlyphs"); + doh.assertEqual(test.result, test.run()); + }, + function(){ + var test = CSL.System.Tests.getTest("name_Asian"); + doh.assertEqual(test.result, test.run()); + }, + function(){ + var test = CSL.System.Tests.getTest("name_AuthorCount"); + doh.assertEqual(test.result, test.run()); + }, + function(){ + var test = CSL.System.Tests.getTest("name_CollapseRoleLabels"); + doh.assertEqual(test.result, test.run()); + }, + function(){ + var test = CSL.System.Tests.getTest("name_Delimiter"); + doh.assertEqual(test.result, test.run()); + }, + function(){ + var test = CSL.System.Tests.getTest("name_Institution"); + doh.assertEqual(test.result, test.run()); + }, + function(){ + var test = CSL.System.Tests.getTest("name_LabelAfterPluralDecorations"); + doh.assertEqual(test.result, test.run()); + }, + function(){ + var test = CSL.System.Tests.getTest("name_LabelAfterPlural"); + doh.assertEqual(test.result, test.run()); + }, + function(){ + var test = CSL.System.Tests.getTest("name_LongAbbreviation"); + doh.assertEqual(test.result, test.run()); + }, + function(){ + var test = CSL.System.Tests.getTest("name_MixedFormatsInitialSortOrderAllWithDecorationsEtAl"); + doh.assertEqual(test.result, test.run()); + }, + function(){ + var test = CSL.System.Tests.getTest("name_MixedFormatsInitialSortOrderFirstWithDecorationsEtAl"); + doh.assertEqual(test.result, test.run()); + }, + function(){ + var test = CSL.System.Tests.getTest("name_MixedFormatsInitialsWithDecorationsEtAl"); + doh.assertEqual(test.result, test.run()); + }, + function(){ + var test = CSL.System.Tests.getTest("name_MixedFormatsPrimaryDecorations"); + doh.assertEqual(test.result, test.run()); + }, + function(){ + var test = CSL.System.Tests.getTest("name_MixedFormatsWithDecorationsEtAl"); + doh.assertEqual(test.result, test.run()); + }, + function(){ + var test = CSL.System.Tests.getTest("name_MixedFormatsWithDecorationsPlusAlternateEtAlDecorations"); + doh.assertEqual(test.result, test.run()); + }, + function(){ + var test = CSL.System.Tests.getTest("name_MixedFormatsWithDecorationsPlusEtAlDecorations"); + doh.assertEqual(test.result, test.run()); + }, + function(){ + var test = CSL.System.Tests.getTest("name_SubsituteName"); + doh.assertEqual(test.result, test.run()); + }, + function(){ + var test = CSL.System.Tests.getTest("name_SubstituteInheritLabel"); + doh.assertEqual(test.result, test.run()); + }, + function(){ + var test = CSL.System.Tests.getTest("name_SubstituteMacroInheritDecorations"); + doh.assertEqual(test.result, test.run()); + }, + function(){ + var test = CSL.System.Tests.getTest("name_TwoRolesSameRenderingSeparateRoleLabels"); + doh.assertEqual(test.result, test.run()); + }, + function(){ + var test = CSL.System.Tests.getTest("name_WesternArticularLowercase"); + doh.assertEqual(test.result, test.run()); + }, + function(){ + var test = CSL.System.Tests.getTest("name_WesternPrimaryFontStyle"); + doh.assertEqual(test.result, test.run()); + }, + function(){ + var test = CSL.System.Tests.getTest("name_WesternPrimaryFontStyleTwoAuthors"); + doh.assertEqual(test.result, test.run()); + }, + function(){ + var test = CSL.System.Tests.getTest("name_WesternSimple"); + doh.assertEqual(test.result, test.run()); + }, + function(){ + var test = CSL.System.Tests.getTest("name_WesternTwoAuthors"); + doh.assertEqual(test.result, test.run()); + }, +]); diff --git a/tests/std_sort.js b/tests/std_sort.js new file mode 100644 index 000000000..28fbd140f --- /dev/null +++ b/tests/std_sort.js @@ -0,0 +1,22 @@ +dojo.provide("tests.std_sort"); + +dojo.require("csl.csl"); + +doh.register("tests.std_sort", [ + function(){ + var test = CSL.System.Tests.getTest("sort_AguStyle"); + doh.assertEqual(test.result, test.run()); + }, + function(){ + var test = CSL.System.Tests.getTest("sort_AguStyleReverseGroups"); + doh.assertEqual(test.result, test.run()); + }, + function(){ + var test = CSL.System.Tests.getTest("sort_Citation"); + doh.assertEqual(test.result, test.run()); + }, + function(){ + var test = CSL.System.Tests.getTest("sort_NumberOfAuthorsAsKey"); + doh.assertEqual(test.result, test.run()); + }, +]); diff --git a/tests/std_term.js b/tests/std_term.js new file mode 100644 index 000000000..8b94a898d --- /dev/null +++ b/tests/std_term.js @@ -0,0 +1,10 @@ +dojo.provide("tests.std_term"); + +dojo.require("csl.csl"); + +doh.register("tests.std_term", [ + function(){ + var test = CSL.System.Tests.getTest("term_MagicCapitalization"); + doh.assertEqual(test.result, test.run()); + }, +]); diff --git a/tests/test_build.js b/tests/test_build.js new file mode 100644 index 000000000..333fc9785 --- /dev/null +++ b/tests/test_build.js @@ -0,0 +1,134 @@ +dojo.provide("tests.test_build"); + + +var nestedsingleton = ""; +var complex = ""; + +var Item = { + "title":"My Aunt Sally" +}; + +doh.register("tests.build", [ + + function testBuild(){ + var builder = new CSL.Core.Build(nestedsingleton); + function testme(){ + try { + builder.build(); + return "Success"; + } catch(e) { + return e; + } + } + var res = testme(); + doh.assertEqual("Success", res); + }, + function testExistence() { + function testme () { + try { + var obj = CSL.Core.Build; + return "Success"; + } catch (e) { + return e; + } + } + var res = testme(); + doh.assertEqual( "Success", res ); + }, + + function testInstantiation() { + function testme () { + try { + var obj = new CSL.Core.Build(nestedsingleton); + return "Success"; + } catch (e) { + return e; + } + } + var res = testme(); + doh.assertEqual( "Success", res ); + }, + + function testXmlParseOkJS(){ + var obj = new CSL.Core.Build(nestedsingleton,"JunkyardJavascript"); + var cmd = CSL.System.Xml.JunkyardJavascript.commandInterface; + function testme (){ + try { + var name = cmd.nodename.call(cmd.children.call(obj.showXml())[0][0]); + return name; + } catch (e) { + return e; + } + } + var res = testme(); + doh.assertEqual("text", res); + }, + + function testOptGetsCreated (){ + var builder = new CSL.Core.Build(nestedsingleton); + var obj = builder.build(); + doh.assertTrue( obj.opt ); + }, + function testCitationGetsCreated (){ + var builder = new CSL.Core.Build(nestedsingleton); + var obj = builder.build(); + doh.assertTrue( obj.citation ); + }, + function testBibliographyGetsCreated (){ + var builder = new CSL.Core.Build(nestedsingleton); + var obj = builder.build(); + doh.assertTrue( obj.bibliography ); + }, + function testCitationOptGetsCreated (){ + var builder = new CSL.Core.Build(nestedsingleton); + var obj = builder.build(); + doh.assertTrue( obj.citation.opt ); + }, + function testCitationTokensGetsCreated (){ + var builder = new CSL.Core.Build(nestedsingleton); + var obj = builder.build(); + doh.assertTrue( obj.citation.tokens ); + }, + function testBibliographyOptGetsCreated (){ + var builder = new CSL.Core.Build(nestedsingleton); + var obj = builder.build(); + doh.assertTrue( obj.bibliography.opt ); + }, + function testBibliographyTokensGetsCreated (){ + var builder = new CSL.Core.Build(nestedsingleton); + var obj = builder.build(); + doh.assertTrue( obj.bibliography.tokens ); + }, + + + function testSetXmlInstantiation (){ + var obj = new CSL.Core.Build(nestedsingleton); + function proc(){} + function testme (){ + try { + var setxml = new obj._getNavi(obj.showXml(),proc,true); + return "Success"; + } catch (e){ + return e; + } + } + var res = testme(); + doh.assertEqual("Success", res); + }, + + function testRunnerInstantiation (){ + var obj = new CSL.Core.Build(nestedsingleton); + var state = obj.state; + function testme (){ + try { + var build = new obj._builder(state); + return "Success"; + } catch (e){ + return e; + } + } + var res = testme(); + doh.assertEqual("Success", res); + }, + +]); diff --git a/tests/test_build_integration.js b/tests/test_build_integration.js new file mode 100644 index 000000000..65898bee5 --- /dev/null +++ b/tests/test_build_integration.js @@ -0,0 +1,27 @@ +dojo.provide("tests.test_build_integration"); + + + +doh.registerGroup("tests.build_integration", + [ + function testBuildObject(t){ + var textwithvalue = ''; + var build = new CSL.Core.Build(textwithvalue); + var obj = build.build(); + t.assertEqual("object", typeof obj ); + }, + function testBuildLength(t){ + var textwithvalue = ''; + var build = new CSL.Core.Build(textwithvalue); + var obj = build.build(); + t.assertEqual(1, obj.citation.tokens.length ); + }, + function testBuild(t){ + var textwithvalue = ''; + var build = new CSL.Core.Build(textwithvalue); + var obj = build.build(); + t.assertEqual("italic", obj.citation.tokens[0].decorations[0][1] ); + } + ] +); + diff --git a/tests/test_build_internals.js b/tests/test_build_internals.js new file mode 100644 index 000000000..22ae68717 --- /dev/null +++ b/tests/test_build_internals.js @@ -0,0 +1,177 @@ +dojo.provide("tests.test_build_internals"); + +var nestedsingleton = ""; +var decoratedtags = ""; +var textwithvalue = ""; + +var Item = { + "title":"My Aunt Sally" +}; + +doh.register("tests.builder_internals", [ + + function testValueAttributeAction(){ + var obj = new CSL.Core.Build(textwithvalue); + var builder = new obj._builder(obj.state,true); + var res = builder._build(obj.showXml()); + var dummy = { }; + var res = res.citation.tokens[0].strings.value; + doh.assertEqual( "My Aunt Sally" , res); + }, + function testMacroLoop(){ + var t = ''; + try { + var builder = new CSL.Core.Build(t); + var res = builder.build(); + } catch(e){ + print(e+" (this error is correct)"); + } + doh.assertFalse( res ); + }, + function testMacro(){ + var t = ''; + var obj = new CSL.Core.Build(t); + var builder = new obj._builder(obj.state,true); + var res = builder._build(obj.showXml()); + doh.assertEqual(9, res.citation.tokens.length ); + doh.assertEqual("function", typeof res.citation.tokens[4].execs[0]); + doh.assertEqual("function", typeof res.citation.tokens[5].execs[0]); + + }, + function testInit(){ + var obj = new CSL.Core.Build(nestedsingleton); + var builder = new obj._builder(obj.state,true); + var res = builder._build(obj.showXml()); + // + // note that the style tag is stripped by Build + doh.assertEqual( 1, res.citation.tokens.length); + }, + function testDecorationLength(){ + var obj = new CSL.Core.Build(decoratedtags); + var builder = new obj._builder(obj.state,true); + var res = builder._build(obj.showXml()); + doh.assertEqual( 1, res.citation.tokens[0].decorations.length ); + }, + function testDecorationValue(){ + var obj = new CSL.Core.Build(decoratedtags); + var builder = new obj._builder(obj.state,true); + var res = builder._build(obj.showXml()); + doh.assertEqual( "italic", res.citation.tokens[0].decorations[0][1]); + doh.assertEqual( "@font-style", res.citation.tokens[0].decorations[0][0]); + }, + function testValueAttributeType(){ + var obj = new CSL.Core.Build(textwithvalue); + var builder = new obj._builder(obj.state,true); + var res = builder._build(obj.showXml()); + doh.assertEqual( "function" , typeof res.citation.tokens[0].execs[0]); + }, + function testBadTag(){ + var t = ''; + var obj = new CSL.Core.Build(t); + var builder = new obj._builder(obj.state,true); + function tryme() { + try { + builder._build(obj.showXml()); + return "Succeeded wrongly"; + } catch (e) { + if ("Unknown tag name \"badtagname\" encountered while attempting to process CSL file"){ + return "Failed correctly"; + } else { + return "Failed wrongly"; + } + } + } + var res = tryme(); + doh.assertEqual("Failed correctly", res ); + }, + function testBadAttribute(){ + var t = ''; + var obj = new CSL.Core.Build(t); + var builder = new obj._builder(obj.state,true); + function tryme() { + try { + builder._build(obj.showXml()); + return "Succeeded wrongly"; + } catch (e) { + if ("Unknown attribute \"@badattribute\" in node \"text\" while processing CSL file"){ + return "Failed correctly"; + } else { + return "Failed wrongly"; + } + } + } + var res = tryme(); + doh.assertEqual("Failed correctly", res ); + }, + + function testGroup(){ + var t = ''; + var obj = new CSL.Core.Build(t); + var builder = new obj._builder(obj.state,true); + var res = builder._build(obj.showXml()); + doh.assertEqual(3, res.citation.tokens.length ); + doh.assertEqual("function", typeof res.citation.tokens[1].execs[0]); + var dummy = {}; + res.citation.tokens[1].execs[0].call(res.citation.tokens[1],obj.state,dummy); + doh.assertEqual("hello", obj.state.citation.tokens[1].strings.value); + }, + + function testConditional(){ + var t = ''; + var obj = new CSL.Core.Build(t); + var build = new obj._builder(obj.state,true); + var res = build._build(obj.showXml()); + doh.assertEqual(11, res.citation.tokens.length ); + doh.assertEqual("function", typeof res.citation.tokens[8].execs[0]); + var dummy = {}; + res.citation.tokens[8].execs[0].call(res.citation.tokens[8],obj.state,dummy); + doh.assertEqual("three", obj.state.citation.tokens[8].strings.value); + }, + + +]); diff --git a/tests/test_commands.js b/tests/test_commands.js new file mode 100644 index 000000000..dc75d4859 --- /dev/null +++ b/tests/test_commands.js @@ -0,0 +1,14 @@ +dojo.provide("tests.test_commands"); + + +doh.register("tests.commands", [ + function testMakeStyle() { + try { + var ret = CSL.makeStyle(""); + } catch (e) { + print(e); + var ret = false; + }; + doh.assertTrue(ret); + } +]); diff --git a/tests/test_compiler.js b/tests/test_compiler.js new file mode 100644 index 000000000..53e0d2899 --- /dev/null +++ b/tests/test_compiler.js @@ -0,0 +1,19 @@ +dojo.provide("tests.test_compiler"); + + +doh.register("tests.compiler", [ + + function testInstantiateCompiler() { + function testme () { + try { + var fmt = CSL.Compiler("html"); + return "Success"; + } catch (e) { + return "Instantiation failure: " + e; + } + } + var res = testme(); + doh.assertEqual( "Success", res ); + }, + +]); diff --git a/tests/test_conditions.js b/tests/test_conditions.js new file mode 100644 index 000000000..9f095e1db --- /dev/null +++ b/tests/test_conditions.js @@ -0,0 +1,175 @@ +dojo.provide("tests.test_conditions"); + + +doh.registerGroup("tests.conditions", + [ + function testNone(){ + var xml = ""; + + var Item = [{}]; + var cite = tests.test_conditions.makeCite(xml,Item); + doh.assertEqual("Omote",cite); + }, + function testAny(){ + var xml = ""; + + var Item = [{ "title":"Some value" }]; + var cite = tests.test_conditions.makeCite(xml,Item); + doh.assertEqual("Omote",cite); + }, + function testElseIf(){ + var xml = ""; + + var Item = [{}]; + var cite = tests.test_conditions.makeCite(xml,Item); + doh.assertEqual("Omote",cite); + }, + function testMultipleElseIfFirstIsTrue(){ + var xml = ""; + + var Item = [{}]; + var cite = tests.test_conditions.makeCite(xml,Item); + doh.assertEqual("Mikake",cite); + }, + function testMultipleElseIfSecondIsTrue(){ + var xml = ""; + + var Item = [{}]; + var cite = tests.test_conditions.makeCite(xml,Item); + doh.assertEqual("Omote",cite); + }, + function testNested(){ + var xml = ""; + + var Item = [{}]; + var cite = tests.test_conditions.makeCite(xml,Item); + doh.assertEqual("Ura",cite); + } + ], + function(){ //setup + tests.test_conditions.makeCite = function(xml,Item){ + if (!Item){ + var Item = [{}]; + } + var builder = new CSL.Core.Build(xml); + var raw = builder.build(); + var configurator = new CSL.Core.Configure(raw); + var style = configurator.configure(); + return style.makeCitationCluster(Item); + }; + }, + function(){ // teardown + } + +); + + diff --git a/tests/test_configure.js b/tests/test_configure.js new file mode 100644 index 000000000..72a37abda --- /dev/null +++ b/tests/test_configure.js @@ -0,0 +1,110 @@ +dojo.provide("tests.test_configure"); + + +var nestedsingleton = ""; +var xmlif = ""; +var xmlifnested = ""; + +var build = false; +var obj = false; +var conf = false; +var newobj = false; + +doh.registerGroup("tests.conditions_build", + [ + function testBuildLength(){ + doh.assertEqual(1, obj["citation"]["tokens"].length); + } + + ], + function(){ // setup + build = new CSL.Core.Build(nestedsingleton); + obj = build.build(); + }, + function(){ // teardown + build = false; + obj = false; + } +); + + +doh.registerGroup("tests.conditions_simple_jumps", + [ + function testConfigureReturnsSomething(){ + doh.assertEqual(11, newobj["citation"]["tokens"].length); + }, + + function testConfigureJumpHasValue(){ + doh.assertEqual( 11, newobj["citation"]["tokens"][3]["succeed"]); + } + ], + function(){ // setup + build = new CSL.Core.Build(xmlif); + obj = build.build(); + conf = new CSL.Core.Configure(obj); + newobj = conf.configure(); + }, + function(){ // teardown + build = false; + obj = false; + conf = false; + newobj = false; + } +); + +doh.registerGroup("tests.conditions_complex_jumps", + [ + function testConfigureReturnsSomething(){ + doh.assertEqual(19, newobj["citation"]["tokens"].length); + }, + + function testConfigureJumpHasValue(){ + doh.assertEqual( 12, newobj["citation"]["tokens"][1]["fail"]); + } + ], + function(){ // setup + build = new CSL.Core.Build(xmlifnested); + obj = build.build(); + conf = new CSL.Core.Configure(obj); + newobj = conf.configure(); + + }, + function(){ // teardown + build = false; + obj = false; + conf = false; + newobj = false; + } +); diff --git a/tests/test_csl.js b/tests/test_csl.js new file mode 100644 index 000000000..6b16f136d --- /dev/null +++ b/tests/test_csl.js @@ -0,0 +1,22 @@ +dojo.provide("tests.test_csl"); +dojo.require("doh.runner"); + + +doh.register("tests.csl", [ + + + function testInstantiateCsl() { + function testme () { + try { + // CSL is pre-instantiated + var csl = CSL; + return "Success"; + } catch (e) { + return "Instantiation failure: " + e; + } + } + var res = testme(); + doh.assertEqual( "Success", res ); + }, + +]); diff --git a/tests/test_dates.js b/tests/test_dates.js new file mode 100644 index 000000000..5c3009fda --- /dev/null +++ b/tests/test_dates.js @@ -0,0 +1,213 @@ +dojo.provide("tests.test_dates"); + + +doh.register("tests.dates", [ + function testThatItWorksAtAll(){ + var xml = ""; + var builder = new CSL.Core.Build(xml); + var raw = builder.build(); + var configurator = new CSL.Core.Configure(raw); + var style = configurator.configure(); + var getter = new CSL.System.Retrieval.GetInput(); + var input = getter.getInput(["simple-western-name-1"]); + var res = style.makeCitationCluster(input); + doh.assertEqual("1965",res); + }, + function testYearFormShort(){ + var xml = ""; + var builder = new CSL.Core.Build(xml); + var raw = builder.build(); + var configurator = new CSL.Core.Configure(raw); + var style = configurator.configure(); + var getter = new CSL.System.Retrieval.GetInput(); + var input = getter.getInput(["simple-western-name-1"]); + var res = style.makeCitationCluster(input); + doh.assertEqual("65",res); + }, + function testMonthFormNumeric(){ + var xml = ""; + var builder = new CSL.Core.Build(xml); + var raw = builder.build(); + var configurator = new CSL.Core.Configure(raw); + var style = configurator.configure(); + var getter = new CSL.System.Retrieval.GetInput(); + var input = getter.getInput(["simple-western-name-1"]); + var res = style.makeCitationCluster(input); + doh.assertEqual("6",res); + }, + function testMonthFormNumericLeadingZeros(){ + var xml = ""; + var builder = new CSL.Core.Build(xml); + var raw = builder.build(); + var configurator = new CSL.Core.Configure(raw); + var style = configurator.configure(); + var getter = new CSL.System.Retrieval.GetInput(); + var input = getter.getInput(["simple-western-name-1"]); + var res = style.makeCitationCluster(input); + doh.assertEqual("06",res); + }, + function testMonthFormShort(){ + var xml = ""; + var builder = new CSL.Core.Build(xml); + var raw = builder.build(); + var configurator = new CSL.Core.Configure(raw); + var style = configurator.configure(); + var getter = new CSL.System.Retrieval.GetInput(); + var input = getter.getInput(["simple-western-name-1"]); + var res = style.makeCitationCluster(input); + doh.assertEqual("Jun",res); + }, + function testMonthFormLong(){ + var xml = ""; + var builder = new CSL.Core.Build(xml); + var raw = builder.build(); + var configurator = new CSL.Core.Configure(raw); + var style = configurator.configure(); + var getter = new CSL.System.Retrieval.GetInput(); + var input = getter.getInput(["simple-western-name-1"]); + var res = style.makeCitationCluster(input); + doh.assertEqual("June",res); + }, + function testDayFormNumeric(){ + var xml = ""; + var builder = new CSL.Core.Build(xml); + var raw = builder.build(); + var configurator = new CSL.Core.Configure(raw); + var style = configurator.configure(); + var getter = new CSL.System.Retrieval.GetInput(); + var input = getter.getInput(["simple-western-name-1"]); + var res = style.makeCitationCluster(input); + doh.assertEqual("1",res); + }, + function testDayFormNumericLeadingZeros(){ + var xml = ""; + var builder = new CSL.Core.Build(xml); + var raw = builder.build(); + var configurator = new CSL.Core.Configure(raw); + var style = configurator.configure(); + var getter = new CSL.System.Retrieval.GetInput(); + var input = getter.getInput(["simple-western-name-1"]); + var res = style.makeCitationCluster(input); + doh.assertEqual("01",res); + }, + function testDayFormOrdinalOne(){ + var xml = ""; + var builder = new CSL.Core.Build(xml); + var raw = builder.build(); + var configurator = new CSL.Core.Configure(raw); + var style = configurator.configure(); + var getter = new CSL.System.Retrieval.GetInput(); + var input = getter.getInput(["simple-western-name-1"]); + var res = style.makeCitationCluster(input); + doh.assertEqual("1st",res); + }, + function testDayFormOrdinalTwo(){ + var xml = ""; + var builder = new CSL.Core.Build(xml); + var raw = builder.build(); + var configurator = new CSL.Core.Configure(raw); + var style = configurator.configure(); + var getter = new CSL.System.Retrieval.GetInput(); + var input = getter.getInput(["simple-western-name-2"]); + var res = style.makeCitationCluster(input); + doh.assertEqual("2nd",res); + }, + function testDayFormOrdinalThree(){ + var xml = ""; + var builder = new CSL.Core.Build(xml); + var raw = builder.build(); + var configurator = new CSL.Core.Configure(raw); + var style = configurator.configure(); + var getter = new CSL.System.Retrieval.GetInput(); + var input = getter.getInput(["simple-western-name-3"]); + var res = style.makeCitationCluster(input); + doh.assertEqual("3rd",res); + }, + function testDayFormOrdinalFour(){ + var xml = ""; + var builder = new CSL.Core.Build(xml); + var raw = builder.build(); + var configurator = new CSL.Core.Configure(raw); + var style = configurator.configure(); + var getter = new CSL.System.Retrieval.GetInput(); + var input = getter.getInput(["simple-mongolian-name-1"]); + var res = style.makeCitationCluster(input); + doh.assertEqual("4th",res); + }, + +]); + + + diff --git a/tests/test_factory.js b/tests/test_factory.js new file mode 100644 index 000000000..f259d95bc --- /dev/null +++ b/tests/test_factory.js @@ -0,0 +1,51 @@ +dojo.provide("tests.test_factory"); + + +doh.register("tests.factory", [ + + function testIfItWorksAtAll() { + function testme () { + try { + var fmt = CSL.Factory.substituteOne; + return "Success"; + } catch (e) { + return "Instantiation failure: " + e; + } + } + var res = testme(); + doh.assertEqual( "Success", res ); + }, + + function testFactoryStack (){ + doh.assertEqual( "bogus", new CSL.Factory.State("bogus").build.xmlCommandInterface ); + }, + function testSubstituteOne() { + var template = "%%STRING%%"; + var func = CSL.Factory.substituteOne(template); + doh.assertEqual( "My Aunt Sally", func("My Aunt Sally")); + }, + + function testSubstituteTwo() { + var template = "%%STRING%%"; + var func = CSL.Factory.substituteTwo(template); + var func2 = func("courier"); + doh.assertEqual( "My Aunt Sally", func2("My Aunt Sally")); + }, + + function testOutputModeCompilerAttribute(){ + var res = CSL.Factory.Mode("html"); + doh.assertTrue( res["@font-style"] ); + }, + function testOutputModeCompilerValue(){ + var res = CSL.Factory.Mode("html"); + doh.assertTrue( res["@font-style"]["italic"] ); + }, + function testOutputModeCompilerFunction(){ + var res = CSL.Factory.Mode("html"); + doh.assertEqual( "function", typeof res["@font-style"]["italic"] ); + }, + function testOutputModeCompilerAction(){ + var res = CSL.Factory.Mode("html"); + doh.assertEqual( "My Aunt Sally", res["@font-style"]["italic"]("My Aunt Sally") ); + } +]); diff --git a/tests/test_failing.js b/tests/test_failing.js new file mode 100644 index 000000000..7502a04f8 --- /dev/null +++ b/tests/test_failing.js @@ -0,0 +1,37 @@ +dojo.provide("tests.test_failing"); + + +var style = false; +var Item = false; + +doh.registerGroup("tests.failing", + [ + function testTwoHello(){ + var xml = ""; + + var cite = tests.test_failing.makeCite(xml); + doh.assertEqual("Hello again, world!Hello world!",cite); + } + ], + function(){ //setup + tests.test_failing.makeCite = function(xml){ + var builder = new CSL.Core.Build(xml); + var raw = builder.build(); + var configurator = new CSL.Core.Configure(raw); + style = configurator.configure(); + var Item = [{}]; + var ret = style.makeCitationCluster(Item); + return ret; + }; + }, + function(){ // teardown + } + +); diff --git a/tests/test_formatters.js b/tests/test_formatters.js new file mode 100644 index 000000000..59b467378 --- /dev/null +++ b/tests/test_formatters.js @@ -0,0 +1,42 @@ +dojo.provide("tests.test_formatters"); + + +doh.register("tests.formatters", [ + function testGetSuffix(){ + var list = "a,b,c,d"; + var suffixator = new CSL.Util.Disambiguate.Suffixator(list); + doh.assertEqual("c",suffixator.format(2)); + }, + function testSuffixize(){ + + var list = "a,b,c,d"; + var suffixator = new CSL.Util.Disambiguate.Suffixator(list); + + var res = suffixator.get_suffixes(34,list); + doh.assertEqual("adc", res[(res.length-1)]); + + var res = suffixator.get_suffixes(350,list); + doh.assertEqual("acbbd", res[(res.length-1)]); + + var res = suffixator.get_suffixes(351,list); + doh.assertEqual("acbca", res[(res.length-1)]); + }, + function testIfItWorksAtAll() { + function testme () { + try { + var fmt = CSL.Utilities; + return "Success"; + } catch (e) { + return "Instantiation failure: " + e; + } + } + var res = testme(); + doh.assertEqual( "Success", res ); + }, + + function testCaps() { + doh.assertEqual( 'CAPS', CSL.Output.Formatters.uppercase("caps") ); + }, + +]); + diff --git a/tests/test_groups.js b/tests/test_groups.js new file mode 100644 index 000000000..81c7dda9a --- /dev/null +++ b/tests/test_groups.js @@ -0,0 +1,83 @@ +dojo.provide("tests.test_groups"); + + +var style = false; +var Item = false; + +doh.registerGroup("tests.groups", + [ + function testGroupSiblingDecoration(){ + var xml = ""; + var cite = tests.test_groups.makeCite(xml); + for (i in cite[0]){ + print(i+":"+cite[0][i]); + } + doh.assertEqual("@HelloGoodbye@",cite); + }, + function testGroup(){ + var xml = ""; + var cite = tests.test_groups.makeCite(xml); + doh.assertEqual("Hello",cite); + }, + function testGroupDecoration(){ + var xml = ""; + var cite = tests.test_groups.makeCite(xml); + doh.assertEqual("Hello",cite); + }, + function testGroupDelimiters(){ + var xml = ""; + var cite = tests.test_groups.makeCite(xml); + doh.assertEqual("(one[y] =two[x] three=)", cite); + } + + ], + function(){ + tests.test_groups.makeCite = function(xml){ + var builder = new CSL.Core.Build(xml); + var raw = builder.build(); + var configurator = new CSL.Core.Configure(raw); + style = configurator.configure(); + var Item = [{}]; + return style.makeCitationCluster(Item); + }; + }, + function(){ + } +); diff --git a/tests/test_list.js b/tests/test_list.js new file mode 100644 index 000000000..84caedb9a --- /dev/null +++ b/tests/test_list.js @@ -0,0 +1,90 @@ +dojo.provide("tests.test_list"); + + +doh.registerGroup("tests.list", + [ + function testListAppend () { + var state = new tests.test_list.state(); + var res = new CSL.Output.Queue(state); + + var token = CSL.Factory.Token("someelement",CSL.START); + + res.append("one",token); + doh.assertEqual("one", res.queue[0].blobs ); + }, + + function testListNewlevel () { + var state = new tests.test_list.state(); + var res = new CSL.Output.Queue(state); + var token = CSL.Factory.Token("someelement",CSL.START); + + res.addToken("myformatbundle",false,token); + res.openLevel("myformatbundle"); + res.append("one"); + doh.assertEqual("one", res.queue[0].blobs[0].blobs ); + }, + + function testString () { + var state = new tests.test_list.state(); + var res = new CSL.Output.Queue(state); + + var token1 = new CSL.Factory.Token("sometype",CSL.START); + token1.strings.delimiter = " [X] "; + + var token2 = new CSL.Factory.Token("someothertype",CSL.START); + token2.strings.delimiter = " [Y] "; + + res.addToken("withtokenone",false,token1); + res.addToken("withtokentwo",false,token2); + + res.openLevel("withtokenone"); // provides delimiter for group + res.append("one"); + res.openLevel("withtokentwo"); // provides delimiter for subgroup + res.append("two"); + res.append("three"); + res.closeLevel(); + res.closeLevel(); + + doh.assertEqual("one [X] two [Y] three", res.string(state,res.queue) ); + }, + function testListMerge () { + var token = tests.test_list.token(); + var state = new tests.test_list.state(); + var res = new CSL.Output.Queue(state); + + res.addToken("newlevel",false,token); + + res.append("one"); + res.openLevel("newlevel"); + res.append("two"); + res.append("three"); + doh.assertEqual("two", res.current.value()[0].blobs ); + res.closeLevel(); + doh.assertEqual("one", res.current.value()[0].blobs ); + } + ], + function(){ + tests.test_list.token = function(){ + return { + "decorations": new Array(), + "strings":{ + "prefix":"", + "suffix":"", + "delimiter":"" + } + }; + }; + tests.test_list.state = function(){ + this.tmp = new Object(); + this.tmp.delimiter = new CSL.Factory.Stack(); + this.tmp.prefix = new CSL.Factory.Stack(); + this.tmp.suffix = new CSL.Factory.Stack(); + this.tmp.decorations = new CSL.Factory.Stack(); + }; + }, + function(){ + + } +); + + diff --git a/tests/test_load_styles.js b/tests/test_load_styles.js new file mode 100644 index 000000000..42ebd1083 --- /dev/null +++ b/tests/test_load_styles.js @@ -0,0 +1,79 @@ +dojo.provide("tests.test_load_styles"); + + +var tryStyle = function(style){ + try { + var sty = readFile("style/"+style+".csl"); + if (!sty){ + throw "Did not find style file: style/"+style+".csl"; + } + var builder = new CSL.Core.Build(sty); + var res = builder.build(); + } catch(e) { + print("oops: "+e); + } + return res; +} + +doh.register("tests.load_styles", [ + function(){ + var res = tryStyle("mhra"); + doh.assertTrue( res ); + }, + function(){ + var res = tryStyle("ama"); + doh.assertTrue( res ); + }, + function(){ + var res = tryStyle("apa"); + doh.assertTrue( res ); + }, + function(){ + var res = tryStyle("apsa"); + doh.assertTrue( res ); + }, + function(){ + var res = tryStyle("asa"); + doh.assertTrue( res ); + }, + function(){ + var res = tryStyle("chicago-author-date"); + doh.assertTrue( res ); + }, + function(){ + var res = tryStyle("chicago-fullnote-bibliography"); + doh.assertTrue( res ); + }, + function(){ + var res = tryStyle("chicago-note-bibliography"); + doh.assertTrue( res ); + }, + function(){ + var res = tryStyle("chicago-note"); + doh.assertTrue( res ); + }, + function(){ + var res = tryStyle("harvard1"); + doh.assertTrue( res ); + }, + function(){ + var res = tryStyle("ieee"); + doh.assertTrue( res ); + }, + function(){ + var res = tryStyle("mhra_note_without_bibliography"); + doh.assertTrue( res ); + }, + function(){ + var res = tryStyle("mla"); + doh.assertTrue( res ); + }, + function(){ + var res = tryStyle("nature"); + doh.assertTrue( res ); + }, + function(){ + var res = tryStyle("nlm"); + doh.assertTrue( res ); + }, +]); diff --git a/tests/test_locale.js b/tests/test_locale.js new file mode 100644 index 000000000..806ce497d --- /dev/null +++ b/tests/test_locale.js @@ -0,0 +1,56 @@ +dojo.provide("tests.test_locale"); + + +doh.register("tests.locale", + [ + function testManualLoad(){ + var xml = readFile("./locale/locales-en-US.xml"); + var builder = new CSL.Core.Build(xml); + var tokens = builder.build(); + doh.assertEqual("¶",builder.state.opt.term["paragraph"]["symbol"][0]); + }, + function testImplicitLoad(){ + var xml = ""; + var builder = new CSL.Core.Build(xml); + builder.build(); + doh.assertEqual("段落", builder.state.opt.term["paragraph"]["verb"][0]); + }, + + function testFailedOverload(){ + var xml = ""; + var builder = new CSL.Core.Build(xml); + builder.build(); + doh.assertEqual("段落", builder.state.opt.term["paragraph"]["verb"][0]); + }, + + + function testOverloadNotGreedy(){ + var xml = ""; + var builder = new CSL.Core.Build(xml); + builder.build(); + doh.assertEqual("段落", builder.state.opt.term["paragraph"]["verb"][0]); + }, + function testOverloadTakesEffect(){ + var xml = ""; + var builder = new CSL.Core.Build(xml); + builder.build(); + doh.assertEqual("parrie", builder.state.opt.term["paragraph"]["long"][0]); + } + // add a test for default locale loading sometime. + + ] +); + + diff --git a/tests/test_names_import.js b/tests/test_names_import.js new file mode 100644 index 000000000..ebf6a2e46 --- /dev/null +++ b/tests/test_names_import.js @@ -0,0 +1,65 @@ +dojo.provide("tests.test_names_import"); + + +doh.register("tests.names_import", [ + function testSimpleWesternName(){ + var source = ["simple-western-name-1"]; + var getter = new CSL.System.Retrieval.GetInput(); + var input = getter.getInput(source); + doh.assertEqual("Doe", input[0]["author"][0]["primary-key"]); + doh.assertEqual("John", input[0]["author"][0]["secondary-key"]); + }, + function testTwoSimpleWesternNames(){ + var source = ["two-simple-western-names-1"]; + var getter = new CSL.System.Retrieval.GetInput(); + var input = getter.getInput(source); + doh.assertEqual("Doe", input[0]["author"][0]["primary-key"]); + doh.assertEqual("John", input[0]["author"][0]["secondary-key"]); + doh.assertEqual("Roe", input[0]["author"][1]["primary-key"]); + doh.assertEqual("Jane", input[0]["author"][1]["secondary-key"]); + }, + function testWesternNameWithArticular(){ + var source = ["western-name-with-articular-1"]; + var getter = new CSL.System.Retrieval.GetInput(); + var input = getter.getInput(source); + doh.assertEqual("Doe", input[0]["author"][0]["primary-key"]); + doh.assertEqual("Jacques", input[0]["author"][0]["secondary-key"]); + doh.assertEqual("van", input[0]["author"][0].prefix); + }, + function testWesternNameWithSuffix(){ + var source = ["western-name-with-space-suffix-1"]; + var getter = new CSL.System.Retrieval.GetInput(); + var input = getter.getInput(source); + doh.assertEqual("Doe", input[0]["author"][0]["primary-key"]); + doh.assertEqual("James", input[0]["author"][0]["secondary-key"]); + doh.assertEqual("III", input[0]["author"][0].suffix); + }, + function testWesternNameWithPeriodSuffix(){ + var source = ["western-name-with-space-suffix-2"]; + var getter = new CSL.System.Retrieval.GetInput(); + var input = getter.getInput(source); + doh.assertEqual("Doe", input[0]["author"][0]["primary-key"]); + doh.assertEqual("Jeffrey", input[0]["author"][0]["secondary-key"]); + doh.assertEqual("Jr.", input[0]["author"][0].suffix); + }, + function testSimpleAsianName(){ + var source = ["simple-sticky-name-1"]; + var getter = new CSL.System.Retrieval.GetInput(); + var input = getter.getInput(source); + doh.assertEqual("Miyamoto", input[0]["author"][0]["primary-key"]); + doh.assertEqual("Musashi", input[0]["author"][0]["secondary-key"]); + }, + function testSimpleMongolianName(){ + var source = ["simple-mongolian-name-1"]; + var getter = new CSL.System.Retrieval.GetInput(); + var input = getter.getInput(source); + doh.assertEqual("Tserendorj", input[0]["author"][0]["primary-key"]); + doh.assertEqual("Balingiin", input[0]["author"][0]["secondary-key"]); + }, + function testInstitutionalName(){ + var source = ["institution-name-1"]; + var getter = new CSL.System.Retrieval.GetInput(); + var input = getter.getInput(source); + doh.assertEqual("Ministry of Education, Sports, Culture, Science and Technology", input[0]["author"][0].literal); + } +]); diff --git a/tests/test_output.js b/tests/test_output.js new file mode 100644 index 000000000..95625e0c6 --- /dev/null +++ b/tests/test_output.js @@ -0,0 +1,23 @@ +dojo.provide("tests.test_output"); + + +doh.register("tests.output", [ + + function testInstantiateOutput() { + function testme () { + try { + var fmt = CSL.Output; + return "Success"; + } catch (e) { + return "Instantiation failure: " + e; + } + } + var res = testme(); + doh.assertEqual( "Success", res ); + }, + + function testHtmlLoad() { + doh.assertEqual( '&lquo;%%STRING%%&rquo;', CSL.Output.Formats.html["@quotes"] ); + }, + +]); diff --git a/tests/test_range.js b/tests/test_range.js new file mode 100644 index 000000000..b05e58f2b --- /dev/null +++ b/tests/test_range.js @@ -0,0 +1,94 @@ +dojo.provide("tests.test_range"); + +var test = new Object(); + +doh.registerGroup("tests.range", [ + function testYearSuffixFormatter() { + var token = new CSL.Factory.Token("bogus",CSL.START); + token.formatter = test.fun.suffixator; + var number = new CSL.Output.Number(0,token); + doh.assertEqual( "object", typeof number.formatter ); + doh.assertEqual( "function", typeof number.formatter.format ); + doh.assertEqual( "k", number.formatter.format(10) ); + }, + function testThatItWorksAtAll() { + try { + CSL.Output.Number(2); + var res = true; + } catch (e){ + print(e); + var res = false; + } + doh.assertTrue( res ); + }, + function testRomanFormatter() { + var token = new CSL.Factory.Token("bogus",CSL.START); + token.formatter = test.fun.romanizer; + var number = new CSL.Output.Number(0,token); + doh.assertEqual( "object", typeof number.formatter ); + doh.assertEqual( "function", typeof number.formatter.format ); + doh.assertEqual( "x", number.formatter.format(10) ); + }, + function testDefaultFormatter() { + var number = new CSL.Output.Number(0); + doh.assertEqual( "object", typeof number.formatter ); + doh.assertEqual( "function", typeof number.formatter.format ); + doh.assertEqual( "10", number.formatter.format(10) ); + }, + function testType() { + var token = new CSL.Factory.Token("bogus",CSL.START); + token.formatter = test.fun.suffixator; + var number = new CSL.Output.Number(10,token); + doh.assertEqual( "b", number.type ); + }, + function testNum() { + var number = new CSL.Output.Number(2); + doh.assertEqual( 2, number.num ); + }, + function testCheckNextSuccessor() { + var number1 = new CSL.Output.Number(1); + var number2 = new CSL.Output.Number(2); + var numlist = [number1,number2]; + numlist[0].checkNext(numlist[1]); + doh.assertEqual( CSL.SUCCESSOR, numlist[1].status ); + }, + function testCheckNextSuppress() { + var number1 = new CSL.Output.Number(1); + var number2 = new CSL.Output.Number(2); + var number3 = new CSL.Output.Number(3); + var numlist = [number1,number2,number3]; + numlist[0].checkNext(numlist[1]); + numlist[1].checkNext(numlist[2]); + doh.assertEqual( CSL.SUPPRESS, numlist[1].status ); + }, + function testCheckNextEndOnText() { + var number1 = new CSL.Output.Number(1); + var number2 = new CSL.Output.Number(2); + var number3 = new CSL.Output.Number(3); + var numlist = [number1,number2,number3,"Text"]; + numlist[0].checkNext(numlist[1]); + numlist[1].checkNext(numlist[2]); + numlist[2].checkNext(numlist[3]); + doh.assertEqual( CSL.END, numlist[2].status ); + }, + function testCheckNextEndOnEOL() { + var number1 = new CSL.Output.Number(1); + var number2 = new CSL.Output.Number(2); + var number3 = new CSL.Output.Number(3); + var numlist = [number1,number2,number3]; + numlist[0].checkNext(numlist[1]); + numlist[1].checkNext(numlist[2]); + numlist[2].checkNext(numlist[3]); + doh.assertEqual( CSL.END, numlist[2].status ); + }, + ], + function(){ + var xml = ""; + var builder = new CSL.Core.Build(xml); + test.fun = builder.build().fun; + }, + function(){ + test = new Object(); + } +); + diff --git a/tests/test_registry.js b/tests/test_registry.js new file mode 100644 index 000000000..9799c4990 --- /dev/null +++ b/tests/test_registry.js @@ -0,0 +1,444 @@ +dojo.provide("tests.test_registry"); + +doh.register("tests.registry", [ + function testRegistrationSortWithSingleKey(){ + var xml = ""; + var builder = new CSL.Core.Build(xml); + var raw = builder.build(); + var configurator = new CSL.Core.Configure(raw); + var style = configurator.configure(); + var getter = new CSL.System.Retrieval.GetInput(); + var input = getter.getInput(["simple-western-name-1","simple-western-name-2","simple-western-name-3"]); + style.registry.insert(style,input[0]); + style.registry.insert(style,input[1]); + style.registry.insert(style,input[0]); + //print(style.registry.registry["simple-western-name-2"].sortkeys); + doh.assertEqual( "simple-western-name-1", style.registry.registry["simple-western-name-2"].next ); + doh.assertEqual( "simple-western-name-2", style.registry.registry["simple-western-name-1"].prev ); + doh.assertEqual( false, style.registry.registry["simple-western-name-2"].prev ); + doh.assertEqual( false, style.registry.registry["simple-western-name-1"].next ); + }, + function testGetSortKeyMacro(){ + var xml = ""; + var builder = new CSL.Core.Build(xml); + var raw = builder.build(); + var configurator = new CSL.Core.Configure(raw); + var style = configurator.configure(); + var getter = new CSL.System.Retrieval.GetInput(); + var input = getter.getInput(["simple-western-name-1"]); + var res = style.getSortKeys(input[0],"bibliography_sort"); + doh.assertEqual("My Macro Text::AAA", res[0]); + }, + function testMaxNamesDetection(){ + var xml = ""; + var builder = new CSL.Core.Build(xml); + var raw = builder.build(); + var configurator = new CSL.Core.Configure(raw); + var style = configurator.configure(); + var getter = new CSL.System.Retrieval.GetInput(); + var input = getter.getInput(["seven-names-plus-two-1"]); + var ambig = style.getAmbiguousCite(input[0]); + doh.assertEqual(7,style.tmp.names_max.mystack[0]); + }, + function testGetSortKeyVariable(){ + var xml = ""; + var builder = new CSL.Core.Build(xml); + var raw = builder.build(); + var configurator = new CSL.Core.Configure(raw); + var style = configurator.configure(); + var getter = new CSL.System.Retrieval.GetInput(); + var input = getter.getInput(["simple-western-name-1"]); + var res = style.getSortKeys(input[0],"bibliography_sort"); + doh.assertEqual("His Anonymous Life", res[0]); + }, + function testDisambiguateAddGivensInternals(){ + var xml = ""; + var builder = new CSL.Core.Build(xml); + var raw = builder.build(); + var configurator = new CSL.Core.Configure(raw); + var style = configurator.configure(); + var getter = new CSL.System.Retrieval.GetInput(); + var input = getter.getInput(["ambigs-1","ambigs-2","ambigs-6"]); + style.registry.insert(style,input[0]); + style.registry.insert(style,input[1]); + style.registry.insert(style,input[2]); + style.getAmbiguousCite(input[0]); + var res = style.getAmbigConfig(); + doh.assertEqual({"names":[6],"givens":[[1,1,1,1,1,1]],"year_suffix":false,"disambiguate":false},res); + + }, + + function testConfigureNumberOfNames(){ + var xml = ""; + var builder = new CSL.Core.Build(xml); + var raw = builder.build(); + var configurator = new CSL.Core.Configure(raw); + var style = configurator.configure(); + var getter = new CSL.System.Retrieval.GetInput(); + var input = getter.getInput(["ambigs-2"]); + var disambig = {"names":[3],"givens":[[2,2,2]],"year_suffix":false,"disambiguate":false}; + var res = style.getAmbiguousCite(input[0],disambig); + doh.assertEqual("Albert Asthma, Bosworth Bronchitis, Crispin Cold, et al.",res); + }, + function testRegistration(){ + var xml = ""; + var builder = new CSL.Core.Build(xml); + var raw = builder.build(); + var configurator = new CSL.Core.Configure(raw); + var style = configurator.configure(); + var getter = new CSL.System.Retrieval.GetInput(); + var input = getter.getInput(["simple-western-name-1","simple-western-name-2","simple-western-name-3"]); + style.registry.insert(style,input[0]); + doh.assertTrue( style.registry.registry["simple-western-name-1"] ); + }, + function testRegistrationContent(){ + var xml = ""; + var builder = new CSL.Core.Build(xml); + var raw = builder.build(); + var configurator = new CSL.Core.Configure(raw); + var style = configurator.configure(); + var getter = new CSL.System.Retrieval.GetInput(); + var input = getter.getInput(["simple-western-name-1","simple-western-name-2","simple-western-name-3"]); + style.registry.insert(style,input[0]); + var res = style.registry.registry["simple-western-name-1"]; + doh.assertEqual( "simple-western-name-1", res.id ); + doh.assertEqual( "His Anonymous Life", res.sortkeys ); + }, + function testDisabiguationGetDefaultVals(){ + var xml = ""; + var builder = new CSL.Core.Build(xml); + var raw = builder.build(); + var configurator = new CSL.Core.Configure(raw); + var style = configurator.configure(); + var getter = new CSL.System.Retrieval.GetInput(); + var input = getter.getInput(["ambigs-1"]); + var res = style.getAmbiguousCite(input[0]); + doh.assertEqual(2,style.getAmbigConfig()["givens"][0][0]); + doh.assertEqual(2,style.getAmbigConfig()["givens"][0][1]); + }, + function testDisambiguationGivens(){ + var xml = ""; + var builder = new CSL.Core.Build(xml); + var raw = builder.build(); + var configurator = new CSL.Core.Configure(raw); + var style = configurator.configure(); + var getter = new CSL.System.Retrieval.GetInput(); + var input = getter.getInput(["ambigs-4","ambigs-5"]); + style.registry.insert(style,input[0]); + style.registry.insert(style,input[1]); + style.getAmbiguousCite(input[0]); + doh.assertEqual(1 ,style.registry.registry["ambigs-4"].disambig["givens"].length); + }, + + + + + + function testDisambiguateAddGivensSimpleWithInitials(){ + var xml = ""; + var builder = new CSL.Core.Build(xml); + var raw = builder.build(); + var configurator = new CSL.Core.Configure(raw); + var style = configurator.configure(); + var getter = new CSL.System.Retrieval.GetInput(); + var input = getter.getInput(["ambigs-7","ambigs-8"]); + style.registry.insert(style,input[0]); + style.registry.insert(style,input[1]); + var res = style.getAmbiguousCite(input[0]); + doh.assertEqual("J. Doe, Janet Roe",res); + }, + function testDisambiguateAddNamesSimple(){ + var xml = ""; + var builder = new CSL.Core.Build(xml); + var raw = builder.build(); + var configurator = new CSL.Core.Configure(raw); + var style = configurator.configure(); + var getter = new CSL.System.Retrieval.GetInput(); + var input = getter.getInput(["ambigs-9","ambigs-10"]); + //print("input[0] (ambigs-9) ================= "); + style.registry.insert(style,input[0]); + //print("input[1] (ambigs-10) ================="); + style.registry.insert(style,input[1]); + //print("end ================="); + var res0 = style.getAmbiguousCite(input[0]); + doh.assertEqual("John Doe, Jane Roe",res0); + //print("t0 passed"); + }, + function testGetUndecoratedCite(){ + var xml = ""; + var builder = new CSL.Core.Build(xml); + var raw = builder.build(); + var configurator = new CSL.Core.Configure(raw); + var style = configurator.configure(); + var res = style.getAmbiguousCite([{}]); + doh.assertEqual("hello", res); + }, + function testInstantiation(){ + var state = new CSL.Factory.State(); + var obj = new CSL.Factory.Registry(state); + doh.assertTrue(obj); + }, + function testDisambiguateAddGivensSimple(){ + var xml = ""; + var builder = new CSL.Core.Build(xml); + var raw = builder.build(); + var configurator = new CSL.Core.Configure(raw); + var style = configurator.configure(); + var getter = new CSL.System.Retrieval.GetInput(); + var input = getter.getInput(["ambigs-7","ambigs-8"]); + style.registry.insert(style,input[0]); + style.registry.insert(style,input[1]); + var res = style.getAmbiguousCite(input[0]); + doh.assertEqual("J. Doe, Janet Roe",res); + }, + function testMultipleRegistration(){ + var xml = ""; + var builder = new CSL.Core.Build(xml); + var raw = builder.build(); + var configurator = new CSL.Core.Configure(raw); + var style = configurator.configure(); + var getter = new CSL.System.Retrieval.GetInput(); + var input = getter.getInput(["simple-western-name-1","simple-western-name-2","simple-western-name-3"]); + style.registry.insert(style,input[0]); + style.registry.insert(style,input[1]); + style.registry.insert(style,input[0]); + doh.assertTrue( style.registry.registry["simple-western-name-1"] ); + doh.assertTrue( style.registry.registry["simple-western-name-2"] ); + }, + function testAmbiguityDetection(){ + var xml = ""; + var builder = new CSL.Core.Build(xml); + var raw = builder.build(); + var configurator = new CSL.Core.Configure(raw); + var style = configurator.configure(); + var getter = new CSL.System.Retrieval.GetInput(); + var input = getter.getInput(["simple-western-name-1","simple-western-name-2","simple-western-name-3"]); + var akey = style.getAmbiguousCite(input[0]); + style.registry.insert(style,input[0]); + style.registry.insert(style,input[1]); + style.registry.insert(style,input[2]); + doh.assertEqual(2, style.registry.ambigs[akey].length); + }, + function testDisambiguateAddNamesComplicated(){ + var xml = ""; + var builder = new CSL.Core.Build(xml); + var raw = builder.build(); + var configurator = new CSL.Core.Configure(raw); + var style = configurator.configure(); + var getter = new CSL.System.Retrieval.GetInput(); + var input = getter.getInput(["ambigs-1","ambigs-2","ambigs-3"]); + //print("input[0] (ambigs-1) ================="); + style.registry.insert(style,input[0]); + //print("input[1] (ambigs-2) ================="); + style.registry.insert(style,input[1]); + //print("input[2] (ambigs-3) ================="); + style.registry.insert(style,input[2]); + //print("end ================="); + var res0 = style.getAmbiguousCite(input[0]); + var res1 = style.getAmbiguousCite(input[1]); + var res2 = style.getAmbiguousCite(input[2]); + doh.assertEqual("Albert Asthma, Bosworth Bronchitis, Crispin Cold, David Dropsy, Elvin Ebola, Fergus Fever",res0); + //print("t0 passed"); + doh.assertEqual("Albert Asthma, Bosworth Bronchitis, Crispin Cold, David Dropsy, Ernie Enteritis, et al.",res1); + //print("t1 passed"); + doh.assertEqual("Albert Asthma, Bosworth Bronchitis, Crispin Cold, David Dropsy, Elvin Ebola, Fergus Fever",res2); + //print("t2 passed"); + }, + + +]); diff --git a/tests/test_render.js b/tests/test_render.js new file mode 100644 index 000000000..5250a9711 --- /dev/null +++ b/tests/test_render.js @@ -0,0 +1,25 @@ +dojo.provide("tests.test_render"); + +doh.registerGroup("tests.render", + [ + function testHello(){ + var xml = ""; + var cite = tests.test_render.makeCite(xml); + doh.assertEqual("Hello world!",cite); + } + ], + function(){ //setup + tests.test_render.makeCite = function (xml){ + var builder = new CSL.Core.Build(xml); + var raw = builder.build(); + var configurator = new CSL.Core.Configure(raw); + var style = configurator.configure(); + var Item = [{}]; + var ret = style.makeCitationCluster(Item); + return ret; + }; + }, + function(){ //teardown + + } +); diff --git a/tests/test_retrieval.js b/tests/test_retrieval.js new file mode 100644 index 000000000..cc5ae0792 --- /dev/null +++ b/tests/test_retrieval.js @@ -0,0 +1,31 @@ +dojo.provide("tests.test_retrieval"); + + +doh.register("tests.retrieval", + [ + function testLocaleReturnSomething(t){ + t.assertTrue( CSL.System.Retrieval.getLocaleObjects("en")); + }, + function testItemGetFile(){ + var Source = ["simple-western-name-1"]; + var getter = new CSL.System.Retrieval.GetInput(); + var res = getter.getInput(Source); + doh.assertEqual("His Anonymous Life", res[0].title); + }, + function testItemGetListOfFiles(){ + var Source = ["simple-western-name-1", "simple-western-name-2"]; + var getter = new CSL.System.Retrieval.GetInput(); + var res = getter.getInput(Source); + doh.assertEqual("His Anonymous Life", res[0].title); + doh.assertEqual("Her Anonymous Life", res[1].title); + }, + function testLocaleReturnCorrectLength(t){ + var count = 0; + for (var i in CSL.System.Retrieval.getLocaleObjects("en")){ + count += 1; + } + t.assertEqual(80, count); + }, + ] +); + diff --git a/tests/test_sequence.js b/tests/test_sequence.js new file mode 100644 index 000000000..7fcdf0e57 --- /dev/null +++ b/tests/test_sequence.js @@ -0,0 +1,23 @@ +dojo.provide("tests.test_sequence"); + +doh.register("tests.sequence", [ + + function testIfItWorksAtAll() { + function testme () { + try { + var fmt = CSL.FORMAT_KEY_SEQUENCE; + return "Success"; + } catch (e) { + return e; + } + } + var res = testme(); + doh.assertEqual( "Success", res ); + }, + + function testContents() { + var key = CSL.FORMAT_KEY_SEQUENCE[0]; + doh.assertEqual( "@text-case", key); + }, + +]); diff --git a/tests/test_sort.js b/tests/test_sort.js new file mode 100644 index 000000000..d30a2c0ae --- /dev/null +++ b/tests/test_sort.js @@ -0,0 +1,61 @@ +dojo.provide("tests.test_sort"); + +doh.register("tests.sort", [ + + function testRegistrationSortKeyReturn(){ + var xml = ""; + var builder = new CSL.Core.Build(xml); + var raw = builder.build(); + var configurator = new CSL.Core.Configure(raw); + var style = configurator.configure(); + var getter = new CSL.System.Retrieval.GetInput(); + var input = getter.getInput(["simple-sticky-name-1","simple-western-name-1","simple-mongolian-name-1"]); + style.registry.insert(style,input[0]); + style.registry.insert(style,input[1]); + style.registry.insert(style,input[2]); + var res = style.registry.getSortedIds(); + // An Altogether Unknown History of Soviet-Mongolian Relations + doh.assertEqual( "simple-mongolian-name-1", res[0] ); + // A Book of Five Rings + doh.assertEqual( "simple-sticky-name-1", res[1] ); + // His Anonymous Life + doh.assertEqual( "simple-western-name-1", res[2] ); + }, + function testRegistryCiteNumber(){ + var xml = ""; + var builder = new CSL.Core.Build(xml); + var raw = builder.build(); + var configurator = new CSL.Core.Configure(raw); + var style = configurator.configure(); + var getter = new CSL.System.Retrieval.GetInput(); + var input = getter.getInput(["simple-sticky-name-1","simple-western-name-1","simple-mongolian-name-1"]); + style.registry.insert(style,input[0]); + style.registry.insert(style,input[1]); + style.registry.insert(style,input[2]); + // An Altogether Unknown History of Soviet-Mongolian Relations + doh.assertEqual( 1, style.registry.registry["simple-mongolian-name-1"].seq ); + // A Book of Five Rings + doh.assertEqual( 2, style.registry.registry["simple-sticky-name-1"].seq ); + // His Anonymous Life + doh.assertEqual( 3, style.registry.registry["simple-western-name-1"].seq ); + }, + +]); diff --git a/tests/test_speed.js b/tests/test_speed.js new file mode 100644 index 000000000..aa604527a --- /dev/null +++ b/tests/test_speed.js @@ -0,0 +1,176 @@ +load("./dojo/dojo/dojo.js"); +dojo.registerModulePath("dojo","./dojo/dojo"); +dojo.registerModulePath("dojox","./dojo/dojox"); +dojo.registerModulePath("csl","./src"); +dojo.registerModulePath("doh","./dojo/util/doh"); + +dojo.require("doh.runner"); + +dojo.provide("tests.test_speed"); + +dojo.require("csl.csl"); + +doh.registerGroup("tests.speed", + [ + function testSpeed(){ + print("iterate over sorted list and print"); + tests.test_speed.registry.iterate(); + } + + ], + function(){ //setup + + print ("loading functions"); + + var Registry = function(){ + this.registry = new Object(); + this.start = false; + this.end = false; + this.initialized = false; + this.skip = false; + this.maxlength = 0; + this.insert = function(newitem){ + if (newitem.phoneytitle.length > this.maxlength){ + this.maxlength = newitem.phoneytitle.length; + } + // if the registry is empty, initialize it with + // this object. + if (!this.initialized){ + this.registry[newitem.id] = newitem; + this.start = newitem.id; + this.end = newitem.id; + this.initialized = true; + return; + } + // if this object is less than the first one, + // insert it as the first. + if (-1 == this.compareStrings(newitem.phoneytitle,this.registry[this.start].phoneytitle)){ + //print("Sequence at the beginning: "+newitem.phoneytitle+", "+this.registry[this.start].phoneytitle); + newitem.next = this.registry[this.start].id; + this.registry[this.start].prev = newitem.id; + newitem.prev = false; + this.start = newitem.id; + this.registry[newitem.id] = newitem; + return; + } + // if this object is greater than the + // last one, insert it as the last. + if (-1 == this.compareStrings(this.registry[this.end].phoneytitle,newitem.phoneytitle)){ + //print("Sequence at the end: "+this.registry[this.end].phoneytitle+", "+newitem.phoneytitle); + newitem.prev = this.registry[this.end].id; + this.registry[this.end].next = newitem.id; + newitem.next = false; + this.end = newitem.id; + this.registry[newitem.id] = newitem; + return; + } + // + // if we reach this, it's safe to iterate + var curr = this.registry[this.start]; + while (true){ + // compare the new token to be added with + // the one we're thinking about placing it before. + var cmp = this.compareStrings(curr.phoneytitle,newitem.phoneytitle); + if (cmp > 0){ + // insert mid-list, before the tested item + //print("Inserting mid-list: "+newitem.phoneytitle+", next is "+curr.phoneytitle); + this.registry[curr.prev].next = newitem.id; + newitem.prev = curr.prev; + newitem.next = curr.id; + curr.prev = newitem.id; + this.registry[newitem.id] = newitem; + return; + } else if (cmp == 0) { + // also insert before, but this is a duplicate, + // so we need to provide for cases where the + // inserted object ends up at the beginning of + // the virtual list. + // + //print("I'm a dupe: "+curr.phoneytitle); + // (disambiguation handling would slot in here) + // + if (false == curr.prev){ + newitem.prev = false; + newitem.next = curr.id; + curr.prev = newitem.id; + this.registry[newitem.id] = newitem; + return; + } else { + this.registry[curr.prev].next = newitem.id; + newitem.prev = curr.prev; + newitem.next = curr.id; + curr.prev = newitem.id; + this.registry[newitem.id] = newitem; + return; + } + } + curr = this.registry[curr.next]; + }; + }; + + this.compareStrings = function(a,b){ + return a.toLocaleLowerCase().localeCompare(b.toLocaleLowerCase()); + }; + + this.iterate = function(){ + var curr = this.registry[this.start]; + //print("starting iterate at: "+printme); + while(curr.next != false){ + var printme = curr.phoneytitle; + while (printme.length < this.maxlength){ + printme = " "+printme; + } + print(printme); + curr = this.registry[curr.next]; + } + }; + }; + + var makeThing = function(key,phoneytitle,transfat){ + this.id = key; + this.phoneytitle = phoneytitle; + this.transfat = transfat; + this.next = false; + this.prev = false; + }; + + function makePhoneyTitle(){ + var ret = ""; + var mylen = (Math.floor(Math.random()*25)+1); + for (var i=0; i" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + ""; + + var Item = [{"title":"My Title"}]; + var cite = tests.test_term.makeCite(xml,Item); + doh.assertEqual("My Name and My Title",cite); + }, + function testTermGroupSuppressOnEmpty(){ + var xml = ""; + + var Item = [{"title":""}]; + var cite = tests.test_term.makeCite(xml,Item); + doh.assertEqual("",cite); + }, + function testTermGroupSuppressOnNull(){ + var xml = ""; + + var Item = [{}]; + var cite = tests.test_term.makeCite(xml,Item); + doh.assertEqual("",cite); + }, + + ], + function(){ //setup + tests.test_term.makeCite = function(xml,Item){ + if (!Item){ + var Item = [{}]; + } + var builder = new CSL.Core.Build(xml); + var raw = builder.build(); + var configurator = new CSL.Core.Configure(raw); + var style = configurator.configure(); + return style.makeCitationCluster(Item); + }; + }, + function(){ // teardown + } + +); diff --git a/tests/test_util_names.js b/tests/test_util_names.js new file mode 100644 index 000000000..4bd1cd9d4 --- /dev/null +++ b/tests/test_util_names.js @@ -0,0 +1,114 @@ +dojo.provide("tests.test_util_names"); + +var display_names = [ + { "primary-key":"Doe", + "secondary-key":"John" + }, + { "secondary-key":"Gwen", + "primary-key":"Roe" + }, + { "secondary-key":"Tom", + "primary-key":"Smith" + } +]; + +var state = CSL.makeStyle(""); + +// +// Delimiters and formatting decorations are +// controlled by cloned tokens derived from +// the token list that expresses the style. +// The nesting structure is considerably more +// complex than the visual appearance of CSL, +// in order to give effect, through nesting and +// simple joins, to the various CSL inter-element +// splice parameters. +// This test shows which of these clone tokens +// do what in the formatting of names. +// + +// the "name" token here carries only +// the "and" token carries all the formatting +// decorations of the compiler "name" element. +// its delimiter is either that of the "name" +// element or, if the @and attribute is set +// on it, the string appropriate to its value. +var name = new CSL.Factory.Token("name"); +name.strings.delimiter = ", and "; +name.strings.prefix ="["; +name.strings.suffix ="]"; +name.strings["name-as-sort-order"] = "first"; +state.output.addToken("name",false,name); + +// the delimiter value of the "name" element +// from the compiler's token list. the formatting +// decorations and affixes are copied to +// the "and" token. +var inner = new CSL.Factory.Token("inner"); +//inner.strings.prefix ="<"; +//inner.strings.suffix =">"; +inner.strings.delimiter = ", "; +state.output.addToken("inner",false,inner); + +// the sort-separator token carries the +// value of the "name" element @sort-separator +// attribute as its delimiter. it is otherwise +// empty. +var sortsep = new CSL.Factory.Token("sortsep"); +sortsep.strings.delimiter = ", "; +state.output.addToken("sortsep",false,sortsep); + +// the name-as-sort-order param from the +// name element is set on an otherwise +// empty token for "start", "middle" and +// "end", as appropriate to its value. +var start = new CSL.Factory.Token("start"); +state.output.addToken("start",false,start); + +var middle = new CSL.Factory.Token("middle"); +state.output.addToken("middle",false,middle); + +var end = new CSL.Factory.Token("end"); +state.output.addToken("end",false,end); + +// token params of the optional "primary-key", +// "secondary-key", "prefix" and "articular" elements +// token params are taken from the token +// list, with no changes +var primary = new CSL.Factory.Token("primary-key"); +primary.strings.prefix="("; +primary.strings.suffix=")"; +state.output.addToken("primary-key",false,primary); + +var secondary = new CSL.Factory.Token("secondary-key"); +state.output.addToken("secondary-key",false,secondary); + +// +// This should be changed to "articular" in the code +var suffix = new CSL.Factory.Token("suffix"); +state.output.addToken("suffix",false,suffix); + +var prefix = new CSL.Factory.Token("prefix"); +state.output.addToken("prefix",false,prefix); + +// the "empty" and "space" tokens are standard +// pre-defined tokens that provide standard +// delimiters without other formatting. +var empty = new CSL.Factory.Token("empty"); +state.output.addToken("empty",false,empty); + +var space = new CSL.Factory.Token("space"); +space.strings.delimiter = " "; +state.output.addToken("space",false,space); + +state.tmp.disambig_settings["givens"] = [[[1],[1],[1]]]; +state.tmp["initialize-with"] = "."; + +state.tmp.nameset_counter = 0; + +doh.register("tests.util_names", [ + function testBuildNames (){ + CSL.Util.Names.outputNames(state,display_names); + doh.assertEqual("[(Doe), J., G. (Roe), and T. (Smith)]", state.output.string(state,state.output.queue)); + } +]); diff --git a/tests/test_xmle4x.js b/tests/test_xmle4x.js new file mode 100644 index 000000000..81aba4432 --- /dev/null +++ b/tests/test_xmle4x.js @@ -0,0 +1,30 @@ +dojo.provide("tests.test_xmle4x"); + + +var str = readFile("./style/apa.csl"); + + + +doh.registerGroup("tests.xml", [ + + function testClean(){ + var tag = "\n"; + var res = CSL.System.Xml.E4X.clean(tag); + doh.assertEqual("", res); + }, + + function testParse(){ + var tag = ""; + function tryme (){ + try { + var res = CSL.System.Xml.E4X.parse(tag); + return "Success"; + } catch(e) { + return e; + } + } + var res = tryme(); + doh.assertEqual("Success", res); + } + +]); diff --git a/tests/test_xmljs.js b/tests/test_xmljs.js new file mode 100644 index 000000000..3889cecc0 --- /dev/null +++ b/tests/test_xmljs.js @@ -0,0 +1,200 @@ +dojo.provide("tests.test_xmljs"); + +doh.registerGroup("tests.xml", [ + + function testNestingEndPoint(){ + var tag = ''; + function tryme (){ + try { + var res = CSL.System.Xml.JunkyardJavascript.parse(tag); + return res; + } catch(e) { + print (e); + return e; + } + } + var res = tryme(); + // [[]] + var cmd = CSL.System.Xml.JunkyardJavascript.commandInterface; + doh.assertEqual( "mymacro", res[0][0].attributes["@value"] ); + doh.assertEqual( "one", res[0][0][0].attributes["@value"] ); + doh.assertEqual( "three", res[0][0][1].attributes["@value"] ); + doh.assertEqual( "two", res[0][1].attributes["@value"] ); + doh.assertEqual( "boo", res[0][2].attributes["@value"] ); + }, + function testAttributes(){ + var tag = ""; + function tryme (){ + try { + var res = CSL.System.Xml.JunkyardJavascript.parse(tag); + return res; + } catch(e) { + print (e); + return e; + } + } + var res = tryme(); + var cmd = CSL.System.Xml.JunkyardJavascript.commandInterface; + doh.assertEqual( 2, cmd.children.call(res[0]).length ); + doh.assertEqual( "text", cmd.children.call(res[0])[0].name ); + doh.assertEqual( "other thing", cmd.children.call(res[0])[1].text ); + }, + + function testChildren(){ + var tag = ""; + function tryme (){ + try { + var res = CSL.System.Xml.JunkyardJavascript.parse(tag); + return res; + } catch(e) { + print (e); + return e; + } + } + var res = tryme(); + var cmd = CSL.System.Xml.JunkyardJavascript.commandInterface; + doh.assertEqual( 2, cmd.children.call(res[0]).length ); + }, + + + function testGetTextString(){ + var tag = ""; + function tryme (){ + try { + var res = CSL.System.Xml.JunkyardJavascript.parse(tag); + return res; + } catch(e) { + print (e); + return e; + } + } + var res = tryme(); + doh.assertEqual("and some text here", res[0][1].text ); + }, + + function testParseWithTextNode(){ + var tag = ""; + function tryme (){ + try { + var res = CSL.System.Xml.JunkyardJavascript.parse(tag); + return res; + } catch(e) { + print (e); + return e; + } + } + var res = tryme(); + doh.assertEqual(null, res[0][1].name ); + }, + + function testParseHasAttributes(){ + var tag = ""; + function tryme (){ + try { + var res = CSL.System.Xml.JunkyardJavascript.parse(tag); + return res; + } catch(e) { + return e; + } + } + var res = tryme(); + doh.assertEqual("hello", res[0][0].attributes["@value"] ); + }, + + function testParseHasContent(){ + var tag = ""; + function tryme (){ + try { + var res = CSL.System.Xml.JunkyardJavascript.parse(tag); + return res; + } catch(e) { + return e; + } + } + var res = tryme(); + doh.assertEqual("style", res[0].name ); + doh.assertEqual("text", res[0][0].name ); + }, + + function testParseReturnsCorrectLength(){ + var tag = ""; + function tryme (){ + try { + var res = CSL.System.Xml.JunkyardJavascript.parse(tag); + return res; + } catch(e) { + return e; + } + } + var res = tryme(); + doh.assertEqual(1, res[0].length ); + }, + + function testParseReturnsSomething(){ + var tag = ""; + function tryme (){ + try { + var res = CSL.System.Xml.JunkyardJavascript.parse(tag); + return res; + } catch(e) { + return e; + } + } + var res = tryme(); + doh.assertTrue( res[0] ); + }, + + function testParseSuccess(){ + var tag = ""; + function tryme (){ + try { + var res = CSL.System.Xml.JunkyardJavascript.parse(tag); + return "Success"; + } catch(e) { + return e; + } + } + var res = tryme(); + doh.assertEqual("Success", res); + }, + + function testNodename(){ + var tag = ""; + function tryme (){ + try { + var res = CSL.System.Xml.JunkyardJavascript.parse(tag); + return res; + } catch(e) { + print (e); + return e; + } + } + var res = tryme(); + var cmd = CSL.System.Xml.JunkyardJavascript.commandInterface; + doh.assertEqual( "text", cmd.nodename.call(res[0][0]) ); + }, + + function testContent(){ + var tag = ""; + function tryme (){ + try { + var res = CSL.System.Xml.JunkyardJavascript.parse(tag); + return res; + } catch(e) { + print (e); + return e; + } + } + var res = tryme(); + var cmd = CSL.System.Xml.JunkyardJavascript.commandInterface; + doh.assertEqual( "other thing", cmd.content.call(res[0][1]) ); + }, + +]);

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�CS+w$qSLs@@#8?7y%xfv*Tcppx%N|e_~tc<&GD-b ze|kdKKfnz>dmU_+ymuX-sYkgV_g@q4dG|p_s!q@XF8~L0M_`i= zmCNvezbaMtfFRh00q_00#4rXETBB`IE>tUP#RWdv>;yLA5Udx-Nkfnj)+^M5pI`%n zA>5EkzyJ*vXB72?op6AiXp_fVq6#x|fRyJV+9$nHZr9*~X|*UD+S!CO zUs4_XLjyc#UiHsmW$CU}72wva`6h4WFV`&krpSfVyYx>MGAM0ML#?1S_O-cTUG54y zwKQvD)cm;4ZbO7sr_)brk+rUTL#SG)Gns0h)_}5kVx8g&Qngf@ocK*%EH9d{6ZgX( zmSXPbT1fIRsIGp}EE9Ti{ipG}{jWCpcgi0>M^W%oH__n%E_tK20W$keY=i!^diB_Q z$qSceFsaxV{R@GuTZ0H@{sfXm0F_k45;PV2&u^|5c+0t&d&I2}k{p@<=8Pibav~e+ zHX}T~!ClbasRvFs<&Jg?4vw{5xr$bv0iIC;@u!{8OhTX+8Q1>X24{@=C;(KD4cCsY zjXj!%x^GDCO`G^&!t~M|SfCaz{cu;Z=vCK#P<*T$2^*6gkCSUYzwM(3jlnFVmy1lC?Eb_$*xNDt26p+HsxE)31q);zx|V4 zD0v}h{2&516UpcIKqED)=@-6GN-yaOz4RU6vP1JPyoYda!sv@P;!UU)^xFtI?#TEw zK--~5{zZnC7AGb%>^FR6I$z_O6-HAC4G)BI?x=y5bc72)UC-d^YB^F$GxW&J_wg@1 z6e@lr3SZ+55Wdl~{Sg*x;n>$E`r9x@3=(v1rUV;%k?fGjjvLrzD_SON*K2{cy>fFd z^@-}>9d>#iR(=wJ?L)Fe7ls{9#@SKo9_TD}{Yi*xhaB$?240pI#>tPF;2c@Z2xxPk zRg=#fABD<|R%0c~_0>A<=EkeBQoE2&hTtrR2p$Lbm782{PCbo#=$l+0 z#CT&mUq^^@ot160cFk|$AG;-C{eTzTv1LJ&;a}wd7qk%|g!4Oohm7OF*Utpp4tA47 z2IifMAT9>L$lcK%GZj@xwxt0|x$$KGx+;P#dd!3^z&@NCDImwW=wz37!GUo>A?#U7 z#3Ld;2VHDNy2w<8=6U@%wf@9C^K(uLfgyaec*5-)O!Qz|asy2)|75uv=|qr4KLyb45~`J$h1 zY@FmS7~Rqm7j4l7*FuSsd*t>k2SE+5fRkJV_nqO8%^ijR!iE1r4Ew=%*q5Wx3d^1u zIUIyj?Z~K;1@QE3T;hmZa; zdW~$j%(%W3ssY;%J>o;}MUcA{eHxV1mJoC)nXsju+!c8{jPWJRI&`R`zLV78)ZK=> zlyrPPyyi4uy(CXMb#ME$1<=v0$xTd$q1mZ2tiPwHjLW@0DEX$z)!?idEz{DQZfYfN zS*)(+j|ZG_$@AWelAhnAqxEHS=z5nqEwpl8f%?LqJh7Zg6Crf%~XWfrXUE7r(mE1}Tbkm<02MYMR`aZ63 z-veRUKU|!t5eLeWgei!fKql>FYY%R&vJW@q_iDQ@^KAGaXMq)YVUaGpPfKiqoxXpJ zFVP0zeVC5V(YjVyFevi75yE`;9d20;(b(o;*po?{{ObKUpK#*4ApHxw Kikr^L6 z0!jp)8^mcW=(t1k@aUk9?*Nle#@}R4(zp>NF)P20bp$c zj%enJ?88|LZSIMAavR;sy7nVf#fyxp&Pk`%?L5L8+y-^(!OkTYbl+Pswt^+0KXk|o z`UFJYXx^T@;u~HCQ+@e>pK|CW{QzKYgT~i&=z;#AU3D4c_JXCJ!xasD^DJL};#c2= zH9dh5+w~$ zJ8E6jM+aUMKj%BGPy%dih=mIUT^ST2L&H6s7`;Rg!HU6~A%4sw0lse$kPsr_at3Nw zZX4+hJXmSv!$%FiFN0b*$5-U`t;CprdnU5u1?g#PqofVjkwk3a?>^{%s-3k7gi7W& z&;F%!9mNk=<#K}hN?pymE!=n&vnAy~a25>)Yzv(YuPuRI5xQqS=^{T;Az{+GxgP^u zLVQoXWZOE((C2;@D3Jay%HA=$vW8jLPA47Pwv83rwr$(Ct&XjZZQJgkW81b)_ITd$ zo%8N7zKwrttiM&W>Yi1zu6qieY+2EKD0M!fh?MUqGP4+SYWZ!Di8`bz(fHA>Du(5j zjR12>9zY>c7Ccmw&cvBG?7W2O458MZ;$+=y8K~E6WyIiBtRen|% zJn=oeya%5!#~Z}KxlvMsT%Ph58_g_V$o#|14$OyC>7O1!jyEjL`>z6{FEF~ro)GGX zt8L8>ujPU-ptXBAb5tBWgzrT$>L?Hdisr^;wQe}`75w>LK!QsJ1V+r;&D@d}x4dz6YPWYI_ltKKQOONhLl5yUA zvYnm`*f)IaVRKNs_~0$O%}$!jxcn))5ujypE4*a>nX#bzs9*2N%rQkK)pY=YSP8Pcc{PXw`QP|Bf?h#v;yd+*X@ zm`swI3%0p|=_lS;I<`fM*7MtwJuI;L>D#42B*+17@klS?arigzMRQJVYX%UqgQ?V3 z(=k8An>*PDrS?6wxN?dEu){m!50aT2R&__UBQr7D(G#1obqNO~HgcCk3`wNKT>Em5 z8_mOfkcT3v?Lg^S2QLDNQ_w?>JSLSr z`YcqwuvTg==F1lW=VN@rN+oa?*OqRw2wh`v*-&%g0vEdOD`j11D8Zvv5k>CzBmuvX z#^_q1*+BYhS_aOXnQoq^2{aE!Xr26u&9HF>S!T~!t`VkbudT|@iCawe1_^y{dh{Qy z$JB9sc9b(4sfc9i0TK42n+GI{p#$feY2{<~h)dfJ)V_Rc590YXa}ozGY81Cx#k%Y%^rw1MLvkw=__zxi*!`uk+ zm8D(E=^-a>tOpMpWcOc75qx(p zyY%neH)uWbom2FPeg{2>U)xXNZZEPocz){My}3yEx2c0-?=ClteroSgepKDtdJ*)f z2ww`$H!-{DTT~x|@YVA=5P)U3+iNr6_0evzyW;>0dzLqW_ASF!Wh}`bdWG{B@oL0a z24LW-5DqXHsl-2}0%sUvzu;OF%B~}Dc1*xB4db>~7?Og569>Ya;Q0K9&-5#BD(+nD zs|LxQJ?z_HL-Zh0m*tTz$#g%(=5fe)n zAr#Un)4!D?szo1ezkbymT{RP?hZ@1Z%A`ZK?X?siQuO7^!ud6-7M48ug=u_KE-Kh)fC zj4?ptZL%N+Vs03w(|`nsA;__j^XJllU7mTYr9)tcnc0^pf}^5O?2{GttDRXVUHhf^ zvM%xDboW99m#*DeRf@T)w;@NRVpn}B<&x4#@v~-r?Z4{&ykUAO7GRY-N8Y^!_J1jgv=xbjh_cC%eDLx?DX8J#(4) z+$_YkZ)XqSYsUByRv&Wu%Pt|eyrqxp7ofQ}njb6_34U`)adCPDobs8u-2Rbp;cYSASXroCAt0o9qPDaL)SmFNnN^5NJKCSg zBJrIag>3wf!)S2KH64t9>dgnQ``7<-jV<hS64Tx*mvLKcP|E~3P53Aa% zb;n?1KnBdOUu7aTdK+>;@he`=y~sU9^ev=jqV`(dbdJ|R-69vx4xeGcixUwB{f!B^ zW>`$f;PFKs61>Ey8m=|rQk(P4mBa~*;U|5)bXv}?2i<7H;u2X*?7deRO5D1PhxNV| zHmoo=Yr#k|QgM?|w54elBTY*SwYO_n7*R9IJ-DZ};f;3t1X@MYlMd^Rcgm3D5tEc2 z6xUotnAQ*5Jy{_57$6yIcXQC?L7mVkfPx`JNd!YBdi6S~q!&&XtD|6&Vgh$e)xx0P z9?bFr$!Q*^Lzz)1{sGMAcKc?ow}YGN7f#aI$NA4}jhpG|Xn3eQy>Q9#%z34kqdZF+ z@*I0j#i9n~xBRrkFFt*udWfm-4m}{U z0!i}8-0qy;YxSg}O^?z?S|06}>5shYleWyn?`2RdbnEu6fP_a?MRzdNlgIuYt z{0Sj0P!$A=1k9{{6QZaPuKb5zK@#=GBxQpHa7dF;k6Ja zw*zvAwk$e*tj%nOhkl0RY2E4T^XQ2Ws58{gGkzFWM0bfX*h6G<_J(Y8?uHc&#Z76T zAeO||!d)yZ)&o|`(uXbLX`#Jxpf_@kg5u$crP8vsY6m1hdCHk7#RyE`4?t=T9fOjW z!OC=#al^6OzP^rP7X8GNwCzB}M+z#MMH$3G#fQr~iN5i%G`rQL!?l%!A@^dtuHj*U zC!qC}theA|Jm$17=l&|g3yw5MWQHl*tJtpMs+a+9vjyY_1cp^L^#?_4k#YU;%fWlV z)3PfLpoR!6#ZImNJtdMFx_D2V&nd{?$afJHV_Y^n(97&9pi$5kZtTOy(NzZR`$$SG zB!&bSM~gROy@9e7~MoV?iz9CaL>KBT&eu?t#?UyrBJn6#0HZT6b52b;9hrlK4s z%hgGz%}hW|XW|BUjkadux?7E@HZ%@~I}Q;lfNOc-IwC->&Saae z85Hf4&F~-toXb(MxN4R>Ho5#lc(KzJatVxg;E4MwbO6^H>lwHMtb0%mtXou6e^(Kl zZr1NJZH2~+%W=NNs?ta!MN>q#83k257o+8I*~?nG1aZWJhwta;ZwmpPwcN7c%K%(px&d4L$-lHl* zyrJxjR?8E;U@yTJ zu5`>Lb}TaxuAGZ~PFzO(fc;vwqB7Du^=#f5+n1}QUoA*n#ke4J=r%eV#~6DRKk$^L z%qL8c3gMB&A;Vw=>ed12hI1#Q!Nz(+MRo!RvoMx0YLt!7HO2xg#3)&%%$+IhbDxzN zgX!%#I0hyC&i7S&F2YI+{G|W)XZr!vqs{rd{L6jAIR2;QAMmg8uka6l!$M4KSeF5&G^pKi<=R*7`3m zzMf4!pmY6=pdb!-k;x8q`?_Pp2m@!m5Gr2%(G+SKuoBzVM8YNceD15Q=Ay1cS{dwkk;Q0_2zF;XhzLEifdtmbfEH2(@61xcaI*m|R5ynDl2Lr9&$O*9 zq&mEk{yqwY8n(@es|Oq!khhvY6osG6bujr*??*@`9{5>RKxTU5g$ZVghhzgV-DK8= z>f=x=Uok??j9@EZGQaBk89tVP1~j2WAQgt5`hKf`)Xybc2q97nb+dimu%e1#Z}PUs z{T7cpOQL2IyXT+_jxLy!tqR4eU%&}PJXH=QYb!C2mi=*|Y!GeT6WCR>v`0z!1Aphw z=@$Y+03}J+sDUR%HQdlNHq(q>qg+qpw0x!ruL&x{uL6-t!$euUx_a^9ezt!Po--#r z*ztGpw!Vuq-~X_8EB({Rtqq)1`t9Gt7P;7}jc3hr{p7Zx5P=e;EdhPvm89d(Ey zwL)WbIfv4yZM?ccEhqof?os!*3`$AMSJ z&>XS!b20X3;j&ykFz~%(j2hLM*I*3ALCl5-19-(;a3|VHW z)q!ori}@(^DN%XqQ(}bgSfI{qYoKoRgMx0U*6Cth<8%|7%}lI7J3i`w(o3$SqIk>o zJ%P3}rD(WTeKadj!E%ZIbqphmZ1!hWrckezYnBAw`0YPcd*N@iRb-Yf`xnWavrdkm z@dMYf88(+m7Q3uIwM8i`dY3NX_|lv3>H-mhG;!o-|C>);^Nx3)XCpVGX`5IyV`kE{ zL6~MNrmb%EQG|gVw_Mc|9G5K}%TCtBT601od6G1n-o0WvRfoH(`YNG4WgSk>eo}@T z?Zh?;_gQ7jx$iK(s-;s=PlQDFdNc_lAkEj=zhW5U#5ENc(+*$cL2 zmj%>s_FAlSdb8G$mnv=U8fZirgtgD+W?5mGPZIpMhKLLm|^;6vv+PP0Z(h^e6oMdzK4>K+Ui2TQE_@0T+xp(cu7?0TactoHfjmWx)de7d|L1UnU#nseT2 zi-Zkz;2fjy0M{4OnX(1M8kTw2qQV4#@N5rtXyQo!*~>-R{*o>7-|^V-70s0=_F)2J zuY)Vs>Sib7BjF-Duzc$7UbxS4oPamP;fZGyW3z|!Yl}Gqw0fE6^0{SH3ZySll&YeQ z3=wwRY$0RixM>1T=mRiAivyiOvH2T#j(eSu)nIIM*^&F@k>i{oR?eUlXX(q6x(ajH zomRXa4iUKI!fM?mqe6=ZA)aFDyLy`w)2nL1qFIE~Kmxa&mxNNDpui{RSK{BWlh zPq~kJ$Xj$b4&31+RCj5?l_X}n}BhhjtwZT?u|Alz9vYZ@Z(GE`b8p5 zs0_afAQfW4Rr3q)sx2zHmf5DRS~)695@Ew$OB`l$HjAUox42_sP8gP+PIo3Uy-MmV zPJ6zj#k>XgUu&Zcd!h+&Er!VOi)fh@V;$}hv))=a_u>THn-S>{+S%z8cA<29a%UR& z_G~BRKe5_s5|2PETSd!ykp5!_w)`FZ&5ZIxi+Gx4)|0y;^!-hQ zmUJf@$v2q3b992i>a@;3`?^g1N~qU!TayXDs(%hS{PmykW+BqKj$GfW8UDL>GX6Jx z)56(9$j;W;(eD2ppHwN!{0H|i%O$H-MjCsLe^Jmv5`;unkRKG#39giwD!KctlWC$W{p+Bo~;KxijKb@;an|g9ec9O1R$Rn- z#StJsGa#Z!<`dda z;u>mvJWi~bvYFh~dq5wY*yioKqy;78<9XSU0~504J5(6U&7hyTEV?0#rY2LAz-X`= z839U@F}l+o08WOti->6w3dd+XV`-@VW=D-NuH@%$AfS`)gXrRFyoAU*P&4;Jr+aU0 zT6X}N&2>78Olorc0GUa2MR@^}OF!V1+U&!WAn?T%>T$eM$%Mq8-icyXuaq@razC(O zzF#Z6=#gy&s~u7c^WvG{|zf|b8t^AGrJ)s?t!4C4|-F$74~Hm3+6r^YZnw0(}v z-f8qXuetwbZpy*{0nz_&GVvcBSEZ`ugd&3S=?Tb`2#w%xttPMr zBGjm-!RRCn7wjh`^T&$*dCin=!zv_W+H6XWL8DhCI59VOE1>6nFa*9(E-XXIE0Ik9 zNjy>G#o8fNFO^88*DmLlJK;8c;?(~2`P9M(l+_y@lHIx-fs4U%(;mXA&CK{WzyaDq zyWSpCZQ(i;Yg2hZ3(bRk!CnQ{E;FsM7E{U6VPh}`ZoP3fMv82cg`Iqc|nTyMOxLIc;e|L+W5G$8i)_4e&W=0pCJ|)70 z)`%xto=iaV`l_aW1-1lv%0RbLS#+4J!iCNmu9_xPH*yjbEV&Tunp&})6dRu9$rvc+ zXn15)%q_61q3w!dhaTxI_QJeMCpLRS4j0lir*7VE7Zg@gYPL97U2iqoCxRTQ>u!5S z5*K~EO^C>l!Zh_%StNCB3&|cNZ8y%ba7;5nZH$GkK}up+4hgg5heBRrd!{vUL{!`z zB+jKxN+{VS-w^h3&)yJVBGHdEL3?5;b z4l4K+a3>%Z%#t7XN8mAN+pHyh}rF%8mD6rkN@$)>Rj2 zu{$}R-7!t60XtcGld@75X8Wj7iP}DAq9nB@COM$4%qfq;I35BLPp>|5-C>geY#AGe zyoU+pD<4eBEXq`$IJOWt-bY7c)u&F)ij90uJ!HG-7Ec@2*Jkhfgs|(cW2>o*zeRrr z@JD1zrHsnP37R69p+olYs-dzxO5&$!1>ePqLb`C)9u6ULcFf6PmP>}XN=^M#+-rD$ zMCZnP=EW?SjLb&Rc$Q~{m1nVXd<9yphy8gRfQqO{V)qYHiNJn0Dci_dC$`oUTw5TD z4%2M6f;=g^d=yE8cj6;f0q^=n(8tu^5S3ej^u#ULy0I+`A216kRC>DCjx5Gb4(9i} z&vhE4CvOia#`T^)&nY^{h2slC=c5hO8jIxG=A{t27JU9io2<*fT7cMyyHtQ(I=Pnz z<2fne6-MVdOTL?+ksk7ZI^zv%H{iv=wG?(g!@xQH3$ld%W0Xj1E(@dLmK%w0=J zz&Btm%jDkhRX?@7 zga7+0@IYUVZT!GyL}jRK?lC+QQkw#OeQAgeb1rA~PcJ%olAKckp}uUWZDO z|4nH~xf_EPK=s|ot5A+R8tR&>aXM}}6Z+Kxegfb0f?q3y-yjv0UI?k(F6X2>9lD$O ze!aXv_rkHBmF|j0Yph2*K(`RDN7Ul&(B-otwOb7GBcXAT8oL=dXh>wm5d;>o;9(7k z;DH2x05>Xnu)DN|EwG_R%cIzMgf^ zJ^sHP%v9>WU1J|r&MKrzUW4X{PE5|rGWGo>VJKgHb&`pTaqE-|gDLySPALw~RSGWO0-z$zAv z^;e;~oHCyaHBa6_ehrkxc6JNb`|^fW?dhAX;U*)HqN#s#mtY;8;T2_sW5YsDJ2z7= z+<1|EpswAb(1yD%fBk#-Q*6*E&%VPC^R1!i z{uht`Kk_O0mzEW>0LsYMueDVd78}pH&8olc5v!!9QNqDU3c-0H=6P|yrfOwZ&XZOo z2w#+6izvcpd?{|unM261i!KK^0A`Qx(>8}sxmSEYnCs5^hhV|kbWrR^hR`lKTaWbD zL_nW#&)MC#d(BEa<0F{qF(ZAuM&vCk0`yB=jfpm6LVfc2u6?CbG{r)=FCAzbJ{HuO za*fAlk123Lg;)|CCWC~0C+FoSh>@K|*yrY=`LHmhh(%Tn)gyvWVwH$P-!yR{ZH8gE ze97;i40D79mdw+It2{S_e<1TVj?u7dkung*K*T7IQM2qb8Mu3*ZNz$Hm_JPI}v(Bxc;y>%gk{_d`3Zapdl*xedjb{(yI&3H^Z zO?Nqcy+18&0a=fb3si~}p%6NYI|*kL3J5z$XY7$4!|d7&O3tG4yCDc{q2VsD;9#+d+C(?S4+IH{iaEgOQn6*vRGiI;$y3SC zQB1I4Tf$VGHwe>TXSAUa63i*u+ ziy$3Id=s@5%Cihwo@DDw7hFK{e&Vi=>9{jI#j;Wd#IHZ-G7As$0v$Z!;0M{JR!Z2j#E1~WoZk@w15DbsP>-t`iyy!+%~(W%s`KXP;O3In9_T_!%D^>6!y47@qj+4Qrfq9cUSN- z+FaC~Im_^26zimKtB*(&kud3DddHA#{Ur3>$q2g+!^RibR zGJsdrr`IiE&03pTTE)IS+!24L+7#!0>r8llEd0q;3%Gi*TScj;v;Sa^G>n;%*W6-= z-Hiwx?eQJzO7QKSpfsrf|OXn^)vmdXFmkv>qIE zQbv9F5onKRG;D`Zd7Ggev9IEopqn@=jwwTSdU!SzS(ip^%nQ~5%63sG3mcJi)A;>b zv}4SFH->}?p9kl`@X^WC#TOi3XP+GXgmxMNI^mlB`fDGv?^FBe#OitRX06WypD#H$ zi4S21k_u&CY=Q$z>|iju=)QqQ7LaXr@{XhF&<9;abyORl6b_yXuhgio2bWTx&M?%U zONfhUV&uzCxmh63Lo<$Pi=Y?BU0?5tj`R+v1Nv}(fU;9v_Ye@4oI{E7*DOeemTLl$qt{LNP@#zC_u~qz0 zWBzppdfwvo2KS%8nZhMthrRk13~O3O3&r zhED@9kkeazO3SNXZx_`TKkk-}=z%T`>!JzQuk9Ovq2~v#8TJgCfx(^dY(3J*Tj7nV z8f5x+6@^Y*-AiLl5`_)OJrN%aX*)DpQ#(qN!(VTC`!*G4K=W7Q%a$+jn}dC=EraVq zBMXiB=H}LCe!035cm;ri-0{Z3~eKLx3U z1@idI@WK!==elg|BAm6D`Xz%{`5eyh#wYW$1igaJZWMrRnNfEk-r}LQhwe<2^rWme zVknkT75mxM%msE~gkjR}EU-q-dFmSS=ztB)OJ|hCpaisWQsO|Sa%u##_l^d_jWeU= zzls)NE|zW>z9y$v57j?72kJF|^EFMFW)$#kcR}sFw%;+dsiX1n^EH0Sr}==pW6JM^ zkj{bGBeWl)oFmGr*cgtuo&}`y-(t7E;>)lPts7 zKow8tpfpKLskHC#wJGc2)$ZSA<_%;9%q#>D&@w6z5Yhj?%v83sGO_(9U3`{7o!3>- z!1Q^HcG+hc0KW#Lv8FQX3}cuRn2orYF}aY&E zS~kAA$vvvOj;tN0v)*)gB;uTZ@1g5@UwRBM{Ebxnr9ckH77@rkM-drQAcY}Q0zU4O zY@eshNeok`hf!Gd*$qfG)Fah9=g}%3@(^7gZ+?wSF>D=Da+d76_n8?fbG?vyCXd!U z`MpphbOdD}ExqE4fQFQv-`H716Rex*e4-x1AS%h02C^JRu^kVxIs5Q#07z=Sp@-r`u zU7RdjSJOI*qBi!l6a#O2ycDj2v!+bX>Z3D{=rx+z5^*upaOj6WX;BQy6V40bXvDE* zevr0jhfI)VWZsl0!QB_-({zQd96r;Ig9a5jTvP;MfQc z-!PO0?xkBYvhMJv1$LH!HKc<9N@@EsOw#igH6du|D{MPeFpNmR^lEjuXd1_4S=zr5 zTWV8>GUVhcz8wt1s&~a#nb}F3`FLXK!&=cLY)RWV4BJS`j|v08tpvYIN|6{R7m38{yxVZ*;rIL0TZ*pw?{ z0X8k9#9R>M?puqb(~n`Q#N%0LS-4n>)xcE6h8YLsWp+0Eq%mTeU@_ZWMTfaY6+om> z*ZoNW3aPuOZiRID3R$CGXn~kUlIk8mn?lMoOJ=IW7<01$m3lR8SOV3Mh)Q zA{^soJgFsFk*kcZ6BEYLg5YQ)Fu+_@XeCM*Q<@=tfx;op8BwQm0fb|v+_;0r=}b2Cy0)W=g9W1;0c$<9VeBrbauKqJ!PO}c7Is0=>bgGE;M0weP#Z<^)! zxEehOTRWVUza*8R2Oo~_Hu)c3z%s}tS{hD!W7M5L=E8FeGws{737{#G+OgRRCGJxw zj=44q0QaWhOf7SN<&&LjpIS~tm6Z!bTlS{aFU_pSC6Q7QD`M@7eF6+P4*Ud9%em+k$oX-y9Ci5ApKU8sPAY)Y{?j6|phs z!TSeVIWk~g5nT>gLMuq9J|2~{cc;3wx zqAZq%;vRH6f+lynp44++Xg|EL{H1(KUT-LAmjp4Wt3Xe`k@a({W7ET-_*H1EbKs8Y z<=H&XH#_fG{^i})(z5JW;9l)s?3L%;K8N&}OY^XEptKYQ&tV{~X-V&NY%gV3S5rb- zx{X}}9(G2(5UX1CbCSW~Do??gEvoSTf&K1l1J*A16t}Y)`S;~` zd{Q^%;W>_vr{_qthiH{TScFFx<5Vdd)-~ZO#3BZ9blLEzfi2dq#V|#o$86yaCCG z26X*8lN;9xhe+PhZQ#7q+M#j`xxrrPa(zCNAJ-O#&^td40rnv;G~TfYy)HepnOyBtj`ydSN>aL?{v?Yhh{r&06y@Zu$Qjux3t`_t(o^9&q0&; zfqawih|h(S_(6Qr?~u>GCh2=~4L_ORF%M_@bB#W^-$4)Q`}GVznch(kYx?z!J~`iG z3_iXNYxlMcKUv>#53l;Sj6QkaK@Rcz`3yf9-;ob<`}vGMIo_cU_4<1ZKUvrcW4RvAY4RoRCjdbB^^mQR?40T~!7-|BRm}-KS0CxUtOm=~6 z0K0$|CcB^(z?Hun(^a4w;3`1o@TWB+xxrXg;QVA&?Nleat&!_COarvnq=x$z!V*Rx zulEf$(R?8Ba*^oAtr^Tsqh;cNU67eI)8CZdiGsgYXsBE3z^VobYi)9X$XT3R= zDO3scZ1~&hwqAo8tZ{?xK zXAVG%NdqJs^p8YX1Wp=UgAfE@#K2%(B3xq$Rs#d2jHQ|QZdx6^&U@$RQ84UHC0;plNP4r^|DqyvZwlzVP zFk3f!VZm~UM>*8w-E#6Sy?^Ksz_e(be)g}V;FV%e};2Lf8Q ztH3^$q^%L+vcWdV9$Pnhb%6B>k2?o?xj+{?KttRjMmBaG;@sD%$=1p7yatVG0^WqX z^teAs@t(M@fp`guc_}i$hxQ2Tt_FY)h&g#rdq=JvaC2vG5CRn#T-H~NhL2|Wdj*4& z7?V+V!fS|_CeSM%?~w1|3Cl8Yf%k*a(g* zD6km-NKnd2G5oXrNJM!B?cNc5!q6i`>{Xk9aw#bh^h`dmd=*1I1ryZ30dyG6a0ss! ziRAqH9|y@+zzlwI8e$WVBak0%F_B;BBm8JkvCE`wWJqfnQ&+$9iwug9m&(V z6fmMeDn?`yUQRE9~iH!Eu0r2ZC-dyp*i zyBGL9l#k0tqy5%+N@M@C#i>2W03p`>JW1&3?J<{_(}Lo1op z`-^i0L|R&Ml&b8~Kd699FiO-T-b2fj16Mbqy#^WPV>~P=t3W9sr%CzLYa!<`fCaQR zwimD?m41^Q!6h%+`!ht-X!H7e#{0DuaA7plgg(VxO8Wx`Du5GqfB%J%0zraOSyL8P zRePb9qE)62iHO=sP7Xkds#TE!5%ehdg+SZHsRsVuhZH5gg@jaE!*1x%Q&i7%{G_6O zms%OS>`47MBtelfBJK+2vr`KTHDkC#eM4VHNBv7o1ggqY!rF_k4cZFb4;D8J$;-wf zuOGefl@vqU<_VnI2hqwz!z4I3mnc|G7xg}MUIR+&xr|nYV5G>6Iu@FkAU1U#_&r}y zuTDm+R&lvdU1ulir|PO_%`GbZQ}Pg2ey?P%{w5`MGNPZupq?RZIZ-U|5L(R6Z%4PX zVhF-07d17=AB{-cr;)qA^T#85v3jcFAz0K_%8~V#S3{EI5#hw?^T!S?rE;jLgM!sZ z;~|sD61Fmpy;wJ;(%OzAaO+vSG`Woo$5GbQ=810qYD-4wbE<&FplO8Fs^kSzKqP^^ z6RyP=`lq}N40Tg|(d3iS?!!;)B~Zo2#2M=nfJ0)gAR?aB2pnhe2RB`{j?1^vE6OXK z*C3Gxnk%M^f{2gg;B;*zf=nt{RYG zl4w|D@;_Hb@-wzI2M(gfK40!afcC%imH*~l4S%2GUSVXFM++B^B%93AAe|yr=|#Kv zs|x2xKnmDLwV)-XKZS^bwT3JwJhRP9b|RCLY=x0dylv&D!1*>6XbjOjreS_a1O9OC z(~yuxC^t?*h|K3W=wnPiIGB@66dp;ddl7kI)c`GO3uosh{oK`0=`)hn?rA41~7ky;C^!6=Pi^ubuk)w-OTE7dy zRH2dbM~0Rb7Md*#^{=v(c8i^H24-oItLJ+=RaS;M5gemkVo!l|D{Vv4WoA10#t>Wu zhincUVCVIO{+c8I2RM;GGHc&~Y%5YTf%D7Nk1+L=o#2XXOLA?HCC(ks)&X1?fJRqmr#*4(3NV^+P|5@Y$Mv-p@_egRNfqc3YFRFf+n%~ArK>G4h{;?o$RTbL>-4*X-%!@A1gj%Pd#A1Ax3LFWRbw?6vESSfGP59%o5Ml%NfH%LIAfpX~D@&w2ZL)95Q zv-pyv@W@m4^AF$S!MJVsNXf4#a`F+9T9mi)i4@USwIrkge6Abhca%O_u<{Vuafz#< z$WPT{G6)Ale1StC2f?*mrkdqj2ibR+ub|n>q?`Dy{u>V8ox#7$q3>D+`xdQ9x9ARu zJIyaB{j104Md$QJ{f(HDbv4#XDQc`a8-9K{)sxsFcV=f~jf`5_;r*bqlp(L#{#ivxl zr8XU&Z@&J2divsLq%}5FMbG$B<3|XmU1_YvQ0Z5p03%hS^cB!03%s}RZ(y}9fq$TL zXwX}Ct-jL*F+xZ@2UiZl^Wc;d>5w04XlttrvBs7HiJ`U56Wg^3uaFuf6Rw>oO-}WC zh+j^NYUnRg39pxvkn9YVh4mdcp$V{P{h6S%YpNCJ}( zA5Rby6Hk*68`mK?lU=nEgO(}Lm^z?!QOVYlDkzWBY-$euCh9f`?1+EY0WQ`AeI}7= zvE!VtcpbQo1waTJ>kwM%Yxb&iyISQA0ihzalq6NA514;JR+Zz-ym%Ao9E=xAQ<54> zRZphI$;ymlox#g9X$Dmf9MicBD^-uIQ#cz5Z0*0&Oq`w?>A1D!9*a|`x~Z!p8=IHM zR)(gYi&INGEvKHg9E|%`wl#OA>HA%2r=T?%k|;@Vr>gfVM=S$3WzO`Sh8S zbj)@bDLJd&*D28ole*@YGjelmQbqB(43SDpFv2Y|#MRwkHMwAvvY6rVAQt(lV3b9g z6+H5PR!)=FE%LYjCNLM|mnBb1QZm)FUR6o@vu!-rmi7(<$!$K5VH7DhsE}9sS|!MU zl;b5iK4LECT@Q#W`)uG=hgZraR-50=ln(T~@-JP*$f`@0 z8t1yx4ce#>roqZ_vVCKP)~wlB-Gjg=8C9u@4{C!o=b*fiO}4CY3MQfhelc5Kxnm($ z2w3ZyL#k*}6nd|ha5xtf_6=wb5pOE%~)k&nzcZtX__>lx^!&t0Zb|~LYSCA|wfJ@09c>{< z7-;&T6B7Fz041HWF;e?AdaPhQ?IELmHQ2ijk_ep_-Ab7ue995!@mnFt6eb%y?xmNZ zC~Xb~VlEvbh-$?Bm|ATEiD#hQLrjSs0l?MH2g9T_R(_elD`3HwBEz7l@-oS%=-6lJ z!d!7=DDAg~-0a|~QtfFTBGyEk9Y%~=hGiz@r{d1hQ816ubD??KpxREYf$4ZQT>%_( z=bw_Zm4HdCrN_nn;ZXP2{?mzYN171aOL2xvf(XJ4WJZa|b9|iHAQ*N$PI=<348x5Z zQP#y96s<>_c zyu($1k?IrVy4rmAip<016=Z>$GWWmUk>#w3UhUC_OEbu6x*`l0F354a{0-(jBD!4U zFP8Z~UF2{(G6XX{!e6|WIQjb*1W7h?y?Qf%$G15IzuI z2TGdvpjTmb`+9f4+yG!hLqT*I{Ol=n7M|~ z2Ntbhxdv+keHu92Q?Tx_ZJ}o!Si1W~`y#&wJC7%KPcujsCLTHN7)^7Lp9qX_9`{x`gpH z2i%ph0>xS#?FX~wJWPXzYhp0c1Z!7`igdxNToWuemnp32iU@hZCpFW}7vKyTU#mI) z1!fSz3#fQ!w=S9ESJDf&cvp13m}+Rj9c6tNN&j`EvU%RB@9||bJ&!Xe{iZa%xHS;_ zQoAw)a77V->Pj7)XK;_lM_GKnm2he?uETg=EB?})F9`bP;2770%Hg`q>n8#s5peqg zc2C9!e_GumfUXEJJ}>Koj6*sO7I?S10}-IuU(pK|0x1!U{ifDXplJ@|{-S^?wHyfc z{zBjuk;gByJo6Hirzt}$rz<@?OaXQkKKgP!}73}<%nuipuzC8Xm$$2g`X z8JKq2E({IA5}x-f?~YIaV}H#qG!0@h*#8^8ab441s6!XL4j~zo>dERrC6JT9r8gzp zo5neK314CFZs_??*3q=g;;cX4dU3x9lC7b@twZ2*^*+*Qv(l350M!;_8j=YDzMvL`Bti|C6%$l?OFGZMqp@P zs0YhiY~KD=c`o!8ax#GKiJEhv1$ol1s4WZ+axw((iS-UifapMtCuP=?=B>iWGgCTN zG(q=bc%5Pupi<4wj8g%QGenC#ijQe+rtr|wJ}Z{IOP!76{V8ifGO$3%YQANmFitv{_M<(!=mR80>sh%yaug zzpw+p4REug?IuiusHs&T5*w8$sj0PKaiGe19Sn54%CRoB_TqVdK`^cMCX7OtMP~<2 z6PQ@1++ZjIUYIJy-KDeiCd8t8A*uEcZtj}>p+FWyVVM&W&xB;|p$ew#@)XO`2_{=r zSZiQ5h6|8WBXP;WFsB4HO-@EpDU}O7R}h3a8naDM#Ko_y^?6@>ZTeopoUDEaT*T|3 znz{YUbbcn+Ft?)sx7;#1ZniS2O()ovZu%af8ruA3h~5s~zNsw!{*%-En)O4BL3)cW z|AiGsoFW6R?vNE+)F6CDQHF=OV}^s+eCdg@QE6P28ZgWPp(_5E0sN29MWlsdaQ{yB za653R1Z@o{SuZ1ar(3^x8;3V|wk%Q%xwA{wkZmAb;&KRx*nmBaCBTXcs{+lqxb{!F zpr=A`fi-^PWkJf;lhhzoAp)@sly1Jv64bxz!8Q1vt~#T(o&R(;aYTWz;rP6JXCvO{kc*s`4}3I}S3-+hLe{_N zLnd28#mrI@UrC|jn*)Fxbm9}Y0@<>28#&IM0i;Eh!G^8OsUxKv+$PanaC@(3C4`P@ z1-VYzQ*1w}Lv`DXk^8e^4amz54AZ2I)O84Bx7;gSQ_PEZ#eavUK{+S+TsmxA*Z!K^-SSzj{WZ%*X|kO?{6D{3dE&r3)yYuJ@cL% z{Sx2ey4gMp);oL1(TW}6tI=hLg^olmcAtA|KYGaB>$P-64;w#wJtw_~pqov~t@2*E z96bx!3+A)d%u$##O_(zpF{f9ePO?Q8c2DUXANkfF}e+-siICC zEo&34rm2YBi=k&MnG%pQZ!x7onLJmgi@^n;F{X~)7nXl-_slu5W;$qKVa=J9FlVGO z|5AH-dQAKN84m}9W9%(~?c=7|LOS90JY^MYu3vB_iC?T-kS;OJwe~dRAN*{>nqh@} zL}SUULCUmr^sx@m0{72 z){9)uWlftfOEGPoPWBJ(q}z)CH=1oAzL1`rFyXR{2)0Mk(vfHDxJFvIYgKr){ zjOQQIV2KIBPX~P`55o=#jt@X4TS^B5WrH9&FiMY7(4&+MT4%#KIe<|QX2=IN>0``> zLS+LRWJ9wgf7T3%*u&9=Lf6AsI#5`T0%*rf>2rY{pjz(5qSRwi8StqNe4!T>Ge|=k z1t*SJx@Z0wL$gQej%2Y%RvX%C2jd-fxg)6!tGm~J#i8>*a!0guha^2RNe@jk(%KHh zv8Qq!sG`TK8w08yl5hu>9l34?xV*RS22DGV)edSq@azVz8{KJ#y&c55$K4M2w>a+e z;P%ep6DiLC?vrh5^h}-2JK%W~Z3Evs z1$KbQnz47b^Z?5m71!kPo~9Lj&(!3V7W&Am8f?$(@*da~(s#VJKW<&+6|!nbZUgQ! zdM8q^e(PSU6|2wC>t4$hpwB37KkiE7GXrOUZ$0ak$_v`h2=D0jN{M^6*J#|=H2Q0l zxt4)U&X9sTrRA_DV}eN?^LA9bo6TwlyouEt!fMPZJuA*oi(*0^Q!h;@tV^s0G@bq%WiWi!53ol2uqGv@DV zbZkyt&JgV)t!c|Ir@rXdRYHAhly;@HiKz^|zNb>HY3&L2D!ezLr&e!rcbToB?b&LB>z(x_w>QV9cyE$-)vZzPS?5aXi}xj^ zH_oSMZ_ala&xr3LY=hy;;w9>v@k7Ng=BpOZ#P9sJf$#aJ{^%X;D)<`*{L3u%Jue$0 z+DYgnGhsR@hIQMb`KUsa)D1(&!>Z_4%jNk9Q$#n%82SJ=O24}>ewGv6(B0%fdTT3v z#1pO2UFN`gYm)rHD@t-}73{%hM1p5teH0Yq^onpK$h%yAG88@I-7a0+TQ=;&=z-@i zH9<8KVvN-Z!bvo#hM4R~h*U>b5A1zmiZyWz>MUO9)Ez%K zswuyYz#c5YEN2qeZ|^+M9fK24n+}sDa3+`JhU9fF3Fa(R7JNE@ERBf32a#t~xgLWT z`i}<6{SR+I4T$LpKy&NMie6BGIh3Y;#==r5?^wD_vd%9U2UF{cSb>E$tk)*xpPb;p0-8BLqYGWI&jonUaYcJ>` zb@ge5I*lkQslJt!5wLX}hH9_uS`=*`Z6EOxa@%X}L9*M;F_^eR*7fBz{E74J9F7HC zd02r4qu)d!djH8pKf${K>ICw#a9IrbxMcaE2qD6f@yB$Nhf-Hb|IWV0^Z<1^ z{+I4chAAVSlg2X*DmNN5jNbK9LF*$9fX7osr30K7fs)q@{%WD(OeD_a@!iT&x;Lrw zctAQ5VA>#KTz^(?4(H>P`7E^ogkGS~M}+7DMDpVm`jEQd3~!d{Gb;mzJpe#oxZu~0 z`qVsdw1-Cnq&|S!6EvY@J)pM7sRMvL5W0sM#YtSL#QV7$I)hU0pLN)qevD zyp}_SvJIEkT{nUvpV-A^I`H|8*^}b&d*%3XliKyY_u57!R*5tN`oJJYklR2^bWl-; z9XUJ}H$Di8lH$0q_Ms`ZQP^?Oq_DNkOMafpYXWWSTL2=3GHtv2!@79l27l~aUJ+CZ zIJftL&niVHXm0>6xBP08bBod1Mk|sqcxJ)l`7Y0`(GF3%6nP>onF3zcf$ncvu;@y% z<3&XF$vG`*-47P%pe!0*CONI;uEbaJ+3^prsvCFRvzuqJkwQZLpkuYzXTB-C0Ub*> zkxTw*@(PvG_eBQtoMter;ZWs$JZT~a%(XM9tq8LE$qZa^kza~VW^vi)tB?}M*lddy zuqfT&h2)7cksH-J*F1gmo3%x>xw4mU=gn$%M#6#X41cAWPu+u3=?1KPlU4r}FF3tk z+w*#C#(cuHC+SXz4djFFdpJXQdn|uQqtEIK+Z@zj)heSLW#p9Et=6c{)0~thmC6NG zNjPI_JQOjfC2uttvJMI}m;(%F0@AGLSU@v?lcF%Mf&tr;?2TTWO&~E2_Xb;MxQc8j<(2Danl9-r4P3{FBTCMsPwep*DDp2U`J+K)Bfu#+^wFUjMRNTJ z{G%p>i3@GDcP)KL=)qoHH8Bz{%k6u*;GUmzJsc4c1U=W<)Jl+Lu({^ z)mt9NCFa>xyp6h3@^-t$iFzqXkKL^)ug@dHy!PscKlv)Z&|6u1{*YteY^Mj8FdOK>^~ z4Jq0^8VYOSb+CA_$dwld;1^}p37ZjD3Q zjCo{H&2J;NiceZ`m7CC)NuJ@Sp5Z54^zti`(0?OC{V)24bnApRR_fb+Fijb16G>00 zoyLdo0*4$SmOGEa1D!SxLGc9qCB=QOe+)(r3gd1%TpmFjF1MAk#+@KpQ^50c9`M^! zf{eA{Nj}k=^|Hg$!O~xWp|<3`Ul`17aDcX|BF}T#qA*g%%+DPZKaq?_!X_f~qP56r z;_MbNKQ^;VHC4S5Ge1U*R_|LwIJ0&qy0S<_C!Ly)9-EJ#A+OktG)QuyPBlo7{Opa& z*s^RgdhI5fWwd=IC%6;!{O$wiUBY8Wd>pA|yi18)NEtZrO@GNswoPc8r>x>D>yL}! zhtDn%OEbY2LXH(gZ(!(zluRLxByX_Ef3U`I#ckOgGM=+c0%V8j;To7ls*AIu{!B{0 zC6G_hsJ=Y4TU5Sk18dxT)f;5JJ}@TaJGDmKMz5*|&Z`Q7Ck|I7!}p4kdLnaD*ezsu zXJOB99rN!6F{QxkhdvNYtMCSjOpev7zrm=I>+#1tkXS4C2FgsX*_S-fXcu{dKTrO% z&w4<*QjHw|JTY@ue*=Z1=o@O9#JdZ0#EvB=+ox%abW_1)3u;iNhSma9xnKJBg)Z{} zfNP%Fr{02LG|tVCik+k&;m`J^iaESVvJsRCU9CjgtfGKqO)%IB7Ij_UCY8oU{-Nd@ z+O4jskrs=np_XZXGF>ez4G?k>z-n~5R3~C4+Mpu|2;9VVW;#jq4R zuXY8B%Y+SDo}~}oGPQD>9s8o_T<62T%&+c8ff@VFcgOHjYbj*oB^L6~PaO zo~;y&bN68m4)a(ILTQ&U>G+V>u|s{sEN*yXa@59#!auRc-nZ7P>s2LK__mZOuap@> z2e+B9A}+}IS=ziTHZ0bXAiGvJxZy8x;+=7Nm28Ni3ud)^*^p!lM6I&fz{+3i#8d6? z%E!a9`gHC3cK={&+g1}Nl6Gn*8FuvWp^|0CZ@m9oWakOfb$I@}pje3x06_ddi|kY^ zY@KBc?Eh=+K+Vfuc?IWt_U2b=#|9nTPeQsO5>03T3|UAUULQ%YFDcGEfPlM7JrP1p z+U4K|41x%H*rj@jCG0^yDn_Xex-3xTDty`8(wt*qX353rBU#4zt+16b%irg8GqVFh zjxoFY_?~n7&!=zicKc&tf^84X9#I#v5L+vVe6SV2)d;`;2B)z@Np_ng?JpAZ}$c^2N}X#qa&C{d$_GHcw#={V`!EooLri~pr!;4pT^FZt}{-lMuz0u#}o5Y?r54+KK~`K=oas@Lh06 zg)=1{+MTM5&B=jFhOCsnv=F5Y%gb|hYokhI+^4}ZTRmtp*SnEnQJue^19KFOV62%%yf|EUkqD`BuBEkz%R-AJbsBeaLHgGqnF8{*au!g9<>*sm?v~FI zP*4%u2Prf*_ocZCLX84dZB1%1t2Yy5O==Bw=4zQRWlgeovp%0tNJ#Nok$5G85Ddz) zON<4L)mznJIY==PsQ z&`kz6y-N%zK=36F(-Y+m25x5zj$s$)?d<}Bh{hw$7g3pBCgtiJg@q@})b7-fhmybS zOzO}!BJGPGc8*n7{H6h?l~uqg3R1bM>}^pjOK8c@I4>sT1tmoaUc z_>PsPLn6|2G3CrF0a)MA`M!1->D*V&Fd;JHEGGP{ln!O_mwi)FL&15Z2A^V@>}81u z8RZmXj)Pbx#Avwz485ZGII5aeBzC~18z9_;Lb09`Ku6@2JLWkU=*Z@PPqFo5{y2*} z*X#d2M*M$S|O% zx6BT7AF1g?v4!s!KviJGYv>KNQAH2kwDL8o>_BaOCK=PGR4BGzu?~9V;-030uG4$t z;i(;E4Rb4`-%kZ5=Ytc29jMA)n0@NcX{*cs2(1uUB_R?>ORFj-YST2E@L&;3SO`K& zdzKVd8$G1W>%qYZ?*Kke{ViEvR9Gjl2PuRVe2U{3_gpbCil`go*wYz^yCrIgL)6La z_RvBUp zFfTfk?hNrpWuCcuT|U9L@+gA8`tfp*A@jH`AJ`+@4M9{^Xp=3|DlJFd zk!qqb1XO@)UHE+l`%_Z4pz@i)ll{m{x6%zC$nIJzE_AvW6uz-xXA>|G?@}*xmAr5Y z%rkt$qcb-NUZFF?vY>F6>rVl@E(UN7H>BWS7$9;<9=@sx=NQhwFt+IAhttwQg(j=m z8)k^V))HKEs>+y7C{xO8YX86Isaeq@)1Jr1;c`irj2txw1DPR$UE8~nqBC2g)&*Db zV%E5kNxV55k$D#}c4NWO|5||Z2kPKE9rRlz^>T>1P7LBC263Tr9JF^lCUt7tT;nh5 z@jsk)DQn2n$)?|%O*h?kL$)9hpciIXcXheG#)eeXQetDXNvh{N$*}ckO8?k~O+c}X zU^~SAE$R0>dfr{qXg80%?y;=HGLU!NsS9vwGrT`nbLcF19Sy3}4_s;iwXS&(s}8gI zLNl@*?YY0^a2G6`#6~u)!h878f4lD%^o!U^L)`WQEtRSwE=q4UV*V)6@pfQ|EP->E z4VLaQ=P#u3$mp9rrNYxr{%LuEH$Fld{l>#U&x;*jp;xW&(%}7t8riGw9N^y2-}9gh;Jyu7pi-P!(asBXP@SbT+K{`IkHNMa>zJc16(P2>h znD+Y0^!^MG5kB!JpYj{pzD2IdUGd8*?VXg zLJ3#Y>{^m7AiCWS(|e5 zFIY!((&XWSF;?`tWoMz7D|2RoyQ5qIwKLt+l8d3$kPMAMMdJXRffX~Ag@l?85YF9X zJJ{{_v>csX2ADJHSxO`1^xWi~0a;||CZ}}FyAm#=7e~CZ@t9#;G^*mdKls4Y8f>eqO25_u^DYmQ9%4U5utJLI zi$KyKoG}^=C7qnqu#p{2fdP_f*rQ!qxlmSm)Ws00b6B}p1i3BTVx6+|NLC@}Lzo5^ znWOT9{R5vF?rIUcjD0fS=p z+*?V)ASV(d?i1I=`6s=qp(b$Iop@k>^hwrYQ`pQOU~&__IpnS&jiB4VNkoUAv)dA z+|Tlt5U#?BThhqR{HHi`i<`9c-RR0{2u zX^E4g+Uc>KwzQ-3g8IfppR4Yk^H&Zxsf;LlX_C&_4H&s+atAARq8eCbJkbcBoE!eW zuUbPtgW+p6;4Y-4N}@1^*niYor8H=4>k?W-L;-6Cl$Xp7gFsnp@m^TVPb!hE6;GURA&`I6S7&JI*k2R7+Mwq}zy zBQ1tln!~P^4E|WdIOm9N1XMSpHQG%&+jZ={nY^p_Np-Rf=tnd9WGWoM-=>VGBy?17 z2lPTamB6%3z~lEyg7Pt1uQkL-<~(97vDW*KqEB4ZH%e~Y_VLuR=%x;Rl(N_qF;k}O zfbMGJjYE-UXno}qZMr}BR@oI?EAi5q@Ae!|4cPDEb7+ap2xuEA@->Dt-GQxh5f}d~r(o2CQ5)XBgSkmic?y88$J5#AusHQd1(gt=qL zMFG19Jc18b*)G!^iZH2BIO5%2%TWIPs1V4BysKF@E|`qK?d93Llzb~OyhJ&0i>_HS z_7!L0YWomS>j+Y|Zc?;GXzQGu7;FX9V)xB@_R{{JV%|8V&@B}v^1`Gp$j{zA}5 z|CdS8*4V_*YZZgMf7eNDJ{~($uo0AfhD> zMyBh*QMv=Rc4}hcD~(qU*TXC$MZ!N>k2k0p-qt*q$ltU|6j9lrfL`GYy3;@aA}Jw0>XyiCO{(Trr+1?jPNM%^MmaryylrmYD;Q zE|{cKlijRWRyv%qZ9@?DUXC^NaoSlNgk@QPTD$_+UV`hgNh!R_qWpG9dn~yYe5M;M z-CNg_3CfF3n6WAu&-rPCU>aeLei|&y`Xq+eXez23b<4Qn@q!^Yoq?K>hv~zS7n9o- z@FE6;d50Bn%OcO8N|Gu;BclxsPjRnA<6IXk6hTl8^dWbWO?pG;gLETde9q%wOo@Px zP#Z2&c`Ll8_?ktFWsLGc^A?fwzYy<-ywKgkcg#QRqC7akTWr3O{_jARxj0ss{*ozf zf7wL;YalHgTuhV=%>FBoN>;y4E$F_owq4ZFBl7*Ly5#bhzrB}7awQF>2duS}f0W*Y(NhwK@Ty1CtHXWh3OeY#&S zT>e|-7U%QRL+6i}d~)|s;AB|r1g_E&R#eQ5Ji zBiGN4HeMy#dT9+M#2Qef;@!6BTUk+}J{p0L0Rn*|jy?L+c6BtWswA1n=a-Xt^xS0nsY-Rl)*TGz@hFG{(x- z5zsG7lp$=))*f8CgSI#+%b|#IqoJdJ_B4$TFnIHJAsr|YjlJG1pBk^o#+Y#b+R)@* zO^vC1Yw8DUaam~-b*w3Hv_$;~*sYKPmJIBm39`07)Pbr9vej#qF&TbEZ`f+l?#jB+TIj`J#ymL} zH#y!fQ;0gOPN$c&3DODF%-{-6_dZkokt^b4qW~x9tA}E$JQsqsTf*Xr9jz%ZZMGHO z0X>b6vkIL?T7GQm!@pNT9*qsB*SP;P$3C~rL=2xxFp|W}E@&z>+UM^G@q7Xqp-@c0 zXEb<_De$*_zPq_{ zH`0k#63CjeGNz`cf4gTLbK4zRecx}_6#mq`;RRT0%HHTB&*Y8@)WY`)Fj4IUp>ZnI z73~-!HRy(~#F27FuP|*zui7EI0kX#`=nTz8^RmEd4q*hAo4IvcU}o%$N9`lh6K{*n z)I3eqdrLe+EK|Ow4ljvTsFB|31vbOYGCx2r={nnn)4@rDNSeboAM;op>5-H~94a)jLql=z`G^b{+EN z?VEpk>2&L7GJ#=yY=q(sRmL0e1;8{b)VlsKDwy;zjRW zu@{ypfyGcRA#+7fQf9uaKDTcXg`tGa+S`-NISBiqbHiy&(Ewmjou6vP-sKRKl|7tg zPAe|z*08V1h^SOkz|d6H1s3Qu?!8$YP*l6iah$cEJoLQrC)tr)Dw^UwMU{9C${KNg z!-*m{G3_{qYjkx*8dhOUCzQ`&Hdf!LHFYIaX_6vqqwKXX`KupjHPUtr-xJIF>Cz|J=I;m;sxt zI{N#Ug%dAb)Oa=L<9hxcDq?#Uk zx3nl}M08OpbtI}Y<=KWL0N>@qI^Qy? zHJQ1m`1)0%PLYP-c6nCQ_cd9AqKAQcaaZuurS=A`PL)iHyPmCG8R<2K<~t zh^dGp(HH0?9F^c{ew~yJ{7!Wy0LEUvb8NU_Ir}GA@T0%`9b8b#fF@f@k(s0od4aH_ zgtdl-4F~r^g6|8CY>}tTOs+;K=hu_5_S;1`ugFJSf}Cz4RerVC@an_w=NqSiq~-|n za1IF5A`loX;+j5IA7sov_k|XrK_PocWD}!kg`V_WPM$}~d6poOSV3j{9l!&pMBQRB zAI*+PT4AZ#FZ+-9zD_njUOu__LT$R-VRH5dq`)*rH_;ijtdcXR8AL(myGiDdAi2#N z=dSxpq`jUL>qMo940{76u{5dL*&VJ2xjUXvOSnhomhte8452R(k#4!BbtJnqW<9>E zcd04XXx3l9fZ4F~Yroi8y@oIYaRZ@*;0K^h zq2WK1PUcVO8b(%tEkg1Zp9!OR`35n0M&3z!rES^jh70yfVz}g8aNl=U8 z22g4ym=w}T3-Q`B@nY$4PORjsLyKVYYYqPxI&mkYS(zsn*~unme*PQR_df^&*4&fD zjlWROM5zCjFremWU@vN5VtMkPkH*}sl4wrhV7=g56~!%EB_d=b5S zmCJMM@gHDD-o(D|?=N_Ox&tXloA#42k?u1wzFoBYfMCGw7oq?GzE5;y2eILJ;lr>$ z-ml_>TLy@3BHq-7!h$rS8F37*Hrj(AyauRwk>Zl(qs75q>4tF@FYR=OqQlf-`-P2# z((3PtwwF|!&A(?g`{H^|Qf$s$c|tDa+#>;U=}wqo?}$6|qmEJ(GnvYY7>mr&>6M8Y ziqttiUXr`I^G(>bvFWOuy~eed8PR{t0vanz=(ZeCO~n;#mNYMkF3DtaPZ`4EGu;?C5)4;Tj{*FLxoa0Ckwuq0kDIsEoqfP)n@%e z+L@H1q6?9LBsH`eTwEMuJfLxbCEQkE6x65MF_v=M|9vwh4w^}l_4mUV-!9%mbMJlH ziEu&lTQq=Z7Tw_UEN(5&F7L=_%!_PFDqNyfJ$4(NG%w(5X3UOXu@JlSYHnB6( z9yCU)-BpIq8FTX|3yoEfi*P63b9jnyC*Fg0_CPv2;gC))W{Rv!J?P0(M^F`{@^0?DCV!pN^0G79hX(5YC}G)( zT0w`(qi-zC#i^$bS?qG9jL1DGihO)@eDov+2*C91fEXi-XYYKvZIYcCC7;wtHC-3c zF)JtB9P0VI)FdG@QBMdiJ%l3WWG#{j#(C~m9pg)4A=BhQR1s>N$@|O1S>q}`JEswO z=@)q|D}N8^tvtuQIG>?*=N2K8Xtau;YX9qgHOR6Cy#^fc36$0Fs~+kq{{~dN;&`Qj zXz-@;^Uqc71u%dvQ1wM);X;@ooila-hn?Hciui)`16;(NJu!L{2Yg^HJT7p}`s5MY zX+5gjy%!7ggLc`C@d0^g019LaQ7!NfrFkuC@L@hBVk=}oZKlwhHiHoGl+6c}U|xXt z053%tWj1V=(=q@HN+-zzM;{R?HXoQ?Sap|PgkrXypY{u3?hU=MU${NJbQmbUgy8tJ zPMixL+9tKdkF*qvEXZ=-=7&BchBV#~`qAFT^p@HK>KURn;hl_jb2`)jJK=CJq0n*G zKgRzfj!~7oiFvU)aUBZ$D6{5(Xxa|Jq#ca$qR+Y?2pn7Hq-loRZc^7AU}m0ckbHB% zee{kHv_-nNkXL>yRSt=41Qy8vJdzG5c&dnWS6)$4N6U#)F5X<&bMD~TlqGn~ru?N2 zqj5y;CfTWYHwb#q>Qe3Hkz1`1p6a8G9)p|Ds>wfvYWcE&X+d@Q^av-zhZvow5XY_1 zAZ7gd_tnnL2YJb2po>|o`J+5c-O$?CmNWPL`@dO}{KqICEAln-`a8x~{`QtM|8rmY zA9c^(#8|}L$i&{+!tTGIb1}+Wibw(oJVLg{8nl6c!l2#w9r3~l0)PS#`2i4=5F+=@ z#7YJZO<9}L{tt4W&^3$v6(>aSzLCAJf1^z1{&WNnH@3Rc@|1PS{mb33>*MnQr4LVr zM+Aideh#1fWyZ#KIf@7|fqj_|#s_+#tJ>ocLD`6%-0{P~`=CD>WEYh5+vqT@w(HE( zJgPXR2GGzmlTtU~Gb>eFh$eXT-jaIye!Y5(@1K2G(JPmo3i$H+Gu%g zrVdb)x(TwmFigy2R7XP8Ftj77hB7giIVaJfIB9L`rkKIhP*BNuGaHJ0G%nDzJ_8An zn`~^j&w3VNg`%bvKwD_dMZI>`oIG+f{Y%42xI;(gn3HeIFqVf>U66ewp*b^VCut$H z-kJWR%^({t4?bQ(GbLi89vZ7(uDT%N6t@qPHYbqU=IX9F4${PJ_t;G89?D7um*=5_ zidHU-lys9^m3S(xz{a?(x)1;v`rfEj7b%whWFR?WBt12Rfdbh45iidW#esLK!abmb zBH_{KFM`sxFgE{_H&fiZ#y@+V$jNN5VOC$8|JkjJF<2~FG!V4|r$e7YRm9q&azVR7 zS#6|m;w9Ism#>LSxTq5JUPvoGtyl(Gqn?jEWd__$ohdkXuf(IWcHhU1-f2}_T1E28 zTXIVnfdhTep)y~x)@^g58l37oGmpD1ty5>D{>yT`%vTDfYUT>W!p&4VnA67sFSl|@*^f=$FQ@>y1@t}`7h4V^ z3cIW8>LbUZU3+K>5F(cXu3Zo3@)R~(_=5>_({>jId|cG)#^}0$E(9E7)Ql?zPdXna zALm7?<}n$f_NVooXVBSp>23qK4>}_DQjXHWIO4X1fqG zUD>Uplzk@JRPGh{?_N&)J?AKz?4M_JdD%gG@ULLbTWvw3l1EXLv;3jN+NdDd|JPHc zHD`A#@HcgGf8YN_H}Rh-^j~yOu4lV7UNA5)Auw52FjrSFI8m_H#qNi~VIWa3L|B=; z>fuJ=uk7J&XP=+q>gD42tpCq=*>HjM z2?+)OumA@D!1h0v0i$1MA`4p=ga0T2PIN;5?dw0gp&8XJCnOd0pB!VS>zC9;Ns9z1 zN{da!djB-V`cTxs9tkN60h+C2=AF)o&>h&+z;I4p4&FCnrrEp0JAC;45)wjuC` z=8c`C)}l3RH##$T(%2{ZXX%&6W~#5vHOy3*9=6*a<8HF_V*I|zf*3iOydw!1TMKm- z-eGC7Zt}FX4N#GJ%2Y={-1B?`tT$#9kkS0L#)#>cN-@3se*HzqPB zGTtf@Kn+&?r04$5I)K?Vd!@pR%pjYYV=py%6Xt0guSU0;+Z$|3|Iv@pUux>AV4v!o zp{F<1y!ejpD8&k0rNiHpkecK83Lac&@`#waiA&=~v=u=&Wk;zYp_zSDF{@wwu;73s z4nhNQm2*rfxXf#2c)cplAbR>}E%-l_ePvXgO_ybYySux)ySsDY;_h7B9TME#-QC^Y z-JM_|c!1!V;q9JY^L4M8o|zxdUF-flRp-=^+O>B&Ok;<|HAaKycNsQpO`Oc7ZCUmB zUh++SMjq6Cv!jjGlSAncaJthN{7gG#D_nyL=go#Y+f4P)$OiNF2Zr%3Ey$VHa#ap` z#eIj0!fytEP8@5z)X2lPm%B{PgrJl0`IfjVlsF& zN$dv|+SFd76M+id;7<9Uu4(oj=89!gv&YV*N7w3KcrnwAA&sgW<27#t9v~bgN5Zs# zPM9_bZsv$ySE*UBLwnXUIIW9b3#3vSNdnZiP>zZtZoU-V9R&xb+v=>LPMCQ{iX&zD z8f)sZbd<(3>g#axzcvIpXYHvFCBy6Bki#z7ml_#a6(rHO&PJ70;pc>TX)7=om{hW7 z)I`{PhZ`Y+s4Gk47^}!NPxw~CpUJw+JRBIq%~mJ1v!y_GSY@y4&XZ01S(%iN!SGjo zpk*MP&0nsKvMD?5Cd+2m82Si4U6!F7b9TzgBq0}#d0LjSa1mwqZ6{5-kmKdZ0=d UdB`$dV-3 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