python-barcode-0.15.1/0000755000175100001730000000000014451372466015331 5ustar runnerdocker00000000000000python-barcode-0.15.1/.github/0000755000175100001730000000000014451372466016671 5ustar runnerdocker00000000000000python-barcode-0.15.1/.github/.kodiak.toml0000644000175100001730000000012114451372461021073 0ustar runnerdocker00000000000000# .kodiak.toml # Minimal config. version is the only required field. version = 1 python-barcode-0.15.1/.github/FUNDING.yml0000644000175100001730000000121714451372461020502 0ustar runnerdocker00000000000000# These are supported funding model platforms github: WhyNotHugo patreon: WhyNotHugo # Replace with a single Patreon username open_collective: # Replace with a single Open Collective username ko_fi: # Replace with a single Ko-fi username tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry liberapay: # Replace with a single Liberapay username issuehunt: # Replace with a single IssueHunt username otechie: # Replace with a single Otechie username custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] python-barcode-0.15.1/.github/no-response.yml0000644000175100001730000000130114451372461021652 0ustar runnerdocker00000000000000# Configuration for probot-no-response - https://github.com/probot/no-response # Number of days of inactivity before an Issue is closed for lack of response daysUntilClose: 14 # Label requiring a response responseRequiredLabel: more-information-needed # Comment to post when closing an Issue for lack of response. Set to `false` to disable closeComment: > This issue has been automatically closed because there has been no response to our request for more information from the original author. With only the information that is currently in the issue, we don't have enough information to take action. Please reach out if you have or find the answers we need so that we can investigate further. python-barcode-0.15.1/.github/workflows/0000755000175100001730000000000014451372466020726 5ustar runnerdocker00000000000000python-barcode-0.15.1/.github/workflows/publish.yml0000644000175100001730000000075414451372461023120 0ustar runnerdocker00000000000000name: Publish on: push: tags: - v* jobs: pypi: runs-on: ubuntu-22.04 name: Publish package on PyPI steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v3 with: python-version: 3.7 - run: pip install build setuptools wheel build setuptools_scm - run: python -m build --sdist --wheel --no-isolation - uses: pypa/gh-action-pypi-publish@release/v1 with: password: ${{ secrets.PYPI_TOKEN }} python-barcode-0.15.1/.github/workflows/tests.yml0000644000175100001730000000150414451372461022606 0ustar runnerdocker00000000000000name: Tests on: [push, pull_request] jobs: tests: runs-on: ${{ matrix.os }} strategy: matrix: os: [ ubuntu-20.04 ] python: [ '3.7', '3.8', '3.9', '3.10', '3.11' ] variant: [ "py", "py-images" ] include: - os: macOS-11 python: "3.10" variant: py-images - os: windows-2019 python: "3.10" variant: py-images - os: windows-2019 name: python${{ matrix.python }} on ${{ matrix.os }} ${{ matrix.variant }} steps: - uses: actions/checkout@v2 - uses: actions/setup-python@v2 with: python-version: ${{ matrix.python }} - name: Install test dependency run: pip install tox - name: Run tests run: tox env: TOXENV: ${{ matrix.variant }} python-barcode-0.15.1/.gitignore0000755000175100001730000000030514451372461017315 0ustar runnerdocker00000000000000*.pyc *.bak *~ *.nja *.e* *.rope* *.dir* *.pdf *.kpf *.svg *.db barcode/__pycache* build/* dist/* docs/_build MANIFEST barcode/version.py tests/index.html tests/test_outputs/ tests/test.py test.py python-barcode-0.15.1/.pre-commit-config.yaml0000644000175100001730000000106414451372461021606 0ustar runnerdocker00000000000000repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.4.0 hooks: - id: trailing-whitespace args: [--markdown-linebreak-ext=md] - id: end-of-file-fixer - id: debug-statements - repo: https://github.com/psf/black rev: "23.3.0" hooks: - id: black - repo: https://github.com/pre-commit/mirrors-mypy rev: 'v1.4.1' hooks: - id: mypy - repo: https://github.com/charliermarsh/ruff-pre-commit rev: 'v0.0.275' hooks: - id: ruff args: [--fix, --exit-non-zero-on-fix] python-barcode-0.15.1/LICENCE0000644000175100001730000000215714451372461016316 0ustar runnerdocker00000000000000Copyright (c) 2017-2020 Hugo Osvaldo Barrera , et al Copyright (c) 2010-2013 Thorsten Weimann Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. python-barcode-0.15.1/PKG-INFO0000644000175100001730000000513314451372466016430 0ustar runnerdocker00000000000000Metadata-Version: 2.1 Name: python-barcode Version: 0.15.1 Summary: Create standard barcodes with Python. No external modules needed. (optional Pillow support included). Home-page: https://github.com/WhyNotHugo/python-barcode Author: Hugo Osvaldo Barrera et al Author-email: hugo@barrera.io License: MIT Description: python-barcode ============== .. image:: https://action-badges.now.sh/WhyNotHugo/python-barcode :target: https://github.com/WhyNotHugo/python-barcode/actions :alt: CI status .. image:: https://readthedocs.org/projects/python-barcode/badge/ :target: https://python-barcode.rtfd.org/ :alt: documentation .. image:: https://img.shields.io/pypi/v/python-barcode.svg :target: https://pypi.python.org/pypi/python-barcode :alt: version on pypi .. image:: https://img.shields.io/pypi/dm/python-barcode.svg :target: https://pypi.python.org/pypi/python-barcode :alt: downloads .. image:: https://img.shields.io/pypi/l/python-barcode.svg :target: https://github.com/WhyNotHugo/python-barcode/blob/main/LICENCE :alt: licence **python-barcode** provides a simple way to create barcodes in Python. There are no external dependencies when generating SVG files. Pillow is required for generating images (e.g.: PNGs). Support Python 3.7 to 3.11. .. image:: example-ean13.png :target: https://github.com/WhyNotHugo/python-barcode :alt: python-barcode Documentation ------------- Full documentation is published at http://python-barcode.rtfd.io/ Licence ------- python-barcode is licensed under the MIT licence. See LICENCE for details. Platform: UNKNOWN Classifier: Development Status :: 5 - Production/Stable Classifier: Environment :: Console Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: MIT License Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.7 Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Topic :: Multimedia :: Graphics Classifier: Topic :: Software Development :: Libraries :: Python Modules Provides-Extra: images python-barcode-0.15.1/README.rst0000644000175100001730000000234714451372461017021 0ustar runnerdocker00000000000000python-barcode ============== .. image:: https://action-badges.now.sh/WhyNotHugo/python-barcode :target: https://github.com/WhyNotHugo/python-barcode/actions :alt: CI status .. image:: https://readthedocs.org/projects/python-barcode/badge/ :target: https://python-barcode.rtfd.org/ :alt: documentation .. image:: https://img.shields.io/pypi/v/python-barcode.svg :target: https://pypi.python.org/pypi/python-barcode :alt: version on pypi .. image:: https://img.shields.io/pypi/dm/python-barcode.svg :target: https://pypi.python.org/pypi/python-barcode :alt: downloads .. image:: https://img.shields.io/pypi/l/python-barcode.svg :target: https://github.com/WhyNotHugo/python-barcode/blob/main/LICENCE :alt: licence **python-barcode** provides a simple way to create barcodes in Python. There are no external dependencies when generating SVG files. Pillow is required for generating images (e.g.: PNGs). Support Python 3.7 to 3.11. .. image:: example-ean13.png :target: https://github.com/WhyNotHugo/python-barcode :alt: python-barcode Documentation ------------- Full documentation is published at http://python-barcode.rtfd.io/ Licence ------- python-barcode is licensed under the MIT licence. See LICENCE for details. python-barcode-0.15.1/barcode/0000755000175100001730000000000014451372466016730 5ustar runnerdocker00000000000000python-barcode-0.15.1/barcode/__init__.py0000755000175100001730000000676614451372461021056 0ustar runnerdocker00000000000000"""This package provides a simple way to create standard barcodes. It needs no external packages to be installed, the barcodes are created as SVG objects. If Pillow is installed, the barcodes can also be rendered as images (all formats supported by Pillow). """ import os from typing import BinaryIO from typing import Dict from typing import Optional from typing import Union from barcode.codabar import CODABAR from barcode.codex import PZN from barcode.codex import Code39 from barcode.codex import Code128 from barcode.codex import Gs1_128 from barcode.ean import EAN8 from barcode.ean import EAN8_GUARD from barcode.ean import EAN13 from barcode.ean import EAN13_GUARD from barcode.ean import EAN14 from barcode.ean import JAN from barcode.errors import BarcodeNotFoundError from barcode.isxn import ISBN10 from barcode.isxn import ISBN13 from barcode.isxn import ISSN from barcode.itf import ITF from barcode.upc import UPCA from barcode.version import version # noqa: F401 __BARCODE_MAP = { "ean8": EAN8, "ean8-guard": EAN8_GUARD, "ean13": EAN13, "ean13-guard": EAN13_GUARD, "ean": EAN13, "gtin": EAN14, "ean14": EAN14, "jan": JAN, "upc": UPCA, "upca": UPCA, "isbn": ISBN13, "isbn13": ISBN13, "gs1": ISBN13, "isbn10": ISBN10, "issn": ISSN, "code39": Code39, "pzn": PZN, "code128": Code128, "itf": ITF, "gs1_128": Gs1_128, "codabar": CODABAR, "nw-7": CODABAR, } PROVIDED_BARCODES = list(__BARCODE_MAP) PROVIDED_BARCODES.sort() def get( name: str, code: Optional[str] = None, writer=None, options: Optional[dict] = None, ): """Helper method for getting a generator or even a generated code. :param name: The name of the type of barcode desired. :param code: The actual information to encode. If this parameter is provided, a generated barcode is returned. Otherwise, the barcode class is returned. :param Writer writer: An alternative writer to use when generating the barcode. :param options: Additional options to be passed on to the barcode when generating. """ options = options or {} try: barcode = __BARCODE_MAP[name.lower()] except KeyError as e: raise BarcodeNotFoundError(f"The barcode {name!r} is not known.") from e if code is not None: return barcode(code, writer, **options) return barcode def get_class(name): return get_barcode(name) def generate( name: str, code: str, writer=None, output: Union[str, os.PathLike, BinaryIO, None] = None, writer_options: Union[Dict, None] = None, text: Union[str, None] = None, ): """Shortcut to generate a barcode in one line. :param name: Name of the type of barcode to use. :param code: Data to encode into the barcode. :param writer: A writer to use (e.g.: ImageWriter or SVGWriter). :param output: Destination file-like or path-like where to save the generated barcode. :param writer_options: Options to pass on to the writer instance. :param text: Text to render under the barcode. """ from barcode.base import Barcode writer = writer or Barcode.default_writer() writer.set_options(writer_options or {}) barcode = get(name, code, writer) if isinstance(output, str): return barcode.save(output, writer_options, text) if output: barcode.write(output, writer_options, text) return None raise TypeError("'output' cannot be None") get_barcode = get get_barcode_class = get_class python-barcode-0.15.1/barcode/base.py0000755000175100001730000000561514451372461020221 0ustar runnerdocker00000000000000"""barcode.base """ from typing import ClassVar from typing import List from typing import Optional from barcode.writer import BaseWriter from barcode.writer import SVGWriter class Barcode: name = "" digits = 0 default_writer = SVGWriter default_writer_options: ClassVar[dict] = { "module_width": 0.2, "module_height": 15.0, "quiet_zone": 6.5, "font_size": 10, "text_distance": 5.0, "background": "white", "foreground": "black", "write_text": True, "text": "", } writer: BaseWriter def to_ascii(self) -> str: code = self.build() for i, line in enumerate(code): code[i] = line.replace("1", "X").replace("0", " ") return "\n".join(code) def __repr__(self) -> str: return f"<{self.__class__.__name__}({self.get_fullcode()!r})>" def build(self) -> List[str]: raise NotImplementedError def get_fullcode(self): """Returns the full code, encoded in the barcode. :returns: Full human readable code. :rtype: String """ raise NotImplementedError def save( self, filename: str, options: Optional[dict] = None, text: Optional[str] = None ) -> str: """Renders the barcode and saves it in `filename`. :param filename: Filename to save the barcode in (without filename extension). :param options: The same as in `self.render`. :param text: Text to render under the barcode. :returns: The full filename with extension. """ output = self.render(options, text) if text else self.render(options) return self.writer.save(filename, output) def write(self, fp, options=None, text=None): """Renders the barcode and writes it to the file like object `fp`. :parameters: fp : File like object Object to write the raw data in. options : Dict The same as in `self.render`. text : str Text to render under the barcode. """ output = self.render(options, text) self.writer.write(output, fp) def render(self, writer_options: Optional[dict] = None, text: Optional[str] = None): """Renders the barcode using `self.writer`. :param writer_options: Options for `self.writer`, see writer docs for details. :param text: Text to render under the barcode. :returns: Output of the writers render method. """ options = self.default_writer_options.copy() options.update(writer_options or {}) if options["write_text"] or text is not None: if text is not None: options["text"] = text else: options["text"] = self.get_fullcode() self.writer.set_options(options) code = self.build() return self.writer.render(code) python-barcode-0.15.1/barcode/charsets/0000755000175100001730000000000014451372466020544 5ustar runnerdocker00000000000000python-barcode-0.15.1/barcode/charsets/__init__.py0000644000175100001730000000000014451372461022636 0ustar runnerdocker00000000000000python-barcode-0.15.1/barcode/charsets/codabar.py0000644000175100001730000000073714451372461022513 0ustar runnerdocker00000000000000# W = Wide bar # w = wide space # N = Narrow bar # n = narrow space CODES = { "0": "NnNnNwW", "1": "NnNnWwN", "2": "NnNwNnW", "3": "WwNnNnN", "4": "NnWnNwN", "5": "WnNnNwN", "6": "NwNnNnW", "7": "NwNnWnN", "8": "NwWnNnN", "9": "WnNwNnN", "-": "NnNwWnN", "$": "NnWwNnN", ":": "WnNnWnW", "/": "WnWnNnW", ".": "WnWnWnN", "+": "NnWnWnW", } STARTSTOP = {"A": "NnWwNwN", "B": "NwNwNnW", "C": "NnNwNwW", "D": "NnNwWwN"} python-barcode-0.15.1/barcode/charsets/code128.py0000644000175100001730000000652014451372461022261 0ustar runnerdocker00000000000000import string # Charsets for code 128 _common = ( " ", "!", '"', "#", "$", "%", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/", *tuple(string.digits), ":", ";", "<", "=", ">", "?", "@", *tuple(string.ascii_uppercase), "[", "\\", "]", "^", "_", ) _charset_a = ( *_common, "\x00", "\x01", "\x02", "\x03", "\x04", "\x05", "\x06", "\x07", "\x08", "\t", "\n", "\x0b", "\x0c", "\r", "\x0e", "\x0f", "\x10", "\x11", "\x12", "\x13", "\x14", "\x15", "\x16", "\x17", "\x18", "\x19", "\x1a", "\x1b", "\x1c", "\x1d", "\x1e", "\x1f", "ó", "ò", "SHIFT", "TO_C", "TO_B", "ô", "ñ", ) _charset_b = ( *_common, "`", *tuple(string.ascii_lowercase), "{", "|", "}", "~", "\x7f", "ó", "ò", "SHIFT", "TO_C", "ô", "TO_A", "ñ", ) ALL = set(_common + _charset_a + _charset_b) A = {c: i for i, c in enumerate(_charset_a)} B = {c: i for i, c in enumerate(_charset_b)} C = {"TO_B": 100, "TO_A": 101, "\xf1": 102} CODES = ( "11011001100", "11001101100", "11001100110", "10010011000", "10010001100", "10001001100", "10011001000", "10011000100", "10001100100", "11001001000", "11001000100", "11000100100", "10110011100", "10011011100", "10011001110", "10111001100", "10011101100", "10011100110", "11001110010", "11001011100", "11001001110", "11011100100", "11001110100", "11101101110", "11101001100", "11100101100", "11100100110", "11101100100", "11100110100", "11100110010", "11011011000", "11011000110", "11000110110", "10100011000", "10001011000", "10001000110", "10110001000", "10001101000", "10001100010", "11010001000", "11000101000", "11000100010", "10110111000", "10110001110", "10001101110", "10111011000", "10111000110", "10001110110", "11101110110", "11010001110", "11000101110", "11011101000", "11011100010", "11011101110", "11101011000", "11101000110", "11100010110", "11101101000", "11101100010", "11100011010", "11101111010", "11001000010", "11110001010", "10100110000", "10100001100", "10010110000", "10010000110", "10000101100", "10000100110", "10110010000", "10110000100", "10011010000", "10011000010", "10000110100", "10000110010", "11000010010", "11001010000", "11110111010", "11000010100", "10001111010", "10100111100", "10010111100", "10010011110", "10111100100", "10011110100", "10011110010", "11110100100", "11110010100", "11110010010", "11011011110", "11011110110", "11110110110", "10101111000", "10100011110", "10001011110", "10111101000", "10111100010", "11110101000", "11110100010", "10111011110", "10111101110", "11101011110", "11110101110", "11010000100", "11010010000", "11010011100", ) STOP = "11000111010" START_CODES = {"A": 103, "B": 104, "C": 105} TO = {101: START_CODES["A"], 100: START_CODES["B"], 99: START_CODES["C"]} python-barcode-0.15.1/barcode/charsets/code39.py0000644000175100001730000000244514451372461022204 0ustar runnerdocker00000000000000import string # Charsets for code 39 REF = ( tuple(string.digits) + tuple(string.ascii_uppercase) + ("-", ".", " ", "$", "/", "+", "%") ) B = "1" E = "0" CODES = ( "101000111011101", "111010001010111", "101110001010111", "111011100010101", "101000111010111", "111010001110101", "101110001110101", "101000101110111", "111010001011101", "101110001011101", "111010100010111", "101110100010111", "111011101000101", "101011100010111", "111010111000101", "101110111000101", "101010001110111", "111010100011101", "101110100011101", "101011100011101", "111010101000111", "101110101000111", "111011101010001", "101011101000111", "111010111010001", "101110111010001", "101010111000111", "111010101110001", "101110101110001", "101011101110001", "111000101010111", "100011101010111", "111000111010101", "100010111010111", "111000101110101", "100011101110101", "100010101110111", "111000101011101", "100011101011101", "100010001000101", "100010001010001", "100010100010001", "101000100010001", ) EDGE = "100010111011101" MIDDLE = "0" # MAP for assigning every symbol (REF) to (reference number, barcode) MAP = dict(zip(REF, enumerate(CODES))) python-barcode-0.15.1/barcode/charsets/ean.py0000644000175100001730000000147114451372461021657 0ustar runnerdocker00000000000000EDGE = "101" MIDDLE = "01010" CODES = { "A": ( "0001101", "0011001", "0010011", "0111101", "0100011", "0110001", "0101111", "0111011", "0110111", "0001011", ), "B": ( "0100111", "0110011", "0011011", "0100001", "0011101", "0111001", "0000101", "0010001", "0001001", "0010111", ), "C": ( "1110010", "1100110", "1101100", "1000010", "1011100", "1001110", "1010000", "1000100", "1001000", "1110100", ), } LEFT_PATTERN = ( "AAAAAA", "AABABB", "AABBAB", "AABBBA", "ABAABB", "ABBAAB", "ABBBAA", "ABABAB", "ABABBA", "ABBABA", ) python-barcode-0.15.1/barcode/charsets/itf.py0000644000175100001730000000035714451372461021700 0ustar runnerdocker00000000000000# W = Wide bar # w = wide space # N = Narrow bar # n = narrow space START = "NnNn" STOP = "WnN" CODES = ( "NNWWN", "WNNNW", "NWNNW", "WWNNN", "NNWNW", "WNWNN", "NWWNN", "NNNWW", "WNNWN", "NWNWN", ) python-barcode-0.15.1/barcode/charsets/upc.py0000644000175100001730000000071214451372461021700 0ustar runnerdocker00000000000000EDGE = "101" MIDDLE = "01010" CODES = { "L": ( "0001101", "0011001", "0010011", "0111101", "0100011", "0110001", "0101111", "0111011", "0110111", "0001011", ), "R": ( "1110010", "1100110", "1101100", "1000010", "1011100", "1001110", "1010000", "1000100", "1001000", "1110100", ), } python-barcode-0.15.1/barcode/codabar.py0000644000175100001730000000425114451372461020672 0ustar runnerdocker00000000000000"""Module: barcode.codabar :Provided barcodes: Codabar (NW-7) """ __docformat__ = "restructuredtext en" from barcode.base import Barcode from barcode.charsets import codabar from barcode.errors import BarcodeError from barcode.errors import IllegalCharacterError class CODABAR(Barcode): """Initializes a new CODABAR instance. :parameters: code : String Codabar (NW-7) string that matches [ABCD][0-9$:/.+-]+[ABCD] writer : barcode.writer Instance The writer to render the barcode (default: SVGWriter). narrow: Integer Width of the narrow elements (default: 2) wide: Integer Width of the wide elements (default: 5) wide/narrow must be in the range 2..3 """ name = "Codabar (NW-7)" def __init__(self, code, writer=None, narrow=2, wide=5) -> None: self.code = code self.writer = writer or self.default_writer() self.narrow = narrow self.wide = wide def __str__(self) -> str: return self.code def get_fullcode(self): return self.code def build(self): try: data = ( codabar.STARTSTOP[self.code[0]] + "n" ) # Start with [A-D], followed by a narrow space except KeyError: raise BarcodeError("Codabar should start with either A,B,C or D") from None try: data += "n".join( [codabar.CODES[c] for c in self.code[1:-1]] ) # separated by a narrow space except KeyError: raise IllegalCharacterError( "Codabar can only contain numerics or $:/.+-" ) from None try: data += "n" + codabar.STARTSTOP[self.code[-1]] # End with [A-D] except KeyError: raise BarcodeError("Codabar should end with either A,B,C or D") from None raw = "" for e in data: if e == "W": raw += "1" * self.wide if e == "w": raw += "0" * self.wide if e == "N": raw += "1" * self.narrow if e == "n": raw += "0" * self.narrow return [raw] python-barcode-0.15.1/barcode/codex.py0000755000175100001730000002014714451372461020406 0ustar runnerdocker00000000000000"""Module: barcode.codex :Provided barcodes: Code 39, Code 128, PZN """ from typing import Collection from barcode.base import Barcode from barcode.charsets import code39 from barcode.charsets import code128 from barcode.errors import BarcodeError from barcode.errors import IllegalCharacterError from barcode.errors import NumberOfDigitsError __docformat__ = "restructuredtext en" # Sizes MIN_SIZE = 0.2 MIN_QUIET_ZONE = 2.54 def check_code(code: str, name: str, allowed: Collection[str]) -> None: wrong = [] for char in code: if char not in allowed: wrong.append(char) if wrong: raise IllegalCharacterError( "The following characters are not valid for {name}: {wrong}".format( name=name, wrong=", ".join(wrong) ) ) class Code39(Barcode): """A Code39 barcode implementation""" name = "Code 39" def __init__(self, code: str, writer=None, add_checksum: bool = True) -> None: r""" :param code: Code 39 string without \* and without checksum. :param writer: A ``barcode.writer`` instance used to render the barcode (default: SVGWriter). :param add_checksum: Add the checksum to code or not """ self.code = code.upper() if add_checksum: self.code += self.calculate_checksum() self.writer = writer or self.default_writer() check_code(self.code, self.name, code39.REF) def __str__(self) -> str: return self.code def get_fullcode(self) -> str: """:returns: The full code as it will be encoded.""" return self.code def calculate_checksum(self): check = sum(code39.MAP[x][0] for x in self.code) % 43 for k, v in code39.MAP.items(): if check == v[0]: return k return None def build(self): chars = [code39.EDGE] for char in self.code: chars.append(code39.MAP[char][1]) chars.append(code39.EDGE) return [code39.MIDDLE.join(chars)] def render(self, writer_options=None, text=None): options = {"module_width": MIN_SIZE, "quiet_zone": MIN_QUIET_ZONE} options.update(writer_options or {}) return super().render(options, text) class PZN7(Code39): """Initializes new German number for pharmaceutical products. :parameters: pzn : String Code to render. writer : barcode.writer Instance The writer to render the barcode (default: SVGWriter). """ name = "Pharmazentralnummer" digits = 6 def __init__(self, pzn, writer=None) -> None: pzn = pzn[: self.digits] if not pzn.isdigit(): raise IllegalCharacterError("PZN can only contain numbers.") if len(pzn) != self.digits: raise NumberOfDigitsError( f"PZN must have {self.digits} digits, not {len(pzn)}." ) self.pzn = pzn self.pzn = f"{pzn}{self.calculate_checksum()}" super().__init__(f"PZN-{self.pzn}", writer, add_checksum=False) def get_fullcode(self): return f"PZN-{self.pzn}" def calculate_checksum(self): sum_ = sum(int(x) * int(y) for x, y in enumerate(self.pzn, start=2)) checksum = sum_ % 11 if checksum == 10: raise BarcodeError("Checksum can not be 10 for PZN.") return checksum class PZN8(PZN7): """Will be fully added in v0.9.""" digits = 7 class Code128(Barcode): """Initializes a new Code128 instance. The checksum is added automatically when building the bars. :parameters: code : String Code 128 string without checksum (added automatically). writer : barcode.writer Instance The writer to render the barcode (default: SVGWriter). """ name = "Code 128" def __init__(self, code, writer=None) -> None: self.code = code self.writer = writer or self.default_writer() self._charset = "B" self._buffer = "" check_code(self.code, self.name, code128.ALL) def __str__(self) -> str: return self.code @property def encoded(self): return self._build() def get_fullcode(self): return self.code def _new_charset(self, which): if which == "A": code = self._convert("TO_A") elif which == "B": code = self._convert("TO_B") elif which == "C": code = self._convert("TO_C") self._charset = which return [code] def _maybe_switch_charset(self, pos): char = self.code[pos] next_ = self.code[pos : pos + 10] def look_next(): digits = 0 for c in next_: if c.isdigit(): digits += 1 else: break return digits > 3 codes = [] if self._charset == "C" and not char.isdigit(): if char in code128.B: codes = self._new_charset("B") elif char in code128.A: codes = self._new_charset("A") if len(self._buffer) == 1: codes.append(self._convert(self._buffer[0])) self._buffer = "" elif self._charset == "B": if look_next(): codes = self._new_charset("C") elif char not in code128.B and char in code128.A: codes = self._new_charset("A") elif self._charset == "A": if look_next(): codes = self._new_charset("C") elif char not in code128.A and char in code128.B: codes = self._new_charset("B") return codes def _convert(self, char): if self._charset == "A": return code128.A[char] if self._charset == "B": return code128.B[char] if self._charset == "C": if char in code128.C: return code128.C[char] if char.isdigit(): self._buffer += char if len(self._buffer) == 2: value = int(self._buffer) self._buffer = "" return value return None return None return None def _try_to_optimize(self, encoded): if encoded[1] in code128.TO: encoded[:2] = [code128.TO[encoded[1]]] return encoded def _calculate_checksum(self, encoded): cs = [encoded[0]] for i, code_num in enumerate(encoded[1:], start=1): cs.append(i * code_num) return sum(cs) % 103 def _build(self): encoded = [code128.START_CODES[self._charset]] for i, char in enumerate(self.code): encoded.extend(self._maybe_switch_charset(i)) code_num = self._convert(char) if code_num is not None: encoded.append(code_num) # Finally look in the buffer if len(self._buffer) == 1: encoded.extend(self._new_charset("B")) encoded.append(self._convert(self._buffer[0])) self._buffer = "" return self._try_to_optimize(encoded) def build(self): encoded = self._build() encoded.append(self._calculate_checksum(encoded)) code = "" for code_num in encoded: code += code128.CODES[code_num] code += code128.STOP code += "11" return [code] def render(self, writer_options=None, text=None): options = {"module_width": MIN_SIZE, "quiet_zone": MIN_QUIET_ZONE} options.update(writer_options or {}) return super().render(options, text) class Gs1_128(Code128): # noqa: N801 """ following the norm, a gs1-128 barcode is a subset of code 128 barcode, it can be generated by prepending the code with the FNC1 character https://en.wikipedia.org/wiki/GS1-128 https://www.gs1-128.info/ """ name = "GS1-128" FNC1_CHAR = "\xf1" def __init__(self, code, writer=None) -> None: code = self.FNC1_CHAR + code super().__init__(code, writer) def get_fullcode(self): return super().get_fullcode()[1:] # For pre 0.8 compatibility PZN = PZN7 python-barcode-0.15.1/barcode/ean.py0000755000175100001730000001475714451372461020061 0ustar runnerdocker00000000000000"""Module: barcode.ean :Provided barcodes: EAN-14, EAN-13, EAN-8, JAN """ __docformat__ = "restructuredtext en" from functools import reduce from barcode.base import Barcode from barcode.charsets import ean as _ean from barcode.errors import IllegalCharacterError from barcode.errors import NumberOfDigitsError from barcode.errors import WrongCountryCodeError # EAN13 Specs (all sizes in mm) SIZES = { "SC0": 0.27, "SC1": 0.297, "SC2": 0.33, "SC3": 0.363, "SC4": 0.396, "SC5": 0.445, "SC6": 0.495, "SC7": 0.544, "SC8": 0.61, "SC9": 0.66, } class EuropeanArticleNumber13(Barcode): """Initializes EAN13 object. :parameters: ean : String The ean number as string. writer : barcode.writer Instance The writer to render the barcode (default: SVGWriter). """ name = "EAN-13" digits = 12 def __init__(self, ean, writer=None, no_checksum=False, guardbar=False) -> None: ean = ean[: self.digits] if not ean.isdigit(): raise IllegalCharacterError("EAN code can only contain numbers.") if len(ean) != self.digits: raise NumberOfDigitsError( "EAN must have {} digits, not {}.".format( self.digits, len(ean), ) ) self.ean = ean # If no checksum if no_checksum: # Add a thirteen char if given in parameter, # otherwise pad with zero self.ean = "{}{}".format( ean, ean[self.digits] if len(ean) > self.digits else 0 ) else: self.ean = f"{ean}{self.calculate_checksum()}" self.guardbar = guardbar if guardbar: self.EDGE = _ean.EDGE.replace("1", "G") self.MIDDLE = _ean.MIDDLE.replace("1", "G") else: self.EDGE = _ean.EDGE self.MIDDLE = _ean.MIDDLE self.writer = writer or self.default_writer() def __str__(self) -> str: return self.ean def get_fullcode(self): if self.guardbar: return self.ean[0] + " " + self.ean[1:7] + " " + self.ean[7:] + " >" return self.ean def calculate_checksum(self): """Calculates the checksum for EAN13-Code. :returns: The checksum for `self.ean`. :rtype: Integer """ def sum_(x, y): return int(x) + int(y) evensum = reduce(sum_, self.ean[-2::-2]) oddsum = reduce(sum_, self.ean[-1::-2]) return (10 - ((evensum + oddsum * 3) % 10)) % 10 def build(self): """Builds the barcode pattern from `self.ean`. :returns: The pattern as string :rtype: String """ code = self.EDGE[:] pattern = _ean.LEFT_PATTERN[int(self.ean[0])] for i, number in enumerate(self.ean[1:7]): code += _ean.CODES[pattern[i]][int(number)] code += self.MIDDLE for number in self.ean[7:]: code += _ean.CODES["C"][int(number)] code += self.EDGE return [code] def to_ascii(self): """Returns an ascii representation of the barcode. :rtype: String """ code = self.build() for i, line in enumerate(code): code[i] = line.replace("G", "|").replace("1", "|").replace("0", " ") return "\n".join(code) def render(self, writer_options=None, text=None): options = {"module_width": SIZES["SC2"]} options.update(writer_options or {}) return super().render(options, text) class EuropeanArticleNumber13WithGuard(EuropeanArticleNumber13): name = "EAN-13 with guards" def __init__(self, ean, writer=None, no_checksum=False, guardbar=True) -> None: super().__init__(ean, writer, no_checksum, guardbar) class JapanArticleNumber(EuropeanArticleNumber13): """Initializes JAN barcode. :parameters: jan : String The jan number as string. writer : barcode.writer Instance The writer to render the barcode (default: SVGWriter). """ name = "JAN" valid_country_codes = list(range(450, 460)) + list(range(490, 500)) def __init__(self, jan, *args, **kwargs) -> None: if int(jan[:3]) not in self.valid_country_codes: raise WrongCountryCodeError( "Country code isn't between 450-460 or 490-500." ) super().__init__(jan, *args, **kwargs) class EuropeanArticleNumber8(EuropeanArticleNumber13): """Represents an EAN-8 barcode. See EAN13's __init__ for details. :parameters: ean : String The ean number as string. writer : barcode.writer Instance The writer to render the barcode (default: SVGWriter). """ name = "EAN-8" digits = 7 def build(self): """Builds the barcode pattern from `self.ean`. :returns: The pattern as string :rtype: String """ code = self.EDGE[:] for number in self.ean[:4]: code += _ean.CODES["A"][int(number)] code += self.MIDDLE for number in self.ean[4:]: code += _ean.CODES["C"][int(number)] code += self.EDGE return [code] def get_fullcode(self): if self.guardbar: return "< " + self.ean[:4] + " " + self.ean[4:] + " >" return self.ean class EuropeanArticleNumber8WithGuard(EuropeanArticleNumber8): name = "EAN-8 with guards" def __init__(self, ean, writer=None, no_checksum=False, guardbar=True) -> None: super().__init__(ean, writer, no_checksum, guardbar) class EuropeanArticleNumber14(EuropeanArticleNumber13): """Represents an EAN-14 barcode. See EAN13's __init__ for details. :parameters: ean : String The ean number as string. writer : barcode.writer Instance The writer to render the barcode (default: SVGWriter). """ name = "EAN-14" digits = 13 def calculate_checksum(self): """Calculates the checksum for EAN13-Code. :returns: The checksum for `self.ean`. :rtype: Integer """ def sum_(x, y): return int(x) + int(y) evensum = reduce(sum_, self.ean[::2]) oddsum = reduce(sum_, self.ean[1::2]) return (10 - (((evensum * 3) + oddsum) % 10)) % 10 # Shortcuts EAN14 = EuropeanArticleNumber14 EAN13 = EuropeanArticleNumber13 EAN13_GUARD = EuropeanArticleNumber13WithGuard EAN8 = EuropeanArticleNumber8 EAN8_GUARD = EuropeanArticleNumber8WithGuard JAN = JapanArticleNumber python-barcode-0.15.1/barcode/errors.py0000755000175100001730000000122614451372461020615 0ustar runnerdocker00000000000000"""barcode.errors""" __docformat__ = "restructuredtext en" class BarcodeError(Exception): def __init__(self, msg) -> None: self.msg = msg def __str__(self) -> str: return self.msg class IllegalCharacterError(BarcodeError): """Raised when a barcode-string contains illegal characters.""" class BarcodeNotFoundError(BarcodeError): """Raised when an unknown barcode is requested.""" class NumberOfDigitsError(BarcodeError): """Raised when the number of digits do not match.""" class WrongCountryCodeError(BarcodeError): """Raised when a JAN (Japan Article Number) don't starts with 450-459 or 490-499. """ python-barcode-0.15.1/barcode/fonts/0000755000175100001730000000000014451372466020061 5ustar runnerdocker00000000000000python-barcode-0.15.1/barcode/fonts/DejaVuSansMono.ttf0000755000175100001730000116376414451372461023454 0ustar runnerdocker00000000000000 FFTMSH,GDEFzbmHGPOSA8#8GSUBV.W:OS/2i?Vcmap @cvt  U0fpgm[kWgaspX glyfpAQXhead(P6hhea$hmtx Cloca1maxp'J8 name`JX!postkpugprep:eƼHƼH&'mnnopq~       ` arab&cyrl4dfltFgrekPlao \latnj SRB 4ISM 4KSM 4LSM 4MOL 4NSM 4ROM 4SKS 4SSM 4mark mark,mark4mkmk:rtbdB &.6>FPX`Rx | r457" p% h&0  c"c!$"]j]jbj $6HZl~ P|H 0 P|H <P ,  T`  P|H     %hhhn  "(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz "(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\Xd|dh0`tXtX <|00hL( Tplx`xDJPV]j]j]j]j]jbj]j]jh|  &,28>DJPV\bhntz "(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz "(.4:@FLRX^djpv| dt hd8|$|`HLD \t@4H(|XT(lt<0xx_` iFWW@TT[:B`LLL[Z[IWTL4K]l8@^  @bXXXXoM!TxxTT&~O[ XPXD,aDf\Ph< \\\0,0@, d `|tL`00@\  T`@L845D80H <D<x(LX$Tt0TLh0pLh<pl$d`0h8< PLdhx8TR m$v2z`M;)RDhp_)I R|o~4@@#CF$  S( V Yd \ _h o ol r um x q U U Z Z \ \ ^ _ !"#$& &,28>DJPV]j]j]j]j]jbj]j]jh6  $*06<BHNTZ`flrx~ &,28>DJPV\bhntz "(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz "(.4:@FLRX^djpv| $DhxzOhDh*hDhhhhDhhhvhhVhYDxhVVhxhhsDVhDDDDDDzzzzhhhh6hhhhhhhhhhh46vvvvhhhhhhhhhhhhhhhVVVDD6h6hzvzvzvzvhVhVhVhVhhhhhhhhYDxxxx9hVhVhhhhhhDDhhhhhhhxhxhhhhhhhhhhshVhhhhhhhhhhh 66hhhVVh"VhVhVhhhDDxVhhXVVjhhhhDDVhhVhV$=D]4:IWfoqr "#&36k    |j  "(.4:@FLRX^djpv| $*06<BHNTZ`flrx~      & , 2 8 > D J P V \ b h n t z     " ( . 4 : @ F L R X ^ d j p v |     $ * 0 6 < B H N T Z ` f l r x ~      & , 2 8 > D J P V \ b h n t z     " ( . 4 : @ F L R X ^ d j p v |  $*06<BHNTZ`flrx~ &,28>DJPV\bhntz "(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz "(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz "(.4:@FLRX^djpv|hhhh66zzhhhhhhhhhhhhhhhh66hhhhhhhhhhhhhhh`hhh`hhv`vhhh`hVhhhhV22h`hh`hh`hh`hVh`hVh`hh`hhhh`hh`hh`hh`hh`hVh`hhhhhhhzzzzzzhhhh66hhhhhhhhhhhhh6666hhhhhhh`h`vvvvhhhhhhhhhhhh`hhhhhhVhhVhVhhhhh`6h66hhzvzvzvzv`zvhVhVhVhVhhhhhhhhhhhhhhh`hhVh`2222222hhhh`hhhhVh`hVhhhhhhhhh`h6h6h`6h`hhhhhhh`hhhhhhhhhhhhhhhhhhhhhh`hhhhVhhhhhhhhhhhhhhhhhh  `6666hhhhh`hVVVhhVhhVhhVhhhhhhhh22hhhhhhVh`hVhh`hhh`hVh`hV66Vhhh`hhhhhh`hVhh66h`hh`hh`hh`h)`)`YYhhv`vv`v`v`vZ`Zr`rv`v`V>>Vh`hV`n`nVh`hh`hVooooVD`Dh`h88PP>>Vh`hh`hVh`hV`Vf&Vh`hh`hh`hh`hhhVh`hhh6`6Vh`hVh`hVc`ch`h``h`hVssVssVx`xVssV`VhhVh`hh`hh`hh`hh`hhhh`h`Vh`hh`hVh`hV$$$$h`h ` >`>h`hh`hVh`hhhV$$h`hh`h`h`v`h`h`h`h`h`h`h`h`h`h``h`h`hh`h`h`h`h`h`h`h`5`h`h``h`''}{}hhRREE^^rrhhhh??aaiihhhhhhGGhhhhhh6h\aadd55g'ee``66LhViihhh`hhhVhhVh"$=D]4Kjsxk 4;9=AaCGffnkptVV!#%%     R R"+12 $*06<BHNTZ`flrx~h`h`h`h`h`h`h`h`h`h`h`h`h`h`h`h`h`h`h`h`h`hhhhhhhhhhhhhhhhhhhhhhhhhhh`h`h`/-3 ntz "(.4:@FLRX^djpv|Qknnq~>DJPV\bhntztwwwwt`~~`~`/nnq~ Parab&cyrl:dfltVgrek`lao llatnv SRB 4ISM >KSM >LSM >MOL JNSM >ROM JSKS >SSM > ccmp>dligDfinaJinitPligaVlocl\loclbloclhmedinrligt   (08@HPX`hXjn  ~  ~  !$% F $$XLMLM&   gp5 q s u w y }  - %   ) ! = 9 A E K I 1 M Q W ] U6F# ] ]4T' { [ / '   + # ? ; C G 3 O S Y _6?BF"T' z Z . &   * " > : B F 2 N R X ^6?BF"   }  } > $  w  s  q  w  s  q  O LI LM33f  "(PfEd@ m`,, ~!AEM?CXauz~_cs  :UZmt{ .<[ex{-McyEMWY[]}  # & 7 : > I _ q !!!!!!!"!$!&!+!.!_" """" "-"="i"""""""####!#(#+#5#>#D#I#M#P#T#\#`#e#i#p#z#}#####$#&/&&&&'' '''K'M'R'V'^'u''''''))*/+,d,o,w,z,}..%..'t $DLPCXatz~br  !@Z`ty~,0>bw{0Th| HPY[]_   & / 9 < E _ p t !!! !!!!"!$!&!*!.!S!"""""'"8"A"m""""""#####%#+#5#7#A#G#K#P#R#W#^#c#h#k#s#}#####$#%&8&&&''' ')'M'O'V'X'a''''''))*/+,d,n,u,y,|.."..&RpvnfTPMHGFED64& zWpnePO qonc e_SN>=;964+*(&%#" HGEDCB?><އ~yxwccccPr`  ~b!$ADELMP_fjlpy?CCXXaatuzz~~_&bcrs    !:@UZZ&`m'tt5y{6~9<>@ABCDEFGQSTVWX\cfghjwy ,.0<>[bewx{{-#0M9TcWhyg|y EHMPW YY[[]]_}7l{     # & & / 7 9 : < > E I _ _ p q t   !!!!! !!!!!!!!#!"!"$!$!$%!&!&&!*!+'!.!.)!S!_*!" 7"""""""" "'"-"8"="A"i"m"""""""*"",""-""=##>##E##S##!U#%#([#+#+_#5#5`#7#>a#A#Di#G#Im#K#Mp#P#Ps#R#Tt#W#\w#^#`}#c#e#h#i#k#p#s#z#}#}##########$#$#%&/&8& && 8&& E&& G'' I'' M' '' Q')'K m'M'M 'O'R 'V'V 'X'^ 'a'u '' '' '' '' '' '' )) )) */*/ ++ ,d,d ,n,o ,u,w ,y,z ,|,} .. .".% ....   &'    R  H T V Z \pt `v e p֣  &   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ardeixpk$vjsgwl|cnTm}b ~:  yfvqrstzwugf 7X!uu9!{Xm{o{RoZ!=fs +b#1N {T\q#w`j#fy```{{w`b{!{RNNfffHF?{L'oo5jo{-{3=foD7f}s, %Id@QX Y!-,%Id@QX Y!-,  P y PXY%%# P y PXY%-,KPX EDY!-,%E`D-,KSX%%EDY!!-,ED-,%%I%%I` ch #:e:-hh/10!%!!hsr) @ <2991/03#3#qeR@1<20###Ѯ++J@0     91/<<<<<<<2220333!3!###!5!!5!#3hiiThiih)T/hTaabbNZ /d@9($)%/%$(!$, ( 0<2<1/299990>54&'#.'5.546753.'n|phumdfbdcӿdOTUPDNtd]gp^Vd-.)>B+/Qš ! *9V@/7(" "7(.+  % 4  + :99991/9999032654&#"4632#"&'%32654&#"4632#"&iNMklLNi@s..2H#)iOMllMMk@u--1?NjkMMljO0./t?``OikMMkjN0--uA9*7@b  -,.+2345617B7 1 +"1"!% (! 7+!(!(! .899999991/9990KSX999Y" >54/3#'#"5467.54632.#"3267>7#'&JKNSj抋20ǭAF;}Eap:6\[ț*\,#1h F'XmFD ̉dHG'%[M;I\ 10#+u @  29910#&547u;:\' @  299103#654\<<J+N@,       <2<2991<22990 %#'-73%+f9s9f9PsPbybcyXqy '@    <<1<<0!!#!5!CDDD/@ 103#Śc/dm10!!d 11/03#1fB7@ 103#ymL # @  $!"!$10@////////// / / ?????????? ? ? OOOO O ____ _    F////////// / / __________ _ _  $]]4632#"&"32'2#"M68PO98K7PP78NL0670xx~F &@ ## 1/20%!5%3!!:P6ȪuLJժ#Q@)%%B   "$91/20KSX92Y"%!!567>54&#"5>32uu5dF[pga Yd8ժ.>zO}BC12`tA7(G@)  #)&" )9190#"&'532654&+532654&#"5>32ggfbYhyI'Ǖ&$54zms{(( ۵{fo B@   B    $<291/<290KSXY" !33##!5)!3d-=@"   "190!!>32#"&'532654&#"+W,wN\aQFժ 21%%L$=@#  %"& "%190.#">32# !2"32654&?M0n#J݁%'dkuzl75@%%B"991/0KSXY"!#!5V+N #/C@% '-'0 $*$ "!0991990"32654&%.54632#"$54632654&#"hʁ򑁖Myz{yŗT!Ѳ!!ȟɠbx~~xzF $;@" ""%"  &%1902654&#"532#"543 !"&T?M/nI%'!dk  os'@ <21/03#3#'9' %@  103#3#Śc /Xyw!@('29190 5yR!÷X`y@ <210!!!!X!! BXyw!@('<919055X!R^^="{@B  %%B !    ) #99991/9990KSX99Y"#546?>54&#"5>323#=TZ>/mNb^hC^XE&bRY;X1YnED98L\VBT=/s 4p@1(+$ 4 '$+1+5' ( + . !+ -.5<991999990@ ]4&#"326#5#"&5463254&#"!267# !2kkkk%RӡP$J6l90?{:]x<!o?DF=?z% @A%%%% % % %  % B   / 91/<90KSXY"]@    ]]!3#!#hnl#+{q =@#   21 0!29991/9032654&#32654&#%!2)qﰖ뒃JF{f>p}qdƵϠ1.@  2 10210%# !2.#"32671M[?[MJVXI5))pn))=@@=R(@  2 1099991/0% 6&!# )`dVDѦHKw/N )@  13 21/0!!!!!!vTrwժFX $@14 21/0!!!!#o\eժH7fP<@!   6251990%# !2.#"3267#5!PQv@^PQ_ſCe){KMon56MI!H &@ 1 0 221/<203!3#!#)d+9 %@ 77 221/220!!!!5!!=99ժm,@    51990753265!5!#"&m[hqG`=QQD, @!% %B  0 291/<290KSXY"]@L&&6FUWX dzy{ ',+&:IGG[WXXWkzx]]33 ##wVhs@ 141/03!!dժVy @,  B    / 0 91/<290KSXY" ]@$  &)&) 6968  ]]! !###V+'F m@B10 991/<2990KSXY"]@&)&8Wdjuz &)FIWgh]]!3!#3+3u\ #@ 2 62510#"32#"32IIz~u+@  2 8 3291/032654&#%!2+#ꌝL/ϔu\=@   2 625999919990"#"32#"32ȗyHdIj@8  %%B     21  0299991/<9990KSX9Y"#.+#!232654&#NnRٲM{cݑohy]ҔYJ'@=  %  %B %( &919"0(9999190KSX99Y"]@ ]].#"#"&'532654&/.54$32\^mjikshulм V;53#"&'.  yVWx! 9FBjiCE:= m];<<;\lh?;::;>9L@)%%%%B/091/290KSXY"%3#3h_KKѪ++ @D    %%% % B    /91/<<90KSXY" ]@^ //+ ??8 ZZ  &*%*(+ % & 5:5:;: 4 6 TTZXWV[[RW X ] gh yvy v #]]333# #ŏӬ߿ʿD"+w @K % % % %%%% % B   ;/; 0 91/<290KSXY"7]@8  '()& X xyw !%+% 5UYX es]]3 3 # #VHNAu3B}%Y@.%%%%B<< 9991/290KSXY"3 3#%lk!mb E@%%B/0 991/0KSXY"]]!!!5!" ՚ow@=210!#3!XfB7@ 10 #%mZ@=210!53#5XޏH@ 91290 # #Ȳu-m/10!5/mPPf%@ <1K TKT[X@8Y0 #fx#{ )n@*  ! $   D >*22991/99990@00 0!0" ]#"326757#5#"&546;5.#"5>32=zl;^[fX=& 3qpepӺ)Ld_y64''RR2X 0@  G F221/9904&#"326>32#"&'#3,fd./xRXWS%{/@   F210%# !2.#"3267%JR%QNI]`A9++88*,A:;>{0@G H221/9903#5#"3232654&#"Z.deCSW;7W {X{E@&    IH991990!3267# 32.#"X㿮Xmi[ ^Z89++9 @Ţ'4@     <<2991/22990#"!!#!5!5463'cM+Qgc/яN{H{ )H@' '  $(*' G!H*221999904&#"326#"&'5326=#"3253ZLSbC,ml/9.,}^\::VZ,@  J  F21/<990#4&#"#3>32jq1sJ`cD .@ L LK <<1/20!!!5!!3#mnm`/BCV 8@   <2991990!5!+53263#XZZӜ} @:  B  DE 291/<90KSXY"]@R546Ffuv ('(;;797JIYYkiiiyxyy]]33 ##Gb{ZFB?  &@   L 991/990;#"&5!5![Y饵|~mo{"@'  MNMNME#K TKT[X8Y<91/<<<299990@G000000 0 0 ????????? #]>32#4&#"#4&#"#3>32"iJo5FP;9JI9!c?LeHEws{p{``32jq1sJ``cH{ #@  D>10"32654&'2#"hڜ-.VT{3@ GF221990%#3>32#"&4&#"326w.df SWWRw 3@   G>22199032654&#"#"3253#L-ed.+SY7:WSj{O@   21/990@%  0030@@C@PPPP].#"#3>32;zI.Dv6y.*`w"${'u@@    B %( OI"E(99991990KSX99Y".#"#"&'532654/.54632OS}{\JSjgTzEZ9..QSKJ#}##55cY1!1@  <<2991/<2990!!;#"&5!5!f^^uϪ+|b`>^,@    JF21/2990332653#5#"&økp1qJyaddm`e@)BIE91/290KSXY"']@%]]3 3#dEFr`T` @E      B    /91/<<90KSXY" ]@      &&)&))#, 96993< EI F J VX W Y fifij e vzx| r -   ++>>< H Y jih {yz|  ]]333# #àö`wBfL` @H      B  IE 91/<290KSXY" ]@ fivy  :4 ZV ]] # # 3 ^oo)'`?HkhV`@E       B   IE9129990KSX9Y"8]@v  &&8IIY ]]+532673 3Z.Gc".\mQ\GOLGhu:NN^Nlb X@BIE 2991/0KSXY"8]@68EJWXejuz ]!!!5!-}bܖ%$f@5 %   !  % $  = %<<29999999199999990#"&=4&+5326=46;#"3@k>>j@FU[noZUtrݓWV10#$j@7%   #%#= %<2<9999999199999990326=467.=4&+532;#"+DVZon[VD>k@@k>XXrtݔXy &@  '1<2990#"'&'.#"5>32326yKOZq Mg3OINS5dJ t]F ;73 !;?<6 7= @ <2991/0533)eq%!N@*   " E"<<<2212<990.'>7#&5473%C??BI9gg9ބ5(,-("9="+` 츸X>@     <<1/2<2990.#"!!!!53#5354632D>Cs3A,,ُ/яLB /@ (-  * -'! @') -0)$ !'$* xyx( $02299999999912299999999904&#"3267'#"&''7.5467'7>32d|[Z}}Z[|Z^.[20`0\^.[3.^Z{{Z\}~t]1]02[-^Z3].2]-_%@D% % %%B  < e e<<2<299991/2<2<290KSXY"3 33!!!#!5!5'!53%lkVoqZmo#o o#o!<210##  = 2>j@<#$93 $*0?#54&S9akԂ[]=:̭IWW9fqր][<;ȧH>=><''PGZsweZ54m@''TLf{xf[1,pE-Z/L-Z/L?F@aa1<203#%3#?}N1ID@'  &>>2J\ ^,8 8YD/210.#"3267#"&54632'"3267>54&'.'2#"&'.5467>`:o:u8g24r=г=rjKKMMKLijLLKLKKkZZ\[[[~}[[[\ZZ/lhȬJKKjhKLLLLLijKKJgZZ[~}[[[[[[}~[ZZ %)d@6  (&&  #*& (' j kji*22999199990"326=7#5#"&546;54&#"5>32!!|WHi1Rwu3}CD?kdPDN@Ms=@pABtZ\#! {w# /@    v v<2991<2990 5 5L-+-+#RRXsy^@ '10!#!X!^?dm10!!d }N4L@I  ] ] B   A)5)M  \\ [G#X;#Y//29999129990KSX9Y"2#'.+##32654&2#"&'.5467>"3267>54&'.XXP:&rk1=-7ffZJJDZZ\[[[~}[[[\ZZ~jKKMMKLijLLKLKKLbeG]C;P*T6?>5VZZ[~}[[[[[[}~[ZZgJKKjhKLLLLLijKKJ=b10!!=V+u @ STS 102#"&546"32654&hAu,-/OomOPqp1.-rBoPPlnNOpXy.@    <2<21/<<07!!!!#!5!X!dCDLIB}a@WWBA     @9991990KSX9Y"!!57>54&#"5>32eQdR1q?Ay;Jwrnaz3=L$$}k9wuF(\A          @#) & )99190#"&'532654&+532654&#"5>32^c:r;Eq-evnmBJ]b`W,p;Eu2X`lP|yQDJLl?<8?yvcG]f%@ <1K TKT[X@8Y03#fT` L@*  !   JF!99912<9903326533267#"&'#"&'øxo ! &D">K .Y\,T H;8 OOPNLPj; #@WW1 9120!###.54$FfNݸ/`103#`u)X 9A      @  aW}a 12035733!j c)t'+n 3@   jkji9910"32654&'2#"&546!!hfssfeusgʫ˫\{u༻߻`{\# /@   vv <<991<2990 5 %5 +-:+-#^R^  ^R^  Z{'V'{ 7Z{'{& 7tVZ'V'u 7!%@G  %%B! "$ $&# # )"#&999919990KSX99Y"33267#"&546?>54565#53%=TZ>/mNb^hC^XC&DbRY;X1YnED98L\V@T?%k&$ 4u@O ]1%k&$ 2u@O ]1%m&$ 5u  +@ /  ]1%^&$ 3u# +@O#@]1%N&$ 1u +@p0? /]1%m !@W % %%% %!%! %!! % !B     !  PPK/K!"2299999991/<9990KSXY"]@  ]]4&#"326!.54632#!#Y?@WX??Y:Arr@;nlZ?YWA?XXP!yIrrIv${g@7 % %%%B    c /<291/<20KSXY"!!!!!!#!3eex5ժFժu1&d&Nk&( 4uNk&( 2uNm&( 5uNN&( 1uk&, 4uk&, 2um&, 5u  Ic:1N&, 1u+1N ;@!    21 0 0<291/220 )#53 6&!#!!VD}}/`ŕ{HK+Fb&1 3y"+@O"@]1u\k&2 4u@O]1u\k&2 2u@O]1u\m&2 5u +@ /]1u\^&2 3u 0!+@O0@!]1u\N&2 1u +@p0? /]1;T .@     <91<290 7   ^t^_t\t%\^u^uw^ +k@:+)&  *&&, #* #)+262#5,999999991/9999990324&' .#"#"&''7&5327sT sV)+y=g %s9d/NZIn-QUPeQzQQFIRPJ=k&8 4u@O]1=k&8 2u@O]1=m&8 5u $+@ $/ $ ]1=N&8 1u$!+@p!$0!?$ !/$!$]1%k&< 2u@ ]14 @  28  32299991/032654&#33 !##ꞝL!󄃃}/V@1-'!  **.  !' $'$-DF099991/9904632#"&'532654&/.5467.#"#7C:oEBL;lAxC\[yqyrq|d1M*%]taQG_J'8O#kr#f&DC#f&Dv#f&Df#7&Dv#&Dj#&Dt){ C@I=70 6 %C "76. 3@:("D%=/.M/u MCM6+sD299912<2<2<999990@ 05060708]5#"32654&#"!3267#"&'#"&546;54&#"5>32>321xYS\JMWWLepO27Gn 'aȿuc^8>M<[|%!YHZqYa4+#"33)+RNPPXx+'#!?@=Bu%{&hF{Xf&HC{Xf&Hv{Xf&Hf{X&Hj@@]1Df&CDf&vDf&f @@ 0 ]1D&j +1H)@O B $ *'! !'D! >*999999199990KSX9Y"#"32.''7'3%.#"32654&Ŷ"#!H&!!#R-:/(  (-Y,\bPȑ^b n7&QvHf&RCHf&RvHf&Rf+@]1H7&Rv. +@ 0 ?. /. .]1H&Rj +@ p_PO@]1Xyo '@ w <<103#3#!!j!/ +s@>+,&  )&  *&& &,+,* # )#D>,99999999199999990 32654&'.#".5327#"&''m1$eA H#cC')d<]*,g9\ //4o0.0tGGq.78MBz;32#"&4&#"326w.dfSWWhV&\j%0& >$ +@ @O /]1#&D%m& 9$+@ _PO@/ ]1#H&D%u'u$ur{'uYD1k&& 2Zu%f&FvZ1t' 5~|&%f&fZF1P& :K&%&KF1m&& 6Zu%f&FgZRg&' 6o{ ' 0:G @8@]1N{$H@ "  @"   GH%<<1/<2990!5!533##5#"3232654&#"Z1.de5yySW;7W N0& >({X&#HNm& 9({XH&HNP& :({X&HuN'u1({uX{'uHNg&( 6$o{Xa&Hg#fPm' 5u*{Hf&fJfPm& 92*{HH&JfPP& :2*{H&JfP'*{HN'.JHm' 5u+ +@ /]1m' 5uKKQX@8Y@p`O]0?@!     1 0<22<221/<2<<2203!533##!##53!5*ʇʆ*9QF?@"   J  F<221/<<2990#4&#"##5353!!>32jq}}a1sJzz`c^' 3u, +@ O@ ?0 / ]1D7&v0& >,+@O@]1D&m& 9,+@O@]1DH&u&,uFuD&LuPP& :,D` "@LLK 1/20!!!5!!mnm`/B =@!   "!221/2<220%532765!5!#"'&!#3!53#=Ga'&HHAA@-]@QQJKDuuêK I@&  ! <<<<1/22<220!5!+53263#!!!5!#3#ZZi,+뗗Ӝ}/BCmm' 50u-Vf&f&j.'N` @9  B  DE 291/<290KSXY"]@R546Ffuv ('(;;797JIYYkiiiyxyy]]33 ##Gb`/ZFB?sl' 2v/@ ]1 l' 2vOKQX@8Y@O]0s&f/ &Os' 0m/' 0Os'y`/'yOs 7@   1 4<2.9991/903%!!'7;NwdPo;jnL >@!    <<2999991/9990;#"&5'!5!%[Y饵P{;Pu|~$o/nFk' 2!u1m&vQF&*1{&0QFm&1 6*uf&Qg&Q{`IV=2@  1021/90+5327654&#"#3>32=YZͧZ-,t|6~ij>>WotV{ 2@  JF!21/90+5327654&#"#367632YZ͹Z-,jqFE1TTsTU6ij>>~ʗ[\``21qpu\0& >2+@ O@/ ]1H&R+1u\m& 92 +@/ ]1HH&R#+@]1u\k& ;2Hf&RH;@     -299991/220%! )!!!";(RH=MKF{ 8i@92/ & 8   #5/)#92& MuMCM,s9299912<229999904654&#"265&#"!3267#"&'#"32>32PVWMfRPhgPPcpP/;}Jb04TY/%W & +#T53+)CBDA88>A>Ak' 2u5jm'vU&r5 {&Ug&5 6ojf&UgZJk' 2u6m&vVJm' 5u6f&fVuJ&6u{&VJm&6 6uf&Vg/u&7u&yW/m&7 6u +1~&W 0/-@  : : <<1/2<20!!!!#!5!!/s-  +ժA@B@!    <<<<2991/<2<2990!!3#;#"&=#535!5!f^^uϪ+|b>=^' 3u8/ +@O@ ]17&vX'+@/ ]1=0& >8+@ O@/ ]1&X+1=m& 98+@/ ]1H&X+@]1=U&8t O&Xt=k& ;8f&Xe=&8uu^&Xut' 5|:+1m&fZ+1%t' 5|< +1hVm&f \%N&< 1u +1k' 2u=m&vV]P& :2=&]m&= 6uf&]g',@   <991/990#!5!546;#"+cM=яNQFX%>32#"&'##53533!!#&#"32y,fd.{{aRXWSzzc)?@$   2 !$'+9291/9032654&#32654&#%!2)"#546xxtB>d{f>p}qdƵϠ/Wp1FqGX>32#"&'#!!&#"32y,fd.RXWS0 327654'&#'3)'KKOO{e5Fq>=DEdgh=< !&#"32>32#"'&'#'҈FDDFl,fttttdLL.zYmnnnRRX랝+,S|1/@21 <1@   0>3 !"&'532#"M[?[MIXVJ))gj))=@0230@=<g"%# !2676;".#"3267M[?ZO*ZT3,JVXI5))p*32j>5F=@@=^s!%# !2676;".#"3267JR%FC=ZZ-,I]`A9++8(8rGj>>~A:;>N3 !#"#546 6&!#FVD6<0c//&r1FHKwN#";5!! $5476%3羽EF5e{ɉ{+ˡd4 32654&#"5!#5#"32_.df,T}SW;7XR=G{ 7%2654&#"#"/532376?654'&'&'&'&32h(>vwf2BFKI I<' )iy|{L (=\RR $+.! -&N +@ 1 3 21@  /0!5!!5!!5NwrT+u\=@ 26 25991@  9905!54#"5>32#"327uVJM[׌~ S@=))yz~#7(>@  22&0)1@ )) #)90.54$32.#";#"3267#"$546IyhYbfgg"{ (({smz45$&Ε?V!!!!+532765| YZZ-,ժH#ij>>~V'$+"!!+532765!5!547676;'a'&QRF1i&&(W%6MI!RI ! 5 3 3325D`H&0tt?uo+EA&#767653#"'&54&#"#367632"&76/JI_BG}MKUv14IBe``  1:!5!!;#"'&5=,-Z٪\Y+z=>jf!!3!!#!!5!!5!!= 99ժi@n67632'&#"##3i~\/j!-<BmV c3r%3sh5476;#"33 ##YZ͹Z-,Gbij>>~ZFB? ;#"&=#53!5!;+[Y饵 |~ĎɎ1m% # #''3C\P"Pn@Jo |mo"%#"&33265332653#5#"&8"iJo5FP;9JI9!c?LerHE! s{ p{+`=R{#4&#"#3>32jq1sd``cu\  32'&#"32767\:DC; 9CD8 z~{{vu'y2 {'R-%63273# &#"327-N5>o毴o8=yy=Y+͠v~^VR{ 763273##"'&7327&#"VPeo~簵noVAA( /s%+n+͝u"mmB8!+#"#54763! 27654&+Vn]6<0``~'R@]M//&r1FRQE8DVT*3265'"#"67232#"&'#76;#"w" . [f,?N͹ /2FIWS.O#.+#33232654&#N76SٲM{cݑ77hy]ҔYJ'>323267#"$546?>54&#"iV luhskijm^\''Ƞ/ vp{DI--յ1#hcq<;{'>323267#"&546?>54&#"PZڒEzTgjS썉J\{}SO9!!1Yc55##}#JKSQ..xmvV[!&'&#"3;#"'&5# 54!238!n|wx'%dQW/R5-0A3=g)(V\`@oV !!;+53276=#"&5!5!f^^uYZ͹Z-,(Ϫ+|bij>>~`>/&#5463!!#ŃF1-/7&r1F+!!;#"&5!5!5476;#"f^^uϪ*YZ͹Z-,`|b`ij>>~/V!!;#"'&5!/s-,-ZߥZY+ժ~>>ji? '8v'q'|XdJ##"47#5! 54'5{no{x4xn8!L IL*!"'&533254'3\Z,,Zxznjf?~>> ILɸ#367632'&#"kSHcm.-PKG "(3t*b7m*9 Vm+5326?3 67632'&#"nQGJ|lLT3!;^2Q+31705+h:=HTN~) )!3!#!!5#5!!uP" "v՚i@5b!!!#!!5!5!!-8YbҖg 7654'&+5!5!2! $5dc{dd\^rhbVPKKKKIJG8+lh3! $54767635!!#" 76RUci r\\dc{dd݊hl+8GJIKKKK}LT` 5!!#"3267# $547676peje]\dcmTjdc^QVbܨ JKKK21%݊hm*8V$` 2767# 4%$54#0!!5! TMOQWPVa ejo0, 5%b|8d1a# 6323#!!5!5!67654'&#"п -"BP8u~i9Dc``JU?T<>< % 7654'&#!!!!2! &53h<= \^G/"icUPRz,ʞ[+3IJ I8+le[tG)}LT` 7654'&#!!!76!"'57?\]ȨgcUQԪ-5IJ,39+lhJc 4'&+#5333#!"'53276MJY>lunc9rO_}nw~FVrA}Vg{#36763254'&#"64QҸMNr98xܭz BR1pqWBA3#+9'6-3!!!!#!5!5!5!^^``l%m&$ 6u#f&Dgm&, 6uDf&gu\m&2 6uHf&Rg=m&8 6u#+@ /##]1f&Xg=' 1&8i2&&Xq<=' 1&8 2&&X<=' 1&8 6&&X<=' 1&8 4'<zW{%' 1'i$#2'q<%'i& :$#2'q<0' >)&fPm' 6u*{Hf&gJm' 6u.m' 6uNue\&u2eH{&uRue\0& >eH&m' 6uy}LTf&g7Va&g#fPk' 2Zu*{Hf&vJ=%2763#"'&5!#3!3m6!h9Hն+ROf'MSb9du'Fk' 4u1f&CQk' 2u)f&vk' 2u/f&v%k& <$#f&D%m& 8$#H&DNk& <({Xf&HNm& 8({XH&Hk& <,Df&m& 8,DH&u\k& <2Hf&Ru\m& 82HH&Rk& <5hf'Um& 85jH'U=k& <8f&X=m& 88H&XJ&6{&V/&7&YW}RT. 56$>54&#"57>54.#"5632 4o1\}p_s54&#"57>54.#"5$32Fp>!BlJc(v];?"AW?-1CA#E ptgDZX%KlaF='.`[b[3XpVU 32=t|6~kWotl(1%7276"'676#"'#7&/'&'&3232654&"m B{ rhG0wD &8Md\]P{#looԐ>>t#O9 Y%Z5H7WSCTV!!3+53276=!5!"YZ͹Z-,՚o*ij>>~Vb!!#+53276=!5!-}YZ͹Z-,|bܖij>>~%%P& :$#&DuN&2({uX{&2Hu\' 1'i2H2'q<u\&2' 3iH2'q<u\P& :2H&Ru\'i& :2H2'q<%0& ><hV&\l %7276"#7&'&5!5!676#" B{wD3' rhF>O9aJwt#jlf{.%7276"'676"'#7&'&=4&#"#3>324 B{zgG1wD3'5ZI9!c?98>>r.O9aJs{``>t#O9aJ;>V` ,@   991990!5!+5326XZZӜ}xY12654&"&#"32>32#"&'#5#"323QSSQPQRRQP]=zz<\o\32#"&'#QSSZQPPSSPP]=yz<\o\GJR\D%QM((_]q"! ^`A7S]++ L8 rMq;> 3!!!!!5! d iA!#!5!7##'-.d'Jug[|BJ8jF{5.#"3#"'&/&/5632654/&'&54632OS}{\Jvh*L'TrGY3e2{zD>zEGIZ9..QSKJ#}^R ~$=&[5#`cY1!GJ!b!;#"'&/&#=!-j1 *L4[TrGY=Zb ~$=&[?%7"#5463!2##326&#v6<0~'ʌ//&r1F )533!33##"&'.=)3267>5~9FBjiCE:  yVWx! A?;::;>`m];<<;\l9 #3#i++!!2#.+##5332654&#LN76SٲM{cmˉҔ77hy]w{.#"!!##533>32;zI[M ܹ.Dv6y.*l\<Ĥw"$8{ )32654&#"3>32+3267#"&'.>zl<^\fX<& +qpepӺ)Ld_y64''RR2{{0@G H221/99053#5#"3232654&#"Z.deэSW;7W Wy 0@  G F221/9904&#"326>32#"&'#3.de,-xSWWS^X $9@  !G! F%22991/04&#"326>32#"&'#46;#",fd.̸ZZ/xRXWS~Ӝ}}{0@ <1@   0>3 !"&'532654&#"JR&PNH\`@%++*,A:;>s:{!)47&'&!2.#"63 !"'3254#" 90%QNI]cU-RG+>jiáS,+;7W{7 &32654&#"%5476;#"#5#"32;mjkookjDGH8H$#${PϳQ{#T ij>>~SW;7WSzW{432!"&'5326=!7!.#"z [imX^^"++98ȷzW{?@ I H991@  9905!54&#"5>3 #"73267zXmi[&Z89++"Ƣ{ )%654'2273;#"&5 '&'&'& 56BL+>w9P!1jcGF:“֊>8E#ZuaQ`vg("chV({09@ 22&%!*2 &.F110&'&54632&'&#";#"32767#"'&546wA@Q[\ihWVLHHZ[c[[MaZ[V_A@^  VJ=+,nQb54"[\m({(<@! #)) )& )190#"&'532654&+532654&#"5>32U`LdKhiP_m"#ibQnW=JV^8{B#"&'5327654'&+5327654'&#"56763273;#"'&55c88hh@H9DDKCE@?qv|f6688h8AANODE<[KO 0A=1_JJm\["45bQ77,+=J++  OAf10`ZȢA"y( !27654'&+532764&%632#"'$Sv<;;!!;yUkbbkˠU^A;;LL67ss.gg=XVq^!+53265!5!!5!qZZh(Ӝ}}ؤg {H4&05476;#"#"&'5326=#"43#"326HH1:hh>CO6xn#{XЮmssngn^ ij>>~.,}^\:<bH4^ $!"326#"&'5326=#"4763!|LSbC,muq9b.,}^\:ᥟzX %#5!#"!2&'&#"32BHXN,>hhxpVHdbbd">:KMrqfqrfQk^".5 3 3265+]ܞ^+ r.$a32#4&#"#5476;#"}2rjrZZκZX `cJij|~V(>32+5327654&#"#5476;#"}1rX[̸[-,jrZZκZX `c6ij>>~ʗij|~23#!!!!!5!!5!! bnnl~ ˏ5i ^!#"'&5!5!; ̦ZXXZjf;8~|2^ !!!!5!!nnl^BXy&;#"&=&#"5>32!5!3267#"'.H>ꤶ./OINS)&r\FJKOUi(? ;?<65=>;7-4 ;#"&=# 5432!5!3#'&#"3[Y襵>5*GN\|~ܽ󠠄K9V  ;#"&5!5![Y饵|~(L-;#"&5#5!!2#"'&'532654'&+5!HHTgOE@KOPUCWJJX|~A$8+lh%12KJhj{!%#"&3326532653#5#"&2"hJn4FP<88 d>LfHE!s{p{`LfHE!s{p{)32+532654&#"#4&#"#3>32"iJoSN5FP;9JI9!c?S,5HEcԜ|~s{p{^^@;#+VM{+532765367632#4&#"{5D1DCWVV\^oA@01re22wx\__V{ 4'&#"#3>32;#"'&./]p@A2XVV?4<>OO__^edwxH10``A{ !3!##{yyH{  #"%"!&'&!3276ߌH?7?H4HH4{-m__mOmmOE`!!!!!"'&763#";d~~~~ KKKK`hghi&{.4'&#"3276=332#"'&'#"'&57!29PHJ|")u) }07_CC_vD8@jxZqosO++Oz2ee2z| VH&/#5!#3!535&'&76767654'&_|{_hd{{dE,HH,O1HH1ouu{{BnmBHImnI^732653#5#"&';zI.Dv6.*+w"$732653#5#"&';zI.Dv6.*w"$fV^;#"&=#"&'532653YZNb.Dv6;zI}}w"$.*+jV{.#"#3>32;zI.Dv6y.*)w"$jV{;#"&53>32.#"#,,[.Dv6;zI[[}?>rw"$.*ll2{476;#"!!5!RRҼj&$pnhb`022{!!5!4&+532jnnHlдRRV``bzW^!#&'&+#!2327654'&#7545â?;;alkpw?@@?w 66^q$%'^NMi++ST**zW^!#!3327673327654'&+jpkl|a;;?î545(w?@@?wSiQP^)%$q^667**TS++V{8.#"#"';#"&=327654'&/&'&54632N[DF20@RRz|hj&"nfdbbFF24@LLf?((**T@%$!*MLZ[705-,QK((%$JK}VT+5326546;#"ӳZZcMӜ}}¸Qg}VT!+53265!5!!5!546;#"4ZZ=cMh(Ӝ}}ؤiPQg}VT^;#"&54'&+532'&cݳ--Zg() |@>vV[!#"327673## 54!3476;#"8tn!ʷ5RWQîd%'3A0Ǜo@`\V()g+`!5!4&+532!!H^^uϪ+>`|bW!!;#"&5!5!f^^uϪ+|b >`!533!33##5#"&=)3276:CYYu>>|WMĤ45wEioabdo?ܤdqnܑkmhAw` !+"'&5#5!?27654'&'&UBr86FRQS&(g3XXBO\Ldqn``;612abdw7,H`!# #3T`` !# # #33”­jj`jH >;#"# #4N|lLT2"zHTlfk}3 3#f%.]}8 V`!!;#"&=!5!;4z `ۧ10%*`!#47!5!5!332!'3254#ejL<FX3<;4% 6[}LT` 2!"'&'5327654'&+5!5!ajbVQ^cdjTmcd\]ej8*mh%12KKKJiLh`$- 76654'&+5!5!2#4'07&#"327* \^ejeidTQ'd( }ŃcL;*1JJ$8+lgqUeR8y*K/K327654'&#"56763 #?W::fPONNLQQUmlprLbAr+#}swt#&'&5476!2&'&#"3ʪplnUQQLNONPc9:Vws}#+rAbLr3!"'&'5327674'&#˪plmUQQLNNOPc9:Vtws}#+rAbLrJ#476!2&'&#"32767# '&5nUQQLNONPc99cPNONLQQUn>}#+rAAr+#}_-sB (47632 7 654'&#"47632"'&_ԚO̵eddede"!/."!B^!"5Ԝ0ٍccƍffff.""""./B!!} -@   F!21/9032654&#32654&#%!2#!]_Z^UTTVeb`sci?\dU?.Vi}u"y+";#"3$''"'&5467.5476322s9@< <@7uTxVddjbbjdd6=76NJ@6sx>WVggWV6l0%#5!#"'&76325476;#"#&'&#"32t:{}|3H >ws}#+rAbLr #26&"3!!!+5#"32deen a^!;8NN8:j+^Lۓa31DD10ML C3276'&#"%#5#"'&76323!2#"'&'5327654'&+5!22XW3223WX2o#55JzLMMLzJ55#o ?M;319;<@3xAr;<78chqjtssttss_3d0110d^L$8*mh%12KKKJ6 ,326&"!5!332+#47'#5#"3233254#dees ai$\\#jKyyKj#n0 h*5j 3.#"#"'&'#"&5#5333#;532654'&/.54632/e6RR;Y%w026:8>qaQQo-Ek>v;NTj&g[{=l?((TT@I!,KL!&`>NM55YQK($)$V4%.!5476;#"+53276=#"'&5#53!3A &'p.6@3632&'&#"632#"'47&'#"&5#533254#"&57#3uZ310.///0l;;;2v1+\!raQQ$-WO=MT-E‚#+qrfr9DhT"2`>9KiNVH3+5327654&#"####53546;#";67632G11l?KJYhonjjhqij;/m(56Ft<;H``01/яNPhce22wx%7&'&#"#"'&'#367632327654'&/&'&;>ABgf$&n/<>][ALODKTLDCKEJIa54%"092?)TT?&$!,KL\[&:MV3-+RK(#*$JA 3!!!+ۊqvLۓB 333# #333# #ttttU=B!#!#!#!#kkUXrXJ 4&+53232653#9O%5zpcęaBþybV "32653;#"'&'5#"4'&+532Zgo0>*m/2O?*mbþyf\gę10A @ 32tNN^luu)qJy}wYYk\g88A3>32#4&#"#5476;#")qJy}tNN^lu43rB98wYXj\1Sw66WU 3+532653#wtgr,B0ttxlX6Vr8.#"#3>327.bjtt%uT  qksa97832653#5#"&'.bjtt%uT  qkJa97Q32653;#"'&=#5#"&'Q.biuB-r33$vS  qkJH VX66x a970!+33276?3327654'&+CGDDuj=%%(f{n!!!|K((((K|N;[--s?5/.B 333# #tt+5326?331]O\D05 {{bpEW(K/itf--452654DŽ@XX@rPPPP=>X@?X=>POPP"'&4763"3tPNNPt@XX@PPOP>=X?@X>^s327654'&#"567632#(y6$$>q31210336WEDGkM@*7K$@ ` XFh_@C^s#&'&547632&'&#"3kGDFV63301213q>$$6yMAmC@_hFX ` @$K7*@)f7@  91290K TKT[X@878Y3#'#f)f7@  91<90K TKT[X@878Y373x$@1@0#+=b$@1@0%#+=/#!!heJ'#!heJ#b#c>U 533##5#5uJu!5!J>ߖ/)HDV{ W @  P{P10K TK T[X@878YK TX@878Y#"&546324&#"326{tsst{X@@WW@@Xssss?XW@AWXu"  @  |1/90!33267#"&546w-+76 >&Dzs5=X.. W]0i7@!   PP99991<<99990K TK T[X@878YKTX@878Y@?       ]'.#"#>3232673#"&d9!&$|f['@%9! '$}f['@Z7JQ!7JQXfs%3;!"'&5k&&iWRd10`ZȢ% '&73733256/MMV| ;#"&5#5!88hr.EGWwl:Q[v/).#"#"&'532654'&/.54632P1j8WV>](}248{D@}=RX o)k`@q a//$)*+MWfk2-*SIXa #'#37 ͉H+^s#&'&547632&'&#"3kGDFV63301213q>$$6y[AmC@_hFX ` @$K7*@,X!!5!yЈ,X!!5!34,X3#!5hh,X3#!54,X%3!5 DfCfv)ff7v=b10!!=V /)H @ PP1<0332673#"&/w `WU`w HLJJLD@ a103#?Fj82#567654#"56J24C1xZ@Vƪ@$C!Xl05^ V{tXf%@991<203#3# fx)fg"#DVv'4f#!#͇fxx/)'sr/)H >32#.#"/ w`UW` )LJJL" #3ﻒY#55#53pp{53#3"pp{f3# qfyX0CbyX0v53#5#5L:#33T걈s^p!5!#.q532654&'3#"&=X.. W]0ihw-+76 >&Dzs5  "&463"]]3GGlbbG23GbL3!5353:^H#5!##걈c_I #53533##sc^5!tcV %+53276=YZ͹Z-,ij>>~V 73;#"'&5,-ZͥZY~>>jic/@a103#?d.@ aa1<203#%3#@ D  1  0#"&546324&#"326D]\\]bG33FF33G\\\\2GF34FG;@103#ﻒu)8  @ |1/90@ IYiy]!#"&'532654&'85xv-W,"K/:=,,>i0Y[ 0.W=u#u $s/#DU|/#5!#|J9X#"4533273273"h;tv gfv ifvtR)@  91<90373x)@  912903#'#m/8 @ PP1<0332673#"&/w `WU`w LJJL/: #.#"#>32w `WU`w LJJL5@!   PP99991<<99990@?       ]'.#"#>3232673#"&d9!&$|f['@%9! '$}f['@X7JQ!7JQ=/10!!>VєmB]Xy a&h!5&hhh5!Ĥ/'\ ]`LM'ogDdFFJ  26544#3GG3]]lG32GbU|3!53UJU |/!!|&b9X632#&#"#&'"#72h54'&' RJ 6"RH 0PQn +0PQn  &Ds7"#4%62#&%n~vv<<tf3AntVH%#AnHV #"=3;X3Vh'fv?F&jrf&>/`yNf&DHf&f&D\f&pf&f&6&%$q%sI%1/01/0@%%%%% !3yyN(=H+u\6@ 26 25IJ]1@ 0!5!#"32#"320qYǪIIz~,.%0/01/<0@%%%%3#3#+#Vy0F1H (1  <<1@   /0!5!5!!5HA)Aժ9u\2HUu3xm < 1 <21@ /220@% %%% !!5 5!!9" :A@/7%<uZ&/M@"2  &,2(0<<2<<21@&( '   /<<2<<203!535&'&547675#5!67654'&'Ͱa|{aa{{bL+CC+LL*DD*+v[ssZttZss[v*DD*7*DD*;uZ9@  <<1@   /22<<2067633!535&'&3I.K{bb{L-I["WDWx ֪ WW"J@@qqro prol 991@ /<20353&5323!5654#"J{n !o{1xx 7oȼ߅LI LN' 1u%N' 1uFf&(f&Vf&6f&3i& Fy *'&'&3273;#"'&''&'&767,-b=MJMUHi;c( #) Xn^T).\-rv~ oik*%1)0T*XmY*)Va!%#54'$QQ 0kEb6=q'0  Vm`&+532 3#-^1FAF[D~S]VH" 4"32654&%&'&54632&'&#"76hY(>f2BFUR I<' )iy|{L (=\ $+.! -&({R&%#457654'&# !5!OTJPE* :Lf.,KOxsPWKL,#%5,*3eaZiV{.@ J  F21@    /90#4&#"#3>32jq1s```cH9@ D >221@ @]0&'&#"!32762#"?HH?5@HH@<⇙8wyvs6`@ 1@ /0;#"'&'#5"$lYoRQ`+.0`b;`D # #'&#5~J/1Fe<2T`wtB`!367676'&'31!xdLjE.*{`T|p5dwY|rNįtR8&%#457654'&# 4%$47#5! OTJPE* 9MKOxsPWKL,#%5,*p$Rݿ &H{RP`!#3267#"&5!##P117,#J%q\T`PH? XVT{.@ G  F21@  906#"&'#764&#"326ttf,n䇅{WS<R%{$%#457654'&# !2.#"OTJPE* :%QNI]]^KOxsPWKL,#%5,*8(8*,A:nok` 2@  D>ij991@ 20"32654'&7'"763!aFH<Ηr{sPSے-- 2^!@  1@ /20%;#"'&5!5!!$lYoRR0`b3i`%27676'&'31%"'&5#5!tZ;jF-*RR"#vfwZ{s`b;+.0LVh )O@ '#* KQXYԴ0'']<<Դ0]1@' *2<220"27654'&'2##"'&7673A\VMMG*w|~~hA1LLNeˑRh]c[斘n,mKseg.YVx`#&+53 3;# t/1FC /1Fz ~,~VN`%67653#&'&533?>TyyT>?@WxؑoW@F`&#"&'#"'&37676376' 2KUXK2~)@V""V@)~`{gLHk{A>oRyRo>6&j3i& jHf&3if& Ff&$ # 76'&%$'&763 '7676] NI5|utf M2C6R6WpA{z Ʋ itR$ $6'&'&'&7!2#"'&32765JgNn-R Nr^ydPpw{A K~}Sj~"#4''&5676'&qO**d\txLJso@z8 vVOv~*+40r51_Tpf&"N& 1umVd'#&'&7673567654'&'ĸh]i^V5RR*aW4QQ(VyvaxxGnռFCImֹD9` !32376&7%&# 67#5!'TQ0'( 0A_+T3 4`/&'&7'&7676'&#"56776327'5!`ȍ=`[+9[R~!*`ȍ=`[+9[&͘7 cl|YDT|˩hl="pl |YDT|˩hlfMZuV\ #"32&'&32_{|^"y|•"jVH{ "32654&#&'& h1`{{_ mw.vRL#"32#457654'&#"'&76)MbzYTJPE* 9{2e+wTOxsPWKL,#%5,*˞nͱR)`#!"#457654'&#"76))I]]_bNTJPE* 9ۓ eUlnoJOxsPWKL,#%5,*8(X)V#!47632.#"!!#"&'53276`1c3$R,x:KAb9f.1d0W@Rd>Qoɏ?s!K_`7"'&76'&52n 'BQ_'BQ_[~,`*l#FR`*l#FRM #!3M&pM]!V!#56#'0#0?&'&bTB9[@[`7"7>9[@[|"O z:6hl0%[Ml |"Oz:6hl0%?[MVT{ 7636#"&')! $&#"32nttf,hՇ<WSs)%{FVMu\&'&#"!3276 32 5DC6 >BCD@qopުՈOz~ {!&'&#"!!32?# '&76!2 %%cjf_[_fMJOhk en(' c\\c(  {"056763 !"/532767!5!&'&#"'(ne khOJMf_[_fjc% ؜c\\c VT1&Vy ! !###V{+'`VO` !!###`{`UVT{##5#537636#"&'!&#"32wiinttf,;pp>WS17532#"5>3 !"&IXVJM[?[5=@0230@=))gj)1&/y1'yc3Nk' 4uKNN' 18uK*o/32654&#"##5!!676767632#"'4=N qjqjW.E~C%0"@X UkiS*\o-* % T pFwusk' 2HuI1L@!21 0221IIPX@8Y0327# !2&#"!^?s}RooR}J6,N&< 1u+1m-%326&+32+##526!Z}y^ϬvH+W"%32654&+!#3!332#!Z}x_uwg)9dqco"676767632#4&#"##5!%0"@X UjqjW.E~-* % T pΗ*\o-k' 2uPFk' 4uNhm& 9YH 33!3!#)v++B%$q2@   21 0291/032654&#!3)!qﰖE{e5F{f>dghq%s141/03!!/ժ!0@  1@ /2220%3#!#32!!3!7yŪM0'TB /ѪBL ҪN(x@   <<91@ B /<<2290KSX@ % %Y@ I:I:I:I:I:I: <<<<33 ##'# 3 0YY0S0кv{Z7F <@  B 10 991/<2990KSXY"33!#3+3Fm& 9N.F$@  1@  /<0#526!#v.+W++Vy0H+u\2H@ 101/<0!#!#++u31&/7h?@ B120KSX@%%%%Y+532767673 3;E,LE\mQ.-"X74oJ+'/.M *5>Bg@2  2 <<<<1@ /<2<20 KTKT[KT[KT[X!  @868Y3#5&%>54&'II Ǹ ˥II<{z WS ;P $@   1/22033!33#P)ˆ+BD @   021/20332673##"&nmuz[v~PEx+:r` &@   1@ /2<<0)33333`++</@   1@   /22<<03333333#<ຆ++B u*@ 2 2/1@  /0%32654&+!5!32#ϊ)+An ,@  22/1@  /<20!3%327654&+332#[fN+1@"#( +0! 3 632#"6/&4767676%67䐌x$[3#F#3bJ/P{3-wRIUA   +t` -@   F!21/9032654&#32654&#%!2#!_eUkUTTVe_cmcpPO^UCCVpou`@ 1/0#!6`ih`0@  1@  /2220%3#!#325!!3y-C7 "Ld64d!{X{H;`x@  <<91@ B /<<2290KSX@  Y@ I:I:I:I:I:I: <<<<33##'#3hh`Pl4_P({` =@ F 221@B /<2990KSX@ Y #33#b縸)`)H&n``"@ 1@ /<0!#!+53265 _7#U^`v=` N@B      221/<290KSX@  Y3 3###=ww`M` $@   F 221/<20!#3!3#b縸`9H{R`@F1/<0!#!#bW6`VT{S%{F`@ 1/<0#!5!и&6ʖhV`\cVec@    <<<54&xjjx޸ܸxjj ++ gsL`[|^` $@   1/220%#!3!3^渖L`66b!@   F21  /20332673##"&øknXrE5od]'+}U` $@    1/2<0)33333U(`66P`-@   1@  /2<0)333333#".𨐖`666L`)@  2/1@  /0%32654&+#5!!2#|y֜XZZZʖ;hi` +@   2/1@  /<20!3%32654&+332#S|yS[`Y[[[`;8`*@    F291/0%32654&+3!2#{֙YZ^X`;%{K@  <21@   IIPX @8Y07532767!5!&'&#"5>3 !"&A`^S E^]INQ%R9>;qdRp:A,*윜+N{ ?@#    221/904&#"726332#"'##3pLLqjUUe9ҝ暙?``B@  291@ B  /<90KSX  Y;#".5463!##r78r5ܖaUmV9{Xm&kC{X&kj##VT533!!>32564&#"##@1|yj{яLs`c. m&ivQ%{L@    F 221IIPX@8Y0%# '&!2.#"%!3267%JR%QNI]]E S^`A9++8*,A:pSdq;>{VDLD&j +1VM `%2+##+53265!327 RC'#U^5iрiv;A`%254+32+!#3!3 褽l`9#9533!!>32#4&#"##@1sjqяLs`cBm&pv0m&nC@hVH&y` 33!3!#ø`6 u%326&+32#!!5!53!q zQ533!!!2#!3264&+WH|y͓LΧXZu\aH{s@141/03!3!/2$@ 1/0#!38X`:Us 3!!!!##U/#˂>` !#53!!!!`¸ fs#!!!2+5327654&#/7qohfL>87||9ժFwr|zKK"VR`#!!3 +5327654'&#HRRQn!&&1`GQ``07 )3 3333###'0:YY{ZSS/B0кv;`33333###';M4hhPPlL_u7&Mu({&m%3###33VrwBh`%3###33,bG*B?`/Z%3##!#3!3)˪B9db|`%3##!#3!3ø縸*`Cu1&dWu%{&hw/ %3##!5!!+s-B+` %3##!5!!ø&ɸ*%<\Vt`3 3#\IIT`lD%3 3!!#!5!5%lk! mP\P\Vt`3 33##5#535\IIT`l55%3## # 3 3XfuPHNAB}3BL`%3## # 3 3o)'o*?HkG#4&#"#36?6?2GjqjW.E#20@0X U ڗ*\cU'% T pK,m& 9L;H&lf32+5327654&+#33stohfL>87||wwqwr|zKK"hVm`3 +5327654'&+#33j:HRRQn!&&1'wGQ``07 )&?`/fH%+532765!#3!3HhgL>87)hzzKK_9dV`+532765!#3!3RQn!&``07 `CG %"'&'&5332767653##|#3/@0X TjqjW.Fժ$'% T pI*\z)b%6#"&53326=3##c<1Tsjqø~3$2 #%m& 9F+@ _PO@/ ]1#H&f%N&F 1u +@p0? /]1#&jf){Nm& 9K{XH&ku\QzW{u\N' 1uzW&jN' 1uL;&jl7N' 1uM(&jmy}LT`7F0& >N&nFN' 1uN&jnu\N&T 1u +@p0? /]1H&tj+@ pO@]1u\*H{u\N' 1uH&j1N' 1uc%&jh0& >YhV&yhN' 1uYhV&jyhk& ;YhVf&yDN' 1u]&j}s %3##!!/Bժ` %3##!!øȸ*`AnN' 1uahi&j7R({u\4RwT:`Z1"$/#4'&'3767653653#"''##53 ra{ .r &q,bS !/#12j{@E#$]|0q!<"5DAb1)*5"32767#"'&54767&'&'&76'##53|LAV:218UG&/=8O6-N@?_F?D(7-"Gq/#)^ %$ \*$@.!* n F?\KH* #TH#5DAbZw %3#%3#3#%3#ô ^ %3#%3#%3#3#%3#̠&!#53ӤR@dm 327654'+53367657M593pQf$h?FA@6b !eI(R[2* #53 3#ӤR%@-$%#5754&'./.54632.#"'/XZH߸g^aOl39ZZ8{4<5/VVL89CFnY1^5YVeU-"%56767&'&54767632&767/SD435gcbnZdF31`9:H:ZU!LOTAKv?=0ps2# &%[&$r 3# E' D, S' EqE ' E SE' F SX f' D X f$$27'&5767&X$JԖ`e_'@5 ^vbĘe4)X ' Dj%67654'&'3#"'532T! D' DU $?%#"'&7673327676'4/37653323#"'&' &!UNBAE3I0<^yM\dsቬ+;H2zm^\꜑#P}g£x&R" C~m8($' Fc  =%327654'&#"67632+"'&5#"'&5473767654'&'3HIj($@GgLK1ZX%5,0.3cM[|dh<2=B%A !  .DF-%!mNH7(M' DO   %327654'&#"!#53367632,Ij($?GhKL1[W~.DF-%!mNظ\wLR! Xn*' X &/.Q&+8O\79LK5:,]-#4CK%63#"'&&733276u2lecw@A(IiTcI9(jzG1H*V\ss~B")T.327654'&'&#"&#4763&547632#XzL,5;(.;Dn2KxAZM\MObxX'*9:X DD(NOf7*(?$S-8AP6`' D ]"327654'&'2#"'&5476B!799[]KB{ƶ`Q%T*WE{R,,9.UMAx|KU#JNL 3 &"4'&!5 767&'&'&547632?,3/V%.-js1v-3t9>YH9!$7+(;ڮ.TVLh+bZ3[f5%#"'$47332767654'&'&767632#4'&y]H?BKSxlkA;"b^M`72'#}[7 0&huqc-##NG".*3:,=2IB="9), g:^M ' Er D5%5%DHHnnnnD&567&'&54763233"/#"'&5332767654&#"t$!lD?I'8 .4LT^s7Z $08 " ,d$* 9^W4'6O'&n=NV)qaK" %D5%%5%DHHnnnnnD5%DHnnD/&'&54763233"'&'#5276767654'&#" lD?I'8" +EɓV  , 8_W4'6O -n=*{nmp" %D5%DHnn0('&54737676537654'3'&x!9EO)"a 2=`KG g&ZGM'DA2omb}8T"RY$6s9It6X !Vz 4&"2>#"&4632XXXXztrrt?XW@AWX栠732767#"&'gC*6:*kWZZB6"D6{S )L}@"Fw5 5\v4373ŠF3#< !#'3<&1yI !n8#'337673#" &1CRz6 *boajr!nUPymL%#'37676537653#"' &1/(0H/<(F!34.5WY9!nr|> @2%,*;l>3  *"2767#"'&54767&'&'&76`yg\NNYp0.VhG hRcpl?AOXj<9U9iDGTOA7.?#ou\N/ b \^xH a8' OC&6F('&5473327&'&5476&'5#"'767654'&#"%327654'&Cv-(;G--0M,Q;(J$"':AGb 41~!$@K5:,+  iEN@TSZ 'C49g=ql@H=.%4-+#%v%'r.C!0B7,g`o6oU%m`m!3/AbM3))I~R.~R/00>d{*>@ #% +BA?>pпQQ9l,"2"54767$32632&#"# '4%7654DҼJPi?3k]KM?oabu;\SfaƎ:F78UyP8327&'"'&#"%47&76$#&67 #"'632Y60I616*, !*:9u`0'"/6OAK %[9.ȵ!463 #"&'7325#'&&7'6et !yCBBquЍ h! ACBB|U )"32654&24''&5432#5476n$ % *|{e6Lj` %"%:yx~)RhKK>a 9"32654&&5456767$ 3276320! 54-6546$ % #vdz]#x.>r>>$o %"%}@~Y9peDQcFlWNn-7Vs\ ,2654&'&! 3%$4567&7'7$!% /@l~.ZA $! $?=Qm.uG4 {V{,@ //1@ <0%"32544$#"54$76f@@@)@@@@Pyxo *%"32654&"#" #"5323272#4#"$ % zw6^"$J7f %"%&PW0>{#$"2"22#"5#&567663 #4#"&퀀!7y{^܀ݹIedm%jh{'>@ $/<@ )1@")<@ & )<0&7'64323254#4%$7"6CBCbRBCACKؼJjeh0KT 24#"53265$54767653!"'#@>z]U]xTrs@0egu/ss}T|"247&76% 3%$Զ%< &Ѩ'LB}T"247&76! 3%$Զ%< &Ѩ'hBc J"32654&"32654&+&'#"'&5432'3253765&7465&'7$ % $ & cge~PLfrtгJwT\U &"$ %"%IJTObo;4ˋP6A^g[oPIcb$0+&'#"'&5432'32537653"32654&b\U{cge~PLfrt$ & ,PIIJTObo;4ˋ %"%el} ,"32654&2537653%&'# 47&76b$ $ 0nuhigeޘ %"%4ˮ/IJ=%ۏel ,"32654&2537653%&'# 47&76b$ $ 0nuhigeޘ %"%4˯IJ=%ۏ``3323!"'#"543225cиx)3Ɯ)`,88{s\ ,2654&'&! 3%$4567&7'7$!% /@l~.ZA $! $&=Qm.uG4 dm +"32654&&! ! &%$&7676=$ $ W6tm2JX $ $8${{N&ap .%"32654&%&'&'&7!2765!"'676F% $ WD NbfP'G!$ $TrJco<ob{"326! %&$'423 54! P@@<)"FTY=Ib" 2:%"32654&%!$76! 6'&'7%&'&'&7!276 54! H& $ JF r cXD NbfPt!$ $=1TvTEmMd 6"327$"327$7&76365+&7632676#4#"A?A?`ƾ5@VC?/@@@L@@@E>/} cbWZwj %-"32654&7$%&'&763 54\$ %  ʪ=A8)SUB<S %"$36H9G)#$67U 6"32654&$'&%$76!232'&#"%$'&762$ % T\oEh@MqKUPn^ %"%+DYl0yP^d6Qqt^}]F0&$"2''&'$! '&5"32?6*ʁ+=x #esZh N)=md[d'nnu ! &7623$54'74"m#!AVB8?kP$U.F~>=!{ ##"2#"5324#j=;C>{jVnn!r&o~/S~i! ! !5 74! $&>%~?>~Si! ! 3!= 74! %&>%~?>wJ~S~i! ! !5 74! #5$&>%~?>~NSi! ! 3!= 74! #5%&>%~?>wJ~T3"36654'#"5432AA\(DeN[̼o[$N[ux"325"547&5423253,r>Jm,Ws> [yu?{EBXFE '656%"'&76! 4"3VA!. {x9f>.`h>4A?~= h\$kb8:;-F_Zkf2)I 53533##5J؎؎؎xP;r 432#"324ЄLT3z! 473! 4'$331=PU~iibcWOJf34! %56'&53!! 4<1~k  !TxY9vwsknWa!%! %674#"&5! % %a lշ._z-FH+,S.+RLo ۤTnB7W !,6752363 ! 54+"&$54+"32(TX[P<fI+yhZtԕGw, bb+]mLVW3! 473! 5 &5 3I%$&>8 wjs oeKrdW2'! 673! =4+5374# #&5! 24:ip II-<-]mxRbXxR~X{\+2 ! 75&7!  4'"6258TW\F ;IJ:QU-\p!7 %#65+"! 5!2363 6#&32Ԅ!S}GJtAFWHCBuccyi2#! #&! 2Ɣ#cZY4! 473! =+53254!5 4C(pbAAZZwfq211W2 #&$'6?! &65l_$^M>p v\Y1xOh_[ )euG4! !234!#5!  ! 4E%D˼  }>>&T2! )!"363! %22:M#@͹$[ڀ g7 ##654#"#4+"#&=!2363 K@BM{hIF`fhh&4!! 473! !#53274%$534D'e[?RܬW&Z~IJȕ!6G))=iY32! 3! 5 '%5%30>'Mhko 4>>HS2>+3|'! %!5!$! 3#3%! ! 5)54!  I8<rrr OfkQؔc7X!,!"'#!52'4#&3$5!23634+"32~ Mas1D>3LIvjt| ٔxukYf!! %$54#"'! ! 4'7fGD `U6I@bYsrg8A:ԃM){6\lY4(3! 4%7%#"'#% 3! #>U&;3̿0?7YpnWc$!6=3! 47$$5! nڞòd?;kHuLL8TWJ&)*y54&#"'675&%'% t_CCty`^q|ytJfI8=\ ۣb*#2 3#3#3##Ѻ/㰽;2"4;%"4#"32lѹF|pux$LRQ´){ B32654&#"26=%!>54&#"5>32>32+3267#"&'#"&1xYS\JMLepO27Gn 'aȿuc^8>M<[|%!YHZqYaq4+#"33)+RNPPXx+'#!?@=B2({0#"'&'532654'&+532654'&#"567632wA@Q[\ihWVLHHZ[c[[MaZ[VA@^  VJ=+,nQb54"[\mPDd %!!5!!!#53)Ḹя{ 6326="326&!54&#"5>32>32#"&'#"&PVWMZfRPhgPPTcpP/;}Jb04TY/%W & +ݮyT53+)CBDA>A>A2/H{  #4&#"Ð/.G/  33265G.Ð/.+[%!5!2654&#!5!#J^adlp2r?W75353!5!2654&#!5!#?idxEvDFzlp2r+")5!2654&#!5!2654&#!5!#HEws{p{``pU?32654&#%!2+#XcbYSJKR]#'.+#!232654&#1E4p1M>ze\Y_[' ?]Z4D|vShPIKHM!!#!ڀ_A33267>53#"&'.A L67K $,*kCBk*,$=4!!!!4<8l$! !#n 333# #|ZkmZ|xyY>E )#"326757#5#"&546;5.#"5>32&ffMD_ntt&pQlT];y:Av7X|&??8?vh+]85l[hmKDg..RE )32654&#"3>32+3267#"&'.&&ffMD_ntt&pQlT];y:Av7X|&??8?vh+f]85lZimKDg..RG53#5#"&546323264&#"tt`??aVTSXXSTNO/00z{{ B32654&#"26=%!4654&#"5>32>32+3267#"&'#"&5kK84:/0n06@F2Q #S-E^T=bg~yI>;#T'1S&9NT8m\)3?26JUJLXP ZQ`.+-,`\`d1CH^#$"%G4&"2>32#"&'#3VWWaA?`tt]z{{.10/OgG3#5#"&546323264&#"tt`??aVTSXXSTDO/00z{{1!3267#"&54632.#" xn7yEB{9t\UTm 2gp fnZ_cW15!54&#"5>32#"&732671xn7yEB{9t\UTm 2gp fnZ_cWO(.54632.#";#"3267#"&546KQ3sCBm0W][Uhd^jrm>s0=r6]H5KX ]0*"0Q>-7;af]=SO(#"&'532654&+532654&#"5>32KQ3sCBm0W][Uhd^jrm>s0=r6]H5KX ]0*"0Q>-7;af]=SG '4&#"32#"&'5326=#"&5463253UQUZZVPɖ0i4>d+]V_E||D^tgxxz)f[bF5302QI !#5!#3#53W?浵ss#PP-8 33##8x0BVxyDI%">32#4&#"#4&#"#3>32B/UFj",2%j$/.#jj?'0@)&ug@Eg?Es6"#'[v+5327654&#"#367632v89hu9CGR,+tt54Ilj!pm;32#"&'53264&#"X.c43a1.\;muvl=_)ʮl$!~~!#: 46 #4&#":&{[YX[ՠxzzx:  &533265ڜ{[YX[ՠxzzxG#3>32#"&$4&"2uu`?@`8UWWbP/00z{{M!!;#"&5#535};JkPF7R]rTP[v332653#5#"&[tCGRWttkGlj{TPg`b^68~}!5!2654&#!5!#K`Yslqj=?g32#"&'#3LSbC,ml/#.,}^\VZ:5`!!!5!!5!!5!!5nnlphˏ5iV ;+53276=#"&5!5![YYZ͹Z-,0|~ij>>~G#3>32#"&$4&#"32tt`??a9VTSXXSTNqO/00z{{Xy#"&632.#"3267y.c43a1.\;muvl=_)6l$!}ut~!#QI+325&#"47&'&547632.#"632#"d&/\R@5a$^`^63302b3q>>>5|4 * &:/ZXX `@?@bj:)#"&54632.''7'37.#"32654&|s .sPm4\a^UV^%wp237,pQ57vonwwn=rO(#"&'532654&+532654&#"5>32T]5sQ0"*0] XK5HWz#"3###535463z>1tkqU.98P#P,gabo53#5!3#+53276=Ι<98h9\P\ m;d+]V_E|~4wuxzzf[bF53[v332653##"&[tCGRWttkGlj{TPg`bO68~C3#!3#3!535#535#4tt)r\PP\ap #"&5#5!;phq)99uun@PpFFI !#3!53#I?P-PPG#3!535#535#5!#?\PP\PPdm3#"54;33#'0#"3276ttdytrx !3rJMB ,|ssW?#5$ U| ;#"&5#5!98dv.FFXtp(QU| ;+53276=#"&5#5!9889ht9hr.EGbm;32+53276=14&#"#4&#"#3>32B.V"#23_uj3",2%j$/.$ii>(0@)&:;Sm;32#4&#"MU!1$XT8[]V;;FQxlX6V~a88wYYk\U|$54'&#"#367632;#"'&5:G()WW*+7[//$1!U&'H/Y,-56\sa8BDH V6X66x? 33##?-{{~: #"'&547"!&'&!3276&NNNMMNNX-(e(-W !-XY-!TUTTTTU=5cc5=J,==,:&/#5!#3!535&'&5476767654'&3fwx=%; )=xw>)[v<.#"#"/;#"'&=32654'&/.547632P1j8W*,]({44MN8> 0Br34@>?=RX!k)k`FG@98b/$+*MW33 V6X66x"192-*TIX00xY46;#"+5326 j{mo>1gr,B0]MecU-:JxlX6M!!!;+53276=#"'&5#535}J88hu956PF]m;T_^s!!#;#"'&=!5!jG$2!V&'G^=R V6X66x ^M^#47#5!5!3632#'03254#a\'Ln& m,8!!^R^=jR332#"&'532654&+5!5!dCP>i;}C5~Dx~uhn\' xM|mTPJS]R^: .#"!326 #"&54UYXUcVXYV&l~~g~]% &$ #{&DqP& :%X&2Ecq&%cX&Eq&%X&Eu1k' 2Zu&d&u%f&vZ&hFRP& :'{&GcR&'{c&GR&'{&G}uR''{u&GR&'{&GN&({X{&HN&({X{&HuNm& 9&(2{uXH&&H2XP& :6)'P& :IfP0& >2*{H&JHP& :+P& :KcH&+c&KH5' 1\+X'jHKuH'+7u'KH&+&K&,D&Lk' 2u.k' 2%uNc&.c&2N&.&2Ncs&2/c &Ocs0& >?c 0& >@s&2/ &Os&2/ &OVyk' 2u0mof&vPVyP& :0mo&PVcy&0mco{&PFP& :1&QcF&1c{&QF&1{&QF&1{&Qu\&2' 3 22H'&Rvur' 2w|3VTf&SuP& :3VT&SP& :5j&Uc&5jc{&Uc0& >]=c&^&5={&UJP& :6&VcJ&6c{&VcJP& :&6c&&V/P& :7P& :W/c&7c&W/&7&W/&7&Wd=&8d^&X=&8^&X=&8^&X=' 3' 228'&vX9E' 3\9dm&vY9c&9dcm`&Yr' 4|:m&CZr' 2|:m&v@Z4'j$:&jZP& ::&Zc&:c`&ZP& :;L&[5' 1\;L&j[%P& :<hV&\t' 5.|=m&f]c&2=cb&]&2=b&]&K'jW&tZhV&t \'P& :AH"%c&$c#{&D%ct' 5|c#m&f%& 9&$ 4#'<%cm& 9c#&rcN&({cX{&HN^' 3*u({X7&vHcNt' 5|{cXm&f"c&,cD&Luc\&2cH{&Ruc\t' 5|cHm&fk' 2ub f&vck' 4ub f&Cc^' 3ub 7&vcc&b c{&cc=&8c^&X k' 2vuq'f'vdr k' 4vuq'f'Cdr ^' 3vuq'7'vdr c'vq'cq'dr%r' 4|<hVm&C\%c&<hV`'\%^' 3u<hV7&v\Fr&uFr&Fr&Fr&Fr&Fr&F&F&%r&u%r&pkr&vkr&vr&r&&&p(r&u(r&(r&(r&(r&(r&~Nr&u~Nr&Nr&Nr&Nr&Nr&Vr&uVr&Vr&Vr&Vr&Vr&V&V&LHr&u]LHr&]?Hr&J?Hr&JHr&|Hr&|cH&DcH&D6r&u6r&r&r&'r&r&&&~r&u~r&r&r&r&r&&&Hr&uHr&Hr&Hr&Hr&Hr&\r&u~\r&\r&\r&\r&v\r&v3ir& u3ir& 3ir& 3ir& 3ir& 3ir& 3i& 3i& r&?r&JDr&1&Fr&uFr&Fr&Fr&Fr&Fr&F&F&r&uer&vr&r&r&r&&&Ff&CFf(f&C(fVf&CVff&C6fHf&CHf3if& C3ifFf&CFfFVr&ʜFVr&ʜFVr&ʜFVr&ʜFVr&ʜFVr&ʜFV&ʜFV&ʜ%Vr&t%Vr&tkVr&tkVr&tVr&tVr&tV&tV&tVr&Vr&Vr&Vr&Vr'Vr'V&V&LVHr&tLVHr&t?VHr&t?VHr&tVHr&tVHr&tcVH&tcVH&tFVr&FVr&FVr&FVr&FVr&FVr&FV&FV& Vr&!teVr&"tVr&#tVr&$tVr&t%Vr&t&V&'tV&(tFH&F&FVf&)ʜFVy&ʜFVf&ʜF7&vFV7&lʜ%m& 9%0& >f&pf%V&truVr#525#53d7vF&jvTVf&-V{&Vf&V7&vV7&{Nf&vNf[Hf&DHfVH&tr'u'r'u8d&uv/H&6&&67&v&wm& 90& >f&fr'r'$d&v3iH& 3i& 3i& 3iVTr&uVTr&3i7& v3i& w%m& 9%0& >[f&Dpf~ur&F&jr?FfCFVf&5FV`&FVf&F7&vFV7&\f&\ff&fJV&tfvr53#3"ïddm10!!d dmy/10!!/yy/10!!/yy/10!!/yy/10!!/y]&BB-@ 10#53Ěb~-@ 103#1řb/103#Śc/-#5b %@   1<20#53#53Ěb5Ǚb~~ '@   1<203#%3#řb5Ěb/ * @  1<203#%3#řb5Ěb/ #5!#5bb;/ '@  RQ R <<1<203!!#!5!nn\];/<@  R Q R <<2<<212<220%!#!5!!5!3!!!/nnnn\\?!   V 104632#"&?}|}||{|?q?P1 #@   1/<<2203#3#3#P3f111'3?Kt@%1= 1%+C@&7IF:4(:PFz4P@ PzP"P.zP@(/99991/<22299990'32654&#"4632#"&32654&#"4632#"&32654&#"4632#"&H%'H_EDbcCE_yxxwyLaEEacCEayyxxy aEF`bDEayyxxy7a`JGacECcaEyxyEaaECcaExxy"GaaGCcaExxy DP\h4632#"&62654&#"'4626763267632#"'&'#"'&'#"&732654&#"32654&#"32654&#"yxxyyaacCE%'E FedE  FeddeF  EdeF FceeO:8RR8:OxQ::PR8:QzQ::PR8:QyxxyaaECca`JyS  SS SxyT TT  T{GacECcaEGaaGCcaEGaaGCca`$3`u`'j`P','`$#3$V`u`'j`P&',Z/#@ v29190 5/-+#Ry#@ v<9190 5 +-#^R^  '4%#56763253767654'& Yb^`_hon"!^XE&->B% #D9``LAB\VBT=BR-;,,1Y7 Bw !#3#3!XEFZ !53#53#5Xޏ!' = =!' =4' == ,47632""327654'&'2#"'&5476"%F$W+,,+WX+,,+XLLLLJKKL @ !UUUUUUUUYnmnmmnmnH !3!53#3#z(洴ttPPD  5   @  W <291<29033##5!5 !wtt}oyc?}!!!>32#"&'532654&#"f6TTXYJz04?9= 25DIJLL...P\\PS****hQQ;JJKJ hh2112=!#!=HCD0;.="327654'&'&'&547632#"'&54767327654&#"hT-../RU-../P--KKKK--P]12PPPP210'(KL('NMK(')+*++*+NM*+/23Gc;::;cG3288Yq?@?@pZ88C#$$#CDH$$0.27654'&#"532765#"'&547632#"'&SP-..-PS+***(X/x==jDHIKLKKZ[-..44]\4421ab21hQP854&e_]]_eTSS}~A @ 32tNN^luu)qJy}wYYk\sa88=TdXC{dB}TtdFTud Cd?}CdITd=Cd;Rd0Td?d8d difdifdEd1d:ds|d1d ##"32.#"3267!!!!!!;JܾL:9II9^o78?*?77IG8GI`{c9'.473&'3267#"'#7&'#7&'&76?3&',;8+$"5:lUXn;4";τPqJ8=0;i<)^_HH?WgjιKp(_Y,%6767# !2.#"3>32.#"YQbUYoHqWUnrV,e#7!v'/_HGghGG_^ٜu]\YC!!!!3###5ZpP~WHE9El#!!53#535#535632.#"!!!?-쿿=OL=tyB_))HmBo)632#4&#"#5#4&#"#3>323 0?o5FP;]i9JI9!c?L3!Bjbws{Ep{``N#55YQKP%$((TT@I!*##` E326&##.+#!232654&/.54632.#"#"'&]``]z/YM$TP*N(:?>?>SZAm)naAt02k:WX?^)}j9>/b؍$~3YQKP%$((TT@I!* *-037#!3!73!733#3#####53'#53'33ٹpg1 2CYȿYD2FIn$uumuuwugu* %2#4&#!#)"33!3*ԕ|aԕ~V*$oN{&kz%%3p@< 1& (# #43('1)-&- 2'-4229999999999122<2032.#"!!!!3267#"#73&'&54767#70TJBN1Fi1OCHU,1u1!(*=Dl-.&nC>*( n -/ l*33!!###5<~rTws1s/!5!!77#'%5'+s-PPMMo؈onوn9-bw'67>32#"'&'"326767654'&'&67'>7632#"'.'&/#"'&54632326767654'&'&&#"32fbU!O3'A"+0.!. !  _ \5#?\k2,,#2!$(2( 4" )1>((E8&^ ,9Q F 9)ЗiRm:3Xwdg7? 2j7#=5(6$ 629T/ (2M !:5S}$@{mbq~Es/4 -& "TAB`]|@8nRkcd]aC".)5'632327&547632#527654'#"'&#"%654'&#"o|@X"07PYtaTk~j[IwmqJ2530D#24!`NkBX``S㫣†qJ`R{{{{{A667654&#"5>323#!!3267#"$547#536767!5? 7^\iV ^':,hski HE 4cq<;''K={[/ {9b{DI--N@{ O/{O!,&'&#2767#&'&576757O[TUeeUT[Y\Y[dsye]Y\[CvlCi----iH$"u9Bt"#BuflC1 %3267# !2."_|dT ȄE}=[~oi 7@,L]r4*:0N̾ (2.#"3267#"&54632%3#"326.2"&54:F#KVVK#F:-Q.~*Pʇ=II=323]W!{/tKb J G'QWab ^TH632#64&#"#'?3%Ǘŋ]W!{ 1$ÑEmJHWEbOYbcJ %# !3!# GHMZMd q+  #  "32!!3463"##526eb223b WU&WU&  1Q~>;\>}N*3>"32>54.'2#".5467>32654&#%!2+#hjMMKLijKLkZZ\[~}ڶ[\ZZ&RXXRuJjhKLLLijJgZZ[~}ڶ[[}~[ZZICBISqmopB 33!27&#%!2+!67654'&` `s1:+YX*q jdZ)VV) (%#'#  %27&"676'&\ӿ,F E]]]][{ab[ 2222jT%%5$c$% &.2&'&+3!.+!!2!27&#676'&%3A::f&AVy-`5?vfAd)7%LK$201/O~hbb)j)V>U)- fh@6    B     ` `_`_/91<<2<<90KSXY"###5!3###r}r7q^^-B0 %#!!!5!bJZCJ]d qddd J.%m -)7 7673 $54$32!"53!25&'&#"6Ky {U>ZLtࠢ""38M{{M7M3TT<`xGZAEIpP3RQ4Oe{'uV& 7{e'uV& 7tZ{'V& 7{Z'V& 7tZ'V& 7u Z{'V& 7j{'V& 7{j{'V& 7_{'V& 7{_'V& 7u_{'V& 7_{'V& 7Z{& 7{B} 5!!B#ZpZR#ZZM '#'"ZZ$MZpZ#B} '7!5!'7ZpZ#ZZM !737@ZZ#ZpZB}!5!'7'mZ#ZZ#ZߠZ#R#ZZRZM%7#7'3'ZRZZ$R"ZݠZ#ZZ#Za 7!##:nt':tna #5'#5!tn'dtna )53753dtnntda 733!ntd:ntB}3!'7!5!7ѓc}Z#Z㔎RZ#R#ZRB}#5!7!'7'7!'/cZ#ZߤRZRZRYxa532767676767632&'&'&#"#"'&/#7!$f ! +!3-68+2",j!!!3 .6+85.0$m: w '07)(6;C+ : ,:'+:Yxa5!5!#5#"'&'&'.'&#"'6767632327676:m$0.58+6. 3!!!j,"2+86-3!+ ! f:d+':, : +C;6()70' wB}!!'#537i&ڠZZ#ZZZZ#R#ZZM'75'3''#ZZ$R"ZZ&ZZ#ZZB}'73'7'7#'7!5hZZ#ZZZZRZZM77#75'73ZZRZZ'ZZ#ZZ&B}'!5!7ZZ#ZZ1ZZ#R#ZZB}'7!'7'7!'4ZZ#ZZ1ZZRZZB} 53#5!5뤤4Z#ZhZ#R#ZM %'3'3!5Z$R"Zh̠Z#Z4B} !'7'7!#3̠Z#Z4ZRZM 7#7#5!ZRZ4Z#Z̤M%'7'3'73!5ZZ$R"ZZhZZ#ZZB#(276767654'&'&'4#!5d >b-*,%:0Z#Z  *+(54<852.&Z#R#ZB#)!'7'7!"'&'&'&547676763"mEZ#Z0:%,*-11> ZRZ&.258<45(+  B#$>2+#5!5!54767676"3276767654'&'&'&l>b-*,%:0ΠZ#Z2)-019 o #*+(54<852.&ՠZ#R#Z};47(+ }  B#%?!'7'7!#5#"'&'&'&54767676";54'&'&'&e910-)2Z#ZΤ0:%,*-11> o #+(74;}ZRZ&.258<45(+  } B}X3267676767632267676?'7'7#&"'&'&'&'&'&""'&'&'&#5! ! Z#Z  > >  Z#Z" *!#$' * ZRZ %  '%  %' " Z#R#ZB!'7#5!3'7'<2Z#Z<2Z#Z Z#R#Z ZRZq` %7'7]JQgz=Zӄh PJV}e 5!#Z"ZǠZ#R#Ze !#!'7'< Z$Z9kZRZe !3!5zZ"ZZ#R#Ze '7'7!354'&/#7!J%%%'HD_SlhX[HJ%%%%Jw422-A8;>112-!:zJZ[ghX\HC+%%'GKY[eg[WMs2=>FD{2,/2{DF>H':Xy6#5!#52767>54'&'7#"'&'&'&54767<:!-211>;8A-224wJ%%%%JH[XhlS_DH'&&&Iz:d'H>FD{2/,2{DF>=2sMW[ge[YKG'%%+CH\Xhg[[IB}5!B#Zp{#ZB!!BMZZ#M3'#|"ZMZM#'Z$MpZ#B}!5!'7pZ#ߤZB'7!5Z{ZM!37ZMZGM!#73{Z#ZpB|  '7!5!'7 5!!ZpZ##ZpZZZR#ZZ*M !737 3'#'2ZZR"ZZ#ZpZMZpZB| '7!5!'7%!!ZpZ#ZpZuRZZ#ZZ#B|'5!!!!5 #ZppZ>R#ZZ#R*M73'#'#'3hR"ZZ$RZppZ#B|'7!5!'7!5!'7ZppZ#>RZZR*M%#73737#hRZZR#ZppZBA! '7!=!Z#Zp{Z{#ZBA! !! !5!'7BMZMpZ#ߤZ#ZB}!73!!!'7#5!!qVa6ZEV`6NZ#Z">RRjը;mRR:lNZ#R#ZRRB!!373'7'7#'7#537!7'!RRȚNZ#ZN|NZ#ZN.9#!RRRRNZRZN ~NZ#R#ZN RRB}!'7#5!7!5!73'7'%!7'!`]Va6.ZxV`6NZ#ZRR;mRR:lNZRZRRB}!!5!RRpNZ#ZNRRRNZ#R#ZNRM#'3'#'RNZ$R"ZNRSpNZ#ZNpRB}!5!'7'7!5!7NZ#ZNpRRNZRZNRRM%37#73RNZRZNRRpNZ#ZNRB}!!7/7'7!5mRRRNZ#ZNNZ#ZNRRRNZRZNNZ#R#ZNM'77#7'3SRRSQNZRZNNZ$R"ZpRRmRRANZ#ZNNZ#Z6a##7!#tn::n3:t:5p::6a '#5!#5'5C:3n::n:4:dp:nt6%753!5373:4:dp:ntn:nd:4:6%3!'3n:nd:4:n::p5:tB}5!!!!!Z#Zwgw"?Z#R#ZRwRwRB}!5!7!5!'!5!70"wgwZ#?RwRwRZRB}37773'''#5:;!\[`Z#ZCCjjZ#R#ZB}'7'7#'''53777Z#Z`[\!;:ZRZjjCCM%#5#535#535'3'3#3Z$R"ZtZ#ZtM533#3#7#75#535#5ZRZtZ#ZtB} !553353!Z#Z{Z#R#ZM '3'#7#7Z$R"ZnZ#Z}ʻB} !'7'7!+53#53Z#Z}ʻZRZM 7#77'3'3ZRZZ#Z}6B} !!#3#Z4ZݤZ#ZZ#B} 3#'7!5!'7뤤Z4̠ZZ#h#ZZ 5!5! !!? Ou]%uuv 333'#!#\^vtP uB !!75!!5 t]]Xv ###3!3,^\X& v 3'335%!!# #^\XtvpFguv %3'3#!5%# #3!^\^$tv~Fuv #3#!5#3/# #3!J\^^|HGetvJ~{GGMuv 3#!!5#3# #3!F\ F ^tvW~uv 3'333'37# ##!#^\fd^tv ^u9v #!5#3'%3'37#7# ##3!3^^ fd^tvJ^uB '#35!7'!!!5 5~t]]EF 7!##!#*:ntaI':tnIFEF %!53753!5!ldtn~ntd&Iv #7#3'# #3 3\^^tvP*OutuB}'0#"'&'#53676323'7'7%&'&#"!32764RvxN1kk2Ow9g' Z#Z 0GD2 & +JD5@3PO2BB4R,( : ZRZ11/0*M !#737'#'RZZ"ZZ$#ZpZ*ZpZ#Ba7!5!'7!5!'7'7!5!ppZ#Zp?ZRRRZB}#5!5!53!Z#Z[qZ#R#ZB}!5!53!'7'7!#p\Z#ZߤZRZB}#53533'7'7##Z#ZZ#ZߠZ#R#ZZRZB}#5##5#53533533ҤtZ#ZtZ#R#ZB}#53533533'7'7##5##tZ#ZtߤZRZB}53533533'7'7##5##5Z#Z8Z#Z8ߠZ#R#ZZRZ !! ?OuuuB 7% !5uzR##7 ! ?S:uuzRuu##% %!3!3hV[7l n7R{+u\ #&'&#"327673 u B!OO!B ocI7͙7IcL 0"'&547632654'&#"563 3276767&#" \m`cu\6% GGnth r5?,/H@3H5,Y:$UeI+HQ\N,tqzSd69->eSY׮l 7!!5!!5!!LLk+5!#7#53!5!!5!733!ZD2/+^^``kIb!0?"'&''7&'&54767>2"&'2767>54'&&cv-'''OO_@8vcu-'''OO_A:GE:;9($(#&GFF:;9cv8@_pm__ONP(-vcu:A_mp__OOP(-9;SPF($(9;PSF'O@*iiiiB91/90KSXY"#3 !q!#7!hqqP3!!"&63!!"!0",Z(膆(\JN*"f_QQĪKM_fOPi%+%3!!"''7&'&6;73#!!#"!#L(0,:CyEB航6'|>v\JK-".4"$: 1cQı2#KK_ff_lFO]B/ 3 3ް2ް2201!3!!".>3!!"N=c(憆(c=֪I9[[9IP&'.#!5!2#!5!276767!5 ,Z(؈膆(\JL, 1f_rĪKM_fOPi%+&#!5!27+'7#53!5!3276767!73&'&'(/-9CyDD舫6'{rx\JJ. 4 %:  1crı2ݪyKK_ff_lFO]5!&'&#!5!2#!5!2767>b(؈憆(؆b>,I9[[9IL9@ 120!#!L^L= 7   @  <91990!!5 5!!LR%# Չ\P_X-y10!!X!תXy!5!!5!3!!y!DCmILfB7+U e+Gr?; /@     99190'%3##d)#Ӕ/}b%9;v'ue;e'e %.#"326"&'#"&54632>3"38\32#"&'#"&546329[=G[TFBi8\=G[SDCj~/[w~SNAU}^sdlkutcjmvu۠d|k֥s}T!3!T*,}T!3!T*p,33# NM^T,3 3#T^,$476767632#4'&'&'&#"#;9_UijB9 KGLV32326yKOZq Mg3OINS5dK t]F;73 ";@<7  6<Xy32767>32.#"#"&'XJF]t Kd5SNIO3gM qZOK?<6  7<@;" 37;XyG&'&#"5>323267#"''43OINS61-NSXIFJKOQdSP  ;@<7 W"323326X!!KOZq!Sc1NJOR`!t]D;83$777=X`y!!#"'&'.#"5>32326X!!KOZq Mg3OINS5dK t]F c;73 ";@<7  6<Xbz'767#"'!!'7#5!7&'&567676ǧfYUE5kIQ%\n*xrYQMoIF\<[ETFR q$"B2(d%(9L5XXy$!!!!#"'&'.#"5>32326X!!!KOZq Mg3OINS52'V t]Fجϯ;73 ";@<7 " 6<X1y0%#5!7!5!73!!!'#"'&'.#"5>32326Qu{hq,gqTKOZq Mg3OINS52'V t]FR=R ;73 ";@<7 " 6<Xy.1%!5!7!5!7&'.#"5>3273267#"'!!!!'hMEnK Mg3OINS523J:VQ FJKO!8!E$F";@<7 832326#"'&'.#"5>323326yKOZq Mg3OINS5dK t]FJKOZq Sc1NJOR` t]Dï;73 ";@<7  6<а;83 $77 7=X0y8&#"5>327&'&#"5>323267#"'3267#"/'00NJOR:G67'43OINS520N]a91FJKO?J4r[DKKOdgb 7 ;@<7 !7)32326#"'&'.#"5>323326!!yKOZq Mg3OINS5dK t]FJKOZq Sc1NJOR` t]D*!;73 ";@<7  6<а;83 $77 7=Xy7S#"'&'.#"5>323326#"'&'.#"5>32326#"'&'.#"5>323326yKOZq Sc1NJOR` t]DKKOZq Mg3OINS5dK t]FJKOZq Sc1NJOR` t]D;83 $77 7=;73 ";@<7  6<а;83 $77 7=Xy$!5!53276767632.#"#"&'y!JF]t V'25SNIO3gM qZOKج#?<6 " 7<@;" 37;Wy' %52% $'"51pZV(IٜXDz;%76767!##"'&'&'#5!!5367676323!&'&'&i1*+V WJRNMR  W,!::!,\HSLPM% +*%'H:^2:A<336G84^:H'@'H?Y L=@33/N0<^:H'%X`z!!5367676323!&'&'&!!i:!,\HSLPM% +*!#'H?Y L=@33/N0<^:H'%X`y& *Xy& '*'**Xy'*& *oWz'*& *nJ. 3#3#!5!5J=>𹬬J. ##!!!!>7BX`y 365&'!!5!&547!5!!%43448>!0IG00GG2?8>;_8X`y !!!!"264&'2#"&546X!!IdddeH:l'**z{ BbFE``bq+((d:svvX`yK!!!!2&'56X!! BS X`yD!!!!73# X!!鏫 BZVX`yD!!!!33#X!!֕ BLVX`y!!!!!!'X!!߰ TU UT BX`y !!!!!3!X!!-e Bz(iE`07GO!!!!#"3###535463!3267#"&54632.#"'53#5#"&4632264&"X!!4@#mmC???DJB&G$$K&aqk[Q_B;18BCC?-I\\I-?p`ctiF6A?9i=$#tu#gSSSX`y*!!!!>32#4&#"#4&#"#3>32X!!."]?T\Y88EQY7:DQYYU;;R B=:xoHOM]QHPL^P%U20=X`y ,!!!!3#7#546?>54&#"5>32X!!ffc`--A6(Y1/a3\p$-, BiN2A+,/-7#!^aO&E++ X%y<@     <291<2<<990!3!!!'7#5!7!X}y}J;fժhӬXyB !!!!!!X!!!جX y%#5!7!5!7!5!73!!!!!'G=XkXU7Y Z:wSAw@Xy 7!!!!!!!!X!!!!߬Xy? (@( ' <2291/905!5y!!LK Xy? (@ (' <<291/90-5!!X#!!VVTw 3!!5!5V!!!!߬¶LK VTw 3!!-5!5V!!!!߬VVw#5!7!5!73!!!'5 p[5m{*[y~!߬`u,`vLKVw#5!7!5!73!!!'-5 p[5m{*[y!!߬`u,`vWy&%5767$'5674[šzآb|۠M)Ig#M(Jh#Xy %5%%%'w2rK/dtm0x0oVXy '75%%5%'rKnd.t'o0xEu0#oVX y!5!%5%%%!!'XC_^?sMN#N+PJ>`5Yd|5X y!!'7#5375%7%57'NEO>:fLNtt5\h}a5H<Vw?#%#"'&'.#"5>323265wKOZq Mg3OINS52'V t]FJ!;73 ";@<7 " 6<LKVw?!(%#"'&'&'&#"5676323276-5wKHGOZq M343OFGINIIS52'V t]FDE)!!;3 " @< " 6V w+.%"5>327%5%%%3267#"'&'&''}QINSE^AsMP#Bt]FJKOZq _4O;@<7փ_5Xc|6V w27'732767#"'&'&''5676?5%7%53;L t]FDEJGLGOZq P32326&%&%5$7$7wKOZq Mg3OINS5dK t]FJl#a;73 ";@<7  6<RO]ɗ9=}Vw*%#"'&'.#"5>3232655%$wKOZq Mg3OINS5dK t]F)a#l;73 ";@<7  6<R˖}=9"]OV[w67&%'&'5$774hmU֠Gc _eT2wnw2"O0Bj%V[w'567&'567&hmU*c _eT2Vwnw 2O0BDj%Xy_%!"'&54763!!"3!yɊD_`Dƍ^`Xy_75!27654&#!5!2#XD`_DȊɣ`^ȋXy> #"&'&5476;7!!!!"#'J_+30TD~K9# K^+#Eƍ5p5Xy> 32654'&'7+'7!5!!5!237RJ_+30TD~K9FC K9^+#Eƍ55Xy%!5%!"'&54763!!"3!y!ɊD_`Dƍ^`Xy%!=!27654&#!5!2#yD`_DȊɪ`^ȋX,y&%!!'7#5!7&'&5476;73!!!#"$UrG6:qYȲG5^_=R5 Yƍ5p&`=X,y!++!!'7#5!7!5!&#!5!27327654'&'92D4VqF53 D&#I`__ 2ȋ559`^`X0y!%!'7!5!7#"'&54763!!"3!!yR|ɊD_aDAQjfƍ^`5eX0y"%!'7!5!7#!5!27654&#!5!2yR|Da_DȊ]zTQjf`^nj^DeXwy1/3ް2/301!!!!X!w@Xwy1/3ް2/301!5!!5ywXy H/3 ް 2 ް2/33 3017!!!!!!X!!w߸Xy J/3ް2 ް 2 / 301%!5!5!!5y!w54&'&'3!!#!5!ݾOO''''OOݾOO''''OO~GE:;99;:EGFF:;99;:FތPOO__pm__ONPPNO__mp__OO=9;SP;99;PS;9Oi372"&'&'&547676"2767>54&'&'!5ݾOO''''OOݾOO''''OO~GE:;99;:EGFF:;99;:FMPOO__pm__ONPPNO__mp__OO=9;SP;99;PS;9ՌOi3?2"&'&'&547676"2767>54&'&'77''7ݾOO''''OOݾOO''''OO~GE:;99;:EGFF:;99;:FBccccPOO__pm__ONPPNO__mp__OO=9;SP;99;PS;9ccccOi372"&'&'&547676"2767>54&'&''ݾOO''''OOݾOO''''OO~GE:;99;:EGFF:;99;:F,ccPOO__pm__ONPPNO__mp__OO=9;SP;99;PS;9KccOi73#2"&'&'&547676"2767>54&'&'ݾOO''''OOݾOO''''OO~GE:;99;:EGFF:;99;:FPOO__pm__ONPPNO__mp__OO=9;SP;99;PS;9Oi2L2#"&546"326542"&'&'&547676"2767>54&'&'h7b%&'qqnNL88OݾOO''''OOݾOO''''OO~GE:;99;:EGFF:;99;:F)'%`8nqqMpLM77POO__pm__ONPPNO__mp__OO=9;SP;99;PS;9Oi!'/7=E2"&'&'&547676%&'&'& 654'67676-ݾOO''''OOݾOO''''OOf:F-T1-F::E.S1.E:POO__pm__ONPPNO__mp__OOAϚ9FPQ9.9떖EQPD19Oi!;!!!!2"&'&'&547676"2767>54&'&'+{{ݾOO''''OOݾOO''''OO~GE:;99;:EGFF:;99;:F;gZfPOO__pm__ONPPNO__mp__OO=9;SP;99;PS;9Oi372"&'&'&547676"2767>54&'&'!5!ݾOO''''OOݾOO''''OO~GE:;99;:EGFF:;99;:F2mPOO__pm__ONPPNO__mp__OO=9;SP;99;PS;9IPi%!!!3!!#!5!3Ҍ8Ȍ7nj6Pi %!!!!53rM_Pi%!!!7   '3ͬc  ccc #c ccc Pi 3#!!! 3/`103#`7 !!'  TS TS8X`y!532767>32.#"#"&'yJF]t Kd5SNIO3gM qZOK ?<6  7<@;" 37;XAy 755%5!5X!#!!ʶLK XAy % 5 -5!!y#!!!!KL VVw?  55!5!w!!!KLVXy? 55%5!X!#!Vw $75$&%&%5$7$7"nWlܜ86s˖}=9]OVw $'$'5%$5)n˱#lݷW680O]"ɗ9=}Vw)%*67&'&%&''&'57&%5$?7dMjTVʥ3˱!3a4m"cjX)3S][e﹏3N@%HZ-=}k$Vw)$(6%'56?56%7$'57&%D>WwZN(۷+/m")33 +Si063hiyje˖X[y3!!!'7#! !PYBzrYh?ݪ@?@X[y3!'7#5!!5!!PYzrY(s??ݪ@X>y!!!!!!'7!5!7!X!w R`RgfjfX>y%!'7!5!7!5!!5!!yRgw! RjfhDfVw?%%&'&#"5>327%5 %3267#"''43OINS:Z0!!x2XIFJKOQd>3  ;@<7 ҧK{"327V!!?E>XIFJKOQd>C43OINS:Z0"323267#"''&%&%5$7$743OINS61-NSXIFJKOQdSl#a  ;@<7 W"323267#"''55%$43OINS61-NSXIFJKOQdSa#l  ;@<7 W" # #h֣ͣG9> 3 3h*338> !!# #g֣ͣrcG9> !!!!# #gg֣ͣrrcG9w!##mZ##5w33ϸ"mZ!533X%C!!3#CrrCr[  C!!3# CrrCr[ %~!!3#CrrCr  ~!!3# CrrCr Xsy^!#y^ap$%%$~  %6 %!&'&"112*zz`XXroGGnY  67" ,J5PP5JX*77*#L8P"2642#"''7&546Ċnji56؝]QBɉLJo3NEQ\|G+-7AJT35#"&546;5#"&46235462+32"&=54&#"3#"2653264&"2654&#ςYxxYςZxxZE1/EE0uu0EE`Ev/EDaEEaDE/wZ\ZЂZwwZЂZ\Zwu0EE`E`E/1EE0E`EE0u0EE1/EXsy^!3!yߨys+~!#!r ~5!#r rS;+;!!3vrr;)3!rv;SL4732#"'&'.#"0 Pd@7* h$TA6?&H|( #"&546323250 Pd@7* h(V$DTA6?&Hk- hi !!!#%!!h\roa`޾"(I  !! #37!#3'Q''Ho99Ƀo!p=⻻}(TI #!!7!#3'l)okkɃ=r!r⻻+2" #/;GS_kw+7CO[gs!2#!"543!254#!"+"=4;2+"=4;27+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2%+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;22+"=4"=43+"=4;2+"=4;2"=43!2#\\K\=Kl]\\\\]ii\][]\\\\\\\\]\\]\\\\\\x::f>]Y"\I\\\\I`LLMK\y>>(I !! 3#)%3!'-''96=ûHJ7 hHH--JJ4!!!rrZm4 !%!!5!5!5!!mr4 3#3#!%!!5!!omrX4  ! !! !ZS;Z$m4& B4 '3276'&#"!#"'&'!!67632!zzzzzzzzIwwHS;HwwI΍GG2GG$_EXXE^m_DXXE_3#%673#&'%676'&1rsrs2srsrTTTT@TTT|B B@B)B)΍11@4121tD& B 4 !%!!Ybm5A4 !!!!;rbmY5A4 !%!5!mrXae4 !%! !2mrx1x4 !%!!5!!ZZmrϠZnZ4 !!'7!!!'7;rZZmZ1X1Z'327#"'$%'3632# 6'&#"zz=>lWWsPYX2灾vzz>GjX`OXG%3 33!#!!3/ .^+^kk4 7!!#xr;rc/Krmu4 % !%!50!53!ymrZ[z4 !!%!!''!;GZZHrZEZw%3 !#!3!###.77/^+kk4! !! 3!xS;ZK{mu4 ! !%!#5!5!"~~+mrz[Z4 !7!)!7ZbZmEZwZ4& A 4& @4?& @ {4& A B4D& @ 4& Z^' +4&' C+?H' C8 Bt' C XyH' C8aXyH' C8!% *!%#567!676&'&'&'&|z*(2J E<iKH#&GIJE E|-2 M3 +O  ! r; ?9y?p  ! Xy*= 67 '&5677%"632327'&32767#"'&'.#"y{h p{"zi piE5 5dJ t]BFZCEF4 Zq Mg3ħĨ1P$s 7%ےs3 !Xy3#"'#&'&#"5>323326yKOGU43OINS52^NFz;7 (  ;?<6 '='3#3!!#7#537 `?+0'7ϺrSSr4!!!!3!!!'7#5!7!xrddeZmn;fժhӬ4&"6`VT{F`4y& @45{& ?+4`& A4`& @Fy. ! //1 /<20#5!!!#oo.ڭ%ۭ&H:07 %#"326=7#5#"&546;54&#"5>32hHH#[]E>Vcii!fHatLT5m4:j2O85%--JJ??8?vh+]85l[hmKDg/R: 935#35#35#!5!#"326=7#5#"&546;54&#"5>32assssss;#[]E>Vcii!fHatLT5m4:j2Op"r??8?vh+]85l[hmKDg..R:1=[%5!!5!#"326=7#5#"&546;54&#"5>32#"326757#5#"&546;5.#"5>320;0#[]E>Vcii!fHatLT5m4:j2Op""[]E>Vbii"eIasLS5m4:j2Op"rrrr??8?vh+]85l[hmKDg..R}??8?vh+]85l[hmKDg..Rk*.26:>B#5#"&546;54&#"5>32#"326=%=!!%-!!%qi!fHatLT5m4:j2O85%#[]E>Vc,,,,,]85l[hmKDg/R}??8?vhyyrDyyyYrJyR8~4<DLTZ`%#5&'&'&''7&5475'7676767537'5676767'7&'&'&'5'7'%654d3/D9229D/3d4.E9229E.42*  *22*  *2*88fWfEOPDfWg88fWeDPOEeWf8g * apa *  * aa * ba.43ab-45F^'04>2".33&'."#67>76#FVʓVVʓ"vv"Z83Pv"Υ"vP3ʓVVʓVVnh<8PvDDvP8"vP9~?9Pv"F^&0!4>2".7!&'."67>4'&hVʓVVʓDvP479;;74PvD"MʓVVʓVVv"i c;DD;g"vP F^ %7'32>4.#52".VFoDvvDDvYoʓVVʓVSwVF_YvDDvvDoVʓVV4!!!xrZm #53àZ03#s #5ˠАWeE%3 53Zz i#0s  3#àР˓[m#!!# q3#s!!`N um!5!#z3#zz3!5!`z m #4763!!"ƺoyeD9uߑfW#'&%'53 763:*enK==Mne( =C _AEc H<  3!!"'&59De{oVfd #3ƺ m 4'&#!5!2 9Deyo}Wf &'&3!3#76<(enM==Kne*!<McEA_I= 3#!5!2765 o{eD9ᏞfV(3(v% !!!!55!#uX ̼uu]]e! !!;bc;$<.: 1/<03!3T.%y5!!X3 2!@ 2 5!!5!!5!4)4𬬬 !!!!!4)4XXX 333 Nf  !!!@@@ Nf  53353353353𬬬 3333333XXXX 333322s's' !!!!@@@@22s's'!!!!\!!#!!#\!5!Z!!X!5!$Z!!$X3!-Ԭ3!-.*!!@Ԭ!!@.*5!3,,(!3,X5!!@,(!!@X3!!- 2Ԭ3!!- 2* #!!!P@ZԬ 33!!P-#,Ԭ!!!@# 2Ԭ #!!!P@.* 33!!P-#\*!!!@# 2*!5!3,Z,!!3,X !5!!#@PZ,( !5!33$,PZ,!5!!$@Z, !!!#@PX !!33$,PX*!!!$@X!5!!Z !!!!-XV !5!5!!,ZV!!!X!5!!$#Z !!!!$#XV !5!5!!$#ZV!!!$#X5!3!,-,Ԭ !3!!,-XԬV 5!3!!5,-3,*V!3!,-X*5!!!@,Ԭ !!!!@#XԬV 5!!!!5@,*V!!!@X* #!5!3!,-Z,Ԭ !!3!!,-XԬ !5!3!!,-Z,* !!3!!,-X* !5!!!!@Z,Ԭ !5!3!!$,-#Z,Ԭ !5!!!!$@#Z,Ԭ !!!!!#@#PXԬV #5!5!!!!P$@V,* !!33!!$,P#X*V !5!533!!$P-#ZV* !!!!!@X* !!3!!$,-#X* !!!!!$@#XԬ !5!!!!$@#Z,* !!!!!$@#X*5!35!,-𬬬!!!-,XX33*!!@@*DH5!5!xX333x 2 2H !!!!-Rx !!##xmsZxH !!3!!xm3-sZRH !5!5!5!,NX 5!###lZZXH !5!!!5!4l t,ND 3!!!--Dx 333!x,ԬxD 3!3!,(D 5!5!5!3,,D|X 5!333,,(DX 5!35!3̠| 3!!!!-- 2Rx 333!!xs 2 2Ԭx 3!33!!-s, 2ZR !5!5!5!3,,X !5!333xtZ, 2X 5!3!5!33t, 2H !5!!5!4R 5!!###sZZH 5!!5!3!!t,-sZRD 5!5!3!,-DX 5!333!,,ԬD 5!5!333!DX,!5!5!5!3!!!!,,--R5!333!!###s,,ԬZZ !!!!5!5!333!-s t,ZR, 4763!!"Q[yY[`~| 4'&#!5!2.-Yx[Q`~=?x 5!2653#xY[Q[~|2Ψx !"'&533![Q[Yyx2|~>3m 2>#3> 2> # # 3 3>ݲ}#$cc|5!F3F~|5!|iF3P|!XF!@F~|!|iXF!@P5!5!!5iVV333PP~P!!!iXVV#!#P@P~P( 8! ! !!!!#!#(!(F(!Z((!((!(h(!|((!(*(!>((3(i( @} F( #'+/3!33!33!33!33!33!3䟟䟟䟟mnmnm( '/7?GOW_gow3##3#3#3#;##;##;##;##;##;##;##;##;##;##;##;##>>>(!%)-13#3#3!3!##!#3#3#3#3#3#3#ޟޟ#|ŸŸ|Ÿm#( 5#E( CZh!|i J}h( J(& J& K L(& K L(& J& L Q(& K& L Qi( J}(& J Q(& J& K Qw!N<w7!!!xr$<w 3!254#!") ) xrVVVw& ^ Uw !%!5!5!5!5!5!5!5!5!5!N?:IILII޸[["[[w !!!!!!IIN< w !%!!5!!!I) N"-?33 #&'&+"'&#"/573;2?"#'57#&'#"#567635a)8)kOkaKA-'= //G),Y=  !H$ /+HDH)+) $., fYYx !=Z Lx73&'37&'67&'67&'67'32654'&'7654&#"3672 $54767&'&47'&27632#"/#"?#"54?'&5432'&327632#"/#"?#"54?'&5432'&327632#"/#"?#"54?'&5430'&327632#"/#"?#"54?'&5432&5432&56327&5432'&327632#"/#"?#"54?'&5432'&327632#"/#"?#"54?'&5432PO~ )*+')+(@&'$||e?/A}]\B-71SLoWj\vLLr%%,* #$ )*n$ % +) $ #*+    ? '+&()&(+&p   % % +) $ $*+*EC*Z*,)-)-*,%&%&fБfU 5HhfeefhH2pu^QFs棥sKQG4 4  22044 22 9       L%('*%)(*%)(*t     144 22 0r!2CTev+&'&54?6?6/&2#"/547672#"/547672#"'=47672#"/54762#"/54762#"'=4762#"/547672#"'=47672#"/54762#"/547672#"/547672#"/547672#"/5476l=.%G\&#- Lj.N 0d&K4i    }    g    s            &                            H5-V"*2-.T<:U'EGE'DN-ֈU]\`CDcbF]WWZA@ZZ@AZZA@[[@AZKPrqqrPGeޝdMP䠠P }2ٛk A4&#"26%4&#"326#"547&'&4632 $54'&'&4632XP79NNqO.N97OO79N']EacDC_\n\U>DbcEXFDbbDEaaEEaaEDaa+G詄UUSj멏i LVV6 "32654&7#"32?ɏǾ/`TcȐɎ;P12Y.1"264&"3264#"54327&5432#"'&'@KjjjiOiiLKirqrtPssrqQܩZTdIU )5AMYdp{3/&76'!'47653!476=332654&#"#"&54632'#"&54632#"&54632&'&676&'&676'.7>'.76$6&'&%6&'&6>'.>'.f<;.=+,>/;Kyz~LZ|WX{{XX{IE11EE11ET    m       ;   R       s@dd@s}>}=/NnN/=}>@MllMNkk& % I% % "!$# "! "!! & % % & %-5AMYdp|5#!4'&'5#2#"&546"264&"264"2647>'.7>'.%676&'&>&'&7>'.%7>'.676&'&676&'&753!476=3''676%27/&76'77&'&/#?6'&7liilYz{XW|{bEEbEd      8    @     .HxttxH%?%5E$6  6$D5%?%-5!!1(~(1 5,4t4(4N4(4t4;hhh%%#%% $ %_ $ $!"!$!/!!!" $ $ $ %:-,GtG,-: XLRqqRLX ![$n[ii[n$[!ob !!'!tKZGkcn "!!'!##&+572367676hNn_5, S Grj3#-EmDJ~o.(*!4\tR~UL !!'!  ##' CI3Z  > << 5DCX << ; YD36273 ##'5&< +Z@\\DC ZY\5#,5>~3+&=4%3+&=4%3+&=43+&=4%3+&=43+&=43+&=4%33 #&'&+"'&#"/573;2?"#'57#&'#"#567635@)A({@(@){A)A(@A(^)4 'iOj_J@,&< //F(0'&&'ܐ'J&(lN5  >! )&V?<?$&$ '& ZN N />Eqw!674#!!6?676'4#'323276767654#3#&'&'&6%67!672!&=75$/563&43!32+'!67#>54&53 *,  3)="(&)09$) L&TE` MPA[MH Y $ ;&&e=O%/ N ,8(.7L1Rf~H8SQ,zH%9D6 )jGP@4Rjd_*KfsDIR 9! O  -]&C+/3#"'43727&'#"$472776725676&5&U8)$ tJ .; d3f,"3' VD ( GL/7;;,g t^F$< LD&?>X4R !/# I ? P?D!)Mv>/z2!"&54676737#&'&54>;7#"&546767!7!"&54>3!6763!2h!.)g$'30!/&j ! /:(/  )/ 9)/  9)0:*/z2463!2!2#!!+32#3#i9/ ! j&/!03'$g).!*:0)9  /)9 /)  /(:!!C4&#!"!&3!!"3!#";#"3&'6737#&'6737!"'67!7!"'63!67!2e;'+pCCo CCCC2CCKK<LLKK%JJ60"2=2).=<==<@=:>=;TT USUT UT83$QE!D72654'6#"'4#"'54#"'54#"'675674767#%$4:JILLHOKHLKIhghgighgD>-sJ1 b6'SS cRR SS?SS\\K\\;\\]]!A*>K!!D!254+'3254+'!254#!'!254!&#!"0!463!!2#!!#!3#3lCC2CCCC oCCp+'q=2"06JJ%KKLL:=@<==<=.)g$38TU TUSU TTE!C32=732=7325732'654&#'%2&'&5&'5&'IKLHKOHLLIJ:4$N->DghgighghSS=SS SSb SS'6a!0J)K>*B \\]]:]]J]] O!%)-1523656;2#'7+"/#"'+"5&54775'"'5476;25'7&567635&56;374765'75'76=4'&+ '"'4!#"'&36365&5&#%#754'&5&&547'5367&7+&'&'735&2?"5775537'7'3533553535'32767&5%2?&#%55'575775775uo,Mz"060D/5I:2'5:6&" *:D:S46$.e QN5  u4MDa 6bUP+ ,H;`I23N5( (#I0M '^5%#!:X+ "*  6W}W:uW4 5vT & /H3V XD9\SL+&31.d+%X!Q $2``KPPPG[6%# Qy- 6[[3GK[O`_A[-)$t7 L-$ L6=" (CJ#R"0 :~GB{~Eoj<4S[Za LC5 ) .U%+Z&)͢ 7e<ILAaMoK33K@G6 $$(& (''&1/----2)( (-((d.'-T?OK8T$ !T3(-<((')))())( &2%2#"'&=477654'#"'5473t\*e O@UCXq P S. P ӍMOb>YaYƮ58l7P P@ $0<FX + &=%6&#"3 6=%&#"';27!54767%!&'&'2+"'&=476^7\Pg㑵Hr'.)%sM M#fC-7!%A.; ӎw:kKqz +H*G;M tu/&((AA&:+C;."/ 8Pi>'67&&&'6.7#"'&'#"'676'773.#'6'5676&&5476'&'67&&07 ^< 1x,B5@2 JVMv!#uA+UBDX[f*;-10)..C,sB#HKU P]12<0VQ }%'H6-T}^$k7 R2'7f!A\;y?1!50BEt"!zkQ;0qu0\oi:5oPZjsXFaPJGl;4ejN^1F[q7&&'7'6&'$#&7'&#"'5&767#&''5$'67'6'6'5$'67'656&'67&'6'&'''5$7676'&&'6'63&7"7&'7&'7&'7&'6'6%676767&77&77&''5&"'6%35&'.54>23#67#&8 p +WDTc'H @XO`= ;*)8 kDv/Pk-J KDhGa D`gBD6DDD =3dTDW, :g j)Yi#'WtI-9w18$^8;./7-I)jS)'#i\-IM91D;8%a7/.D=uRNBR&'%QBNRq d2 D s98C ["|44&3, '2^3R T(B?#'9C- !y ~#Z10>N?$%Y4 )%FN? ({ usis< 3(&^T05<>7;,#4[:O(vAfGEtYB z^~4j #,;b:['~Av@~EQ Bak4~_H#T2 $$$$ 2T"`q$&'6&'67327&#!65#&3jjdnh wWVݱqZre[c7 7 cyX ,35'533#3!'#'5!5!5#53!5!5#!!ʶ~~ blvF F A<<3ffX苜qXGccGap 3264&#!2+73 #'#5# 3m`hh`2`Ĉѳh|;vvʷ}f33#!!#'!'57!5#'5735 64pzp7d+!#!573#'5!3!'573!#'73!#'5IxOOTxSVVdY\yvVPPvIyY',32#' 37+ &5%6323'#57'53mJl{~m@+ݼh4144'0>,_ vNknmmnObs32732753"'#"'432364'5;+"'#"'53275'&'&54?5572'#&'&547634%476='4&#68$$B )Z>&A_;i88u-o1bFGfQ_M5mwLbkjI,K=''8 0##Rm4 ڹ+ܴ5!PP"4\=ѻ"8Qý32#"&546324&"26%#"5432itvxsq1"00" 0/B//B/#a`ir|H!//!"00""00"!/0 _b #>DJPV\bhn27654'&#"&7367'67675673#''5&'&'7&'%67'7&'67'%7&'&'%6767%&'&$h%$%%34$&1++XSA N@`==k>P CRX++XYC P>k==l?L ?Q oL+ Nn;P?;@  nMNn3%%%%34%&&%s==`?J >PW,,WW? K?_==f?H?PW,,WU?H?^<=Ke+cL mCP`k<<!4(0847632#"'&7327654#"&#%#&7&'67&'67!󫪪vӤ=6 5N'V[S.U[R󫬬񫪪񿉊 ʯX[V[X[V[!4(0847632#"'&7327654#"73$3&'67&'67!󫪪vѦ=63QNV[S.U[R󫬬񫪪񿉊w  'X[V[X[V[!4!)47632#"'&%#$''&'6%&'6!󫪪4>;D@KDzcngk?dnhk󫬬񫪪I kpinipi !4 "*2:AIX3#''%#&'52#"'&5476!!'5%!!'53'5%3'5%3#'32765'&#"M==,/0#H 8&O6 |7iY06./==e6a&i1r4z012+KN2HQ>>>>f^2"/1]8`1"Y 4f2y5+ +"'5$76%&'547327676=&#; hz0/O{[(*TQ~`NO =tR[\ 8d<+% &56;2'5$%75#"3vh0.P~N^(8P,VRZycOpO >S\^ f`1B7#5#53'&'&54767&'&=33676=3#327654'&O&"}|fzg}}"&&"}UQn$mQU}"$nQUVV{xVVUQ<"{u^^\ _u{"#| zUOOUz |#YOT{zQPPQz{TO@>)4'&#"3276&5476327#'#53'&`____`oŠqk]^^]YYňÁhgf@> '"3276'&'7#5373'#"'&5476j___``_ߓqŊqYX]]XYfhhĈÁj0 '&'&376&+"'&5'476%7!Z{z[ZZ[~\YWmpN#ZX[[YZ[PQmp#TG*52764'&#"#463233#!5sPQPPtrQPyzg֏LQQQPPQr{{t|g*#"#53533#632#47654&#"#ddiqqCBigIIugzyUr}ppDtPQs_CS 7"27654'&7#"&54767##53#533333#3##h. @\ ! 2(>>?ZW~>'3|}}! -/@ /- !^'?XY??~YX?(F}R}hh}}hLS<#5#535&'&'5'73'3#'73'676=35'73'13|e{vw}wwUATwx|xxS@Wwx}vv|d|re{Eus~~suE|VAKtrrt@X{Ius~~suI{dr|*! #!!!'!27674'&#_82V)3{D#MHZW{s{?zK8! %#"#&5463 67!2#6#";z\)MaBuh __ itBaM(]y tt[+##+tt\5."264&'67>3"#"&54767&'&#52hq៝rd:BJ|^d#!p⡠q $c]7A;{26XY "zz" YX62 &'5 %$ 56?6'.j拈|*xIIz'&|JJx, F42$8"3264,'5'&54632264&" &$#"&547>ȜmmNMm} lyzU<Mnnnm+}7 lyzU<|||,&(uO#eaHG||||Q'(sO#e‹`IH=! <>'.463227#"&5454&#"&'&5476766&D9BB8Ğv?W:pbW~tp) "-ff)-gtpQ@3AA:ACj›GmN?ijbvr56WGe((Wi0154d)-?/6?2>32>32#&'567'6'#4&&#4'3>64&"-S5,9"\0+Fgv!4u|W")^,k ikdS!eb[_[H|NYC:RHB=G`SnU|#!!!53&54632!!5#67654&"U't00Z =yy= :]ZssZ JjkkjJ 2f4%353'5#"'&''#&&#4'3>32>32YE;<<-!&Y*dx cf_Oz.*O2)7Ze``b<`WuALh`8!5!1##'!5!_drrPk^K{U_W{'/27632#"'#576&#"4'5267>327&'"2XCZd}uud$gq~dV)40tlx!&%"dLk}:Uwma4 sOHK{wY@x A63276327632&"'&#"'&#'6327627632&#"'&#"'&#'YR #{=('%{XNCEz>O&z>'(#&R #{=O&{YNCEz>'(%{=('#&ee22ee$l66kd23dEPdd33dd$l76kd34eE^s#!5!37!!'  L34((C $Td67&'&"!3!67>54.#"!5&'.54>325467675#53533#63232>54.#"3'8xpA?9l9>@q<;9'D} 5RTP=: SSPSS ;r>>p  p>>r> !A% )RSQ1 )6BB6) 1QSR) p  ""V{zHNRh|&'4>32"'4>32&'4>32&54>32&54>32#!5!'!567>54.#"32367>4.#"323732>4.#"327>54.#"732>54.#"I )),(?)(#!3()3$))BG!(( K{mg,;h IXI L$  P   H''1|G''#s%'')7$ ''A  ''HTݬ9.%~~ rF)~ wpa!'-23353#3!53573#'5#5335!75!!5'57!ePPeeQQeDpH>H@A~}}~00mrTTreppe-!7CQ^&54767&'&'5676767&'&54>32!535#5##3654."!2>4.#" 1""#@%@#!@% ?$##0 ܍a1%?E?%4,/--+D,/1+ 4;AB<>"  "#>"">#"  ">#10$ITNnVB, n ?%#Naji-/4^t&AYcgb3%' + ((NV8OQĿ>:<uyg**5 k5h P[32>4.#"732>54.#"!5&546767&'&546767&'&4>32'&'.#"+L)+L*+M)(LH     > |n @: !:;! 8An} E04`a30TL**LTM((     ++x: 8>>q ?9 9? q>>8 :x++c^UZbbZU^jg% $Tdhy47&'&";67>54.#"!5&'.54>325467675#53533#63232>54.#"!57#&'.54>3234'67632#7$5oh<:5d4:;i865%1MNJ96 MMJMM 68JNM0v    +0 +/0U-,,+,.T1/, 9j9:h  h:9j9a &LMK- '2==2' -KML& 1  V//X//X//V6HLP&'4>32"'4>32&'4>32&54>32&54>32#!5!5!M ,,.*C,+%#7+,7%,+ FK#++ PDNAM**4d;K))$'**,dY&"**E #**L:ƥ??@@=%)5!5!3353#3!53573#'5#5335!mD^JJ^W^KK^׋LLZZ,}}uz%yuu{{u}--4@4767&'&'5676767&'&54>32!&7535#5##3 1!!#?%?#!?% >$""/ _1+ 4:AA<="  !#=""=#!  "=![1=%T e >6.HC'L"'G 12h[FH`[$%ok+*8d .Ncv[.7&546767&'&546767&'&4>32 w "E> #@!!?% =E!w ./@ =CDz" E>"">E "zDC= @/.QO##"'##565'##"/547?kM ,4N"DF &Fi?JO/FB!O {|Im<&=M2227632#&547636=4'&#"#4'&#"=` ]d2 cBU;/G;SXMB:@B ս;7hf% #>|\@9@O &&5 iC n:^O G  %2O7236;2"'##'65##"'&5476;235&'&=476jS c1=EO ;SCFRʝT6*F@E1;O+.`162V Yi8/D ;8[B VRP"<B+"'##565#+"'&575477;2732;276=4'&3&'"ih;F(wQ"DG".FWCNfBy" bODUq5u4  Pro@ |S`64 '4'&'~ v '  w (  w ' $k=F F>jG3~Pjb^*IerN{̑?qJAe}Ωv6\~x(ONPPNO(!8?|EE|?8!r!_3#"/4?23D-!]UF+}{<!/3#'654'&'#"547326Rs9W5[S%3;B[/OBC'*|<j_g#"=4?2%#"=4?23ɧ%QM?ˠ)TK7(w7џ5s ?|O"'4723!#"5472!5YA>RHIOq 1 ӫg 4D% 3363'$6'"I+4 puoS^*  3%#'#3%#';&2 IʗHj7*(,377#'#'547#5773%%,ppsr,'zzxz'984?/99e5>:_`qE#&#"'5654'5673;54'56732733273+&##&"#&'565*G1 VV2Is3'{'3sI1VV 0Gs3'{'3sP3+1='3sH1WW1Hs3'=1+3PH2WW2H. ;G7567&'&'3#6737'#&'7#&'6735'67#3335#5*)SR))&*&';((:'&)'ȶkkn\\[[nȶ kk n[[\\n`ff/ee.((&(;((:(&((@))SS**n\][[o jj |o[\\\n jj e(P( /N#.6CMhw!2732!'5675&'&=32#&'567637&/7&+"+&'532?4/%32#'#&'&=4?#'57335'3!273+#&='#"/547354;2?!&=35-,;K> #WU* y "њHV ηz/;@"q=o )we)$IY'L ALaXwH >X%CII$PC/DN6g+  b% #  jnN :3 O+5{bQ< ,d-  X] f '^ JJA!< 8 2E35733!&54?'7'7!!"'&%#'73676'77'7'&'676}]} =--HW(7*! >y*1c{F=.,H-.'d(#Y+GC8957jN})%%tGl5nm3(,H:0/(_kiN}!N920K 1DW3!5>7>54&#"5>32&54?'7'7!!"'&%#'73676/77'7'&'676@.#5*"I?6O"[m" c<,+GU 5) <|w)/ayD<,+G,,&a(!>B<#q'%NG91 M7835hL{'$$qEh3kj2'+G8/.&HghL{ L8*/D *(=Pc#"&'532654&+532654&#"5>32&54?'7'7!!"'&%#'73676/77'7'&'676D|q%N24H'CB=9PS3464E>6O#]o 32EX!#2632#"&'532654&#"&54?'7'7!!"'&%#'73676'77'7'&'676Hevyn$L27C'y*1c{F=.,H-.&c)"ERUHHS S /(*. 8956jN~(%%tGk5nm3(,H:00'\jiN}!N91/K "7J]"3264&7.#"632#"&54632&54?'7'7!!"'&%#'73676/77'7'&'676]'00'*//l+2>AB(S`dT^dyg7<,+GU 5) <|w)/ayD<,+G,,&a(!.T--T.H D&RECSukf{7835hL{(#$qEi4lj2'+G8/.&HhgLz L8*.- X.A!#!&54?'7'7!!"'&%#'73676'77'7'&'676n!?/.JY08+"(@},2fH?/-J.0'f*#&K:;68nP*%'wIn7rp5).J<21(vmmQ"P;:1-K':7&54?'7'7!!"'&%#'73676'77'7'&'676N!?/.JY08+"(@},2fH?/-J.0'f*#:<68mP*&&wHn7qp5 ).J;11)wnlP!P;;199'9HR!273!567&#2&'676+&'67'#'6765'533!273+#/#"/47$,7Jv I MO $p%|I ^ [T<K"(~GW$?8?])( EAs#L, T 0 ` +WVۄ`$$a.|%2<J\e3 + &=762367#&'&#367&#&#"3274/"34?3'35732?5#+'535^-J|@h'\-e@<r2&H); uZJM =9jl:jgb.Qi2Q|酝:*}( dpR!h j `]_i$x:-(^%,3"ؿEa HMP E7g /:BR`j # &5%6; 65%&# 327#57&/#2#&'676+'%3#'#&/47'3327##'%3#"/6j1M{ǮG&z v$ExݨE(+=R:n:D!s Y!gQKum;} uA;>e=g¯Cy??ԢB|*>w4I ' 5@` bC$ j$H?iM!%.|7H27&' # &5%6367&#'.7&67263'#%; 65%&# mJB|e6O}°I+o|BJn^jaygwaaygxaj^w$FyتFG퇢D{C?` B]ww]B JХC}.?yP%.232#!7&!"4#".54767267p   {u*_ Jcllm8*#I%<($|ʀX#{Nwt7mnld4)5:IIIB,<_4767632#"'&'&!%!!  >W$`4 Z|b<_/374767632#"'&'&4767632#"'&'&!%!!    UW$`H    Z|b<_/GKO4767632#"'&'&4767632#"'&'&4767632#"'&'&!%!!      UW$`H      Z|b<[/G_cg4767632#"'&'&4767632#"'&'&%4767632#"'&'&4767632#"'&'&!%!!    /    UW$`  K     Z|b<_/G_w{4767632#"'&'&4767632#"'&'&%4767632#"'&'&4767632#"'&'&4767632#"'&'&!%!!    /      >W$`  L      Z|b<V/G_w4767632#"'&'&%4767632#"'&'&4767632#"'&'&4767632#"'&'&%4767632#"'&'&4767632#"'&'&!%!!  0      /    UW$`+    .      @  Z|b.t )2 $$ >54.#"4>32#"&h..--t*Ƅ2..2/.y )62 $$ >54.#"4>32#"&$2#".46h..--1.-.y*Ƅ2..2//2..2/.t 2 $$2>4.#"h-..-t*f/2..2/.j '2 $$2>4.#"$32>4."h-..-q.-.1-j*f/2..2/y2..2/R7!!R-ӖR7!!%!!RMzM; 67'&/#'3#67$#%ׯP==Ͱ̼bN+#!f"K++!|o554.#"##"'5##"&'&'0!5!5&'.4>32!!676767'7' :!9!"9 :! F GF;kY_1278e56d:81)RLk<GG E~^ : : ; ;NG 5 e4G( Li) enf77fne )i (G4e5 G( Pm 9Y%&'%67&673&/'67'&'"&'4?&'37' '7 &/7&'#>7$%88EFu/- 6uNDL22LENu/80uFD8jU45B%y\A@Yy$F 0=/0 ,-X70 ;~*2 %% 2*~697X-,oo  +F9d1 ) ( 1d9C1*CT'&#"'5&767#&$'&%'6'&'''$'676'&5$'6%'.54>32D$ "@F,NNNvF8p^Lb2  N**+ B@0"AR/0?wA%od/D&3.YaQ/5#3$"uI' @3/u= =#n- .... w3% % 32+#".7!"&'&'#&=4;73737D*$#GFHH%#Ι+(&aa'm99m9 3.055_4i4_550.3k  #tttk"632&'.'#####֊v)%8 _^>:k{ZG_?g@`H,>|:=+,j,,<6O/233<bbJ 132>4.#"367#&7&$735&'.4>2,P*+P,.N+)PƗd"/%(MM~95DLMNMD2)WN,,NWP**g!ʇw֜s~  &JJ&?GO277''"/&'&'7&'&'7&47'6767'676?  6"&462EG#96\>42(p __ p(24>\69#G#:5\>42(p __ p(24>\5:'NmNNm U%4m+3 EJ5:6JE 3+m4%T  T%4m+3 EJ6:5JE 3,l4%T '\nMMnM* ? !&+05:?DP3&7"7&'7&'7&'7&'6'6%676767&77&77&'"32654&'5&'.4>323#67#&#"'5&'&547&"'6%6761a$O` "NiB*4l,4"U47),3($aM#"aT*BF 4,=44#Y3,)0BB0/CBO"!-$F$FJF1.#- -#-2MJF$G# 8<g7*!2U6J%n=_CBnT> rYw0d "*7]6U$u=n;wBLz >\e0wZ3C.1BB1.C(N "%""%" M#p.PA.$;QW$.AP-{ "R &.FR2#".54>&'767&%76'&''67&'&'&'67676547676'&7>3263'##"'&'&'&54767&'&547676&'&#"6&%6767&'&'&676&5467&'&6732767&h@9h),)RP|  |PR-*g:>/**Y&()((')&&)')(()% @9f+.TR"`33`\_ .np, 00441/ ,pn, ]]&&()&&EEEJ032WyQT.,d9@.**..1230IDE%&**%&F+.SEFE.IMMI."#FES. !  ";-0.--.0IM+.REF$$1.%2S_`Q2%-1OQQO2-$3Q`_R3&.>GIIG"" 7447#.$$FER/+L"  !75/57%"IJJI* )p~67&'67&'4&6%67.'4'6&&'6767&54?67&'&#&'#&'5&'"'67&'&47632>4.#"72#".4>"0'-, )*#'05%"*%%, ),,"GNYI'+""$(JYNO21, 9,4=SM:7,: -12-[[Z[]WXIOMKLMN2 Y{\ bCWDJgABcp7L^BML0b \u]! @R%KlhhO+ww+O hhlK$PZX'@D 0:)ww*;0 EA&XZw[[[[GJMMJ"( %3!'#!52#"62#".54>o:5(67%'$(n H0L*I"33'554#$/* PR 6h"&>I > >A>!!ua!&5476'#5!+{h_a66mHHm.rZy'#"'&#"'&'&'&547676763232767676'&'&'&/&'&'&547676762!2!%3276767654'&'&'&#"&#"3276767654'&'&˗Pz  ,D@   7;+  23  M98G ):               r         0   L:5U        .\ r26767654'&'."#"'%"'&'&'&54767676;27>764'.'&+"'&'&'&547676762%632$"26767654'&'&#  #  @!R763276;%326767654'&'&'&#"6767654'&'&'&#"32ɓ E79E"  21 +96  >B+  # zOo              49D   /    "    :           =JZx-4H67&'&'&+"'&'&'&4767676327632 #"/#"'&'&'&54767676;276276767654'&'&'&"276767654'&'&'&""'&'&'&547676762"'&'&'&547676762'&'&'&547654'&'&'&";276-&#"+"276767654'&5476%327%&"'&'&4767628?.  !  !a=?^'_)\?=a! !# "!.8?""  "  "  "   f  2 .?E S@6f G=. 2  ŕ6@  B   )_>9 9>_)  % I        ? *        ;d.      ?P   !-  @( ,#%>  NpNM&_*# (! &) ,,f&  ! (K_  Z0-  Yi D   cp-)L &gK1 [N3$ n/ "!0{I"H#fmt2>,7HBI.;/8[, Q[z)  .)S9L *E   '+(4%(4  *X >  7A) 0'-570+I;-% *#%(0  ]'5.  U-9Lp{7654'"'&#"+"'7&54?67676763276323273#5%6767'&#"6%"/67#"27632327654'73654'676547& t!M#l5G;@\ 2BX-0%-m * '?,N ?'!&R;-> <\-R5-6E!"$b$6$!q",; t@P"#C  *FS "DX@! %z$(`]jMP   &O/+@ p_u<  3  DMKZRdYL6D_YBI5.!!''kGWz")3SZ67654/##3276?7%754'654'36767632#"'&54767632'0,,; (| w| ki5.U,\\    %g .  ;,-0j{w {w3V. T, \[^     -5& '-EL4'&'&/767675'7! !'7!654'!4'!!$4767>2"&'&'!654'$$CCC||]V|V#u    9Z(f(Y7%$66%"'&'&'&47676762%'b&I    )^tN/  /dIW?    @ViDV /  V%&%$64'%%&'&'&"27676@))< "  " ]NO]    9|23277632#"'&'&5476"# 6v>? (-=%P8j?  #j<  y"$"JrB23277632#"'&'&5476"" YTo k%,02?=V8jiA{C {u+'qP?  ' 7 sssssstsXrsrtsssr@Q  ' 7 5NB2632#"'&'#"'&547677&'&54763267632676   Bt  ah>) c!  ,Hs *ܡ   },"2A "  {3+Q26#"'#"'&'#'&'#"'&547&'&54767&'&54763267632676  ΂    NjM  rkW* & \ *3 #ﳎ*3 Tv! ( 5+" , @V #!!!!!%!!!!!!!!#!5!3 ;E;JEJJJ<;E;EJK!IKV{ !!!!!!||uv9f !!#!5!335#*+մ*ִw0r!!%!!!!!!/0``1/`1) !!#!5!3^^^~S3!!'#'!!#!!3!5LDʃDMA #5!#3!3'3#!#35!3###5353;9nj#5AI##0vQ#"#3;54'&'&'!"3276767653#4'&'&'&+3!52767>5/]LED73!&&54GBO]63H>SkS>H388]OBG45&&!35FEL]63H>SS>H38882I32367675&'&'.5467676236767>32#"&'&'&'#"'&'.546767675&% >#"? ?"#>    G   >#"? ?"#>  G     F  >##> >##>   F    ?#"> >"#?4'&'&'&'.54767676322767676767632#"'&'&'&'&'&#"'&'&'&5476767676765"#"'&'&'&5476767632B ,#,+%) 3!, &&*-#''#-*&& &$0 )$W$) 0$' L+,$&&$,/"&&$b3") M*,%&&%,."'%%0 )$W#) 4!, &&+,$''$,+&& &$1 ,#,+$)0267632#"'&'&'3&'&'&54676763267632#"'&'#"'&'&'&5476767#6767632#"'&'"'&'&'&54767#"'&'&'&54767676325##"'&'&'&54767#"'&'&'&476767632&'&547676763235#"'.'&5476767632&'&54767676h             -  (                  '    *             .         +j276767653"4'&'&'&+sidUS+*+'WPihtthiPW'+*+SUdi),)URhexuhbXR,,,,RYaitwfgSU),%t?247676763"'&'&'&5!276767653"4'&'&'&LEA86:4DDMMDD4:68AEtjdVT,*+(XQjhvvhjQX(+*,TVdj-76DCOME@:66:?FLOCC67-*UShgyvjbYS,-,-RZbjvyghTU*,(8 %%! !)ttJHcdecH]F]~]^C5 )!%%!2#"'&'&'&54767676hzt@z@Az@t{ne_RP)((&SNcdome_RP)((&SMdd0x}*(QObbrle]TP)**(QObbooe]TN+*(.'"276767654'&'&'! !_)(""""()_)(""""(Y$(*/.*(#  #(*./*($]^#< '1%%2"'&'&'&5476767! !#xxa)(#""#()a)(#""#(YDgghgD^I^W $(*0.+($  $(+.0*($ YZ(8 3'7'3!%%!! !hE۱CCDe g  g f ҁссi:]^= 3'7'3!%%!7!7'7!hTDEDDTNPPIQ2P11P2#mm(? -5%7'%!! !] P  gfeer­696ƌ]^^. /'%!!%!77!yrryyqm"_^^l%%tu%ߴ߳!63% %#'-7:|:||9|kֵֵkֶWz`37'%7% %#'ZZZZZ]^Z^ZZ˛ʜm˜˜mʜ0o #'!5!73!P6M6P$6PMP66R#6QLR6$Q6L$z     - h<_K <; L_zK <; J`;<_  '!'/7'?!7% % -[9^[[ZG^ZZz'}*}zy}*}'q^\\ZG^ZZ:\O}zy}*}'yz(}2 % %  h_y(_^(zFGs% % -hVHzVUzHrVU{HUVH% % -hhhႁhhhႂhhh$h7% %' 7-'hX5 5XV6 6g5VW6 6WV5 0t/37%!!%'#''7'%!5!%7'77;[TA:#T8#AT[TA#9T#8AT T8#AT[U@#7S#9@U[TA8#154'&5476276767632#"#"#"327232#"'&'&/"'&5476=&'&'#"'&'&54767632332?&547'&#"#"#"'&'&54767632676?>$,.c.,$> ]5 71+: H3> kR  Sk >3H :+17 7Z  >$,.c.,$? Z7 71+: H3> lR  Rk >3H :+17 9X  ib9@R'))'R@9dg  8d< +$;)01):$* \570+9 F3= kQ  Sj  =3F 9+077Y  >$,.a.,$? Y770+9 G3= kR  Qk =3G 9+079W     > h`9@Q'(('Q@9bf  7c<+$:)/0(:$+HH#:.'W4,CEH@,4W'*>&DL:Z##KGW,f ',;[;;+*Q--}KOW*AA*WSGu5-U&+;;[;,)  '+;[<>**Q--}KNW+@@-USFu5-S(+;>Y;+* !67654'&"327632#"'&'&/#"'&5476=#"'&'&5476763232?'&#"#"'&'&5476763254'&5476276767632#"'&#"#"'&#"327676%32767654'&'&#"#"i/)F)/,UK:M $\/8E(5>H6-EFJA-5H;8)D7.\# L;KU,*UK;K #\.7F'5>H5-DE-6H<7*C8/\$ M:K U+:6-21 4 $:<;$ 4 22-6 O;(A7##7A(; !*:#.#;&Rm!CcJMU)??,RMJcCoS%9#.#;)!  );#-$:'Qn!DcIMU*??*UMIcD oS%;#.$:* f /D;;D/ $i"276767654'&'&'767632#"'#"'&'&'&'#"'&'&'&5476767#"'&'&'&5476767632&'&5476767632o00'))'00o00'))'0]0+)*+%# #+%0%##&&.0%+%   #%'.0$,#0%-# #%'.0$.  #%'-1$,#$%*/0961/*%%*/1690/*%) "*&0-(%$$$)-0&*!&"*!$$)-0&-#%(-0&*"" (-0&*"$$(./& n%#"'&'&'&5476767#"'&'&'&5476767632&'&54767676267632#"'#"'&'&'&27654'&'&'&"67&'&'&'276767&54767'&'&#"276767654'&/?676767654'&'&'&#"h &,&1/(&#!$&1%-$!&$/'.)2$-%c%-$2-*++&$!$-%1&$!#&(/1&,& =s0 9 55%R 9 !_  , 9 R%5s  _!#'"+'0/)&$%%).2'+$ * '1.*%%%%*.1' * "+'2.)%%$&)/0'+"'#L% %L %#M L:2(&6  _ M#%   6&(2: -[3b &'#"'&'&'&547676763267'&#"327%327676764'&'.#"7632#"'%&'&54767676324676762676322##"'&'"'&'.5#"'&'&'&54767"'&'&'&54767676&'&'&'&'&'67676?&'32767677676765&'&'.#"7676767&'&'&/326767674'&'&'67'&'&'&#"67'&'&'&'67676767"276767654'&'&'"'&'&'&54?&'276767654'7654'&'&'&"67'&547676762    (  b  (       #!"G"!# * " ' ## G!""  '  Y m    ( y   ( O k  w  m Q (  O (     ? ?   + / L* / *   +. M+ .*   !!!! '? ?' "#& #'"!!  '? ?'  !"!  $&  m P    O        m     y    O k         b       %j<\l"276767654'&'&/2#"'&'&'&47676762#"'&'&'&54767676% %-[''!  !''[&( !! (TB39)+,+76?A3:(+,+76>tjeVT,++(XRiiuskdVT,**(XQijtuz"z!uv!z"z#&(,-''""''-,(&#e)*:6?;97,+)*97z88,+,*UThgyricYT+,,*USigtvjbZR-,zvvz"z vv!z29"327632#"'&'&/#"'&5476=#"'&'&5476763232?'&#"#"'&'&5476763254'&5476276767632#"'&#"27654'&%&'&#"327676%327632 654'&'&#"#"i"(-+S I9K #Y.6C&4<F4,CDH?,4F96(B5-Y" K8IS*)RI8J "Y-5D&3<F4,CC,4F:6(A6.Y# K9I R*"(-62 #9~3 #9; 01+56 00,5`%;G,A $.?'!3&@!*Yx$ ImPT]-EE0ZTPmI "zZ)!?&3!'@-$ #,A'!2'?!*Yx$ImQT\.EE.\TQmI#yZ)!A&2"'?.#~&41%%14>3t-3>41%%14>3f^CC^B%@#@@%@#-4>41%%14>4-3>41%%14>3+  V  ++  V  !r +?Sg"&46277''"'&'&476762"'&'&4767622"'&'&4767$2"'&'&4767eeeBABA#U##U##U##U#V%**%V&**KV&**&V%**~ffeAA$AAV%**%V&**V&**&V%**#U##U##U##U#  &3@MYam+%5%32476;#"'&'?632&54?#"632/&54#"/72#547"&462"'&=3?_?6 6  6] 6'?&M&C_CC_?&M&< 'L&&L'!6 6^6!6 >_CC_D<>"l267632%632#"'%3#"'&'"'&547#"'&54727%#"'&47632%&'&54763&5476h!#;'&1'h 9##8)'1!, ;#A#; '&1')8##9 h'12;# 4%.&! 6 = 6%".% 3 3 G%.56 = 6 %".G 4 $8 ! 54."#"54$32632#"_ ɀ~~a>E  %!#!3!p EE?p9E=V %!%!35!cE:d FF8 %!!![:F:\;[0q %!!7!N]<N;)G+t  ,o9; #q !rQk!k`!733}b>v!#7#)iC~'  #'  #g]jOS2#"327676765#"'&546;57!##"'&'&'&54767676%#     42;%-n`Ԯrr#26A@:V7:$)&7.Yq   % $.277g[(dVDQ49%*,04?()-#52&'&547676762"'&'&'&5476767hc"$njln(Lfe*+$$$$+*e*+$%%$+! #'(*dRjjSc*('!"%*,20,+%""%+,02,*%"%C&'&547676762476767622"'&'&'&5476767hcn(%X%&&&W%(nؖe*+$$$$+*e*+$%%$+,Dj*('(&,,&('(*kC"&*,11,*%##%*,11,*&".i%%&%&54767676247676762hhÔ*(42u24)(()42u24(*i\=97,*+*96@@69*+*,79=Zr_'#"'&'&'&547676763"'&'&'&5476767632_dA=;0-/.=:DD:=./-0;=Abx1.=8DC9() 1F="%".4"tNa5&$4! /.r<@6B2L_0>Q#kI|"rz7&)?),%=^K=.C26F@13.!9+cM313N676 547&'&327#"'#536767&'&'&5432&5476323254'&543253%5@26`', =NR6#!vWR>4 2:O t51"".1&X.RO A5ȏ )T/186,FAS :#(=:tA0 9SD 'A#5}11BO9 "'&'&'&547676763"3ᗊpm8884qlYTN! !C@RP]e:6pltm9:'62~~jf77"05276767654'.'4]PR@C! !NTYlq4888mpe'67fj~~27&:9mtlo7:fkR !&547jljjlyyxzQqpnc$0!!676n wu;;vi43f$lcC}U# 3tD}U 3 DutV.! !JV. ! JA! !m^\GHB ! ^^HHv!'7DWWWW|'7'7WWbW>W^$#"&=4&+5326=46;#"3xMe,,fLx1d=AOOA=dƂ׈ihDŽOߍOi(326=467&'&=4&+532;#"+5nCFVU$#Cn5BB*)p//oTBB¥P⎁AAPDBۇ45iDCS/~ #!5!3}t]} 7%d^=]d>S~5 /%0~##t] '-f\=]d]>-!'7!. (``I)=2"&'&'&5476?!".'&47>3!'&'&54767>2 '!  `!!  !' ,&   &   S~&!5! F78-x!5!5 V(Mr6u #3#3#3!!5 鴴ZZ---I(,,,,S~  55!#3#3#3F9UU**b]^bUUUS~!!5 F7.`tq!%  qR{V$%! S%@{V t%226=3!5 5!"'&'&'&6  $hI$  h$   6<47676763!5 5!"6  $hI$  $   $O!! e 6n55!lMlTwccwekl!5!!53 ' !_[y"kd""e/l5!!53 ' !_["/d""5 !73#57!%!6UcGjbzbdǩ""ap 5!'53#'!!!7%acߎA[؁(ZqZ{{{ĒҒ}TM %'!'!53 !;qKRnKa26wwIw22wT}> 3#5!7!!! ZQtZQ0L>ssjLK2Nu '!53#'5!'7! !pSn%R&%Ua2wKJ,Lw22w)1 '7!573#5!7! !r&j&St&SpWl6qM,LLyy77y@!6767632#"'&'&'!  6IYZgb^UMI%&&"LF\Zfc^UM3!t:6I&&&#LHZZhc\UMH'&&#L2<tt XNy "&*.37#37#37#37#5'!!55!!3'#3'#3'#3'#r+qr*rr+rr+rV{{*q+*r*+r++r+9Ɔ\]t] 7&#"7'7 #%5#t69.wZY96t".*X/S~k 55!5!!7'!nnUVGG8:ȏu\j '327'' #395t".Y/Y"u69.xXXN2%&#"6767&'&"67632&'&547676767}:"  s %*&*(&"!#!"O>>;*E/4767!"!47676763"'&'&'&5!3!&'&5v  5 $ %% $  H vgMME %!#"!% EMu\2&'&'&'&54767#"'&'276?&'&'32\":  #'$'$#Y@I:86s6::I  #&'#'" X  :5*+B67"'&'&'&547676$47676762"'&'&'%&'&'&547676762$[ /  H =a=   / ZI=X  q> d(*c     XJn.676767632#"'&'&'&%&'&54767&'&54765 #&+*1)F-Y)) .EOO/3S>>S&/ #$))%#]]#%))$#&e"'&'.54?654'&'&'&+"#!".4?64/&4676763!2;276767654/&54676762 I ]]I    Q      Q  %eg"'&'.54?654'&'&'&+"#!".4?64/&4676763!2;276767654/&54676762 GKa u~iKG E     2 +#76767&'&/3#6767!5!!5!&'&'g?j7R=y66y=R6k?VO S+ +Sd _8=eyu'&utj>jiVVy ##! !+532765YZͷZ-,'ij>>% %!#3!3iVO7n lѲR{H3!!# 9`#3!{`9Lh '"27654'&'2#"'&7673A\VMMG*w|~~hA1LLNeˑRh]c[斘,mKseg.!#5#"&'532654&+532.Dv6;zIMcݳw"$.*gQH{"264   676326^\`s-!\[^[]-=P@7'"]_$5hWd3#3h݄D%36767#"'&5476?>5#5% Yb^`_hon"!^XE&->B%DS #D9``LAB\VBT=;-;,,1Y7:w!##Z:#5!#J&w3!3XZ!533XK,X3#3,X0X,X3#3,$dX,X3#3,X,X3#3,X,X%3#3#,񈈈X,X3##3X0X,X3##3$dX,X3##3X,X3##3X,X%3#!#3X,X!#!!yX,X!#3!!Ẍ,X!#3!!X,X!#3!!Xd,X%!!3XT| 3'#'L:LjLCUCT| #'737:LjLCUC( 3#3#'( f*D( #53#73 fRo(D dVH#!#3!+32765H),-ZͥZYd+9>>jiV4&#"#3>32+532765bjq1sYZ͹Z-,`c6ij>>~'IJ !5!5!5!J>>I3#qe10#+H %"32654&'6#"467.5463%!"h{1PAž(rڜ-*/1|I5#7N@*        JEE<2<2991/<299903#'#"!#!##535463wcM%ɩQge/яN#7B@#    JE E<<991/<29990#!"!!##5354637cM%۸ɩ{Qge/яNE & S ME & G M X& Z M  X& [ M E & S LE & G Lx X& Z L X& [ LE & S NE & G Nr  X& Z Nz X& [ NE& S M7'E& G M-x& Z Mm& [ ME& S NE' N Gy& Z N|& [ NEW& SLfEH'4W G& ZK& []r& [ Ftj' Fv K?' F,~ H' F I~& [ Nj ' Nt K?' N,x H ' N IX f& M{X f&  M/}>\/' Ma8 >/' M 8 X f& EX f&  E&8\/' E8 8/' E8 X f& L*X f&  LB\/' L >/' L8 X f& N2X f&  N^\/' N >/' N8 a7& F` D' F\ 'U` ' ]C2%#"'$4733267654'&54767;#"'&'0Qcpl?AOL64)>.VhFd((&*=#>2(I=/ b \^xHj<9"1B,f%TOA7.N?+  cG&C OJ' OT M+9' P N9' P O6 ]  &#"'&47332767654'3;#"'G{579T?:!e#"#V4^Wt<;?xC3^w3UT8@0E&6D%3!"''&5473327&'&5476&'5%67654'&#"%3276'&'&bJDv-(0g:-0M,QG$"':AG 5' 343%@K5:,+ CfN@TSZ 'AO@H=.%4-+#%v_U[1C "&_ ,:%&'&5476&'53!"'+532767654'&#"%3276'&'&\:-0M,QG JF$"':AG 5' 3CfN@TSZ 'AO844U@H=.%4-+#%v_U[1C "&_X %!#53 76=3`H՞,1VV,1jٻX%#!5!276=33!!"^L,02,*VV,1jj1,| X' E ZX' E [D&D"k ;#"'&=31,cK\WL71,\W+DD&D&D & 0!&!Vz"&"U-&#'# } 9&$9'$' }L 3&$`>Z '$2>   &% &%V }V&$Y|_'$ '$p Z'$p [ L 3;!"'&L2,PXskj1,\eE& S DE' D GX& Z DX& [ D& Ej' E E & S EE ' E G#' ER Z' ER [E& S FE' F G,& Z FR& [ F,X f& DX f' Dp \/' D  /' D  X fX f.%3#"'&'&'27'&5767&5$(1{R=IrbJԖ`e_$m3HZdP]vbĘe4)@5 [_w\/&'&'&5672+5327676SSgURHKLXJKݣdht^#4b4bBPH:jV/);#"'&'+53276767&'&'&5672~AI2h6:H~D& D] ` ' D  $F"'&''#"'&7673327676'&/37653323;#"'4A@E2J/1%=Gq_evh+&%*TdOvG#%,9?#@*8m~C "RVxgt7323;#"'#"'&'#"'&'+53276=32765!5d*,""@e;6:HO7* F35C%&F:DF*7@`*%Rx&),`X I6[m8*6759,%#GvOdTtg$& F6 ' F  ' F  ' FR    G%327654'&#"%;#"/+"'&5#"'&5473767654'&'367632Ij($?GhK=.';4f&4-//3fJZ}eh<2H7(28`@%(jm=vbw $A7. *727&'&5763"327%+5=K4X}ں>SF8I \Y];d}M4F!Ť$/%+532767&'&5476762;#""654'hkB;(aD hYYf MXD=pʨ4/gg/($'UZ'-)74--38)-'bM,(U __ z F& Dw L' D F' Dw L' D & [ D*jL' D K?' D~ H~' D" I}t& T E]~' ENk J?& H E,~~& I E!D#"'5327654'&'&7676##"'&547#76767;5#"'&5J&P DfXRNB8D-<9_h$$EB|=Q&v+6(  %z|qe))5!27654'&54767;#"'&/P/62 hF F&,@XB:f"``h$$EB|=Q&v+6(  %?+)x.CK $##"'&547#3276767;5#"'&5EcTiI(A@wc}^h3N8K+,19)"B~ss\V*"/~?]3,1j )5!27653WP,1se\,1j%)5327653;! hL,02,VV,1jkj1,TGt4%327654'&'&#"#"'&#4763&547632;#" zL,5;(.;D Kp#IxAIM\HT(RfV*9:X DD(PNKOmf7*(?$G@^m*%'+53276767632%327654'&'&#"d`p@ht4,+^]EE>/4:''5)24ed0$#1P8O$*ME5EX !a%m/%#"'+53276767632;#"%327654'&'&#"|an@h4,+^]HB3&id>/4:''5).4fb0$#1P8S1>/E5EX d%6& ] D ' Dw U& Z DR& [ DR $&'&'&'3;#"'&'#"'&5476 xRot$8pqZI-&8:m*12e CY>)2'+eO,3;I0D-=67654'&#"27&'&5476&'5#"'+5327654'&$"':A4N--0M,Q;(Jxb 41~! @H=.%4-+#%v iEN@TSZ 'C49g=ql)D%'r.C!v-3j  ;AWE L9P)8K6(S/VL_+Y9K1\S|7%&'&'&54767632;#"'&##"'&'&73327676 ,)MW,.@"##C@"*5NhLy $Eq:<3, $.=N/[ EW3235huFX^"!ݺh^bNm/>ZUb=*(DV\BAL89DEnY1X;YTBEb%$q%1&R'N(X)fP*H+,m-.s/Vy0F1u\2u3u\45J6/7=899:;%<=#{DXE%{F{G{X{H'I{H{JKDLVMN Omo{P{QH{RVT{SRwTj{U{VW^Xdm`Y`ZL`[hV`\b]LF#7fo-L7NFf@103# qf?Q@ aa1<20KTX@878YKTK T[X@878Y3#%3#?Zk10K TX@878YKTX@878Y@&  //// //]]3#@   99991<<990KTKT[X@878Y@t        !      ]]'.#"#4632326=3#"&d9 #(}gU$=19#(}fT"<9! 2-ev 3)dwyi10K TX@878YKTX@878YKTX@878Y@ //]#1Ś7]@ 91<90K TX@878YKTX@878Y@ //, ]3#'# ӌ7i@ 91290KTX@878YK TX@878Y@ //*//]373 ӌ Zj@ 9910'3$ll/{m > #.#"/  waSRd {xz{w8796/{m @ PP120332673#"&/w dRSaw m6978w{zPa103#PXck@ 1<203#3#\zkcyk#!#uŚŚkf$(#5476?>54'&'&56763#7:)*%>8'9@B9Q[~CG=9. bEBTY;X1I*%#D>"Y`LAB\VE'*==010!!=V045!5!5gr4!5!;r4!5!/r^s 2"&46"264hrL&'◚vURyVP%`8n|TyRTv?F3#%3#?53#73#'3# 3#3#'3#}}dE&"'&547332767654'3;#"'&')+ubEW-7!K4/+X`t8A>|0l7%5A8>7KZd3(,*OQ/9?0654'&323276767'&54767632#!V)B,4((7(*HTO<?aNbNLZB`.NJ|m+M;3*)3P& ]027EW4,E$2Hf3Џ,' 3;!"'#!5327&'&5476762"67654'&'ȷ$&ň($28 D@$ 8P2*I1C299(M.L,0W 5+5DE2.4!.@%&'&'&54767632;+'$'&547332766'&'&#"B.y9()Wp8c2X]0Lh^E>>:lu{/"'"5 9Ld/  #+m=E2X:SmJN}`kI="'&4762<R8R8z?@?@@?@(8)*8@@@@@??V<D@!B  10291/<2990KSXY33+532765#5YZ͹Z-,˹iij>>iE'&5473327654'ߚ)+ubj{G{yo9;>|0lALj@G}t8654'&32676#"'&54767632'&'&5473)B,4((7(*H[b?zKbNLc9g'!.9ΊMRVV+M;3*)3P&;f4KCW-3E$2Zwfj}ػH(E  ' Q & S EE' L  SX '$8X ' MX ' FT&&>x9654'&"32#"'&&733276767#"'&54767632)B,4P7&,Hir$$xZT0A&?zKbNLZB`.,L95T2R$T&()X\^-"2(hLDV,4D$2Hf3C'&6#"'&47332767654'3dG{579T?:"FHt<;?xC3b`L 3H'&p'&(L̜_<ƼHƼHUmhR!9\XdffXXX%fmVuu/9%fZH{{{mjdLhX%?wXd=+XBFjX%%%%%%uuuuu%){{{{X/hh%%%{{{{{{{f{f{f{f{FmLuuuHj j///%h%F0<<^u?4An1mu -V8xv// 'J}}}9%uz%%)f{uu}f{=)/%%{{uuhj/}%{uuuu%hjxx/!79{{{zz8{zffX(hhgEfjjzz}}}v_AHHf}i_6w#6AAQ0^^))$=$=>/VX%V[^,,,,,)=/?VX)"V//yysb^_s?$U))//=X/UU?p6%%u%Vux/%uuJ%F63F 6DtP3LYF633Ft"p"m94u`!Y4uVUm"h%!Vu/hBPr< A<L}i{;=hcL|}PhN{{# A#h uU;b/%\%\L;%%){uzuz;}uuuhhhhhhAhu11ZdL EEEXXX$$ zzC6LDDDDDD0V\~~6EEEEEEXXXX ~~>ly|as{jK}}cceesdaobwU0[SSSSxEV_In7777-7777Vv7kn#)+?+77LL,:d^E<<.?AEEGGG11OOGI8%[:X::GM[%#H[#{:GXQ:OWbG[CaIGdUU~%%UU?::[xM Fa^M3:%{{{}{{{{{f{7VmVmVmujj==////9d9dLL%hh%%%%{{{uu    ' ' ' '%h%h%hFFFFFFFF%%llMM@@cc66'33333333@EFFFFFFFFfFF633FFFFFFFFFF%%llMM@@ccFFFFFFFFfFFFFFFF%%%['/66333333%%[p?FFFFFJdd??PZZ!!=H ?I=;0A=XBF ?I=;0E1:1 {_m *{%*/.j5':TTJ B%0J%  BBBBBYYBBBBBBBBBBBBq?QQ2BXXBBBBGB*BB*B*BBBBBBBBBBBBBBBBBBEEB*BBBBBBBB%uIXXf+?;;;)}}?5XJWXXXXXXXXXXXXXXXWXXXXXWJJXXXXXXXEXXXXXXXXVVVVWXXXXVVVVVVVVVXVVVVVVXXXXXXXXXXXXXXOOOOOOOOOPPPPXXXVXVVVVXXXXVVVVPIrZZ% % XaGX++|h}2H%%?XX%XX6FFHRFFF    xxxxxxx||iEiiDDu777777?aa"2"Y::;+6.ocN8/&/// "N`ya7g!!!!GCL54=/U28Y^CVpj6gv2 1.rjD7`./<KD$>K--9.7.P<<<<<<....RRs'J*R*"..:=4%=?D-W&W;%J@3@V90~0G+%(C(#(=(.6W0$2$0174!$%2 02)!"$E=80+Qg.rA1fnCDStSt-IS-6SS`{{66O6ee5a}T2)XtSuN*u5&%287uuXXV%LZZ,,,,,,,,,,,,,,,TT(((##EEEEEEEEEEEEjjXXXXXXXX`` 6|DD"DDDD0VLZ| LEEEEEEXXXXXX``$$  zzjC G6LZ||@S__R%fmVuu/9%{{{mjdLhf?y77//Xf=^?EjEEEXXXC6LLLLL,x 8d x ( d  4  ,(PD  !!T!!""@"#p$$%%&8''p'(P)L)*+ +,,,-P.<./ /0123X4$4T5$55567L8d989::<<=`==?,?X?@<@ABBCC@CPCDHDDEE FF8F\FFFH$HHI I$I<ITIlIIIJlJJJKK<KtKLMM4MdMMN@O$O<OTOlOOOQQQ4QLQdQQQQQS S$S<STS|SST8U<UTUlUUUVpVVVVWW,WDW\WtWWWWWXXXDXTYY(Y@YXYpYYYYYZZZ0ZHZ`ZxZZZZ[$[\D\x\\\\]](]@]X]^P___0_H_``\`````aa,aDabHb`bxbbbbbcddDdddddde|fffffg g$g<gTglgggggghh8hPhiLixiiijj<jTjljjjjjkk4kLkpkkkkklldlmmn ndno`op@pPpqqlrrtsst txtuXuvv\vw wTwxxLxxyy,yyzlz{\{|L|\|},}h}~~ ~<~~TH d0 dt4Ll ,DTt $<Tl, 8Ph(@Xp0H`xLTD,Ld|``\XxDX(H|pLt<,txP@8h<p`H < 4p< |0x d<Hxp0(HlH(pP D$t@X$\œ¬¼Tð h4DlňŜŰƼ 8HȄ Ɉ<`ʈʰ 0\lHX̸̨4l͈Ͱ<`΀<hτϴPмdtѐѴ<x ,<XpԌԨ(pդ,@րּ֠4D\t׌פ׼ |،؜جL\lDTdtܜD\t݌ݤݼ|,H`h@D8p( $4Th4(dtx4< 8P(`H`pHXhxHh\x(8pPhxd ,pXh t L  8   ( @ X       @0` 0t |8DL\ T 4LX\x 0H`p 0H`x,D\t4` dl  |     !!(!@!X!p!!" "`"x""##$`$x$$%t%%%%&&'x''(x))4)`**,*H**+x+,,,$,L,h,,-l-.\../D//080\0011101H1`1x1111122 223333334`45L5\5l5|6<6778t9(9:H:;8;<`<=$=>???@A AB,BCD4DElEEF4FLFFG,GGHHHHIPIJJ,J\JKKLLxLMpMN4NOOdOP4PQQQR,RSPST@TUUVVTVWhWX$XY\YZ0Z[,[\(\\]`]]^_0_h``D`x`aaaabdbbcc`ccdd8dXddde8e|effhfggghhiTij jjkhkkl@llm<mlmmn0ntno oHo\opoopp$plpqqdqrhrssdsttXtttuTuuuvvw<wwxHxyyz4zz{L{t{{|L|}}}0}H}`}x}}}}}~~,~D~\~t~~~~~4Lh,D\t4Ld| $<Tl,D\t,D\t4Ld,D\t ,D\t4Ld| $<Tl$<Tl4Ld| $<Tl,D\t4Ld| $<Tl,D\t4Ld| $<Tl,D\t4Ld| $<Tl,D\t4Ld|$<Ldt $<Tl,D\t4Ld| $<Tl,D\t4D\l|(@Xh $<Ld| 8Phx 0H`p 8H`p(PxDh  DD8Tt (D`` xX0X$8L`t(<Pdx(h`000dt ˆHpŸlƬƼdDŽǤ$DdȄȤ,`ɔ Tʄʴ T˜D4| LΌ@|PѠhӀ$\Ԕ<t֐4؄ب Hpٔٸ `ڴDیPܴ0ݔTޔLߌ L x`@|4pTl0tT4<p, P,0 0DT`$Hp4 ,PD8TDTh(\ X   8   d   t  P x$h0, 8|Tth,Hx( t  !\!!!"\"##8#l#$<$%h%& &X&' '(H(() )8)p)))*4*T*t***++,+T+t++,,`,---..(.H../0//445$5P556@6X67h77788889 9::H::;4;;< <8?(?h???@@@0@H@`@x@@ApBCCEEFlFGGPGlGGGH0HPHlHHHHI$I|IIJJ`JJJK(KlKKKKLLHLLLM4M|MMNN4NXN|NNNOO,OPOtOOOOP PHPtPPPQ$QLQtQQQRRLRxRRRS SHSpSSSTT@TlTTTUU<UlUUVV<VpVVWWLWWWX XTXXXYY0YXYYYZ Z8ZdZZZ[$[P[|[[\\X\\\]0]`]]^^D^^_,_`___``8`x````aa a<aXa|aaabb b<bXbtbbbbccc8cTcpcccdpefffffg g(g@g\gxgggghh\hthi(j\jklm m(mTmpmmmnn4nPnxnnnoo$oPoloooop p<phppppqqDqrrhrstxu,uduv vdvw wpwwxxtxyyHytyyzzTzpzzz{{4{`{{{|8|d||}0}l}}~`~L<hP``((\8$|lxl4,<@(h$XDX`$p@0hxX|ĘŬƼH@ʄLL4Θ< `Ѽ Ҁ ӴtXP4DlXh݈d$(X0XPp(8`thXtt@Px <h   P| p\$L|L4  !L!"D"#$$$%d%&&t&'|'((`()t+(-(.h0245:?h@ @BdCE4FGH@HtHHII`I|IIIIJJ4K,KLM(MNOPPPQQ(QPQxQQQRR@RSSDSpSSSTTTU<UUUVV8VVW W8W|WXX\XXYHYZZ[[L[\L\]^d_`,a`abXbbccDcdccd d8dddddeeDetfffg gDglgh<hhhihiiiiij jHjpjjjkk8k`kkkkll0l\llllm<mmmmn$no<ooop p$p<pTplppppppqq,qDq\qtqqqqqrrr4rLrdr|rrrrrs s$s<sTslsssssstt,tDt\tttttuPu`upuuuuuvXvhw8wHwx0xtxxxxxxxy0y@yPyhyxyyyyyyzzz0zHz`zxzzzzz{{ {8{H{|{{{{{| |$|<|T|l||||||}},}<}~<~~~ 00H`pDt84D  ,D\tH<Ph8(8 $<Tl (8HXhx(8HXhx(8HXhx(8HXhx$$PX TD,H$4L|hH0H`x@X a +kW_B]  @  4     S  b     " :R & hhCopyright (c) 2003 by Bitstream, Inc. All Rights Reserved. DejaVu changes are in public domain Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. DejaVu changes are in public domain DejaVu Sans MonoDejaVu Sans MonoBookBookDejaVu Sans MonoDejaVu Sans MonoDejaVu Sans MonoDejaVu Sans MonoVersion 2.30Version 2.30DejaVuSansMonoDejaVuSansMonoDejaVu fonts teamDejaVu fonts teamhttp://dejavu.sourceforge.nethttp://dejavu.sourceforge.netFonts are (c) Bitstream (see below). DejaVu changes are in public domain. Bitstream Vera Fonts Copyright ------------------------------ Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces. The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera". This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names. The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org. Fonts are (c) Bitstream (see below). DejaVu changes are in public domain. Bitstream Vera Fonts Copyright ------------------------------ Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces. The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera". This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names. The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org. http://dejavu.sourceforge.net/wiki/index.php/Licensehttp://dejavu.sourceforge.net/wiki/index.php/License~Z a  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghjikmlnoqprsutvwxzy{}|~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b sfthyphenAmacronamacronAbreveabreveAogonekaogonek Ccircumflex ccircumflex Cdotaccent cdotaccentDcarondcaronDcroatEmacronemacronEbreveebreve Edotaccent edotaccentEogonekeogonekEcaronecaron Gcircumflex gcircumflex Gdotaccent gdotaccent Gcommaaccent gcommaaccent Hcircumflex hcircumflexHbarhbarItildeitildeImacronimacronIbreveibreveIogonekiogonekIJij Jcircumflex jcircumflex Kcommaaccent kcommaaccent kgreenlandicLacutelacute Lcommaaccent lcommaaccentLcaronlcaronLdotldotNacutenacute Ncommaaccent ncommaaccentNcaronncaron napostropheEngengOmacronomacronObreveobreve Ohungarumlaut ohungarumlautRacuteracute Rcommaaccent rcommaaccentRcaronrcaronSacutesacute Scircumflex scircumflex Tcommaaccent tcommaaccentTcarontcaronTbartbarUtildeutildeUmacronumacronUbreveubreveUringuring Uhungarumlaut uhungarumlautUogonekuogonek Wcircumflex wcircumflex Ycircumflex ycircumflexZacutezacute Zdotaccent zdotaccentlongsuni0180uni0181uni0182uni0183uni0184uni0185uni0186uni0187uni0188uni0189uni018Auni018Buni018Cuni018Duni018Euni018Funi0190uni0191uni0193uni0194uni0195uni0196uni0197uni0198uni0199uni019Auni019Buni019Cuni019Duni019Euni019FOhornohornuni01A2uni01A3uni01A4uni01A5uni01A6uni01A7uni01A8uni01A9uni01AAuni01ABuni01ACuni01ADuni01AEUhornuhornuni01B1uni01B2uni01B3uni01B4uni01B5uni01B6uni01B7uni01B8uni01B9uni01BAuni01BBuni01BCuni01BDuni01BEuni01BFuni01C0uni01C1uni01C2uni01C3uni01CDuni01CEuni01CFuni01D0uni01D1uni01D2uni01D3uni01D4uni01D5uni01D6uni01D7uni01D8uni01D9uni01DAuni01DBuni01DCuni01DDuni01DEuni01DFuni01E0uni01E1uni01E2uni01E3Gcarongcaronuni01E8uni01E9uni01EAuni01EBuni01ECuni01EDuni01EEuni01EFuni01F0uni01F4uni01F5uni01F6uni01F8uni01F9AEacuteaeacute Oslashacute oslashacuteuni0200uni0201uni0202uni0203uni0204uni0205uni0206uni0207uni0208uni0209uni020Auni020Buni020Cuni020Duni020Euni020Funi0210uni0211uni0212uni0213uni0214uni0215uni0216uni0217 Scommaaccent scommaaccentuni021Auni021Buni021Cuni021Duni021Euni021Funi0220uni0221uni0224uni0225uni0226uni0227uni0228uni0229uni022Auni022Buni022Cuni022Duni022Euni022Funi0230uni0231uni0232uni0233uni0234uni0235uni0236dotlessjuni0238uni0239uni023Auni023Buni023Cuni023Duni023Euni023Funi0240uni0241uni0244uni0245uni024Cuni024Duni0250uni0251uni0252uni0253uni0254uni0255uni0256uni0257uni0258uni0259uni025Auni025Buni025Cuni025Duni025Euni025Funi0260uni0261uni0262uni0263uni0264uni0265uni0266uni0267uni0268uni0269uni026Auni026Buni026Cuni026Duni026Euni026Funi0270uni0271uni0272uni0273uni0274uni0275uni0276uni0277uni0278uni0279uni027Auni027Buni027Cuni027Duni027Euni027Funi0280uni0281uni0282uni0283uni0284uni0285uni0286uni0287uni0288uni0289uni028Auni028Buni028Cuni028Duni028Euni028Funi0290uni0291uni0292uni0293uni0294uni0295uni0296uni0297uni0298uni0299uni029Auni029Buni029Cuni029Duni029Euni029Funi02A0uni02A1uni02A2uni02A3uni02A4uni02A5uni02A6uni02A7uni02A8uni02A9uni02AAuni02ABuni02ACuni02ADuni02AEuni02AFuni02B0uni02B1uni02B2uni02B3uni02B4uni02B5uni02B6uni02B7uni02B8uni02B9uni02BBuni02BCuni02BDuni02BEuni02BFuni02C0uni02C1uni02C8uni02C9uni02CCuni02CDuni02D0uni02D1uni02D2uni02D3uni02D6uni02D7uni02DEuni02E0uni02E1uni02E2uni02E3uni02E4uni02E5uni02E6uni02E7uni02E8uni02E9uni02EEuni02F3 gravecomb acutecombuni0302 tildecombuni0304uni0305uni0306uni0307uni0308 hookabovecombuni030Auni030Buni030Cuni030Duni030Euni030Funi0310uni0311uni0312uni0313uni0314uni0315uni0316uni0317uni0318uni0319uni031Auni031Buni031Cuni031Duni031Euni031Funi0320uni0321uni0322 dotbelowcombuni0324uni0325uni0326uni0327uni0328uni0329uni032Auni032Buni032Cuni032Duni032Euni032Funi0330uni0331uni0332uni0333uni0334uni0335uni0336uni0337uni0338uni0339uni033Auni033Buni033Cuni033Duni033Euni033Funi0343uni0358uni0361uni0374uni0375uni037Auni037Etonos dieresistonos Alphatonos anoteleia EpsilontonosEtatonos Iotatonos Omicrontonos Upsilontonos OmegatonosiotadieresistonosAlphaBetaGammauni0394EpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsi IotadieresisUpsilondieresis alphatonos epsilontonosetatonos iotatonosupsilondieresistonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdauni03BCnuxiomicronrhosigma1sigmatauupsilonphichipsiomega iotadieresisupsilondieresis omicrontonos upsilontonos omegatonosuni03D0theta1Upsilon1uni03D3uni03D4phi1omega1uni03D7uni03D8uni03D9uni03DAuni03DBuni03DCuni03DDuni03DEuni03DFuni03E0uni03E1uni03F0uni03F1uni03F2uni03F3uni03F4uni03F5uni03F6uni03F7uni03F8uni03F9uni03FAuni03FBuni03FCuni03FDuni03FEuni03FFuni0400uni0401uni0402uni0403uni0404uni0405uni0406uni0407uni0408uni0409uni040Auni040Buni040Cuni040Duni040Euni040Funi0410uni0411uni0412uni0413uni0414uni0415uni0416uni0417uni0418uni0419uni041Auni041Buni041Cuni041Duni041Euni041Funi0420uni0421uni0422uni0423uni0424uni0425uni0426uni0427uni0428uni0429uni042Auni042Buni042Cuni042Duni042Euni042Funi0430uni0431uni0432uni0433uni0434uni0435uni0436uni0437uni0438uni0439uni043Auni043Buni043Cuni043Duni043Euni043Funi0440uni0441uni0442uni0443uni0444uni0445uni0446uni0447uni0448uni0449uni044Auni044Buni044Cuni044Duni044Euni044Funi0450uni0451uni0452uni0453uni0454uni0455uni0456uni0457uni0458uni0459uni045Auni045Buni045Cuni045Duni045Euni045Funi0462uni0463uni0472uni0473uni0490uni0491uni0492uni0493uni0494uni0495uni0496uni0497uni0498uni0499uni049Auni049Buni04A2uni04A3uni04AAuni04ABuni04ACuni04ADuni04AEuni04AFuni04B0uni04B1uni04B2uni04B3uni04BAuni04BBuni04C0uni04C1uni04C2uni04C3uni04C4uni04C7uni04C8uni04CBuni04CCuni04CFuni04D0uni04D1uni04D2uni04D3uni04D4uni04D5uni04D6uni04D7uni04D8uni04D9uni04DAuni04DBuni04DCuni04DDuni04DEuni04DFuni04E0uni04E1uni04E2uni04E3uni04E4uni04E5uni04E6uni04E7uni04E8uni04E9uni04EAuni04EBuni04ECuni04EDuni04EEuni04EFuni04F0uni04F1uni04F2uni04F3uni04F4uni04F5uni04F6uni04F7uni04F8uni04F9uni0510uni0511uni051Auni051Buni051Cuni051Duni0606uni0607uni0609uni060Auni060Cuni0615uni061Buni061Funi0621uni0622uni0623uni0624uni0625uni0626uni0627uni0628uni0629uni062Auni062Buni062Cuni062Duni062Euni062Funi0630uni0631uni0632uni0633uni0634uni0635uni0636uni0637uni0638uni0639uni063Auni0640uni0641uni0642uni0643uni0644uni0645uni0646uni0647uni0648uni0649uni064Auni064Buni064Cuni064Duni064Euni064Funi0650uni0651uni0652uni0653uni0654uni0655uni065Auni0660uni0661uni0662uni0663uni0664uni0665uni0666uni0667uni0668uni0669uni066Auni066Buni066Cuni066Duni0674uni0679uni067Auni067Buni067Euni067Funi0680uni0683uni0684uni0686uni0687uni0691uni0698uni06A4uni06A9uni06AFuni06BEuni06CCuni06F0uni06F1uni06F2uni06F3uni06F4uni06F5uni06F6uni06F7uni06F8uni06F9uni0E81uni0E82uni0E84uni0E87uni0E88uni0E8Auni0E8Duni0E94uni0E95uni0E96uni0E97uni0E99uni0E9Auni0E9Buni0E9Cuni0E9Duni0E9Euni0E9Funi0EA1uni0EA2uni0EA3uni0EA5uni0EA7uni0EAAuni0EABuni0EADuni0EAEuni0EAFuni0EB0uni0EB1uni0EB2uni0EB3uni0EB4uni0EB5uni0EB6uni0EB7uni0EB8uni0EB9uni0EBBuni0EBCuni0EC8uni0EC9uni0ECAuni0ECBuni0ECCuni0ECDuni10D0uni10D1uni10D2uni10D3uni10D4uni10D5uni10D6uni10D7uni10D8uni10D9uni10DAuni10DBuni10DCuni10DDuni10DEuni10DFuni10E0uni10E1uni10E2uni10E3uni10E4uni10E5uni10E6uni10E7uni10E8uni10E9uni10EAuni10EBuni10ECuni10EDuni10EEuni10EFuni10F0uni10F1uni10F2uni10F3uni10F4uni10F5uni10F6uni10F7uni10F8uni10F9uni10FAuni10FBuni10FCuni1D02uni1D08uni1D09uni1D14uni1D16uni1D17uni1D1Duni1D1Euni1D1Funi1D2Cuni1D2Duni1D2Euni1D30uni1D31uni1D32uni1D33uni1D34uni1D35uni1D36uni1D37uni1D38uni1D39uni1D3Auni1D3Buni1D3Cuni1D3Euni1D3Funi1D40uni1D41uni1D42uni1D43uni1D44uni1D45uni1D46uni1D47uni1D48uni1D49uni1D4Auni1D4Buni1D4Cuni1D4Duni1D4Euni1D4Funi1D50uni1D51uni1D52uni1D53uni1D54uni1D55uni1D56uni1D57uni1D58uni1D59uni1D5Auni1D5Buni1D62uni1D63uni1D64uni1D65uni1D77uni1D78uni1D7Buni1D85uni1D9Buni1D9Cuni1D9Duni1D9Euni1D9Funi1DA0uni1DA1uni1DA2uni1DA3uni1DA4uni1DA5uni1DA6uni1DA7uni1DA8uni1DA9uni1DAAuni1DABuni1DACuni1DADuni1DAEuni1DAFuni1DB0uni1DB1uni1DB2uni1DB3uni1DB4uni1DB5uni1DB6uni1DB7uni1DB9uni1DBAuni1DBBuni1DBCuni1DBDuni1DBEuni1DBFuni1E00uni1E01uni1E02uni1E03uni1E04uni1E05uni1E06uni1E07uni1E08uni1E09uni1E0Auni1E0Buni1E0Cuni1E0Duni1E0Euni1E0Funi1E10uni1E11uni1E12uni1E13uni1E18uni1E19uni1E1Auni1E1Buni1E1Cuni1E1Duni1E1Euni1E1Funi1E20uni1E21uni1E22uni1E23uni1E24uni1E25uni1E26uni1E27uni1E28uni1E29uni1E2Auni1E2Buni1E2Cuni1E2Duni1E30uni1E31uni1E32uni1E33uni1E34uni1E35uni1E36uni1E37uni1E38uni1E39uni1E3Auni1E3Buni1E3Cuni1E3Duni1E3Euni1E3Funi1E40uni1E41uni1E42uni1E43uni1E44uni1E45uni1E46uni1E47uni1E48uni1E49uni1E4Auni1E4Buni1E4Cuni1E4Duni1E54uni1E55uni1E56uni1E57uni1E58uni1E59uni1E5Auni1E5Buni1E5Cuni1E5Duni1E5Euni1E5Funi1E60uni1E61uni1E62uni1E63uni1E68uni1E69uni1E6Auni1E6Buni1E6Cuni1E6Duni1E6Euni1E6Funi1E70uni1E71uni1E72uni1E73uni1E74uni1E75uni1E76uni1E77uni1E78uni1E79uni1E7Cuni1E7Duni1E7Euni1E7FWgravewgraveWacutewacute Wdieresis wdieresisuni1E86uni1E87uni1E88uni1E89uni1E8Auni1E8Buni1E8Cuni1E8Duni1E8Euni1E8Funi1E90uni1E91uni1E92uni1E93uni1E94uni1E95uni1E96uni1E97uni1E98uni1E99uni1E9Buni1E9Funi1EA0uni1EA1uni1EACuni1EADuni1EB0uni1EB1uni1EB6uni1EB7uni1EB8uni1EB9uni1EBCuni1EBDuni1EC6uni1EC7uni1ECAuni1ECBuni1ECCuni1ECDuni1ED8uni1ED9uni1EDAuni1EDBuni1EDCuni1EDDuni1EE0uni1EE1uni1EE2uni1EE3uni1EE4uni1EE5uni1EE8uni1EE9uni1EEAuni1EEBuni1EEEuni1EEFuni1EF0uni1EF1Ygraveygraveuni1EF4uni1EF5uni1EF8uni1EF9uni1F00uni1F01uni1F02uni1F03uni1F04uni1F05uni1F06uni1F07uni1F08uni1F09uni1F0Auni1F0Buni1F0Cuni1F0Duni1F0Euni1F0Funi1F10uni1F11uni1F12uni1F13uni1F14uni1F15uni1F18uni1F19uni1F1Auni1F1Buni1F1Cuni1F1Duni1F20uni1F21uni1F22uni1F23uni1F24uni1F25uni1F26uni1F27uni1F28uni1F29uni1F2Auni1F2Buni1F2Cuni1F2Duni1F2Euni1F2Funi1F30uni1F31uni1F32uni1F33uni1F34uni1F35uni1F36uni1F37uni1F38uni1F39uni1F3Auni1F3Buni1F3Cuni1F3Duni1F3Euni1F3Funi1F40uni1F41uni1F42uni1F43uni1F44uni1F45uni1F48uni1F49uni1F4Auni1F4Buni1F4Cuni1F4Duni1F50uni1F51uni1F52uni1F53uni1F54uni1F55uni1F56uni1F57uni1F59uni1F5Buni1F5Duni1F5Funi1F60uni1F61uni1F62uni1F63uni1F64uni1F65uni1F66uni1F67uni1F68uni1F69uni1F6Auni1F6Buni1F6Cuni1F6Duni1F6Euni1F6Funi1F70uni1F71uni1F72uni1F73uni1F74uni1F75uni1F76uni1F77uni1F78uni1F79uni1F7Auni1F7Buni1F7Cuni1F7Duni1F80uni1F81uni1F82uni1F83uni1F84uni1F85uni1F86uni1F87uni1F88uni1F89uni1F8Auni1F8Buni1F8Cuni1F8Duni1F8Euni1F8Funi1F90uni1F91uni1F92uni1F93uni1F94uni1F95uni1F96uni1F97uni1F98uni1F99uni1F9Auni1F9Buni1F9Cuni1F9Duni1F9Euni1F9Funi1FA0uni1FA1uni1FA2uni1FA3uni1FA4uni1FA5uni1FA6uni1FA7uni1FA8uni1FA9uni1FAAuni1FABuni1FACuni1FADuni1FAEuni1FAFuni1FB0uni1FB1uni1FB2uni1FB3uni1FB4uni1FB6uni1FB7uni1FB8uni1FB9uni1FBAuni1FBBuni1FBCuni1FBDuni1FBEuni1FBFuni1FC0uni1FC1uni1FC2uni1FC3uni1FC4uni1FC6uni1FC7uni1FC8uni1FC9uni1FCAuni1FCBuni1FCCuni1FCDuni1FCEuni1FCFuni1FD0uni1FD1uni1FD2uni1FD3uni1FD6uni1FD7uni1FD8uni1FD9uni1FDAuni1FDBuni1FDDuni1FDEuni1FDFuni1FE0uni1FE1uni1FE2uni1FE3uni1FE4uni1FE5uni1FE6uni1FE7uni1FE8uni1FE9uni1FEAuni1FEBuni1FECuni1FEDuni1FEEuni1FEFuni1FF2uni1FF3uni1FF4uni1FF6uni1FF7uni1FF8uni1FF9uni1FFAuni1FFBuni1FFCuni1FFDuni1FFEuni2000uni2001uni2002uni2003uni2004uni2005uni2006uni2007uni2008uni2009uni200Auni2010uni2011 figuredashuni2015 underscoredbl quotereverseduni201Funi2023uni202Funi2031minuteseconduni2034uni2035uni2036uni2037 exclamdbluni203Duni203Euni2045uni2046uni2047uni2048uni2049uni205Funi2070uni2071uni2074uni2075uni2076uni2077uni2078uni2079uni207Auni207Buni207Cuni207Duni207Euni207Funi2080uni2081uni2082uni2083uni2084uni2085uni2086uni2087uni2088uni2089uni208Auni208Buni208Cuni208Duni208Euni2090uni2091uni2092uni2093uni2094uni20A0 colonmonetaryuni20A2lirauni20A5uni20A6pesetauni20A8uni20A9uni20AAdongEurouni20ADuni20AEuni20AFuni20B0uni20B1uni20B2uni20B3uni20B4uni20B5uni2102uni2105uni210Duni210Euni210Funi2115uni2116uni2117uni2119uni211Auni211Duni2124uni2126uni212Auni212B estimatedonethird twothirdsuni2155uni2156uni2157uni2158uni2159uni215A oneeighth threeeighths fiveeighths seveneighthsuni215F arrowleftarrowup arrowright arrowdown arrowboth arrowupdnuni2196uni2197uni2198uni2199uni219Auni219Buni219Cuni219Duni219Euni219Funi21A0uni21A1uni21A2uni21A3uni21A4uni21A5uni21A6uni21A7 arrowupdnbseuni21A9uni21AAuni21ABuni21ACuni21ADuni21AEuni21AFuni21B0uni21B1uni21B2uni21B3uni21B4carriagereturnuni21B6uni21B7uni21B8uni21B9uni21BAuni21BBuni21BCuni21BDuni21BEuni21BFuni21C0uni21C1uni21C2uni21C3uni21C4uni21C5uni21C6uni21C7uni21C8uni21C9uni21CAuni21CBuni21CCuni21CDuni21CEuni21CF arrowdblleft arrowdblup arrowdblright arrowdbldown arrowdblbothuni21D5uni21D6uni21D7uni21D8uni21D9uni21DAuni21DBuni21DCuni21DDuni21DEuni21DFuni21E0uni21E1uni21E2uni21E3uni21E4uni21E5uni21E6uni21E7uni21E8uni21E9uni21EAuni21EBuni21ECuni21EDuni21EEuni21EFuni21F0uni21F1uni21F2uni21F3uni21F4uni21F5uni21F6uni21F7uni21F8uni21F9uni21FAuni21FBuni21FCuni21FDuni21FEuni21FF universaluni2201 existentialuni2204emptysetgradientelement notelementuni220Asuchthatuni220Cuni220Duni2213uni2215 asteriskmathuni2218uni2219uni221Buni221C proportional orthogonalangle logicaland logicalor intersectionunionuni222Cuni222Duni2238uni2239uni223Auni223Bsimilaruni223Duni2241uni2242uni2243uni2244 congruentuni2246uni2247uni2249uni224Auni224Buni224Cuni224Duni224Euni224Funi2250uni2251uni2252uni2253uni2254uni2255uni2256uni2257uni2258uni2259uni225Auni225Buni225Cuni225Duni225Euni225F equivalenceuni2262uni2263uni2266uni2267uni2268uni2269uni226Duni226Euni226Funi2270uni2271uni2272uni2273uni2274uni2275uni2276uni2277uni2278uni2279uni227Auni227Buni227Cuni227Duni227Euni227Funi2280uni2281 propersubsetpropersuperset notsubsetuni2285 reflexsubsetreflexsupersetuni2288uni2289uni228Auni228Buni228Funi2290uni2291uni2292 circleplusuni2296circlemultiplyuni2298uni2299uni229Auni229Buni229Cuni229Duni229Euni229Funi22A0uni22A1dotmathuni22C6uni22CDuni22DAuni22DBuni22DCuni22DDuni22DEuni22DFuni22E0uni22E1uni22E2uni22E3uni22E4uni22E5uni22E6uni22E7uni22E8uni22E9uni22EFuni2300uni2301houseuni2303uni2304uni2305uni2306uni2308uni2309uni230Auni230Buni230Cuni230Duni230Euni230F revlogicalnotuni2311uni2312uni2313uni2314uni2315uni2318uni2319uni231Cuni231Duni231Euni231F integraltp integralbtuni2325uni2326uni2327uni2328uni232Buni2335uni2337uni2338uni2339uni233Auni233Buni233Cuni233Duni233Euni2341uni2342uni2343uni2344uni2347uni2348uni2349uni234Buni234Cuni234Duni2350uni2352uni2353uni2354uni2357uni2358uni2359uni235Auni235Buni235Cuni235Euni235Funi2360uni2363uni2364uni2365uni2368uni2369uni236Buni236Cuni236Duni236Euni236Funi2370uni2373uni2374uni2375uni2376uni2377uni2378uni2379uni237Auni237Duni2380uni2381uni2382uni2383uni2388uni2389uni238Auni238Buni2395uni239Buni239Cuni239Duni239Euni239Funi23A0uni23A1uni23A2uni23A3uni23A4uni23A5uni23A6uni23A7uni23A8uni23A9uni23AAuni23ABuni23ACuni23ADuni23AEuni23CEuni23CFuni2423SF100000uni2501SF110000uni2503uni2504uni2505uni2506uni2507uni2508uni2509uni250Auni250BSF010000uni250Duni250Euni250FSF030000uni2511uni2512uni2513SF020000uni2515uni2516uni2517SF040000uni2519uni251Auni251BSF080000uni251Duni251Euni251Funi2520uni2521uni2522uni2523SF090000uni2525uni2526uni2527uni2528uni2529uni252Auni252BSF060000uni252Duni252Euni252Funi2530uni2531uni2532uni2533SF070000uni2535uni2536uni2537uni2538uni2539uni253Auni253BSF050000uni253Duni253Euni253Funi2540uni2541uni2542uni2543uni2544uni2545uni2546uni2547uni2548uni2549uni254Auni254Buni254Cuni254Duni254Euni254FSF430000SF240000SF510000SF520000SF390000SF220000SF210000SF250000SF500000SF490000SF380000SF280000SF270000SF260000SF360000SF370000SF420000SF190000SF200000SF230000SF470000SF480000SF410000SF450000SF460000SF400000SF540000SF530000SF440000uni256Duni256Euni256Funi2570uni2571uni2572uni2573uni2574uni2575uni2576uni2577uni2578uni2579uni257Auni257Buni257Cuni257Duni257Euni257Fupblockuni2581uni2582uni2583dnblockuni2585uni2586uni2587blockuni2589uni258Auni258Blfblockuni258Duni258Euni258Frtblockltshadeshadedkshadeuni2594uni2595uni2596uni2597uni2598uni2599uni259Auni259Buni259Cuni259Duni259Euni259F filledboxH22073uni25A2uni25A3uni25A4uni25A5uni25A6uni25A7uni25A8uni25A9H18543H18551 filledrectuni25ADuni25AEuni25AFuni25B0uni25B1triagupuni25B3uni25B4uni25B5uni25B6uni25B7uni25B8uni25B9triagrtuni25BBtriagdnuni25BDuni25BEuni25BFuni25C0uni25C1uni25C2uni25C3triaglfuni25C5uni25C6uni25C7uni25C8uni25C9circleuni25CCuni25CDuni25CEH18533uni25D0uni25D1uni25D2uni25D3uni25D4uni25D5uni25D6uni25D7 invbullet invcircleuni25DAuni25DBuni25DCuni25DDuni25DEuni25DFuni25E0uni25E1uni25E2uni25E3uni25E4uni25E5 openbulletuni25E7uni25E8uni25E9uni25EAuni25EBuni25ECuni25EDuni25EEuni25EFuni25F0uni25F1uni25F2uni25F3uni25F4uni25F5uni25F6uni25F7uni25F8uni25F9uni25FAuni25FBuni25FCuni25FDuni25FEuni25FFuni2600uni2601uni2602uni2603uni2604uni2605uni2606uni2607uni2608uni2609uni260Auni260Buni260Cuni260Duni260Euni260Funi2610uni2611uni2612uni2613uni2614uni2615uni2616uni2617uni2618uni2619uni261Auni261Buni261Cuni261Duni261Euni261Funi2620uni2621uni2622uni2623uni2624uni2625uni2626uni2627uni2628uni2629uni262Auni262Buni262Cuni262Duni262Euni262Funi2638uni2639 smileface invsmilefacesununi263Duni263Euni263Ffemaleuni2641maleuni2643uni2644uni2645uni2646uni2647uni2648uni2649uni264Auni264Buni264Cuni264Duni264Euni264Funi2650uni2651uni2652uni2653uni2654uni2655uni2656uni2657uni2658uni2659uni265Auni265Buni265Cuni265Duni265Euni265Fspadeuni2661uni2662clubuni2664heartdiamonduni2667uni2668uni2669 musicalnotemusicalnotedbluni266Cuni266Duni266Euni266Funi2670uni2671uni2672uni2673uni2674uni2675uni2676uni2677uni2678uni2679uni267Auni267Buni267Cuni267Duni267Euni267Funi2680uni2681uni2682uni2683uni2684uni2685uni2686uni2687uni2688uni2689uni268Auni268Buni2690uni2691uni2692uni2693uni2694uni2695uni2696uni2697uni2698uni2699uni269Auni269Buni269Cuni26A0uni26A1uni26B0uni26B1uni2701uni2702uni2703uni2704uni2706uni2707uni2708uni2709uni270Cuni270Duni270Euni270Funi2710uni2711uni2712uni2713uni2714uni2715uni2716uni2717uni2718uni2719uni271Auni271Buni271Cuni271Duni271Euni271Funi2720uni2721uni2722uni2723uni2724uni2725uni2726uni2727uni2729uni272Auni272Buni272Cuni272Duni272Euni272Funi2730uni2731uni2732uni2733uni2734uni2735uni2736uni2737uni2738uni2739uni273Auni273Buni273Cuni273Duni273Euni273Funi2740uni2741uni2742uni2743uni2744uni2745uni2746uni2747uni2748uni2749uni274Auni274Buni274Duni274Funi2750uni2751uni2752uni2756uni2758uni2759uni275Auni275Buni275Cuni275Duni275Euni2761uni2762uni2763uni2764uni2765uni2766uni2767uni2768uni2769uni276Auni276Buni276Cuni276Duni276Euni276Funi2770uni2771uni2772uni2773uni2774uni2775uni2794uni2798uni2799uni279Auni279Buni279Cuni279Duni279Euni279Funi27A0uni27A1uni27A2uni27A3uni27A4uni27A5uni27A6uni27A7uni27A8uni27A9uni27AAuni27ABuni27ACuni27ADuni27AEuni27AFuni27B1uni27B2uni27B3uni27B4uni27B5uni27B6uni27B7uni27B8uni27B9uni27BAuni27BBuni27BCuni27BDuni27BEuni27C5uni27C6uni27E0uni27E8uni27E9uni29EBuni29FAuni29FBuni2A2Funi2B12uni2B13uni2B14uni2B15uni2B16uni2B17uni2B18uni2B19uni2B1Auni2C64uni2C6Euni2C6Funi2C75uni2C76uni2C77uni2C79uni2C7Auni2C7Cuni2C7Duni2E18uni2E22uni2E23uni2E24uni2E25uni2E2EuniA708uniA709uniA70AuniA70BuniA70CuniA70DuniA70EuniA70FuniA710uniA711uniA712uniA713uniA714uniA715uniA716uniA71BuniA71CuniA71DuniA71EuniA71FuniA726uniA727uniA789uniA78AuniA78BuniA78CuniF6C5uniFB52uniFB53uniFB54uniFB55uniFB56uniFB57uniFB58uniFB59uniFB5AuniFB5BuniFB5CuniFB5DuniFB5EuniFB5FuniFB60uniFB61uniFB62uniFB63uniFB64uniFB65uniFB66uniFB67uniFB68uniFB69uniFB6AuniFB6BuniFB6CuniFB6DuniFB6EuniFB6FuniFB70uniFB71uniFB72uniFB73uniFB74uniFB75uniFB76uniFB77uniFB78uniFB79uniFB7AuniFB7BuniFB7CuniFB7DuniFB7EuniFB7FuniFB80uniFB81uniFB8AuniFB8BuniFB8CuniFB8DuniFB8EuniFB8FuniFB90uniFB91uniFB92uniFB93uniFB94uniFB95uniFB9EuniFB9FuniFBAAuniFBABuniFBACuniFBADuniFBE8uniFBE9uniFBFCuniFBFDuniFBFEuniFBFFuniFE70uniFE71uniFE72uniFE73uniFE74uniFE76uniFE77uniFE78uniFE79uniFE7AuniFE7BuniFE7CuniFE7DuniFE7EuniFE7FuniFE80uniFE81uniFE82uniFE83uniFE84uniFE85uniFE86uniFE87uniFE88uniFE89uniFE8AuniFE8BuniFE8CuniFE8DuniFE8EuniFE8FuniFE90uniFE91uniFE92uniFE93uniFE94uniFE95uniFE96uniFE97uniFE98uniFE99uniFE9AuniFE9BuniFE9CuniFE9DuniFE9EuniFE9FuniFEA0uniFEA1uniFEA2uniFEA3uniFEA4uniFEA5uniFEA6uniFEA7uniFEA8uniFEA9uniFEAAuniFEABuniFEACuniFEADuniFEAEuniFEAFuniFEB0uniFEB1uniFEB2uniFEB3uniFEB4uniFEB5uniFEB6uniFEB7uniFEB8uniFEB9uniFEBAuniFEBBuniFEBCuniFEBDuniFEBEuniFEBFuniFEC0uniFEC1uniFEC2uniFEC3uniFEC4uniFEC5uniFEC6uniFEC7uniFEC8uniFEC9uniFECAuniFECBuniFECCuniFECDuniFECEuniFECFuniFED0uniFED1uniFED2uniFED3uniFED4uniFED5uniFED6uniFED7uniFED8uniFED9uniFEDAuniFEDBuniFEDCuniFEDDuniFEDEuniFEDFuniFEE0uniFEE1uniFEE2uniFEE3uniFEE4uniFEE5uniFEE6uniFEE7uniFEE8uniFEE9uniFEEAuniFEEBuniFEECuniFEEDuniFEEEuniFEEFuniFEF0uniFEF1uniFEF2uniFEF3uniFEF4uniFEF5uniFEF6uniFEF7uniFEF8uniFEF9uniFEFAuniFEFBuniFEFCuniFEFFuniFFF9uniFFFAuniFFFBuniFFFCuniFFFDu1D670u1D671u1D672u1D673u1D674u1D675u1D676u1D677u1D678u1D679u1D67Au1D67Bu1D67Cu1D67Du1D67Eu1D67Fu1D680u1D681u1D682u1D683u1D684u1D685u1D686u1D687u1D688u1D689u1D68Au1D68Bu1D68Cu1D68Du1D68Eu1D68Fu1D690u1D691u1D692u1D693u1D694u1D695u1D696u1D697u1D698u1D699u1D69Au1D69Bu1D69Cu1D69Du1D69Eu1D69Fu1D6A0u1D6A1u1D6A2u1D6A3u1D7F6u1D7F7u1D7F8u1D7F9u1D7FAu1D7FBu1D7FCu1D7FDu1D7FEu1D7FF dlLtcaron DiaeresisAcuteTildeGrave CircumflexCaron fractionslash uni0311.case uni0306.case uni0307.case uni030B.case uni030F.case thinquestion uni0304.caseunderbar underbar.wideunderbar.smalljotdiaeresis.symbols arabic_dot arabic_2dots arabic_3dots uni066E.fina uni06A1.init uni06A1.medi uni066F.fina uni06A1.finaarabic_3dots_aarabic_2dots_a arabic_4dotsarabic_gaf_bararabic_gaf_bar_a arabic_ringEng.altuni066Euni066Funi067Cuni067Duni0681uni0682uni0685uni0692uni06A1uni06B5uni06BAuni06C6uni06CEuni06D5]A GA% } % 2  %%@Y}2}Y&Y@&//2G@Gddkߖږ؍ }:Ս :  ϊ̖ˋ%}Ś   ]%]@%AA dd@2(-}-d   ..A]%]@%%%A  %d%BSx~}~}}|{zwvut uu@t tss@rqponSonm(nSm(lk2ji2hgfedcbcbba`_^Z ^]d\[Z [Z YXWVUU2TSRQ}PONM-MLK(JIJ7ICIHEHGCGdFEFEDCD7CBCC@@ BABB@ A@AA@ @? @@@ ? ? ?@@d>=-=<;(:9B9d818K76-65K404K3032B21-10/-/. .-,--@ ,,,@@+*%+* *%):)('&%B%E$#""! -!} -KBBF-B-B-B@  @   @    @  @7    -:-:-d++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++python-barcode-0.15.1/barcode/isxn.py0000755000175100001730000000701114451372461020260 0ustar runnerdocker00000000000000"""Module: barcode.isxn :Provided barcodes: ISBN-13, ISBN-10, ISSN This module provides some special codes, which are no standalone barcodes. All codes where transformed to EAN-13 barcodes. In every case, the checksum is new calculated. Example:: >>> from barcode import get_barcode >>> ISBN = get_barcode('isbn10') >>> isbn = ISBN('0132354187') >>> isbn '0132354187' >>> isbn.get_fullcode() '9780132354189' >>> # Test with wrong checksum >>> isbn = ISBN('0132354180') >>> isbn '0132354187' """ from barcode.ean import EuropeanArticleNumber13 from barcode.errors import BarcodeError from barcode.errors import WrongCountryCodeError __docformat__ = "restructuredtext en" class InternationalStandardBookNumber13(EuropeanArticleNumber13): """Initializes new ISBN-13 barcode. :parameters: isbn : String The isbn number as string. writer : barcode.writer Instance The writer to render the barcode (default: SVGWriter). """ name = "ISBN-13" def __init__(self, isbn, writer=None) -> None: isbn = isbn.replace("-", "") self.isbn13 = isbn if isbn[:3] not in ("978", "979"): raise WrongCountryCodeError("ISBN must start with 978 or 979.") if isbn[:3] == "979" and isbn[3:4] not in ("1", "8"): raise BarcodeError("ISBN must start with 97910 or 97911.") super().__init__(isbn, writer) class InternationalStandardBookNumber10(InternationalStandardBookNumber13): """Initializes new ISBN-10 barcode. This code is rendered as EAN-13 by prefixing it with 978. :parameters: isbn : String The isbn number as string. writer : barcode.writer Instance The writer to render the barcode (default: SVGWriter). """ name = "ISBN-10" digits = 9 def __init__(self, isbn, writer=None) -> None: isbn = isbn.replace("-", "") isbn = isbn[: self.digits] super().__init__("978" + isbn, writer) self.isbn10 = isbn self.isbn10 = f"{isbn}{self._calculate_checksum()}" def _calculate_checksum(self): tmp = sum(x * int(y) for x, y in enumerate(self.isbn10[:9], start=1)) % 11 if tmp == 10: return "X" return tmp def __str__(self) -> str: return self.isbn10 class InternationalStandardSerialNumber(EuropeanArticleNumber13): """Initializes new ISSN barcode. This code is rendered as EAN-13 by prefixing it with 977 and adding 00 between code and checksum. :parameters: issn : String The issn number as string. writer : barcode.writer Instance The writer to render the barcode (default: SVGWriter). """ name = "ISSN" digits = 7 def __init__(self, issn, writer=None) -> None: issn = issn.replace("-", "") issn = issn[: self.digits] self.issn = issn self.issn = f"{issn}{self._calculate_checksum()}" super().__init__(self.make_ean(), writer) def _calculate_checksum(self): tmp = ( 11 - sum(x * int(y) for x, y in enumerate(reversed(self.issn[:7]), start=2)) % 11 ) if tmp == 10: return "X" return tmp def make_ean(self): return f"977{self.issn[:7]}00{self._calculate_checksum()}" def __str__(self) -> str: return self.issn # Shortcuts ISBN13 = InternationalStandardBookNumber13 ISBN10 = InternationalStandardBookNumber10 ISSN = InternationalStandardSerialNumber python-barcode-0.15.1/barcode/itf.py0000644000175100001730000000426214451372461020063 0ustar runnerdocker00000000000000"""Module: barcode.itf :Provided barcodes: Interleaved 2 of 5 """ __docformat__ = "restructuredtext en" from barcode.base import Barcode from barcode.charsets import itf from barcode.errors import IllegalCharacterError MIN_SIZE = 0.2 MIN_QUIET_ZONE = 6.4 class ITF(Barcode): """Initializes a new ITF instance. :parameters: code : String ITF (Interleaved 2 of 5) numeric string writer : barcode.writer Instance The writer to render the barcode (default: SVGWriter). narrow: Integer Width of the narrow elements (default: 2) wide: Integer Width of the wide elements (default: 5) wide/narrow must be in the range 2..3 """ name = "ITF" def __init__(self, code, writer=None, narrow=2, wide=5) -> None: if not code.isdigit(): raise IllegalCharacterError("ITF code can only contain numbers.") # Length must be even, prepend 0 if necessary if len(code) % 2 != 0: code = "0" + code self.code = code self.writer = writer or self.default_writer() self.narrow = narrow self.wide = wide def __str__(self) -> str: return self.code def get_fullcode(self): return self.code def build(self): data = itf.START for i in range(0, len(self.code), 2): bars_digit = int(self.code[i]) spaces_digit = int(self.code[i + 1]) for j in range(5): data += itf.CODES[bars_digit][j].upper() data += itf.CODES[spaces_digit][j].lower() data += itf.STOP raw = "" for e in data: if e == "W": raw += "1" * self.wide if e == "w": raw += "0" * self.wide if e == "N": raw += "1" * self.narrow if e == "n": raw += "0" * self.narrow return [raw] def render(self, writer_options, text=None): options = { "module_width": MIN_SIZE / self.narrow, "quiet_zone": MIN_QUIET_ZONE, } options.update(writer_options or {}) return super().render(options, text) python-barcode-0.15.1/barcode/pybarcode.py0000644000175100001730000000651114451372461021250 0ustar runnerdocker00000000000000import os from argparse import ArgumentParser import barcode from barcode.version import version from barcode.writer import ImageWriter from barcode.writer import SVGWriter IMG_FORMATS = ("BMP", "GIF", "JPEG", "MSP", "PCX", "PNG", "TIFF", "XBM") def list_types(args, parser=None): print("\npython-barcode available barcode formats:") print(", ".join(barcode.PROVIDED_BARCODES)) print("\n") print("Available image formats") print("Standard: svg") if ImageWriter is not None: print("Pillow:", ", ".join(IMG_FORMATS)) else: print("Pillow: disabled") print("\n") def create_barcode(args, parser): args.type = args.type.upper() if args.type != "SVG" and args.type not in IMG_FORMATS: parser.error( "Unknown type {type}. Try list action for available types.".format( type=args.type ) ) args.barcode = args.barcode.lower() if args.barcode not in barcode.PROVIDED_BARCODES: parser.error( "Unknown barcode {bc}. Try list action for available barcodes.".format( bc=args.barcode ) ) if args.type != "SVG": opts = {"format": args.type} writer = ImageWriter() else: opts = {"compress": args.compress} writer = SVGWriter() out = os.path.normpath(os.path.abspath(args.output)) name = barcode.generate(args.barcode, args.code, writer, out, opts, args.text) print(f"New barcode saved as {name}.") def main(): msg = [] if ImageWriter is None: msg.append("Image output disabled (Pillow not found), --type option disabled.") else: msg.append( "Image output enabled, use --type option to give image " "format (png, jpeg, ...)." ) parser = ArgumentParser( description="Create standard barcodes via cli.", epilog=" ".join(msg) ) parser.add_argument( "-v", "--version", action="version", version="%(prog)s " + version ) subparsers = parser.add_subparsers(title="Actions") create_parser = subparsers.add_parser( "create", help="Create a barcode with the given options." ) create_parser.add_argument("code", help="Code to render as barcode.") create_parser.add_argument( "output", help="Filename for output without extension, e. g. mybarcode." ) create_parser.add_argument( "-c", "--compress", action="store_true", help="Compress output, only recognized if type is svg.", ) create_parser.add_argument( "-b", "--barcode", help="Barcode to use [default: %(default)s]." ) create_parser.add_argument("--text", help="Text to show under the barcode.") if ImageWriter is not None: create_parser.add_argument( "-t", "--type", help="Type of output [default: %(default)s]." ) list_parser = subparsers.add_parser( "list", help="List available image and code types." ) list_parser.set_defaults(func=list_types) create_parser.set_defaults( type="svg", compress=False, func=create_barcode, barcode="code39", text=None ) args = parser.parse_args() try: func = args.func except AttributeError: parser.error("You need to tell me what to do.") else: func(args, parser) if __name__ == "__main__": main() python-barcode-0.15.1/barcode/upc.py0000755000175100001730000000571214451372461020074 0ustar runnerdocker00000000000000"""Module: barcode.upc :Provided barcodes: UPC-A """ __docformat__ = "restructuredtext en" from functools import reduce from barcode.base import Barcode from barcode.charsets import upc as _upc from barcode.errors import IllegalCharacterError from barcode.errors import NumberOfDigitsError class UniversalProductCodeA(Barcode): """Universal Product Code (UPC) barcode. UPC-A consists of 12 numeric digits. """ name = "UPC-A" digits = 11 def __init__(self, upc, writer=None, make_ean=False) -> None: """Initializes new UPC-A barcode. :param str upc: The upc number as string. :param writer: barcode.writer instance. The writer to render the barcode (default: SVGWriter). :param bool make_ean: Indicates if a leading zero should be added to the barcode. This converts the UPC into a valid European Article Number (EAN). """ self.ean = make_ean upc = upc[: self.digits] if not upc.isdigit(): raise IllegalCharacterError("UPC code can only contain numbers.") if len(upc) != self.digits: raise NumberOfDigitsError( f"UPC must have {self.digits} digits, not {len(upc)}." ) self.upc = upc self.upc = f"{upc}{self.calculate_checksum()}" self.writer = writer or self.default_writer() def __str__(self) -> str: if self.ean: return "0" + self.upc return self.upc def get_fullcode(self): if self.ean: return "0" + self.upc return self.upc def calculate_checksum(self): """Calculates the checksum for UPCA/UPC codes :return: The checksum for 'self.upc' :rtype: int """ def sum_(x, y): return int(x) + int(y) upc = self.upc[0 : self.digits] oddsum = reduce(sum_, upc[::2]) evensum = reduce(sum_, upc[1::2]) check = (evensum + oddsum * 3) % 10 if check == 0: return 0 return 10 - check def build(self): """Builds the barcode pattern from 'self.upc' :return: The pattern as string :rtype: str """ code = _upc.EDGE[:] for _i, number in enumerate(self.upc[0:6]): code += _upc.CODES["L"][int(number)] code += _upc.MIDDLE for number in self.upc[6:]: code += _upc.CODES["R"][int(number)] code += _upc.EDGE return [code] def to_ascii(self): """Returns an ascii representation of the barcode. :rtype: str """ code = self.build() for i, line in enumerate(code): code[i] = line.replace("1", "|").replace("0", "_") return "\n".join(code) def render(self, writer_options=None, text=None): options = {"module_width": 0.33} options.update(writer_options or {}) return super().render(options, text) UPCA = UniversalProductCodeA python-barcode-0.15.1/barcode/version.py0000644000175100001730000000024214451372466020765 0ustar runnerdocker00000000000000# file generated by setuptools_scm # don't change, don't track in version control __version__ = version = '0.15.1' __version_tuple__ = version_tuple = (0, 15, 1) python-barcode-0.15.1/barcode/writer.py0000755000175100001730000003773714451372461020635 0ustar runnerdocker00000000000000import gzip import os import xml.dom from typing import BinaryIO from barcode.version import version try: import Image import ImageDraw import ImageFont except ImportError: try: from PIL import Image # lint:ok from PIL import ImageDraw from PIL import ImageFont except ImportError: import logging log = logging.getLogger("pyBarcode") log.info("Pillow not found. Image output disabled") Image = ImageDraw = ImageFont = None # lint:ok def mm2px(mm, dpi=300): return (mm * dpi) / 25.4 def pt2mm(pt): return pt * 0.352777778 def _set_attributes(element, **attributes): for key, value in attributes.items(): element.setAttribute(key, value) def create_svg_object(with_doctype=False): imp = xml.dom.getDOMImplementation() doctype = imp.createDocumentType( "svg", "-//W3C//DTD SVG 1.1//EN", "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd", ) document = imp.createDocument(None, "svg", doctype if with_doctype else None) _set_attributes( document.documentElement, version="1.1", xmlns="http://www.w3.org/2000/svg" ) return document SIZE = "{0:.3f}mm" COMMENT = f"Autogenerated with python-barcode {version}" PATH = os.path.dirname(os.path.abspath(__file__)) class BaseWriter: """Baseclass for all writers. Initializes the basic writer options. Childclasses can add more attributes and can set them directly or using `self.set_options(option=value)`. :parameters: initialize : Function Callback for initializing the inheriting writer. Is called: `callback_initialize(raw_code)` paint_module : Function Callback for painting one barcode module. Is called: `callback_paint_module(xpos, ypos, width, color)` paint_text : Function Callback for painting the text under the barcode. Is called: `callback_paint_text(xpos, ypos)` using `self.text` as text. finish : Function Callback for doing something with the completely rendered output. Is called: `return callback_finish()` and must return the rendered output. """ def __init__( self, initialize=None, paint_module=None, paint_text=None, finish=None, ) -> None: self._callbacks = { "initialize": initialize, "paint_module": paint_module, "paint_text": paint_text, "finish": finish, } self.module_width = 10 self.module_height = 10 self.font_path = os.path.join(PATH, "fonts", "DejaVuSansMono.ttf") self.font_size = 10 self.quiet_zone = 6.5 self.background = "white" self.foreground = "black" self.text = "" self.human = "" # human readable text self.text_distance = 5 self.text_line_distance = 1 self.center_text = True self.guard_height_factor = 1.1 self.margin_top = 1 self.margin_bottom = 1 def calculate_size(self, modules_per_line, number_of_lines): """Calculates the size of the barcode in pixel. :parameters: modules_per_line : Integer Number of modules in one line. number_of_lines : Integer Number of lines of the barcode. :returns: Width and height of the barcode in pixel. :rtype: Tuple """ width = 2 * self.quiet_zone + modules_per_line * self.module_width height = ( self.margin_bottom + self.margin_top + self.module_height * number_of_lines ) number_of_text_lines = len(self.text.splitlines()) if self.font_size and self.text: height += ( pt2mm(self.font_size) / 2 * number_of_text_lines + self.text_distance ) height += self.text_line_distance * (number_of_text_lines - 1) return width, height def save(self, filename, output): """Saves the rendered output to `filename`. :parameters: filename : String Filename without extension. output : String The rendered output. :returns: The full filename with extension. :rtype: String """ raise NotImplementedError def register_callback(self, action, callback): """Register one of the three callbacks if not given at instance creation. :parameters: action : String One of 'initialize', 'paint_module', 'paint_text', 'finish'. callback : Function The callback function for the given action. """ self._callbacks[action] = callback def set_options(self, options): """Sets the given options as instance attributes (only if they are known). :parameters: options : Dict All known instance attributes and more if the childclass has defined them before this call. :rtype: None """ for key, val in options.items(): key = key.lstrip("_") if hasattr(self, key): setattr(self, key, val) def packed(self, line): """ Pack line to list give better gfx result, otherwise in can result in aliasing gaps '11010111' -> [2, -1, 1, -1, 3] This method will yield a sequence of pairs (width, height_factor). :parameters: line: String A string matching the writer spec (only contain 0 or 1 or G). """ line += " " c = 1 for i in range(0, len(line) - 1): if line[i] == line[i + 1]: c += 1 else: if line[i] == "1": yield (c, 1) elif line[i] == "G": yield (c, self.guard_height_factor) else: yield (-c, self.guard_height_factor) c = 1 def render(self, code): """Renders the barcode to whatever the inheriting writer provides, using the registered callbacks. :parameters: code : List List of strings matching the writer spec (only contain 0 or 1 or G). """ if self._callbacks["initialize"] is not None: self._callbacks["initialize"](code) ypos = self.margin_top base_height = self.module_height for cc, line in enumerate(code): # Left quiet zone is x startposition xpos = self.quiet_zone bxs = xpos # x start of barcode text = { "start": [], # The x start of a guard "end": [], # The x end of a guard "xpos": [], # The x position where to write a text block # Flag that indicates if the previous mod was part of an guard block: "was_guard": False, } for mod, height_factor in self.packed(line): if mod < 1: color = self.background else: color = self.foreground if text["was_guard"] and height_factor == 1: # The current guard ended, store its x position text["end"].append(xpos) text["was_guard"] = False elif not text["was_guard"] and height_factor != 1: # A guard started, store its x position text["start"].append(xpos) text["was_guard"] = True self.module_height = base_height * height_factor # remove painting for background colored tiles? self._callbacks["paint_module"]( xpos, ypos, self.module_width * abs(mod), color ) xpos += self.module_width * abs(mod) else: if height_factor != 1: text["end"].append(xpos) self.module_height = base_height bxe = xpos # Add right quiet zone to every line, except last line, # quiet zone already provided with background, # should it be removed completely? if (cc + 1) != len(code): self._callbacks["paint_module"]( xpos, ypos, self.quiet_zone, self.background ) ypos += self.module_height if self.text and self._callbacks["paint_text"] is not None: if not text["start"]: # If we don't have any start value, print the entire ean ypos += self.text_distance xpos = bxs + (bxe - bxs) / 2.0 if self.center_text else bxs self._callbacks["paint_text"](xpos, ypos) else: # Else, divide the ean into blocks and print each block # in the expected position. text["xpos"] = [bxs - 4 * self.module_width] # Calculates the position of the text by getting the difference # between a guard end and the next start text["start"].pop(0) for s, e in zip(text["start"], text["end"]): text["xpos"].append(e + (s - e) / 2) # The last text block is always put after the last guard end text["xpos"].append(text["end"][-1] + 4 * self.module_width) # Split the ean into its blocks self.text = self.text.split(" ") ypos += pt2mm(self.font_size) blocks = self.text for text_, xpos in zip(blocks, text["xpos"]): self.text = text_ self._callbacks["paint_text"](xpos, ypos) return self._callbacks["finish"]() class SVGWriter(BaseWriter): def __init__(self) -> None: BaseWriter.__init__( self, self._init, self._create_module, self._create_text, self._finish ) self.compress = False self.with_doctype = True self._document = None self._root = None self._group = None def _init(self, code): width, height = self.calculate_size(len(code[0]), len(code)) self._document = create_svg_object(self.with_doctype) self._root = self._document.documentElement attributes = { "width": SIZE.format(width), "height": SIZE.format(height), } _set_attributes(self._root, **attributes) if COMMENT: self._root.appendChild(self._document.createComment(COMMENT)) # create group for easier handling in 3rd party software # like corel draw, inkscape, ... group = self._document.createElement("g") attributes = {"id": "barcode_group"} _set_attributes(group, **attributes) self._group = self._root.appendChild(group) background = self._document.createElement("rect") attributes = { "width": "100%", "height": "100%", "style": f"fill:{self.background}", } _set_attributes(background, **attributes) self._group.appendChild(background) def _create_module(self, xpos, ypos, width, color): # Background rect has been provided already, so skipping "spaces" if color != self.background: element = self._document.createElement("rect") attributes = { "x": SIZE.format(xpos), "y": SIZE.format(ypos), "width": SIZE.format(width), "height": SIZE.format(self.module_height), "style": f"fill:{color};", } _set_attributes(element, **attributes) self._group.appendChild(element) def _create_text(self, xpos, ypos): # check option to override self.text with self.human (barcode as # human readable data, can be used to print own formats) barcodetext = self.human if self.human != "" else self.text for subtext in barcodetext.split("\n"): element = self._document.createElement("text") attributes = { "x": SIZE.format(xpos), "y": SIZE.format(ypos), "style": "fill:{};font-size:{}pt;text-anchor:middle;".format( self.foreground, self.font_size, ), } _set_attributes(element, **attributes) text_element = self._document.createTextNode(subtext) element.appendChild(text_element) self._group.appendChild(element) ypos += pt2mm(self.font_size) + self.text_line_distance def _finish(self): if self.compress: return self._document.toxml(encoding="UTF-8") return self._document.toprettyxml( indent=4 * " ", newl=os.linesep, encoding="UTF-8" ) def save(self, filename, output): if self.compress: _filename = f"{filename}.svgz" f = gzip.open(_filename, "wb") f.write(output) f.close() else: _filename = f"{filename}.svg" with open(_filename, "wb") as f: f.write(output) return _filename def write(self, content, fp: BinaryIO): """Write `content` into a file-like object. Content should be a barcode rendered by this writer. """ fp.write(content) if Image is None: ImageWriter = None else: class ImageWriter(BaseWriter): # type: ignore[no-redef] format: str mode: str dpi: int def __init__(self, format="PNG", mode="RGB") -> None: """Initialise a new write instance. :params format: The file format for the generated image. This parameter can take any value that Pillow accepts. :params mode: The colour-mode for the generated image. Set this to RGBA if you wish to use colours with transparency. """ BaseWriter.__init__( self, self._init, self._paint_module, self._paint_text, self._finish ) self.format = format self.mode = mode self.dpi = 300 self._image = None self._draw = None def _init(self, code): width, height = self.calculate_size(len(code[0]), len(code)) size = (int(mm2px(width, self.dpi)), int(mm2px(height, self.dpi))) self._image = Image.new(self.mode, size, self.background) self._draw = ImageDraw.Draw(self._image) def _paint_module(self, xpos, ypos, width, color): size = [ (mm2px(xpos, self.dpi), mm2px(ypos, self.dpi)), ( mm2px(xpos + width, self.dpi) - 1, mm2px(ypos + self.module_height, self.dpi), ), ] self._draw.rectangle(size, outline=color, fill=color) def _paint_text(self, xpos, ypos): font_size = int(mm2px(pt2mm(self.font_size), self.dpi)) font = ImageFont.truetype(self.font_path, font_size) for subtext in self.text.split("\n"): pos = ( mm2px(xpos, self.dpi), mm2px(ypos, self.dpi), ) self._draw.text( pos, subtext, font=font, fill=self.foreground, anchor="md" ) ypos += pt2mm(self.font_size) / 2 + self.text_line_distance def _finish(self): return self._image def save(self, filename, output): filename = f"{filename}.{self.format.lower()}" output.save(filename, self.format.upper()) return filename def write(self, content, fp: BinaryIO): """Write `content` into a file-like object. Content should be a barcode rendered by this writer. """ content.save(fp, format=self.format) python-barcode-0.15.1/docs/0000755000175100001730000000000014451372466016261 5ustar runnerdocker00000000000000python-barcode-0.15.1/docs/Makefile0000644000175100001730000000117214451372461017715 0ustar runnerdocker00000000000000# Minimal makefile for Sphinx documentation # # You can set these variables from the command line, and also # from the environment for the first two. SPHINXOPTS ?= SPHINXBUILD ?= sphinx-build SOURCEDIR = . BUILDDIR = _build # Put it first so that "make" without argument is like "make help". help: @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) .PHONY: help Makefile # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) python-barcode-0.15.1/docs/_static/0000755000175100001730000000000014451372466017707 5ustar runnerdocker00000000000000python-barcode-0.15.1/docs/_static/images/0000755000175100001730000000000014451372466021154 5ustar runnerdocker00000000000000python-barcode-0.15.1/docs/_static/images/pybarcode.png0000644000175100001730000000733214451372461023632 0ustar runnerdocker00000000000000PNG  IHDR1qIDATx[egvus=eE(YEy6:`If'P7*Q-&(;(HvaA02)$fe<:;wggٛ}>W|?sB!L?=A4! @hBD" D4!5߮s\JůnvVv g5Oȓ^ų[aF8dZ;ɴskÏ&> kܵ}s<ҳڰSݦ}GMi嗻SP+;~E^Z(=Yadsoqm G D4! @hBD" D4! @hBD" D4! @hBD" D4! @hBD" D4! @hBD" D4! @hBD" D4! @hBD" D4! @hBD" D4! @hBD" D4! @hBD" D4! @hBD" D4! @hBD" D4! @hBD" D4! @hBD" D4! @hBD" D4! @hBD" D4! @hBD" D4! @hBD" D4! @hBD" D4! @hBD" D4! @hBD" D4! @hBD"\P 8 D4! @hBD" D4! @hBD" D4! @hBD" D4! @hBD" D4! @hBD" D4! @hBD" D4!3\HUUU׮]O߿?p7r{sO.8qb.͡xҥKGեK.]5jҥ/BPy?Ԝwywqdž ZaÆlW_}Ua?m8hР3fl߾BxqƝs9w߾jժ֮=]p'N\p'ͧw)=_~gP駟:묔Қ5k/zYge˖Ccs^|޼ys^bEmW. /dΝ {qƦa;vlk/vWn۶ig'm۶-\w)z(>k֬?mihh0`@Jiٕ?smmm.7o޽{;o޼\.W[[uݻw?~|d744l޼J) 6tpq*'o߾}_~yJnh.z뭷vаu \uU]{P8z֭[|́Fv;3\O0}QJO>ɣG^|ũ=z4ٳgw_Jg-?u\.yvJ)5yرN:eN~!ԩSg}Rٳg!fk/p Nih);wf';vꫯfΜo۶-;ꫯvر}z͚5);Sxcv2{Aɔ)Sr\6rєRnݚm_~Ç/첁:t(+jjjRJݻwN.\04mڴ>}H|MRzN:ySJg}vӖcvm6mڴi<8yoݯK)eܛd'7o\_~7t… 8pаiӦ~8t-4;?N)3f̘1)+WOPسgϪU';۾nݺ+!fҗ_~Ya p:Ӈ:U|?ollKӐ_kd+?ֲW9R|ÇgWl(ϯ|YGSL9tP#GL)}˗/O)5޽ӛ^Ɏ^߿|ZbG]uVa>~vNrǥ駟{3fdxG+Sx61WUqꪪ|>_B0`o{1[:ѣGϙ3gСM8УGҞ={RJ=zr{ܹsr|puuuٖ|>ĉriڋ/kjj^Fn:8u^࿥s΃ z'7lЬRJk)S*JۼYxcRJ'?r)Sl޼9;P*~^{mӦMG^ɬ]ĉC;;aȐ!Ǐ_vmcǎڵkٲe믿ؑ #;lPN^ȑ#MWl]nқw9 '4=8p`Æ 3g,}3`JCO14ޒٳgw_׮]ϟۡC ._h{챦w0dfhG.bUUU={[/_^SShѢo SJG*iڛ/)N3ե^Rڸqco&t%ܹ<~V8QΈ#RJ Y³FVx/dJiРA;ByݮX¥Z&|IJi4SzJ8暔Ғ%K7f&k[#x$~_nLd-[:t^z}۷_,MƏߥKSYK>߽{+?'MmSɷ@fP;5}҄ &MJ)w;w<~oo : k?vXWs6ĉS[4 {4ߋLJoZJ<)^xsIEI-w;wRfݺuB᯿Z֮+Un݀r<8õ퉶mc}Ç׏1bɒ%7666]}r޽!Czݻw7۷oJ/(R۷ou 'x"tg'EƌӫW޽{O=8.0.0``. v0.11.0 ~~~~~~~ * Added basic support for multiline text. * Dropped lots of older compat-only code and other cleanups. * Fixed a bug in the API when combining certain barcodes and writers. * Published documentation again and updated all project references. * Fix python_barcode.get mixups between `options` as `writer_options`. Previously, some writer/barcode combinations worked fine, while others failed. Now all work consistently. * The cli tool has been fixed and should now work as expected again. v0.10.0 ~~~~~~~ * Added support for GS1-128. v0.9.1 ~~~~~~ * Officially support Python 3.7 * Refer to Pillow in the docs, rather than PIL. v0.9.0 ~~~~~~ * Removed buggy ``Barcode.raw`` attribute. * Various CLI errors ironed out. * Make the default value for ``writer_options``` consistent across writers. v0.8.3 ~~~~~~ * Fix pushing of releases to GitHub. v0.8.2 ~~~~~~ * Fix crashes when attempting to use the CLI app. * Properly include version numbers in SVG comments. v0.8.1 ~~~~~~ * Improve README rendering, and point to this fork's location (the outdated README on PyPI was causing some confusion). v0.8.0 ~~~~~~ * First release under the name ``python-barcode``. Previous Changelog ------------------ This project is a fork of pyBarcode, which, apparently, is no longer maintained. v0.8.0 is our first release, and is the latest ``master`` from that parent project. v0.8 ~~~~ * Code 128 added. * Data for charsets and bars moved to subpackage barcode.charsets. * Merged in some improvements. v0.7 ~~~~ * Fixed some issues with fontsize and fontalignment. * Added Python 3 support. It's not well tested yet, but the tests run without errors with Python 3.3. Commandline script added. v0.6 ~~~~ * Changed save and write methods to take the options as a dict not as keyword arguments (fix this in your code). Added option to left align the text under the barcode. Fixed bug with EAN13 generation. v0.5.0 ~~~~~~ * Added new generate function to do all generation in one step. * Moved writer from a subpackage to a module (this breaks some existing code). UPC is now rendered as real UPC, not as EAN13 with the leading "0". v0.4.3 ~~~~~~ * Fixed bug in new write method (related to PIL) and updated docs. v0.4.2 ~~~~~~ * Added write method to support file like objects as target. v0.4.1 ~~~~~~ * Bugfix release. Removed redundancy in input validation. * EAN8 was broken. It now works as expected. v0.4 ~~~~ * Removed \*\*options from writers __init__ method. These options never had effect. They were always overwritten by default_options. * New config option available: text_distance (the distance between barcode and text). v0.4b2 ~~~~~~ * Basic documentation included. The barcode object now has a new attribute called `raw` to have the rendered output without saving to disk. v0.4b1 ~~~~~~ * Support for rendering barcodes as images is implemented. PIL is required to use it. v0.3 ~~~~ * Compression for SVG output now works. v0.3b1 ~~~~~~ * Writer API has changed for simple adding new (own) writers. * SVG output is now generated with xml.dom module instead of stringformatting (makes it more robust). v0.2.1 ~~~~~~ * API of render changed. Now render takes keyword arguments instead of a dict. v0.2 ~~~~ * More tests added. v0.1 ~~~~ * First release. python-barcode-0.15.1/docs/conf.py0000644000175100001730000000436314451372461017561 0ustar runnerdocker00000000000000# noqa: INP001 # Configuration file for the Sphinx documentation builder. # # This file only contains a selection of the most common options. For a full # list see the documentation: # https://www.sphinx-doc.org/en/master/usage/configuration.html # -- Path setup -------------------------------------------------------------- # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. # import barcode # -- Project information ----------------------------------------------------- project = "python-barcode" copyright = "2020, Hugo Osvaldo Barrera, et al" author = "Hugo Osvaldo Barrera, et al" # The short X.Y version. version = barcode.version # The full version, including alpha/beta/rc tags release = barcode.version # -- General configuration --------------------------------------------------- # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ "sphinx.ext.autodoc", "sphinx.ext.graphviz", "sphinx.ext.inheritance_diagram", ] # Add any paths that contain templates here, relative to this directory. templates_path = ["_templates"] # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This pattern also affects html_static_path and html_extra_path. exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] # -- Options for HTML output ------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # html_theme = "alabaster" # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ["_static"] html_theme_options = { "github_user": "WhyNotHugo", "github_repo": "python-barcode", "github_banner": "true", } graphviz_output_format = "svg" # Include constructor in API docs. autoclass_content = "both" python-barcode-0.15.1/docs/contents.rst0000644000175100001730000000200314451372461020636 0ustar runnerdocker00000000000000㊙️ python-barcode ================== .. image:: _static/images/pybarcode.png **python-barcode** is a pure-python library for generating barcodes in various formats. It's 100% pure python. There are no external dependencies when generating SVG files. `Pillow`_ is required for generating images (e.g.: PNGs). .. _Pillow: https://python-pillow.org/ Contents -------- .. toctree:: :maxdepth: 2 getting-started supported-formats writers changelog Help ---- If you think you found a bug, or need help with something specific: - Please check existing issues for similar topics. - If there's nothing relevant, please open a new issue describing your problem, and what you've tried so far. Issues and source code are all in `GitHub `_. Donations --------- Donations are welcome. See `here `_ for further details. Licence ------- python-barcode is licensed under the MIT licence. See LICENCE for details. python-barcode-0.15.1/docs/getting-started.rst0000644000175100001730000001070614451372461022117 0ustar runnerdocker00000000000000Getting started =============== Installation ------------ The usual way is to use pip: .. code:: shell pip install python-barcode Don't forget to add this to our app's dependencies. If you'll be exporting to images (eg: not just SVG), you'll need the "images" extras: .. code:: shell pip install "python-barcode[images]" # Note: keep the quotes, most shells don't play nice with square brackets. Usage ----- Let's start off with some code samples. Keep in mind that checksums are calculated automatically -- you don't need to do the math before passing the value for the barcode. In some systems (Code 39) the checksum is optional. For these, you can provide the ``add_checksum=False`` keyword argument. Generating SVG files ~~~~~~~~~~~~~~~~~~~~ .. code:: python from io import BytesIO from barcode import EAN13 from barcode.writer import SVGWriter # Write to a file-like object: rv = BytesIO() EAN13("100000902922", writer=SVGWriter()).write(rv) # Or to an actual file: with open("somefile.svg", "wb") as f: EAN13(str(100000011111), writer=SVGWriter()).write(f) Generating image files ~~~~~~~~~~~~~~~~~~~~~~ .. versionadded:: 0.4b1 .. attention:: Keep in mind that SVG files are vectorized, so they will scale a lot better than images. It's recommended to use images only if your medium or target usages does not support SVG. .. code:: python from io import BytesIO from barcode import EAN13 from barcode.writer import ImageWriter # Write to a file-like object: rv = BytesIO() EAN13(str(100000902922), writer=ImageWriter()).write(rv) # Or to an actual file: with open("somefile.jpeg", "wb") as f: EAN13("100000011111", writer=ImageWriter()).write(f) Interactive generating an SVG ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Using an interactive python interpreter to generate SVG files. .. code:: pycon >>> import barcode >>> barcode.PROVIDED_BARCODES ['code128', 'code39', 'ean', 'ean13', 'ean14', 'ean8', 'gs1', 'gs1_128', 'gtin', 'isbn', 'isbn10', 'isbn13', 'issn', 'itf', 'jan', 'pzn', 'upc', 'upca'] >>> EAN = barcode.get_barcode_class('ean13') >>> EAN >>> my_ean = EAN('5901234123457') >>> my_ean >>> fullname = my_ean.save('ean13_barcode') >>> fullname 'ean13_barcode.svg' >>> You can check the generated files (e.g.: ``ean13_barcode.svg``) by opening them with any graphical app (e.g.: Firefox). Interactive generating a PNG ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Using an interactive python interpreter to generate PNG files. .. code:: pycon >>> import barcode >>> from barcode.writer import ImageWriter >>> EAN = barcode.get_barcode_class('ean13') >>> my_ean = EAN('5901234123457', writer=ImageWriter()) >>> fullname = my_ean.save('ean13_barcode') >>> fullname 'ean13_barcode.png' >>> from io import BytesIO >>> fp = BytesIO() >>> my_ean.write(fp) >>> my_ean >>> with open("path/to/file", "wb") as f: ... my_ean.write(f) # Pillow (ImageWriter) produces RAW format here ... >>> from barcode import generate >>> name = generate('EAN13', '5901234123457', output='barcode_svg') >>> name 'barcode_svg.svg' >>> fp = BytesIO() >>> generate('EAN13', '5901234123457', writer=ImageWriter(), output=fp) >>> You can check the generated files (e.g.: ``ean13_barcode.png``) by opening them with any graphical app (e.g.: Firefox). Command Line usage ~~~~~~~~~~~~~~~~~~ .. versionadded:: 0.7beta4 This library also includes a cli app for quickly generating barcodes from the command line or from shell scripts: .. code:: console $ # Save a barcode to outfile.svg: $ python-barcode create "123456789000" outfile -b ean --text "text to appear under barcode" $ # Generate a PNG (Require Pillow): $ python-barcode create -t png "My Text" outfile $ python-barcode --help usage: python-barcode [-h] [-v] {create,list} ... Create standard barcodes via cli. optional arguments: -h, --help show this help message and exit -v, --version show program's version number and exit Actions: {create,list} create Create a barcode with the given options. list List available image and code types. Image output enabled, use --type option to give image format (png, jpeg, ...). $ python-barcode-0.15.1/docs/index.rst0000644000175100001730000000200314451372461020110 0ustar runnerdocker00000000000000㊙️ python-barcode ================== .. image:: _static/images/pybarcode.png **python-barcode** is a pure-python library for generating barcodes in various formats. It's 100% pure python. There are no external dependencies when generating SVG files. `Pillow`_ is required for generating images (e.g.: PNGs). .. _Pillow: https://python-pillow.org/ Contents -------- .. toctree:: :maxdepth: 2 getting-started supported-formats writers changelog Help ---- If you think you found a bug, or need help with something specific: - Please check existing issues for similar topics. - If there's nothing relevant, please open a new issue describing your problem, and what you've tried so far. Issues and source code are all in `GitHub `_. Donations --------- Donations are welcome. See `here `_ for further details. Licence ------- python-barcode is licensed under the MIT licence. See LICENCE for details. python-barcode-0.15.1/docs/supported-formats.rst0000644000175100001730000000371214451372461022507 0ustar runnerdocker00000000000000Supported Formats ========================= The following are the supported barcode formats. PRs for other code formats are welcome! Code 39 ------- .. inheritance-diagram:: barcode.codex.Code39 :parts: 1 .. autoclass:: barcode.codex.Code39 :members: Code 128 -------- .. versionadded:: 0.8beta1 .. inheritance-diagram:: barcode.codex.Code128 :parts: 1 .. autoclass:: barcode.codex.Code128 :members: PZN7 (aka: PZN) --------------- .. inheritance-diagram:: barcode.codex.PZN7 :parts: 1 .. autoclass:: barcode.codex.PZN7 :members: EAN-13 ------ .. inheritance-diagram:: barcode.ean.EuropeanArticleNumber13 :parts: 1 .. autoclass:: barcode.ean.EuropeanArticleNumber13 :members: EAN-8 ----- .. inheritance-diagram:: barcode.ean.EuropeanArticleNumber8 :parts: 1 .. autoclass:: barcode.ean.EuropeanArticleNumber8 :members: JAN --- .. inheritance-diagram:: barcode.ean.JapanArticleNumber :parts: 1 .. autoclass:: barcode.ean.JapanArticleNumber :members: ISBN-13 ------- .. inheritance-diagram:: barcode.isxn.InternationalStandardBookNumber13 :parts: 1 .. autoclass:: barcode.isxn.InternationalStandardBookNumber13 :members: ISBN-10 ------- .. inheritance-diagram:: barcode.isxn.InternationalStandardBookNumber10 :parts: 1 .. autoclass:: barcode.isxn.InternationalStandardBookNumber10 :members: ISSN ---- .. inheritance-diagram:: barcode.isxn.InternationalStandardSerialNumber :parts: 1 .. autoclass:: barcode.isxn.InternationalStandardSerialNumber :members: UPC-A ----- .. inheritance-diagram:: barcode.upc.UniversalProductCodeA :parts: 1 .. autoclass:: barcode.upc.UniversalProductCodeA :members: EAN14 ----- .. inheritance-diagram:: barcode.ean.EuropeanArticleNumber14 :parts: 1 .. autoclass:: barcode.ean.EuropeanArticleNumber14 :members: GS1-128 ------- .. versionadded:: v0.10.0 .. inheritance-diagram:: barcode.codex.Gs1_128 :parts: 1 .. autoclass:: barcode.codex.Gs1_128 :members: python-barcode-0.15.1/docs/writers.rst0000644000175100001730000000655014451372461020513 0ustar runnerdocker00000000000000Writers ======= Common Writer Options --------------------- All writer take the following options (specified as keyword arguments to ``Barcode.save(filename, options)`` or set via ``Writer.set_options(options)``, where ``options`` is a dictionary where keys are option names and values are option values to be set). .. note:: See the documentation of the specific writer for special options, only available for this writer. :module_width: The width of one barcode module in mm as *float*. Defaults to **0.2**. :module_height: The height of the barcode modules in mm as *float*. Defaults to **15.0**. :quiet_zone: Distance on the left and on the right from the border to the first (last) barcode module in mm as *float*. Defaults to **6.5**. :font_path: Path to the font file to be used. Defaults to **DejaVuSansMono** (which is bundled with this package). :font_size: Font size of the text under the barcode in pt as *integer*. Font size zero suppresses text. Defaults to **10**. :text_distance: Distance between the barcode and the text under it in mm as *float*. Defaults to **5.0**. :background: The background color of the created barcode as *string*. Defaults to **white**. :foreground: The foreground and text color of the created barcode as *string*. Defaults to **black**. :center_text: If true (the default) the text is centered under the barcode else left aligned. .. versionadded:: 0.6 .. note:: Some barcode classes change the above defaults to fit in some kind of specification. SVGWriter --------- Renders barcodes as [optionally, compressed] SVG objects. In addition to the common writer options you can give the following special option. :compress: Boolean value to output a compressed SVG object (.svgz). Defaults to ``False`` ImageWriter ----------- .. versionadded:: 0.4b1 Renders barcodes as image. Supports all the image formats supported by Pillow. In addition to the common writer options you can give the following special options: :format: The image file format as ``str``. All formats supported by Pillow are valid (e.g. PNG, JPEG, BMP, ...). Defaults to ``PNG``. :dpi: DPI as ``int`` to calculate the image size in pixel. This value is used for all mm to px calculations. Defaults to ``300`` Custom writers -------------- It's possible to create your own writer by inheriting from `barcode.writer.BaseWriter`. In your ``__init__`` method call BaseWriter's ``__init__`` and give your callbacks for: - ``initialize(raw_code)`` - ``paint_module(xpos, ypos, width, color)`` - ``paint_text(xpos, ypos)`` - ``finish()`` Now instantiate a new barcode and give an instance of your new writer as argument. If you now call ``render`` on the barcode instance your callbacks get called. Creating compressed SVGs ------------------------ Saving a compressed SVG (SVGZ): .. code:: pycon >>> import barcode >>> ean = barcode.get('ean13', '123456789102') # Now we look if the checksum was added >>> ean.get_fullcode() '1234567891026' >>> filename = ean.save('ean13') >>> filename 'ean13.svg' >>> options = dict(compress=True) >>> filename = ean.save('ean13', options) >>> filename 'ean13.svgz' Now you have ean13.svg and the compressed ean13.svgz in your current working directory. Open it and see the result. python-barcode-0.15.1/example-ean13.png0000644000175100001730000000777714451372461020414 0ustar runnerdocker00000000000000PNG  IHDRP bKGD pHYsFF&2[tIME (zIDATxiLTgƯYa؆eEP,Yd@U 66.`Elq_ZkjM[BYT2300iNE۾Ҽ }?sssfd$ ` E*V^z,={@DDv^/ieeeݍ(|嗈ݻ VcϞ=8ujjj /@P>Dhh(ߢ?<ꊞlڴ gΜӧQWWXT*`ݸ{.c?~'O';zaΝ@mm-"##qQ466jСCǶmp TUUAP`hii?lݺ8y$7oHNNƦMp :u 6 'NDkk+v܉Xٳ+`IIIؼy3N8 """mmmشiRSS~>|P(l0}td2l޼uuu~:&M4&n6lq͛TNڊ+:F#֭[j,**"Iܹh$I\~=IԩSTT˗/399 <P(xmvL{LJxEŋ9sLQTr9/\W_}-}GDiduu5x5* I߻w/I!IIG}DsII0}}}%}ҥ$ɳg L"W#G" VbΛ7o֘xa.J* 2 jIsqqJrP*RwwwwWWWIS(RL&JBBpOVC&9ussL&rr)4rnnnpqqB62ޑrď6GZvȹQuddpsssW(NsrU_d da20@ L&& da2@L L&&da2@L L& d0@L L& a20@L & a20@ L&& da20@ L&&da2@L L&&I j$,644lOՊa)ށj~lR#fhh$188 Empp$v]oٜ4.wF;>r GmF[c?ǜG> Ii#k;<<,{,An2_|F999dee!%%0HOOGpp0f3r9L4BT l6͆dSNEbb"Ґ Z Ȁ^Goo/!$$IIIX,v; www &MBJJ ),F!&&999 bRDff& &MD̘1111lZxW`4Xdgg#,,Lʟh㥗^Bll,l6F#ׇ0I0av;rssGFFj5{AFѓ a20@L &Ϣ, R}  F2 ~~~5F# >:Bv;:::`X!V===~Pգahhlh4sM&wK{CC)EM&a9w/AAAܽ{SZQQAVĶ_{N-hܸq:˖-󟺯^L&COOa4N'f̘QヂU%$$@.;=SQUUέyyyvTTT*aaap PjBT:ϟ?V FzM$%%Ò%K:׬,( tttqaAHc[V\t & 5HNNvtw\zzz0yd9iׯ_G[[ۨjx{{#!!'ũ^^^PTҧQH7IMMMsΟk7cr0@ L&& g7xuIENDB`python-barcode-0.15.1/pyproject.toml0000644000175100001730000000111314451372461020234 0ustar runnerdocker00000000000000[build-system] requires = ["setuptools>=45", "wheel", "setuptools_scm>=6.2"] [tool.setuptools_scm] write_to = "barcode/version.py" version_scheme = "post-release" [tool.black] target-version = ['py37'] [tool.ruff] select = [ "F", "E", "W", "I", "N", "UP", "YTT", "BLE", "B", "C4", "ISC", "ICN", "G", "INP", "PIE", "PYI", "PT", "Q", "RSE", "RET", "SIM", "TID", "TCH", "INT", "ERA", "PGH", "PLE", "RUF", ] target-version = "py37" [tool.ruff.isort] force-single-line = true python-barcode-0.15.1/python_barcode.egg-info/0000755000175100001730000000000014451372466022023 5ustar runnerdocker00000000000000python-barcode-0.15.1/python_barcode.egg-info/PKG-INFO0000644000175100001730000000513314451372466023122 0ustar runnerdocker00000000000000Metadata-Version: 2.1 Name: python-barcode Version: 0.15.1 Summary: Create standard barcodes with Python. No external modules needed. (optional Pillow support included). Home-page: https://github.com/WhyNotHugo/python-barcode Author: Hugo Osvaldo Barrera et al Author-email: hugo@barrera.io License: MIT Description: python-barcode ============== .. image:: https://action-badges.now.sh/WhyNotHugo/python-barcode :target: https://github.com/WhyNotHugo/python-barcode/actions :alt: CI status .. image:: https://readthedocs.org/projects/python-barcode/badge/ :target: https://python-barcode.rtfd.org/ :alt: documentation .. image:: https://img.shields.io/pypi/v/python-barcode.svg :target: https://pypi.python.org/pypi/python-barcode :alt: version on pypi .. image:: https://img.shields.io/pypi/dm/python-barcode.svg :target: https://pypi.python.org/pypi/python-barcode :alt: downloads .. image:: https://img.shields.io/pypi/l/python-barcode.svg :target: https://github.com/WhyNotHugo/python-barcode/blob/main/LICENCE :alt: licence **python-barcode** provides a simple way to create barcodes in Python. There are no external dependencies when generating SVG files. Pillow is required for generating images (e.g.: PNGs). Support Python 3.7 to 3.11. .. image:: example-ean13.png :target: https://github.com/WhyNotHugo/python-barcode :alt: python-barcode Documentation ------------- Full documentation is published at http://python-barcode.rtfd.io/ Licence ------- python-barcode is licensed under the MIT licence. See LICENCE for details. Platform: UNKNOWN Classifier: Development Status :: 5 - Production/Stable Classifier: Environment :: Console Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: MIT License Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.7 Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Topic :: Multimedia :: Graphics Classifier: Topic :: Software Development :: Libraries :: Python Modules Provides-Extra: images python-barcode-0.15.1/python_barcode.egg-info/SOURCES.txt0000644000175100001730000000231714451372466023712 0ustar runnerdocker00000000000000.gitignore .pre-commit-config.yaml LICENCE README.rst example-ean13.png pyproject.toml setup.cfg setup.py tox.ini .github/.kodiak.toml .github/FUNDING.yml .github/no-response.yml .github/workflows/publish.yml .github/workflows/tests.yml barcode/__init__.py barcode/base.py barcode/codabar.py barcode/codex.py barcode/ean.py barcode/errors.py barcode/isxn.py barcode/itf.py barcode/pybarcode.py barcode/upc.py barcode/version.py barcode/writer.py barcode/charsets/__init__.py barcode/charsets/codabar.py barcode/charsets/code128.py barcode/charsets/code39.py barcode/charsets/ean.py barcode/charsets/itf.py barcode/charsets/upc.py barcode/fonts/DejaVuSansMono.ttf docs/Makefile docs/changelog.rst docs/conf.py docs/contents.rst docs/getting-started.rst docs/index.rst docs/supported-formats.rst docs/writers.rst docs/_static/images/pybarcode.png python_barcode.egg-info/PKG-INFO python_barcode.egg-info/SOURCES.txt python_barcode.egg-info/dependency_links.txt python_barcode.egg-info/entry_points.txt python_barcode.egg-info/requires.txt python_barcode.egg-info/top_level.txt tests/__init__.py tests/test_builds.py tests/test_checksums.py tests/test_init.py tests/test_manually.py tests/test_writers.py tests/test_outputs/.gitignorepython-barcode-0.15.1/python_barcode.egg-info/dependency_links.txt0000644000175100001730000000000114451372466026071 0ustar runnerdocker00000000000000 python-barcode-0.15.1/python_barcode.egg-info/entry_points.txt0000644000175100001730000000007314451372466025321 0ustar runnerdocker00000000000000[console_scripts] python-barcode = barcode.pybarcode:main python-barcode-0.15.1/python_barcode.egg-info/requires.txt0000644000175100001730000000002114451372466024414 0ustar runnerdocker00000000000000 [images] pillow python-barcode-0.15.1/python_barcode.egg-info/top_level.txt0000644000175100001730000000001014451372466024544 0ustar runnerdocker00000000000000barcode python-barcode-0.15.1/setup.cfg0000644000175100001730000000021614451372466017151 0ustar runnerdocker00000000000000[tool:pytest] addopts = -vv --cov=barcode --cov-report=term-missing:skip-covered --no-cov-on-fail [egg_info] tag_build = tag_date = 0 python-barcode-0.15.1/setup.py0000755000175100001730000000262514451372461017046 0ustar runnerdocker00000000000000from pathlib import Path from setuptools import find_packages from setuptools import setup setup( name="python-barcode", packages=find_packages(exclude=["tests"]), url="https://github.com/WhyNotHugo/python-barcode", license="MIT", author="Hugo Osvaldo Barrera et al", author_email="hugo@barrera.io", description=( "Create standard barcodes with Python. No external modules needed. " "(optional Pillow support included)." ), long_description=Path("README.rst").read_text(), classifiers=[ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Topic :: Multimedia :: Graphics", "Topic :: Software Development :: Libraries :: Python Modules", ], entry_points={"console_scripts": ["python-barcode = barcode.pybarcode:main"]}, setup_requires=["setuptools_scm"], extras_require={"images": ["pillow"]}, include_package_data=True, ) python-barcode-0.15.1/tests/0000755000175100001730000000000014451372466016473 5ustar runnerdocker00000000000000python-barcode-0.15.1/tests/__init__.py0000644000175100001730000000000014451372461020565 0ustar runnerdocker00000000000000python-barcode-0.15.1/tests/test_builds.py0000755000175100001730000000071714451372461021371 0ustar runnerdocker00000000000000from barcode import get_barcode def test_ean8_builds(): ref = "1010100011000110100100110101111010101000100100010011100101001000101" ean = get_barcode("ean8", "40267708") bc = ean.build() assert ref == bc[0] def test_ean8_builds_with_longer_bars(): ref = "G0G01000110001101001001101011110G0G01000100100010011100101001000G0G" ean = get_barcode("ean8", "40267708", options={"guardbar": True}) bc = ean.build() assert ref == bc[0] python-barcode-0.15.1/tests/test_checksums.py0000755000175100001730000000217414451372461022073 0ustar runnerdocker00000000000000from barcode import get_barcode def test_code39_checksum(): code39 = get_barcode("code39", "Code39") assert code39.get_fullcode() == "CODE39W" def test_pzn_checksum(): pzn = get_barcode("pzn", "103940") assert pzn.get_fullcode() == "PZN-1039406" def test_ean13_checksum(): ean = get_barcode("ean13", "400614457735") assert ean.get_fullcode() == "4006144577350" def test_ean8_checksum(): ean = get_barcode("ean8", "6032299") assert ean.get_fullcode() == "60322999" def test_jan_checksum(): jan = get_barcode("jan", "491400614457") assert jan.get_fullcode() == "4914006144575" def test_ean14_checksum(): ean = get_barcode("ean14", "1234567891258") assert ean.get_fullcode() == "12345678912589" def test_isbn10_checksum(): isbn = get_barcode("isbn10", "376926085") assert isbn.isbn10 == "3769260856" def test_isbn13_checksum(): isbn = get_barcode("isbn13", "978376926085") assert isbn.get_fullcode() == "9783769260854" def test_gs1_128_checksum(): gs1_128 = get_barcode("gs1_128", "00376401856400470087") assert gs1_128.get_fullcode() == "00376401856400470087" python-barcode-0.15.1/tests/test_init.py0000644000175100001730000000247114451372461021046 0ustar runnerdocker00000000000000import os from io import BytesIO import pytest import barcode from barcode.writer import SVGWriter PATH = os.path.dirname(os.path.abspath(__file__)) TESTPATH = os.path.join(PATH, "test_outputs") def test_generate_without_output(): with pytest.raises(TypeError, match="'output' cannot be None"): barcode.generate("ean13", "123455559121112") def test_generate_with_file(): with open(os.path.join(TESTPATH, "generate_with_file.jpeg"), "wb") as f: barcode.generate("ean13", "123455559121112", output=f) def test_generate_with_filepath(): # FIXME: extension is added to the filepath even if you include it. rv = barcode.generate( "ean13", "123455559121112", output=os.path.join(TESTPATH, "generate_with_filepath"), ) assert rv == os.path.abspath(os.path.join(TESTPATH, "generate_with_filepath.svg")) def test_generate_with_file_and_writer(): with open(os.path.join(TESTPATH, "generate_with_file_and_writer.jpeg"), "wb") as f: barcode.generate("ean13", "123455559121112", output=f, writer=SVGWriter()) def test_generate_with_bytesio(): bio = BytesIO() barcode.generate("ean13", "123455559121112", output=bio) # XXX: File is not 100% deterministic; needs to be addressed at some point. # assert len(bio.getvalue()) == 6127 # noqa: ERA001 python-barcode-0.15.1/tests/test_manually.py0000755000175100001730000000541014451372461021724 0ustar runnerdocker00000000000000"""Generates barcodes for visually inspecting the results.""" import codecs import os from barcode import get_barcode from barcode import get_barcode_class from barcode import version from barcode.writer import ImageWriter PATH = os.path.dirname(os.path.abspath(__file__)) TESTPATH = os.path.join(PATH, "test_outputs") HTMLFILE = os.path.join(TESTPATH, "index.html") HTML = """ python-barcode {version} Test

python-barcode {version} Tests

{body} """ OBJECTS = '

{name}


\nSVG {name}\n' IMAGES = '

As PNG-Image


\nPNG {name}

\n' NO_PIL = "

Pillow was not found. No PNG-Image created.

\n" TESTCODES = ( ("ean8", "40267708"), ("ean8-guard", "40267708"), ("ean13", "5901234123457"), ("ean13-guard", "5901234123457"), ("ean14", "12345678911230"), ("upca", "36000291453"), ("jan", "4901234567894"), ("isbn10", "3-12-517154-7"), ("isbn13", "978-3-16-148410-0"), ("issn", "1144875X"), ("code39", "Example Code 39"), ("pzn", "487780"), ("code128", "Example Code 128 998866"), ("itf", "12341234"), ) def test_generating_barcodes(): os.makedirs(TESTPATH, exist_ok=True) objects = [] def append(x, y): objects.append(OBJECTS.format(filename=x, name=y)) def append_img(x, y): objects.append(IMAGES.format(filename=x, name=y)) options = {} for codename, code in TESTCODES: bcode = get_barcode(codename, code) if codename.startswith("i"): options["center_text"] = False else: options["center_text"] = True filename = bcode.save(os.path.join(TESTPATH, codename), options=options) print( "Code: {}, Input: {}, Output: {}".format( bcode.name, code, bcode.get_fullcode() ) ) append(os.path.basename(filename), bcode.name) if ImageWriter is not None: bcodec = get_barcode_class(codename) bcode = bcodec(code, writer=ImageWriter()) opts = {} if codename.startswith("i"): opts["center_text"] = False else: opts["center_text"] = True filename = bcode.save(os.path.join(TESTPATH, codename), options=opts) append_img(os.path.basename(filename), bcode.name) else: objects.append(NO_PIL) # Save htmlfile with all objects with codecs.open(HTMLFILE, "w", encoding="utf-8") as f: obj = "\n".join(objects) f.write(HTML.format(version=version, body=obj)) print(f"\nNow open {HTMLFILE} in your browser.") python-barcode-0.15.1/tests/test_outputs/0000755000175100001730000000000014451372466021255 5ustar runnerdocker00000000000000python-barcode-0.15.1/tests/test_outputs/.gitignore0000644000175100001730000000006314451372461023237 0ustar runnerdocker00000000000000# This directory contains all the tests outputs. * python-barcode-0.15.1/tests/test_writers.py0000644000175100001730000000255314451372461021603 0ustar runnerdocker00000000000000import os from io import BytesIO from barcode import EAN13 from barcode.writer import ImageWriter from barcode.writer import SVGWriter PATH = os.path.dirname(os.path.abspath(__file__)) TESTPATH = os.path.join(PATH, "test_outputs") if ImageWriter: def test_saving_image_to_byteio(): rv = BytesIO() EAN13(str(100000902922), writer=ImageWriter()).write(rv) with open(f"{TESTPATH}/somefile.jpeg", "wb") as f: EAN13("100000011111", writer=ImageWriter()).write(f) def test_saving_rgba_image(): rv = BytesIO() EAN13(str(100000902922), writer=ImageWriter()).write(rv) with open(f"{TESTPATH}/ean13-with-transparent-bg.png", "wb") as f: writer = ImageWriter(mode="RGBA") EAN13("100000011111", writer=writer).write( f, options={"background": "rgba(255,0,0,0)"} ) def test_saving_svg_to_byteio(): rv = BytesIO() EAN13(str(100000902922), writer=SVGWriter()).write(rv) with open(f"{TESTPATH}/somefile.svg", "wb") as f: EAN13("100000011111", writer=SVGWriter()).write(f) def test_saving_svg_to_byteio_with_guardbar(): rv = BytesIO() EAN13(str(100000902922), writer=SVGWriter(), guardbar=True).write(rv) with open(f"{TESTPATH}/somefile_guardbar.svg", "wb") as f: EAN13("100000011111", writer=SVGWriter(), guardbar=True).write(f) python-barcode-0.15.1/tox.ini0000644000175100001730000000030314451372461016633 0ustar runnerdocker00000000000000[tox] envlist = {py37,py38,py39,py310,py311}{,-images} skip_missing_interpreters = True [testenv] deps = pytest pytest-cov images: Pillow commands = pytest --cov barcode usedevelop = True