diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..2fa183f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,20 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: bug +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** + +1. If any, include the code that you are using +2. If any, include the command line statements that you are using +3. If you have problems with a specific pdf file, include that pdf file + +**Expected behavior** +A clear and concise description of what you expected to happen. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..110953e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,17 @@ +--- +name: Feature request +about: Suggest an improvement for this project +title: '' +labels: enhancement +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..8cfa7f3 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,17 @@ +**Description** + +Please include a summary of the change and which issue is fixed. If this does not fix an issue, then first create a new issue. Please also include relevant motivation and context. + +Fixes # (issue) + +**How Has This Been Tested?** + +Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Include an example pdf if you have one. + +**Checklist** + +- [ ] I have added tests that prove my fix is effective or that my feature works +- [ ] I have updated the [README.md](../README.md) and other documentation, or I am sure that this is not necessary +- [ ] I have added a consice human-readable description of the change to [CHANGELOG.md](../CHANGELOG.md) +- [ ] I have added docstrings to newly created methods and classes +- [ ] I have optimized the code at least one time after creating the initial version diff --git a/.travis.yml b/.travis.yml index 7a04577..319aa54 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,7 +4,9 @@ python: - "3.4" - "3.5" - "3.6" + - "3.7" + - "3.8" install: - pip install tox-travis script: - - tox + - tox -r diff --git a/CHANGELOG.md b/CHANGELOG.md index dd4b3d3..91bebe0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,33 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). Nothing yet +## [20191107] - 2019-11-07 + +### Deprecated +- The argument `_py2_no_more_posargs` because Python2 is removed on January +, 2020 ([#328](https://github.com/pdfminer/pdfminer.six/pull/328) and +[#307](https://github.com/pdfminer/pdfminer.six/pull/307)) + +### Added +- Simple wrapper to easily extract text from a PDF file [#330](https://github.com/pdfminer/pdfminer.six/pull/330) +- Support for extracting JBIG2 encoded images ([#311](https://github.com/pdfminer/pdfminer.six/pull/311) and [#46](https://github.com/pdfminer/pdfminer.six/pull/46)) +- Sphinx documentation that is published on + [Read the Docs](https://pdfminersix.readthedocs.io/) + ([#329](https://github.com/pdfminer/pdfminer.six/pull/329)) + +### Fixed +- Unhandled AssertionError when dumping pdf containing reference to object id 0 + ([#318](https://github.com/pdfminer/pdfminer.six/pull/318)) +- Debug flag actually changes logging level to debug for pdf2txt.py and + dumppdf.py ([#325](https://github.com/pdfminer/pdfminer.six/pull/325)) + +### Changed +- Using argparse instead of getopt for command line interface of dumppdf.py ([#321](https://github.com/pdfminer/pdfminer.six/pull/321)) +- Refactor `LTLayoutContainer.group_textboxes` for a significant speed up in layout analysis ([#315](https://github.com/pdfminer/pdfminer.six/pull/315)) + +### Removed +- Files for external applications such as django, cgi and pyinstaller ([#314](https://github.com/pdfminer/pdfminer.six/issues/314)) + ## [20191020] - 2019-10-20 ### Deprecated @@ -27,7 +54,7 @@ Nothing yet - Allow for bounding boxes with zero height or width by removing assertion ([#246](https://github.com/pdfminer/pdfminer.six/pull/246)) ### Changed -- All dependencies are managed in `setup.py` ([#306](https://github.com/pdfminer/pdfminer.six/pull/306), [#219](https://github.com/pdfminer/pdfminer.six/pull/219)) +- All dependencies are managed in `setup.py` ([#306](https://github.com/pdfminer/pdfminer.six/pull/306) and [#219](https://github.com/pdfminer/pdfminer.six/pull/219)) ## [20181108] - 2018-11-08 diff --git a/README.md b/README.md index e2e4cc8..6ea2015 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,22 @@ -PDFMiner.six +pdfminer.six ============ -PDFMiner.six is a fork of PDFMiner using six for Python 2+3 compatibility +[![Build Status](https://travis-ci.org/pdfminer/pdfminer.six.svg?branch=master)](https://travis-ci.org/pdfminer/pdfminer.six) +[![PyPI version](https://img.shields.io/pypi/v/pdfminer.six.svg)](https://pypi.python.org/pypi/pdfminer.six/) +[![gitter](https://badges.gitter.im/pdfminer-six/Lobby.svg)](https://gitter.im/pdfminer-six/Lobby?utm_source=badge&utm_medium) -[![Build Status](https://travis-ci.org/pdfminer/pdfminer.six.svg?branch=master)](https://travis-ci.org/pdfminer/pdfminer.six) [![PyPI version](https://img.shields.io/pypi/v/pdfminer.six.svg)](https://pypi.python.org/pypi/pdfminer.six/) - -PDFMiner is a tool for extracting information from PDF documents. +Pdfminer.six is an community maintained fork of the original PDFMiner. It is a +tool for extracting information from PDF documents. Unlike other PDF-related tools, it focuses entirely on getting -and analyzing text data. PDFMiner allows one to obtain +and analyzing text data. Pdfminer.six allows one to obtain the exact location of text in a page, as well as other information such as fonts or lines. It includes a PDF converter that can transform PDF files into other text formats (such as HTML). It has an extensible PDF parser that can be used for other purposes than text analysis. - * Webpage: https://github.com/pdfminer/ - * Download (PyPI): https://pypi.python.org/pypi/pdfminer.six/ +Check out the full documentation on +[Read the Docs](https://pdfminersix.readthedocs.io). Features @@ -23,62 +24,30 @@ Features * Written entirely in Python. * Parse, analyze, and convert PDF documents. - * PDF-1.7 specification support. (well, almost) + * PDF-1.7 specification support. (well, almost). * CJK languages and vertical writing scripts support. * Various font types (Type1, TrueType, Type3, and CID) support. + * Support for extracting images (JPG, JBIG2 and Bitmaps). * Basic encryption (RC4) support. * Outline (TOC) extraction. * Tagged contents extraction. * Automatic layout analysis. -How to Install --------------- +How to use +---------- - * Install Python 2.7 or newer. - * Install + * Install Python 2.7 or newer. Note that Python 2 support is dropped at + January, 2020. `pip install pdfminer.six` - * Run the following test: + * Use command-line interface to extract text from pdf: - `pdf2txt.py samples/simple1.pdf` - - -Command Line Tools ------------------- - -PDFMiner comes with two handy tools: -pdf2txt.py and dumppdf.py. - -**pdf2txt.py** - -pdf2txt.py extracts text contents from a PDF file. -It extracts all the text that are to be rendered programmatically, -i.e. text represented as ASCII or Unicode strings. -It cannot recognize text drawn as images that would require optical character recognition. -It also extracts the corresponding locations, font names, font sizes, writing -direction (horizontal or vertical) for each text portion. -You need to provide a password for protected PDF documents when its access is restricted. -You cannot extract any text from a PDF document which does not have extraction permission. - -(For details, refer to /docs/index.html.) - -**dumppdf.py** - -dumppdf.py dumps the internal contents of a PDF file in pseudo-XML format. -This program is primarily for debugging purposes, -but it's also possible to extract some meaningful contents (e.g. images). - -(For details, refer to /docs/index.html.) - - -TODO ----- - - * PEP-8 and PEP-257 conformance. - * Better documentation. - * Performance improvements. + `python pdf2txt.py samples/simple1.pdf` + +* Check out more examples and documentation on +[Read the Docs](https://pdfminersix.readthedocs.io). Contributing diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 0000000..d163863 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1 @@ +build/ \ No newline at end of file diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 0000000..d0c3cbf --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,20 @@ +# 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 = source +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) diff --git a/docs/cid.obj b/docs/cid.obj deleted file mode 100644 index 540ef60..0000000 --- a/docs/cid.obj +++ /dev/null @@ -1,225 +0,0 @@ -%TGIF 4.1.45-QPL -state(0,37,100.000,0,0,0,16,1,9,1,1,2,0,1,0,1,1,'NewCenturySchlbk-Bold',1,103680,0,0,1,10,0,0,1,1,0,16,0,0,1,1,1,1,1050,1485,1,0,2880,0). -% -% @(#)$Header$ -% %W% -% -unit("1 pixel/pixel"). -color_info(19,65535,0,[ - "magenta", 65535, 0, 65535, 65535, 0, 65535, 1, - "red", 65535, 0, 0, 65535, 0, 0, 1, - "green", 0, 65535, 0, 0, 65535, 0, 1, - "blue", 0, 0, 65535, 0, 0, 65535, 1, - "yellow", 65535, 65535, 0, 65535, 65535, 0, 1, - "pink", 65535, 49344, 52171, 65535, 49344, 52171, 1, - "cyan", 0, 65535, 65535, 0, 65535, 65535, 1, - "CadetBlue", 24415, 40606, 41120, 24415, 40606, 41120, 1, - "white", 65535, 65535, 65535, 65535, 65535, 65535, 1, - "black", 0, 0, 0, 0, 0, 0, 1, - "DarkSlateGray", 12079, 20303, 20303, 12079, 20303, 20303, 1, - "#00000000c000", 0, 0, 49344, 0, 0, 49152, 1, - "#820782070000", 33410, 33410, 0, 33287, 33287, 0, 1, - "#3cf3fbee34d2", 15420, 64507, 13364, 15603, 64494, 13522, 1, - "#3cf3fbed34d3", 15420, 64507, 13364, 15603, 64493, 13523, 1, - "#ffffa6990000", 65535, 42662, 0, 65535, 42649, 0, 1, - "#ffff0000fffe", 65535, 0, 65535, 65535, 0, 65534, 1, - "#fffe0000fffe", 65535, 0, 65535, 65534, 0, 65534, 1, - "#fffe00000000", 65535, 0, 0, 65534, 0, 0, 1 -]). -script_frac("0.6"). -fg_bg_colors('black','white'). -dont_reencode("FFDingbests:ZapfDingbats"). -objshadow_info('#c0c0c0',2,2). -page(1,"",1,''). -text('black',90,95,1,1,1,66,20,0,15,5,0,0,0,0,2,66,20,0,0,"",0,0,0,0,110,'',[ -minilines(66,20,0,0,1,0,0,[ -mini_line(66,15,5,0,0,0,[ -str_block(0,66,15,5,0,-1,0,0,0,[ -str_seg('black','Courier-Bold',1,103680,66,15,5,0,-1,0,0,0,0,0, - "U+30FC")]) -]) -])]). -text('black',100,285,1,1,1,66,20,3,15,5,0,0,0,0,2,66,20,0,0,"",0,0,0,0,300,'',[ -minilines(66,20,0,0,1,0,0,[ -mini_line(66,15,5,0,0,0,[ -str_block(0,66,15,5,0,-2,0,0,0,[ -str_seg('black','Courier-Bold',1,103680,66,15,5,0,-2,0,0,0,0,0, - "U+5199")]) -]) -])]). -text('black',400,38,2,1,1,119,30,5,12,3,0,0,0,0,2,119,30,0,0,"",0,0,0,0,50,'',[ -minilines(119,30,0,0,1,0,0,[ -mini_line(83,12,3,0,0,0,[ -str_block(0,83,12,3,0,-3,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,83,12,3,0,-3,0,0,0,0,0, - "Adobe-Japan1")]) -]), -mini_line(119,12,3,0,0,0,[ -str_block(0,119,12,3,0,-1,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,119,12,3,0,-1,0,0,0,0,0, - "CID:660 (horizontal)")]) -]) -])]). -text('black',400,118,2,1,1,114,30,8,12,3,0,0,0,0,2,114,30,0,0,"",0,0,0,0,130,'',[ -minilines(114,30,0,0,1,0,0,[ -mini_line(83,12,3,0,0,0,[ -str_block(0,83,12,3,0,-3,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,83,12,3,0,-3,0,0,0,0,0, - "Adobe-Japan1")]) -]), -mini_line(114,12,3,0,0,0,[ -str_block(0,114,12,3,0,-1,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,114,12,3,0,-1,0,0,0,0,0, - "CID:7891 (vertical)")]) -]) -])]). -text('black',400,238,2,1,1,125,30,15,12,3,0,0,0,0,2,125,30,0,0,"",0,0,0,0,250,'',[ -minilines(125,30,0,0,1,0,0,[ -mini_line(83,12,3,0,0,0,[ -str_block(0,83,12,3,0,-3,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,83,12,3,0,-3,0,0,0,0,0, - "Adobe-Japan1")]) -]), -mini_line(125,12,3,0,0,0,[ -str_block(0,125,12,3,0,-1,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,125,12,3,0,-1,0,0,0,0,0, - "CID:2296 (Japanese)")]) -]) -])]). -text('black',400,318,2,1,1,115,30,16,12,3,0,0,0,0,2,115,30,0,0,"",0,0,0,0,330,'',[ -minilines(115,30,0,0,1,0,0,[ -mini_line(67,12,3,0,0,0,[ -str_block(0,67,12,3,0,-3,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,67,12,3,0,-3,0,0,0,0,0, - "Adobe-GB1")]) -]), -mini_line(115,12,3,0,0,0,[ -str_block(0,115,12,3,0,-1,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,115,12,3,0,-1,0,0,0,0,0, - "CID:3967 (Chinese)")]) -]) -])]). -text('black',200,84,2,1,1,116,38,20,16,3,0,0,0,0,2,116,38,0,0,"",0,0,0,0,100,'',[ -minilines(116,38,0,0,1,0,0,[ -mini_line(70,16,3,0,0,0,[ -str_block(0,70,16,3,0,-1,0,0,0,[ -str_seg('black','NewCenturySchlbk-Roman',0,97920,70,16,3,0,-1,0,0,0,0,0, - "Japanese")]) -]), -mini_line(116,16,3,0,0,0,[ -str_block(0,116,16,3,0,-1,0,0,0,[ -str_seg('black','NewCenturySchlbk-Roman',0,97920,116,16,3,0,-1,0,0,0,0,0, - "long-vowel sign")]) -]) -])]). -oval('black','',30,70,280,140,0,1,1,49,0,0,0,0,0,'1',0,[ -]). -oval('black','',30,260,280,330,0,1,1,51,0,0,0,0,0,'1',0,[ -]). -text('black',200,274,2,1,1,85,38,53,16,3,0,0,0,0,2,85,38,0,0,"",0,0,0,0,290,'',[ -minilines(85,38,0,0,1,0,0,[ -mini_line(61,16,3,0,0,0,[ -str_block(0,61,16,3,0,-1,0,0,0,[ -str_seg('black','NewCenturySchlbk-Roman',0,97920,61,16,3,0,-1,0,0,0,0,0, - "Chinese")]) -]), -mini_line(85,16,3,0,0,0,[ -str_block(0,85,16,3,0,-1,0,0,0,[ -str_seg('black','NewCenturySchlbk-Roman',0,97920,85,16,3,0,-1,0,0,0,0,0, - "letter \"sha\"")]) -]) -])]). -box('black','',330,30,560,80,0,1,1,57,0,0,0,0,0,'1',0,[ -]). -box('black','',330,110,560,160,0,1,1,59,0,0,0,0,0,'1',0,[ -]). -box('black','',330,230,560,280,0,1,1,60,0,0,0,0,0,'1',0,[ -]). -box('black','',330,310,560,360,0,1,1,61,0,0,0,0,0,'1',0,[ -]). -group([ -poly('black','',4,[ - 506,246,501,235,541,235,536,246],0,2,1,68,0,0,0,0,0,0,0,'2',0,0, - "0","",[ - 0,10,4,0,'10','4','0'],[0,10,4,0,'10','4','0'],[ -]), -poly('black','',5,[ - 519,238,516,252,529,252,524,275,516,272],0,2,1,69,0,0,0,0,0,0,0,'2',0,0, - "00","",[ - 0,10,4,0,'10','4','0'],[0,10,4,0,'10','4','0'],[ -]), -poly('black','',2,[ - 501,261,541,261],0,2,1,70,0,0,0,0,0,0,0,'2',0,0, - "0","",[ - 0,10,4,0,'10','4','0'],[0,10,4,0,'10','4','0'],[ -]), -poly('black','',2,[ - 519,244,529,244],0,2,1,71,0,0,0,0,0,0,0,'2',0,0, - "0","",[ - 0,10,4,0,'10','4','0'],[0,10,4,0,'10','4','0'],[ -]) -], -76,0,0,[ -]). -group([ -poly('black','',3,[ - 519,119,524,127,524,152],0,2,1,67,0,0,0,0,0,0,0,'2',0,0, - "0","",[ - 0,10,4,0,'10','4','0'],[0,10,4,0,'10','4','0'],[ -]) -], -78,0,0,[ -]). -group([ -poly('black','',3,[ - 540,57,509,57,501,49],0,2,1,66,0,0,0,0,0,0,0,'2',0,0, - "0","",[ - 0,10,4,0,'10','4','0'],[0,10,4,0,'10','4','0'],[ -]) -], -80,0,0,[ -]). -group([ -poly('black','',4,[ - 506,326,501,315,541,315,536,326],0,2,1,90,0,0,0,0,0,0,0,'2',0,0, - "0","",[ - 0,10,4,0,'10','4','0'],[0,10,4,0,'10','4','0'],[ -]), -poly('black','',5,[ - 519,318,515,332,531,332,526,355,519,352],0,2,1,89,0,0,0,0,0,0,0,'2',0,0, - "00","",[ - 0,10,4,0,'10','4','0'],[0,10,4,0,'10','4','0'],[ -]), -poly('black','',2,[ - 501,341,526,341],0,2,1,88,0,0,0,0,0,0,0,'2',0,0, - "0","",[ - 0,10,4,0,'10','4','0'],[0,10,4,0,'10','4','0'],[ -]), -poly('black','',2,[ - 519,324,529,324],0,2,1,87,0,0,0,0,0,0,0,'2',0,0, - "0","",[ - 0,10,4,0,'10','4','0'],[0,10,4,0,'10','4','0'],[ -]) -], -134,0,0,[ -]). -poly('black','',2,[ - 270,90,320,70],1,3,1,158,0,0,0,0,0,0,0,'3',0,0, - "0","",[ - 0,12,5,0,'12','5','0'],[0,12,5,0,'12','5','0'],[ -]). -poly('black','',2,[ - 280,110,320,130],1,3,1,159,0,0,0,0,0,0,0,'3',0,0, - "0","",[ - 0,12,5,0,'12','5','0'],[0,12,5,0,'12','5','0'],[ -]). -poly('black','',2,[ - 270,280,310,250],1,3,1,160,0,0,0,0,0,0,0,'3',0,0, - "0","",[ - 0,12,5,0,'12','5','0'],[0,12,5,0,'12','5','0'],[ -]). -poly('black','',2,[ - 270,300,310,330],1,3,1,161,0,0,0,0,0,0,0,'3',0,0, - "0","",[ - 0,12,5,0,'12','5','0'],[0,12,5,0,'12','5','0'],[ -]). diff --git a/docs/cid.png b/docs/cid.png deleted file mode 100644 index a85f27b..0000000 Binary files a/docs/cid.png and /dev/null differ diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index 8037bf8..0000000 --- a/docs/index.html +++ /dev/null @@ -1,427 +0,0 @@ - - - - - -PDFMiner - - - -
- -Last Modified: Wed Jun 25 10:27:52 UTC 2014 - -
- -

PDFMiner

-

-Python PDF parser and analyzer - -

-Homepage -  -Recent Changes -  -PDFMiner API - -

- -

What's It?

-

-PDFMiner is a tool for extracting information from PDF documents. -Unlike other PDF-related tools, it focuses entirely on getting -and analyzing text data. PDFMiner allows one to obtain -the exact location of text in a page, as well as -other information such as fonts or lines. -It includes a PDF converter that can transform PDF files -into other text formats (such as HTML). It has an extensible -PDF parser that can be used for other purposes than text analysis. - -

-

Features

- -

-PDFMiner is about 20 times slower than -other C/C++-based counterparts such as XPdf. - -

-Online Demo: (pdf -> html conversion webapp)
- -http://pdf2html.tabesugi.net:8080/ - - -

Download

-

-Source distribution:
- -http://pypi.python.org/pypi/pdfminer_six/ - - -

-github:
- -https://github.com/goulu/pdfminer/ - - -

Where to Ask

-

-

-Questions and comments:
- -http://groups.google.com/group/pdfminer-users/ - - -

How to Install

-
    -
  1. Install Python 2.6 or newer. -
  2. Download the PDFMiner source. -
  3. Unpack it. -
  4. Run setup.py to install:
    -
    -# python setup.py install
    -
    -
  5. Do the following test:
    -
    -$ pdf2txt.py samples/simple1.pdf
    -Hello
    -
    -World
    -
    -Hello
    -
    -World
    -
    -H e l l o
    -
    -W o r l d
    -
    -H e l l o
    -
    -W o r l d
    -
    -
  6. Done! -
- -

For CJK languages

-

-In order to process CJK languages, you need an additional step to take -during installation: -

-# make cmap
-python tools/conv_cmap.py pdfminer/cmap Adobe-CNS1 cmaprsrc/cid2code_Adobe_CNS1.txt
-reading 'cmaprsrc/cid2code_Adobe_CNS1.txt'...
-writing 'CNS1_H.py'...
-...
-(this may take several minutes)
-
-# python setup.py install
-
- -

-On Windows machines which don't have make command, -paste the following commands on a command line prompt: -

-mkdir pdfminer\cmap
-python tools\conv_cmap.py -c B5=cp950 -c UniCNS-UTF8=utf-8 pdfminer\cmap Adobe-CNS1 cmaprsrc\cid2code_Adobe_CNS1.txt
-python tools\conv_cmap.py -c GBK-EUC=cp936 -c UniGB-UTF8=utf-8 pdfminer\cmap Adobe-GB1 cmaprsrc\cid2code_Adobe_GB1.txt
-python tools\conv_cmap.py -c RKSJ=cp932 -c EUC=euc-jp -c UniJIS-UTF8=utf-8 pdfminer\cmap Adobe-Japan1 cmaprsrc\cid2code_Adobe_Japan1.txt
-python tools\conv_cmap.py -c KSC-EUC=euc-kr -c KSC-Johab=johab -c KSCms-UHC=cp949 -c UniKS-UTF8=utf-8 pdfminer\cmap Adobe-Korea1 cmaprsrc\cid2code_Adobe_Korea1.txt
-python setup.py install
-
- -

Command Line Tools

-

-PDFMiner comes with two handy tools: -pdf2txt.py and dumppdf.py. - -

pdf2txt.py

-

-pdf2txt.py extracts text contents from a PDF file. -It extracts all the text that are to be rendered programmatically, -i.e. text represented as ASCII or Unicode strings. -It cannot recognize text drawn as images that would require optical character recognition. -It also extracts the corresponding locations, font names, font sizes, writing -direction (horizontal or vertical) for each text portion. -You need to provide a password for protected PDF documents when its access is restricted. -You cannot extract any text from a PDF document which does not have extraction permission. - -

-Note: -Not all characters in a PDF can be safely converted to Unicode. - -

Examples

-
-$ pdf2txt.py -o output.html samples/naacl06-shinyama.pdf
-(extract text as an HTML file whose filename is output.html)
-
-$ pdf2txt.py -V -c euc-jp -o output.html samples/jo.pdf
-(extract a Japanese HTML file in vertical writing, CMap is required)
-
-$ pdf2txt.py -P mypassword -o output.txt secret.pdf
-(extract a text from an encrypted PDF file)
-
- -

Options

-
-
-o filename -
Specifies the output file name. -By default, it prints the extracted contents to stdout in text format. -

-

-p pageno[,pageno,...] -
Specifies the comma-separated list of the page numbers to be extracted. -Page numbers start at one. -By default, it extracts text from all the pages. -

-

-c codec -
Specifies the output codec. -

-

-t type -
Specifies the output format. The following formats are currently supported. - -

-

-I image_directory -
Specifies the output directory for image extraction. -Currently only JPEG images are supported. -

-

-M char_margin -
-L line_margin -
-W word_margin -
These are the parameters used for layout analysis. -In an actual PDF file, text portions might be split into several chunks -in the middle of its running, depending on the authoring software. -Therefore, text extraction needs to splice text chunks. -In the figure below, two text chunks whose distance is closer than -the char_margin (shown as M) is considered -continuous and get grouped into one. Also, two lines whose distance is closer than -the line_margin (L) is grouped -as a text box, which is a rectangular area that contains a "cluster" of text portions. -Furthermore, it may be required to insert blank characters (spaces) as necessary -if the distance between two words is greater than the word_margin -(W), as a blank between words might not be -represented as a space, but indicated by the positioning of each word. -

-Each value is specified not as an actual length, but as a proportion of -the length to the size of each character in question. The default values -are M = 2.0, L = 0.5, and W = 0.1, respectively. - - - - - - - - - - - - - - - - - - - -
M
Q u ic kb r o wn   f o x
WL
-
j u m p s...
-
-

-

-F boxes_flow -
Specifies how much a horizontal and vertical position of a text matters -when determining a text order. The value should be within the range of --1.0 (only horizontal position matters) to +1.0 (only vertical position matters). -The default value is 0.5. -

-

-C -
Suppress object caching. -This will reduce the memory consumption but also slows down the process. -

-

-n -
Suppress layout analysis. -

-

-A -
Forces to perform layout analysis for all the text strings, -including text contained in figures. -

-

-V -
Allows vertical writing detection. -

-

-Y layout_mode -
Specifies how the page layout should be preserved. (Currently only applies to HTML format.) - -

-

-E extractdir -
Specifies the extraction directory of embedded files. -

-

-s scale -
Specifies the output scale. Can be used in HTML format only. -

-

-m maxpages -
Specifies the maximum number of pages to extract. -By default, it extracts all the pages in a document. -

-

-P password -
Provides the user password to access PDF contents. -

-

-d -
Increases the debug level. -
- -
- -

dumppdf.py

-

-dumppdf.py dumps the internal contents of a PDF file -in pseudo-XML format. This program is primarily for debugging purposes, -but it's also possible to extract some meaningful contents -(such as images). - -

Examples

-
-$ dumppdf.py -a foo.pdf
-(dump all the headers and contents, except stream objects)
-
-$ dumppdf.py -T foo.pdf
-(dump the table of contents)
-
-$ dumppdf.py -r -i6 foo.pdf > pic.jpeg
-(extract a JPEG image)
-
- -

Options

-
-
-a -
Instructs to dump all the objects. -By default, it only prints the document trailer (like a header). -

-

-i objno,objno, ... -
Specifies PDF object IDs to display. -Comma-separated IDs, or multiple -i options are accepted. -

-

-p pageno,pageno, ... -
Specifies the page number to be extracted. -Comma-separated page numbers, or multiple -p options are accepted. -Note that page numbers start at one, not zero. -

-

-r (raw) -
-b (binary) -
-t (text) -
Specifies the output format of stream contents. -Because the contents of stream objects can be very large, -they are omitted when none of the options above is specified. -

-With -r option, the "raw" stream contents are dumped without decompression. -With -b option, the decompressed contents are dumped as a binary blob. -With -t option, the decompressed contents are dumped in a text format, -similar to repr() manner. When --r or -b option is given, -no stream header is displayed for the ease of saving it to a file. -

-

-T -
Shows the table of contents. -

-

-E directory -
Extracts embedded files from the pdf into the given directory. -

-

-P password -
Provides the user password to access PDF contents. -

-

-d -
Increases the debug level. -
- -

Changes:

- - -

TODO

- - -

Related Projects

- - -

Terms and Conditions

-

-(This is so-called MIT/X License) -

- -Copyright (c) 2004-2013 Yusuke Shinyama <yusuke at cs dot nyu dot edu> -

-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. - - -


-
Yusuke Shinyama (yusuke at cs dot nyu dot edu)
- diff --git a/docs/layout.obj b/docs/layout.obj deleted file mode 100644 index 4c8e3cd..0000000 --- a/docs/layout.obj +++ /dev/null @@ -1,391 +0,0 @@ -%TGIF 4.2.2 -state(0,37,100.000,0,0,0,16,1,9,1,1,0,0,0,0,1,1,'Helvetica-Bold',1,69120,0,0,1,5,0,0,1,1,0,16,0,0,1,1,1,1,1050,1485,1,0,2880,0). -% -% @(#)$Header$ -% %W% -% -unit("1 pixel/pixel"). -color_info(19,65535,0,[ - "magenta", 65535, 0, 65535, 65535, 0, 65535, 1, - "red", 65535, 0, 0, 65535, 0, 0, 1, - "green", 0, 65535, 0, 0, 65535, 0, 1, - "blue", 0, 0, 65535, 0, 0, 65535, 1, - "yellow", 65535, 65535, 0, 65535, 65535, 0, 1, - "pink", 65535, 49344, 52171, 65535, 49344, 52171, 1, - "cyan", 0, 65535, 65535, 0, 65535, 65535, 1, - "CadetBlue", 24415, 40606, 41120, 24415, 40606, 41120, 1, - "white", 65535, 65535, 65535, 65535, 65535, 65535, 1, - "black", 0, 0, 0, 0, 0, 0, 1, - "DarkSlateGray", 12079, 20303, 20303, 12079, 20303, 20303, 1, - "#00000000c000", 0, 0, 49344, 0, 0, 49152, 1, - "#820782070000", 33410, 33410, 0, 33287, 33287, 0, 1, - "#3cf3fbee34d2", 15420, 64507, 13364, 15603, 64494, 13522, 1, - "#3cf3fbed34d3", 15420, 64507, 13364, 15603, 64493, 13523, 1, - "#ffffa6990000", 65535, 42662, 0, 65535, 42649, 0, 1, - "#ffff0000fffe", 65535, 0, 65535, 65535, 0, 65534, 1, - "#fffe0000fffe", 65535, 0, 65535, 65534, 0, 65534, 1, - "#fffe00000000", 65535, 0, 0, 65534, 0, 0, 1 -]). -script_frac("0.6"). -fg_bg_colors('black','white'). -dont_reencode("FFDingbests:ZapfDingbats"). -objshadow_info('#c0c0c0',2,2). -rotate_pivot(0,0,0,0). -spline_tightness(1). -page(1,"",1,''). -box('black','',50,45,300,355,2,2,1,0,0,0,0,0,0,'2',0,[ -]). -box('black','',75,75,195,225,2,1,1,10,8,0,0,0,0,'1',0,[ -]). -box('black','',85,105,185,125,2,1,1,18,8,0,0,0,0,'1',0,[ -]). -box('black','',85,105,105,125,2,1,1,19,0,0,0,0,0,'1',0,[ -]). -box('black','',105,105,125,125,2,1,1,20,0,0,0,0,0,'1',0,[ -]). -text('black',95,108,1,1,1,9,15,21,12,3,0,0,0,0,2,9,15,0,0,"",0,0,0,0,120,'',[ -minilines(9,15,0,0,1,0,0,[ -mini_line(9,12,3,0,0,0,[ -str_block(0,9,12,3,0,-1,0,0,0,[ -str_seg('black','Helvetica',0,69120,9,12,3,0,-1,0,0,0,0,0, - "A")]) -]) -])]). -text('black',115,108,1,1,1,8,15,28,12,3,0,0,0,0,2,8,15,0,0,"",0,0,0,0,120,'',[ -minilines(8,15,0,0,1,0,0,[ -mini_line(8,12,3,0,0,0,[ -str_block(0,8,12,3,0,-1,0,0,0,[ -str_seg('black','Helvetica',0,69120,8,12,3,0,-1,0,0,0,0,0, - "B")]) -]) -])]). -box('black','',125,105,145,125,0,1,1,32,0,0,0,0,0,'1',0,[ -]). -text('black',135,108,1,1,1,9,15,36,12,3,0,0,0,0,2,9,15,0,0,"",0,0,0,0,120,'',[ -minilines(9,15,0,0,1,0,0,[ -mini_line(9,12,3,0,0,0,[ -str_block(0,9,12,3,0,-1,0,0,0,[ -str_seg('black','Helvetica',0,69120,9,12,3,0,-1,0,0,0,0,0, - "C")]) -]) -])]). -poly('black','',2,[ - 215,140,215,220],0,3,1,51,0,0,0,0,0,0,0,'3',0,0, - "0","",[ - 0,12,5,0,'12','5','0'],[0,12,5,0,'12','5','0'],[ -]). -box('black','',175,265,270,325,0,3,1,65,0,0,0,0,0,'3',0,[ -]). -box('black','',185,270,260,320,0,1,1,69,8,0,0,0,0,'1',0,[ -]). -poly('black','',6,[ - 195,295,215,290,235,310,245,285,225,300,195,295],0,2,1,74,0,0,0,0,0,0,0,'2',0,0, - "00","",[ - 0,10,4,0,'10','4','0'],[0,10,4,0,'10','4','0'],[ -]). -box('black','',85,275,140,315,1,2,0,87,0,0,0,0,0,'2',0,[ -]). -text('black',85,23,1,1,1,44,15,93,12,3,0,0,0,0,2,44,15,0,0,"",0,0,0,0,35,'',[ -minilines(44,15,0,0,1,0,0,[ -mini_line(44,12,3,0,0,0,[ -str_block(0,44,12,3,0,-1,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,44,12,3,0,-1,0,0,0,0,0, - "LTPage")]) -]) -])]). -text('black',255,133,1,1,1,39,15,100,12,3,0,0,0,0,2,39,15,0,0,"",0,0,0,0,145,'',[ -minilines(39,15,0,0,1,0,0,[ -mini_line(39,12,3,0,0,0,[ -str_block(0,39,12,3,0,-1,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,39,12,3,0,-1,0,0,0,0,0, - "LTLine")]) -]) -])]). -text('black',125,83,1,1,1,42,15,104,12,3,0,0,0,0,2,42,15,0,0,"",0,0,0,0,95,'',[ -minilines(42,15,0,0,1,0,0,[ -mini_line(42,12,3,0,0,0,[ -str_block(0,42,12,3,0,0,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,42,12,3,0,0,0,0,0,0,0, - "LTChar")]) -]) -])]). -text('black',245,53,1,1,1,65,15,108,12,3,0,0,0,0,2,65,15,0,0,"",0,0,0,0,65,'',[ -minilines(65,15,0,0,1,0,0,[ -mini_line(65,12,3,0,0,0,[ -str_block(0,65,12,3,0,-1,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,65,12,3,0,-1,0,0,0,0,0, - "LTTextBox")]) -]) -])]). -text('black',245,88,1,1,1,66,15,110,12,3,0,0,0,0,2,66,15,0,0,"",0,0,0,0,100,'',[ -minilines(66,15,0,0,1,0,0,[ -mini_line(66,12,3,0,0,0,[ -str_block(0,66,12,3,0,-1,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,66,12,3,0,-1,0,0,0,0,0, - "LTTextLine")]) -]) -])]). -text('black',255,243,1,1,1,51,15,112,12,3,0,0,0,0,2,51,15,0,0,"",0,0,0,0,255,'',[ -minilines(51,15,0,0,1,0,0,[ -mini_line(51,12,3,0,0,0,[ -str_block(0,51,12,3,0,-1,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,51,12,3,0,-1,0,0,0,0,0, - "LTFigure")]) -]) -])]). -text('black',140,243,1,1,1,51,15,114,12,3,0,0,0,0,2,51,15,0,0,"",0,0,0,0,255,'',[ -minilines(51,15,0,0,1,0,0,[ -mini_line(51,12,3,0,0,0,[ -str_block(0,51,12,3,0,-1,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,51,12,3,0,-1,0,0,0,0,0, - "LTImage")]) -]) -])]). -text('black',240,223,1,1,1,43,15,116,12,3,0,0,0,0,2,43,15,0,0,"",0,0,0,0,235,'',[ -minilines(43,15,0,0,1,0,0,[ -mini_line(43,12,3,0,0,0,[ -str_block(0,43,12,3,0,0,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,43,12,3,0,0,0,0,0,0,0, - "LTRect")]) -]) -])]). -text('black',190,333,1,1,1,50,15,118,12,3,0,0,0,0,2,50,15,0,0,"",0,0,0,0,345,'',[ -minilines(50,15,0,0,1,0,0,[ -mini_line(50,12,3,0,0,0,[ -str_block(0,50,12,3,0,-1,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,50,12,3,0,-1,0,0,0,0,0, - "LTCurve")]) -]) -])]). -text('black',170,138,1,1,1,42,15,121,12,3,0,0,0,0,2,42,15,0,0,"",0,0,0,0,150,'',[ -minilines(42,15,0,0,1,0,0,[ -mini_line(42,12,3,0,0,0,[ -str_block(0,42,12,3,0,0,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,42,12,3,0,0,0,0,0,0,0, - "LTText")]) -]) -])]). -box('black','',145,105,165,125,0,1,1,125,8,0,0,0,0,'1',0,[ -]). -poly('black','',2,[ - 105,95,95,110],0,1,1,135,0,0,0,0,0,0,0,'1',0,0, - "0","",[ - 0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[ -]). -poly('black','',2,[ - 165,140,155,115],0,1,1,138,0,0,0,0,0,0,0,'1',0,0, - "0","",[ - 0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[ -]). -poly('black','',2,[ - 215,65,190,80],0,1,1,139,0,0,0,0,0,0,0,'1',0,0, - "0","",[ - 0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[ -]). -poly('black','',2,[ - 215,100,180,115],0,1,1,140,0,0,0,0,0,0,0,'1',0,0, - "0","",[ - 0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[ -]). -poly('black','',2,[ - 235,140,215,150],0,1,1,141,0,0,0,0,0,0,0,'1',0,0, - "0","",[ - 0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[ -]). -poly('black','',2,[ - 220,235,205,265],0,1,1,146,0,0,0,0,0,0,0,'1',0,0, - "0","",[ - 0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[ -]). -poly('black','',2,[ - 235,255,225,275],0,1,1,147,0,0,0,0,0,0,0,'1',0,0, - "0","",[ - 0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[ -]). -poly('black','',2,[ - 195,330,220,300],0,1,1,148,0,0,0,0,0,0,0,'1',0,0, - "0","",[ - 0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[ -]). -poly('black','',2,[ - 125,255,110,280],0,1,1,149,0,0,0,0,0,0,0,'1',0,0, - "0","",[ - 0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[ -]). -text('black',610,33,1,1,1,44,15,151,12,3,0,0,0,0,2,44,15,0,0,"",0,0,0,0,45,'',[ -minilines(44,15,0,0,1,0,0,[ -mini_line(44,12,3,0,0,0,[ -str_block(0,44,12,3,0,-1,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,44,12,3,0,-1,0,0,0,0,0, - "LTPage")]) -]) -])]). -text('black',460,108,1,1,1,65,15,152,12,3,0,0,0,0,2,65,15,0,0,"",0,0,0,0,120,'',[ -minilines(65,15,0,0,1,0,0,[ -mini_line(65,12,3,0,0,0,[ -str_block(0,65,12,3,0,-1,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,65,12,3,0,-1,0,0,0,0,0, - "LTTextBox")]) -]) -])]). -text('black',410,178,1,1,1,66,15,154,12,3,0,0,0,0,2,66,15,0,0,"",0,0,0,0,190,'',[ -minilines(66,15,0,0,1,0,0,[ -mini_line(66,12,3,0,0,0,[ -str_block(0,66,12,3,0,-1,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,66,12,3,0,-1,0,0,0,0,0, - "LTTextLine")]) -]) -])]). -text('black',360,248,1,1,1,42,15,157,12,3,0,0,0,0,2,42,15,0,0,"",0,0,0,0,260,'',[ -minilines(42,15,0,0,1,0,0,[ -mini_line(42,12,3,0,0,0,[ -str_block(0,42,12,3,0,0,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,42,12,3,0,0,0,0,0,0,0, - "LTChar")]) -]) -])]). -text('black',420,248,1,1,1,42,15,159,12,3,0,0,0,0,2,42,15,0,0,"",0,0,0,0,260,'',[ -minilines(42,15,0,0,1,0,0,[ -mini_line(42,12,3,0,0,0,[ -str_block(0,42,12,3,0,0,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,42,12,3,0,0,0,0,0,0,0, - "LTChar")]) -]) -])]). -text('black',480,248,1,1,1,42,15,161,12,3,0,0,0,0,2,42,15,0,0,"",0,0,0,0,260,'',[ -minilines(42,15,0,0,1,0,0,[ -mini_line(42,12,3,0,0,0,[ -str_block(0,42,12,3,0,0,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,42,12,3,0,0,0,0,0,0,0, - "LTText")]) -]) -])]). -text('black',460,178,1,1,1,12,15,170,12,3,0,0,0,0,2,12,15,0,0,"",0,0,0,0,190,'',[ -minilines(12,15,0,0,1,0,0,[ -mini_line(12,12,3,0,0,0,[ -str_block(0,12,12,3,0,-1,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,12,12,3,0,-1,0,0,0,0,0, - "...")]) -]) -])]). -text('black',520,248,1,1,1,12,15,172,12,3,0,0,0,0,2,12,15,0,0,"",0,0,0,0,260,'',[ -minilines(12,15,0,0,1,0,0,[ -mini_line(12,12,3,0,0,0,[ -str_block(0,12,12,3,0,-1,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,12,12,3,0,-1,0,0,0,0,0, - "...")]) -]) -])]). -text('black',560,108,1,1,1,51,15,174,12,3,0,0,0,0,2,51,15,0,0,"",0,0,0,0,120,'',[ -minilines(51,15,0,0,1,0,0,[ -mini_line(51,12,3,0,0,0,[ -str_block(0,51,12,3,0,-1,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,51,12,3,0,-1,0,0,0,0,0, - "LTFigure")]) -]) -])]). -text('black',635,108,1,1,1,39,15,178,12,3,0,0,0,0,2,39,15,0,0,"",0,0,0,0,120,'',[ -minilines(39,15,0,0,1,0,0,[ -mini_line(39,12,3,0,0,0,[ -str_block(0,39,12,3,0,-1,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,39,12,3,0,-1,0,0,0,0,0, - "LTLine")]) -]) -])]). -text('black',700,108,1,1,1,43,15,180,12,3,0,0,0,0,2,43,15,0,0,"",0,0,0,0,120,'',[ -minilines(43,15,0,0,1,0,0,[ -mini_line(43,12,3,0,0,0,[ -str_block(0,43,12,3,0,0,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,43,12,3,0,0,0,0,0,0,0, - "LTRect")]) -]) -])]). -text('black',580,178,1,1,1,50,15,182,12,3,0,0,0,0,2,50,15,0,0,"",0,0,0,0,190,'',[ -minilines(50,15,0,0,1,0,0,[ -mini_line(50,12,3,0,0,0,[ -str_block(0,50,12,3,0,-1,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,50,12,3,0,-1,0,0,0,0,0, - "LTCurve")]) -]) -])]). -text('black',775,108,1,1,1,51,15,186,12,3,0,0,0,0,2,51,15,0,0,"",0,0,0,0,120,'',[ -minilines(51,15,0,0,1,0,0,[ -mini_line(51,12,3,0,0,0,[ -str_block(0,51,12,3,0,-1,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,51,12,3,0,-1,0,0,0,0,0, - "LTImage")]) -]) -])]). -poly('black','',2,[ - 475,105,590,50],0,1,1,190,0,0,0,0,0,0,0,'1',0,0, - "0","",[ - 0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[ -]). -poly('black','',2,[ - 560,110,595,50],0,1,1,191,0,0,0,0,0,0,0,'1',0,0, - "0","",[ - 0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[ -]). -poly('black','',2,[ - 635,105,600,50],0,1,1,192,0,0,0,0,0,0,0,'1',0,0, - "0","",[ - 0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[ -]). -poly('black','',2,[ - 610,50,700,100],0,1,1,193,0,0,0,0,0,0,0,'1',0,0, - "0","",[ - 0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[ -]). -poly('black','',2,[ - 765,100,630,50],0,1,1,194,0,0,0,0,0,0,0,'1',0,0, - "0","",[ - 0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[ -]). -poly('black','',2,[ - 460,125,425,175],0,1,1,196,0,0,0,0,0,0,0,'1',0,0, - "0","",[ - 0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[ -]). -poly('black','',2,[ - 560,125,570,175],0,1,1,197,0,0,0,0,0,0,0,'1',0,0, - "0","",[ - 0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[ -]). -poly('black','',2,[ - 415,195,370,245],0,1,1,198,0,0,0,0,0,0,0,'1',0,0, - "0","",[ - 0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[ -]). -poly('black','',2,[ - 415,195,420,245],0,1,1,199,0,0,0,0,0,0,0,'1',0,0, - "0","",[ - 0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[ -]). -poly('black','',2,[ - 415,195,475,245],0,1,1,200,0,0,0,0,0,0,0,'1',0,0, - "0","",[ - 0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[ -]). -poly('black','',2,[ - 470,125,485,175],0,1,1,206,0,0,0,0,0,0,0,'1',0,0, - "0","",[ - 0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[ -]). -poly('black','',2,[ - 420,195,510,220],0,1,1,207,0,0,0,0,0,0,0,'1',0,0, - "0","",[ - 0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[ -]). -poly('black','',2,[ - 565,125,635,175],0,1,1,208,0,0,0,0,0,0,0,'1',0,0, - "0","",[ - 0,8,3,0,'8','3','0'],[0,8,3,0,'8','3','0'],[ -]). -text('black',635,178,1,1,1,12,15,215,12,3,0,0,0,0,2,12,15,0,0,"",0,0,0,0,190,'',[ -minilines(12,15,0,0,1,0,0,[ -mini_line(12,12,3,0,0,0,[ -str_block(0,12,12,3,0,-1,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,12,12,3,0,-1,0,0,0,0,0, - "...")]) -]) -])]). diff --git a/docs/make.bat b/docs/make.bat new file mode 100644 index 0000000..9534b01 --- /dev/null +++ b/docs/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=source +set BUILDDIR=build + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% + +:end +popd diff --git a/docs/objrel.obj b/docs/objrel.obj deleted file mode 100644 index 12a0f56..0000000 --- a/docs/objrel.obj +++ /dev/null @@ -1,187 +0,0 @@ -%TGIF 4.2.2 -state(0,37,100.000,0,0,0,16,1,9,1,1,1,0,0,2,1,1,'Helvetica-Bold',1,69120,0,0,1,10,0,0,1,1,0,16,0,0,1,1,1,1,1050,1485,1,0,2880,0). -% -% @(#)$Header$ -% %W% -% -unit("1 pixel/pixel"). -color_info(19,65535,0,[ - "magenta", 65535, 0, 65535, 65535, 0, 65535, 1, - "red", 65535, 0, 0, 65535, 0, 0, 1, - "green", 0, 65535, 0, 0, 65535, 0, 1, - "blue", 0, 0, 65535, 0, 0, 65535, 1, - "yellow", 65535, 65535, 0, 65535, 65535, 0, 1, - "pink", 65535, 49344, 52171, 65535, 49344, 52171, 1, - "cyan", 0, 65535, 65535, 0, 65535, 65535, 1, - "CadetBlue", 24415, 40606, 41120, 24415, 40606, 41120, 1, - "white", 65535, 65535, 65535, 65535, 65535, 65535, 1, - "black", 0, 0, 0, 0, 0, 0, 1, - "DarkSlateGray", 12079, 20303, 20303, 12079, 20303, 20303, 1, - "#00000000c000", 0, 0, 49344, 0, 0, 49152, 1, - "#820782070000", 33410, 33410, 0, 33287, 33287, 0, 1, - "#3cf3fbee34d2", 15420, 64507, 13364, 15603, 64494, 13522, 1, - "#3cf3fbed34d3", 15420, 64507, 13364, 15603, 64493, 13523, 1, - "#ffffa6990000", 65535, 42662, 0, 65535, 42649, 0, 1, - "#ffff0000fffe", 65535, 0, 65535, 65535, 0, 65534, 1, - "#fffe0000fffe", 65535, 0, 65535, 65534, 0, 65534, 1, - "#fffe00000000", 65535, 0, 0, 65534, 0, 0, 1 -]). -script_frac("0.6"). -fg_bg_colors('black','white'). -dont_reencode("FFDingbests:ZapfDingbats"). -objshadow_info('#c0c0c0',2,2). -rotate_pivot(0,0,0,0). -spline_tightness(1). -page(1,"",1,''). -oval('black','',350,380,450,430,2,2,1,88,0,0,0,0,0,'2',0,[ -]). -poly('black','',2,[ - 270,270,350,230],1,2,1,54,0,0,0,0,0,0,0,'2',0,0, - "0","",[ - 0,10,4,0,'10','4','0'],[0,10,4,0,'10','4','0'],[ -]). -poly('black','',2,[ - 270,280,350,320],1,2,1,55,0,0,0,0,0,0,0,'2',0,0, - "0","",[ - 0,10,4,0,'10','4','0'],[0,10,4,0,'10','4','0'],[ -]). -box('black','',350,100,450,150,2,2,1,2,0,0,0,0,0,'2',0,[ -]). -text('black',400,118,1,1,1,84,15,3,12,3,0,0,0,0,2,84,15,0,0,"",0,0,0,0,130,'',[ -minilines(84,15,0,0,1,0,0,[ -mini_line(84,12,3,0,0,0,[ -str_block(0,84,12,3,0,0,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,84,12,3,0,0,0,0,0,0,0, - "PDFDocument")]) -]) -])]). -box('black','',150,100,250,150,2,2,1,13,0,0,0,0,0,'2',0,[ -]). -text('black',200,118,1,1,1,63,15,14,12,3,0,0,0,0,2,63,15,0,0,"",0,0,0,0,130,'',[ -minilines(63,15,0,0,1,0,0,[ -mini_line(63,12,3,0,0,0,[ -str_block(0,63,12,3,0,0,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,63,12,3,0,0,0,0,0,0,0, - "PDFParser")]) -]) -])]). -box('black','',350,200,450,250,2,2,1,20,0,0,0,0,0,'2',0,[ -]). -text('black',400,218,1,1,1,88,15,21,12,3,0,0,0,0,2,88,15,0,0,"",0,0,0,0,230,'',[ -minilines(88,15,0,0,1,0,0,[ -mini_line(88,12,3,0,0,0,[ -str_block(0,88,12,3,0,0,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,88,12,3,0,0,0,0,0,0,0, - "PDFInterpreter")]) -]) -])]). -box('black','',350,300,450,350,2,2,1,23,0,0,0,0,0,'2',0,[ -]). -text('black',400,318,1,1,1,65,15,24,12,3,0,0,0,0,2,65,15,0,0,"",0,0,0,0,330,'',[ -minilines(65,15,0,0,1,0,0,[ -mini_line(65,12,3,0,0,0,[ -str_block(0,65,12,3,0,-1,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,65,12,3,0,-1,0,0,0,0,0, - "PDFDevice")]) -]) -])]). -box('black','',180,250,280,300,2,2,1,29,0,0,0,0,0,'2',0,[ -]). -text('black',230,268,1,1,1,131,15,30,12,3,2,0,0,0,2,131,15,0,0,"",0,0,0,0,280,'',[ -minilines(131,15,0,0,1,0,0,[ -mini_line(131,12,3,0,0,0,[ -str_block(0,131,12,3,0,0,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,131,12,3,0,0,0,0,0,0,0, - "PDFResourceManager")]) -]) -])]). -poly('black','',2,[ - 250,140,350,140],1,2,1,45,0,0,0,0,0,0,0,'2',0,0, - "0","",[ - 0,10,4,0,'10','4','0'],[0,10,4,0,'10','4','0'],[ -]). -poly('black','',2,[ - 350,110,250,110],1,2,1,46,0,0,0,0,0,0,0,'2',0,0, - "0","",[ - 0,10,4,0,'10','4','0'],[0,10,4,0,'10','4','0'],[ -]). -poly('black','',2,[ - 400,150,400,200],1,2,1,47,0,0,0,0,0,0,0,'2',0,0, - "0","",[ - 0,10,4,0,'10','4','0'],[0,10,4,0,'10','4','0'],[ -]). -poly('black','',2,[ - 400,250,400,300],1,2,1,56,0,0,0,0,0,0,0,'2',0,0, - "0","",[ - 0,10,4,0,'10','4','0'],[0,10,4,0,'10','4','0'],[ -]). -poly('black','',2,[ - 400,350,400,380],0,2,1,65,0,0,0,0,0,0,0,'2',0,0, - "0","",[ - 0,10,4,0,'10','4','0'],[0,10,4,0,'10','4','0'],[ -]). -text('black',400,388,3,1,1,44,41,71,12,3,0,-2,0,0,2,44,41,0,0,"",0,0,0,0,400,'',[ -minilines(44,41,0,0,1,-2,0,[ -mini_line(44,12,3,0,0,0,[ -str_block(0,44,12,3,0,-1,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,44,12,3,0,-1,0,0,0,0,0, - "Display")]) -]), -mini_line(20,12,3,0,0,0,[ -str_block(0,20,12,3,0,-1,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,20,12,3,0,-1,0,0,0,0,0, - "File")]) -]), -mini_line(23,12,3,0,0,0,[ -str_block(0,23,12,3,0,-1,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,23,12,3,0,-1,0,0,0,0,0, - "etc.")]) -]) -])]). -text('black',300,88,1,1,1,92,15,79,12,3,0,0,0,0,2,92,15,0,0,"",0,0,0,0,100,'',[ -minilines(92,15,0,0,1,0,0,[ -mini_line(92,12,3,0,0,0,[ -str_block(0,92,12,3,0,-1,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,92,12,3,0,-1,0,0,0,0,0, - "request objects")]) -]) -])]). -text('black',300,148,1,1,1,78,15,84,12,3,0,0,0,0,2,78,15,0,0,"",0,0,0,0,160,'',[ -minilines(78,15,0,0,1,0,0,[ -mini_line(78,12,3,0,0,0,[ -str_block(0,78,12,3,0,-1,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,78,12,3,0,-1,0,0,0,0,0, - "store objects")]) -]) -])]). -oval('black','',20,100,120,150,2,2,1,106,0,0,0,0,0,'2',0,[ -]). -text('black',70,118,1,1,1,46,15,107,12,3,0,0,0,0,2,46,15,0,0,"",0,0,0,0,130,'',[ -minilines(46,15,0,0,1,0,0,[ -mini_line(46,12,3,0,0,0,[ -str_block(0,46,12,3,0,-1,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,46,12,3,0,-1,0,0,0,0,0, - "PDF file")]) -]) -])]). -poly('black','',2,[ - 120,120,150,120],0,2,1,114,0,2,0,0,0,0,0,'2',0,0, - "0","",[ - 0,10,4,0,'10','4','0'],[0,10,4,0,'10','4','0'],[ -]). -text('black',400,158,1,1,1,84,15,115,12,3,2,0,0,0,2,84,15,0,0,"",0,0,0,0,170,'',[ -minilines(84,15,0,0,1,0,0,[ -mini_line(84,12,3,0,0,0,[ -str_block(0,84,12,3,0,-1,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,84,12,3,0,-1,0,0,0,0,0, - "page contents")]) -]) -])]). -text('black',400,258,1,1,1,129,15,119,12,3,2,0,0,0,2,129,15,0,0,"",0,0,0,0,270,'',[ -minilines(129,15,0,0,1,0,0,[ -mini_line(129,12,3,0,0,0,[ -str_block(0,129,12,3,0,-1,0,0,0,[ -str_seg('black','Helvetica-Bold',1,69120,129,12,3,0,-1,0,0,0,0,0, - "rendering instructions")]) -]) -])]). diff --git a/docs/objrel.png b/docs/objrel.png deleted file mode 100644 index 3b9f5b6..0000000 Binary files a/docs/objrel.png and /dev/null differ diff --git a/docs/programming.html b/docs/programming.html deleted file mode 100644 index dc4c186..0000000 --- a/docs/programming.html +++ /dev/null @@ -1,223 +0,0 @@ - - - - - -Programming with PDFMiner - - - -
- -Last Modified: Mon Mar 24 11:49:28 UTC 2014 - -
- -

-[Back to PDFMiner homepage] - -

Programming with PDFMiner

-

-This page explains how to use PDFMiner as a library -from other applications. -

- -

Overview

-

-PDF is evil. Although it is called a PDF -"document", it's nothing like Word or HTML document. PDF is more -like a graphic representation. PDF contents are just a bunch of -instructions that tell how to place the stuff at each exact -position on a display or paper. In most cases, it has no logical -structure such as sentences or paragraphs and it cannot adapt -itself when the paper size changes. PDFMiner attempts to -reconstruct some of those structures by guessing from its -positioning, but there's nothing guaranteed to work. Ugly, I -know. Again, PDF is evil. - -

-[More technical details about the internal structure of PDF: -"How to Extract Text Contents from PDF Manually" -(part 1) -(part 2) -(part 3)] - -

-Because a PDF file has such a big and complex structure, -parsing a PDF file as a whole is time and memory consuming. However, -not every part is needed for most PDF processing tasks. Therefore -PDFMiner takes a strategy of lazy parsing, which is to parse the -stuff only when it's necessary. To parse PDF files, you need to use at -least two classes: PDFParser and PDFDocument. -These two objects are associated with each other. -PDFParser fetches data from a file, -and PDFDocument stores it. You'll also need -PDFPageInterpreter to process the page contents -and PDFDevice to translate it to whatever you need. -PDFResourceManager is used to store -shared resources such as fonts or images. - -

-Figure 1 shows the relationship between the classes in PDFMiner. - -

-
-Figure 1. Relationships between PDFMiner classes -
- -

Basic Usage

-

-A typical way to parse a PDF file is the following: -

-from pdfminer.pdfparser import PDFParser
-from pdfminer.pdfdocument import PDFDocument
-from pdfminer.pdfpage import PDFPage
-from pdfminer.pdfpage import PDFTextExtractionNotAllowed
-from pdfminer.pdfinterp import PDFResourceManager
-from pdfminer.pdfinterp import PDFPageInterpreter
-from pdfminer.pdfdevice import PDFDevice
-
-# Open a PDF file.
-fp = open('mypdf.pdf', 'rb')
-# Create a PDF parser object associated with the file object.
-parser = PDFParser(fp)
-# Create a PDF document object that stores the document structure.
-# Supply the password for initialization.
-document = PDFDocument(parser, password)
-# Check if the document allows text extraction. If not, abort.
-if not document.is_extractable:
-    raise PDFTextExtractionNotAllowed
-# Create a PDF resource manager object that stores shared resources.
-rsrcmgr = PDFResourceManager()
-# Create a PDF device object.
-device = PDFDevice(rsrcmgr)
-# Create a PDF interpreter object.
-interpreter = PDFPageInterpreter(rsrcmgr, device)
-# Process each page contained in the document.
-for page in PDFPage.create_pages(document):
-    interpreter.process_page(page)
-
- -

Performing Layout Analysis

-

-Here is a typical way to use the layout analysis function: -

-from pdfminer.layout import LAParams
-from pdfminer.converter import PDFPageAggregator
-
-# Set parameters for analysis.
-laparams = LAParams()
-# Create a PDF page aggregator object.
-device = PDFPageAggregator(rsrcmgr, laparams=laparams)
-interpreter = PDFPageInterpreter(rsrcmgr, device)
-for page in PDFPage.create_pages(document):
-    interpreter.process_page(page)
-    # receive the LTPage object for the page.
-    layout = device.get_result()
-
- -A layout analyzer returns a LTPage object for each page -in the PDF document. This object contains child objects within the page, -forming a tree structure. Figure 2 shows the relationship between -these objects. - -
-
-Figure 2. Layout objects and its tree structure -
- -
-
LTPage -
Represents an entire page. May contain child objects like -LTTextBox, LTFigure, LTImage, LTRect, -LTCurve and LTLine. - -
LTTextBox -
Represents a group of text chunks that can be contained in a rectangular area. -Note that this box is created by geometric analysis and does not necessarily -represents a logical boundary of the text. -It contains a list of LTTextLine objects. -get_text() method returns the text content. - -
LTTextLine -
Contains a list of LTChar objects that represent -a single text line. The characters are aligned either horizontaly -or vertically, depending on the text's writing mode. -get_text() method returns the text content. - -
LTChar -
LTAnno -
Represent an actual letter in the text as a Unicode string. -Note that, while a LTChar object has actual boundaries, -LTAnno objects does not, as these are "virtual" characters, -inserted by a layout analyzer according to the relationship between two characters -(e.g. a space). - -
LTFigure -
Represents an area used by PDF Form objects. PDF Forms can be used to -present figures or pictures by embedding yet another PDF document within a page. -Note that LTFigure objects can appear recursively. - -
LTImage -
Represents an image object. Embedded images can be -in JPEG or other formats, but currently PDFMiner does not -pay much attention to graphical objects. - -
LTLine -
Represents a single straight line. -Could be used for separating text or figures. - -
LTRect -
Represents a rectangle. -Could be used for framing another pictures or figures. - -
LTCurve -
Represents a generic Bezier curve. -
- -

-Also, check out a more complete example by Denis Papathanasiou(Extracting Text & Images from PDF Files). - -

Obtaining Table of Contents

-

-PDFMiner provides functions to access the document's table of contents -("Outlines"). - -

-from pdfminer.pdfparser import PDFParser
-from pdfminer.pdfdocument import PDFDocument
-
-# Open a PDF document.
-fp = open('mypdf.pdf', 'rb')
-parser = PDFParser(fp)
-document = PDFDocument(parser, password)
-
-# Get the outlines of the document.
-outlines = document.get_outlines()
-for (level,title,dest,a,se) in outlines:
-    print (level, title)
-
- -

-Some PDF documents use page numbers as destinations, while others -use page numbers and the physical location within the page. Since -PDF does not have a logical structure, and it does not provide a -way to refer to any in-page object from the outside, there's no -way to tell exactly which part of text these destinations are -referring to. - -

Extending Functionality

- -

-You can extend PDFPageInterpreter and PDFDevice class -in order to process them differently / obtain other information. - -


-
Yusuke Shinyama
- diff --git a/docs/requirements.txt b/docs/requirements.txt new file mode 100644 index 0000000..1e76fda --- /dev/null +++ b/docs/requirements.txt @@ -0,0 +1 @@ +sphinx-argparse \ No newline at end of file diff --git a/docs/source/_static/layout_analysis.html b/docs/source/_static/layout_analysis.html new file mode 100644 index 0000000..3db7b00 --- /dev/null +++ b/docs/source/_static/layout_analysis.html @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + +
M
Q u ic kb r o w n
+ → + ← + W
\ No newline at end of file diff --git a/docs/source/_static/layout_analysis_group_boxes.html b/docs/source/_static/layout_analysis_group_boxes.html new file mode 100644 index 0000000..23889da --- /dev/null +++ b/docs/source/_static/layout_analysis_group_boxes.html @@ -0,0 +1,23 @@ + + + + + + + + + + + + + +
+ + Q u i c k   b r o w n
f o x +
+
j u m p s ...
\ No newline at end of file diff --git a/docs/source/_static/layout_analysis_group_lines.html b/docs/source/_static/layout_analysis_group_lines.html new file mode 100644 index 0000000..d3bd852 --- /dev/null +++ b/docs/source/_static/layout_analysis_group_lines.html @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Q u i c k   b r o w + n
+ L1 +
+ f o x +            +            + + L2 +
\ No newline at end of file diff --git a/docs/layout.png b/docs/source/_static/layout_analysis_output.png similarity index 100% rename from docs/layout.png rename to docs/source/_static/layout_analysis_output.png diff --git a/docs/source/api/commandline.rst b/docs/source/api/commandline.rst new file mode 100644 index 0000000..7e4aba3 --- /dev/null +++ b/docs/source/api/commandline.rst @@ -0,0 +1,25 @@ +.. _api_commandline: + + +Command-line API +**************** + +.. _api_pdf2txt: + +pdf2txt.py +========== + +.. argparse:: + :module: tools.pdf2txt + :func: maketheparser + :prog: python tools/pdf2txt.py + +.. _api_dumppdf: + +dumppdf.py +========== + +.. argparse:: + :module: tools.dumppdf + :func: create_parser + :prog: python tools/dumppdf.py diff --git a/docs/source/api/composable.rst b/docs/source/api/composable.rst new file mode 100644 index 0000000..7ccc184 --- /dev/null +++ b/docs/source/api/composable.rst @@ -0,0 +1,20 @@ +.. _api_composable: + +Composable API +************** + +.. _api_laparams: + +LAParams +======== + +.. currentmodule:: pdfminer.layout +.. autoclass:: LAParams + +Todo: +===== + +- `PDFDevice` + - `TextConverter` + - `PDFPageAggregator` +- `PDFPageInterpreter` \ No newline at end of file diff --git a/docs/source/api/highlevel.rst b/docs/source/api/highlevel.rst new file mode 100644 index 0000000..4f34b46 --- /dev/null +++ b/docs/source/api/highlevel.rst @@ -0,0 +1,21 @@ +.. _api_highlevel: + +High-level functions API +************************ + +.. _api_extract_text: + +extract_text +============ + +.. currentmodule:: pdfminer.high_level +.. autofunction:: extract_text + + +.. _api_extract_text_to_fp: + +extract_text_to_fp +================== + +.. currentmodule:: pdfminer.high_level +.. autofunction:: extract_text_to_fp diff --git a/docs/source/api/index.rst b/docs/source/api/index.rst new file mode 100644 index 0000000..047ed2d --- /dev/null +++ b/docs/source/api/index.rst @@ -0,0 +1,9 @@ +API documentation +***************** + +.. toctree:: + :maxdepth: 2 + + commandline + highlevel + composable diff --git a/docs/source/conf.py b/docs/source/conf.py new file mode 100644 index 0000000..a3a6be7 --- /dev/null +++ b/docs/source/conf.py @@ -0,0 +1,61 @@ +# 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 os +import sys +sys.path.insert(0, os.path.join(os.path.abspath(os.path.dirname(__file__)), '../../')) + + +# -- Project information ----------------------------------------------------- + +project = 'pdfminer.six' +copyright = '2019, Yusuke Shinyama, Philippe Guglielmetti & Pieter Marsman' +author = 'Yusuke Shinyama, Philippe Guglielmetti & Pieter Marsman' + +# The full version, including alpha/beta/rc tags +release = '20191020' + + +# -- 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 = [ + 'sphinxarg.ext', + 'sphinx.ext.autodoc', + 'sphinx.ext.doctest', +] + +# Root rst file +master_doc = 'index' + +# 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 = [] + + +# -- 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'] \ No newline at end of file diff --git a/docs/source/index.rst b/docs/source/index.rst new file mode 100644 index 0000000..dbec983 --- /dev/null +++ b/docs/source/index.rst @@ -0,0 +1,72 @@ +Welcome to pdfminer.six's documentation! +**************************************** + +.. image:: https://travis-ci.org/pdfminer/pdfminer.six.svg?branch=master + :target: https://travis-ci.org/pdfminer/pdfminer.six + :alt: Travis-ci build badge + +.. image:: https://img.shields.io/pypi/v/pdfminer.six.svg + :target: https://pypi.python.org/pypi/pdfminer.six/ + :alt: PyPi version badge + +.. image:: https://badges.gitter.im/pdfminer-six/Lobby.svg + :target: https://gitter.im/pdfminer-six/Lobby?utm_source=badge&utm_medium + :alt: gitter badge + + +Pdfminer.six is a python package for extracting information from PDF documents. + +Check out the source on `github `_. + +Content +======= + +.. toctree:: + :maxdepth: 2 + + tutorials/index + topics/index + api/index + + +Features +======== + +* Parse all objects from a PDF document into Python objects. +* Analyze and group text in a human-readable way. +* Extract text, images (JPG, JBIG2 and Bitmaps), table-of-contents, tagged + contents and more. +* Support for (almost all) features from the PDF-1.7 specification +* Support for Chinese, Japanese and Korean CJK) languages as well as vertical + writing. +* Support for various font types (Type1, TrueType, Type3, and CID). +* Support for basic encryption (RC4). + + +Installation instructions +========================= + +Before using it, you must install it using Python 2.7 or newer. + +:: + + $ pip install pdfminer.six + +Note that Python 2.7 support is dropped at January, 2020. + +Common use-cases +---------------- + +* :ref:`tutorial_commandline` if you just want to extract text from a pdf once. +* :ref:`tutorial_highlevel` if you want to integrate pdfminer.six with your + Python code. +* :ref:`tutorial_composable` when you want to tailor the behavior of + pdfmine.six to your needs. + + +Contributing +============ + +We welcome any contributors to pdfminer.six! But, before doing anything, take +a look at the `contribution guide +`_. diff --git a/docs/source/topics/converting_pdf_to_text.rst b/docs/source/topics/converting_pdf_to_text.rst new file mode 100644 index 0000000..b192d49 --- /dev/null +++ b/docs/source/topics/converting_pdf_to_text.rst @@ -0,0 +1,132 @@ +.. _topic_pdf_to_text: + +Converting a PDF file to text +***************************** + +Most PDF files look like they contain well structured text. But the reality is +that a PDF file does not contain anything that resembles a paragraphs, +sentences or even words. When it comes to text, a PDF file is only aware of +the characters and their placement. + +This makes extracting meaningful pieces of text from PDF's files difficult. +The characters that compose a paragraph are no different from those that +compose the table, the page footer or the description of a figure. Unlike +other documents formats, like a `.txt` file or a word document, the PDF format +does not contain a stream of text. + +A PDF document does consists of a collection of objects that together describe +the appearance of one or more pages, possibly accompanied by additional +interactive elements and higher-level application data. A PDF file contains +the objects making up a PDF document along with associated structural +information, all represented as a single self-contained sequence of bytes. [1]_ + +Layout analysis algorithm +========================= + +PDFMiner attempts to reconstruct some of those structures by using heuristics +on the positioning of characters. This works well for sentences and +paragraphs because meaningful groups of nearby characters can be made. + +The layout analysis consist of three different stages: it groups characters +into words and lines, then it groups lines into boxes and finally it groups +textboxes hierarchically. These stages are discussed in the following +sections. The resulting output of the layout analysis is an ordered hierarchy +of layout objects on a PDF page. + +.. figure:: ../_static/layout_analysis_output.png + :align: center + + The output of the layout analysis is a hierarchy of layout objects. + + +The output of the layout analysis heavily depends on a couple of parameters. +All these parameters are part of the :ref:`api_laparams` class. + +Grouping characters into words and lines +---------------------------------------- + +The first step in going from characters to text is to group characters in a +meaningful way. Each character has an x-coordinate and a y-coordinate for its +bottom-left corner and upper-right corner, i.e. its bounding box. Pdfminer +.six uses these bounding boxes to decide which characters belong together. + +Characters that are both horizontally and vertically close are grouped. How +close they should be is determined by the `char_margin` (M in figure) and the +`line_overlap` (not in figure) parameter. The horizontal *distance* between the +bounding boxes of two characters should be smaller that the `char_margin` and +the vertical *overlap* between the bounding boxes should be smaller the the +`line_overlap`. + + +.. raw:: html + :file: ../_static/layout_analysis.html + +The values of `char_margin` and `line_overlap` are relative to the size of +the bounding boxes of the characters. The `char_margin` is relative to the +maximum width of either one of the bounding boxes, and the `line_overlap` is +relative to the minimum height of either one of the bounding boxes. + +Spaces need to be inserted between characters because the PDF format has no +notion of the space character. A space is inserted if the characters are +further apart that the `word_margin` (W in the figure). The `word_margin` is +relative to the maximum width or height of the new character. Having a larger +`word_margin` creates smaller words and inserts spaces between characters +more often. Note that the `word_margin` should be smaller than the +`char_margin` otherwise all the characters are seperated by a space. + +The result of this stage is a list of lines. Each line consists a list of +characters. These characters either original `LTChar` characters that +originate from the PDF file, or inserted `LTAnno` characters that +represent spaces between words or newlines at the end of each line. + +Grouping lines into boxes +------------------------- + +The second step is grouping lines in a meaningful way. Each line has a +bounding box that is determined by the bounding boxes of the characters that +it contains. Like grouping characters, pdfminer.six uses the bounding boxes +to group the lines. + +Lines that are both horizontally overlapping and vertically close are grouped. +How vertically close the lines should be is determined by the `line_margin`. +This margin is specified relative to the height of the bounding box. Lines +are close if the gap between the tops (see L :sub:`1` in the figure) and bottoms +(see L :sub:`2`) in the figure) of the bounding boxes are closer together +than the absolute line margin, i.e. the `line_margin` multiplied by the +height of the bounding box. + +.. raw:: html + :file: ../_static/layout_analysis_group_lines.html + +The result of this stage is a list of text boxes. Each box consist of a list +of lines. + +Grouping textboxes hierarchically +--------------------------------- + +the last step is to group the text boxes in a meaningful way. This step +repeatedly merges the two text boxes that are closest to each other. + +The closeness of bounding boxes is computed as the area that is between the +two text boxes (the blue area in the figure). In other words, it is the area of +the bounding box that surrounds both lines, minus the area of the bounding +boxes of the individual lines. + +.. raw:: html + :file: ../_static/layout_analysis_group_boxes.html + + +Working with rotated characters +=============================== + +The algorithm described above assumes that all characters have the same +orientation. However, any writing direction is possible in a PDF. To +accommodate for this, pdfminer.six allows to detect vertical writing with the +`detect_vertical` parameter. This will apply all the grouping steps as if the +pdf was rotated 90 (or 270) degrees + +References +========== + +.. [1] Adobe System Inc. (2007). *Pdf reference: Adobe portable document + format, version 1.7.* diff --git a/docs/source/topics/index.rst b/docs/source/topics/index.rst new file mode 100644 index 0000000..30c000a --- /dev/null +++ b/docs/source/topics/index.rst @@ -0,0 +1,7 @@ +Using pdfminer.six +****************** + +.. toctree:: + :maxdepth: 2 + + converting_pdf_to_text diff --git a/docs/source/tutorials/commandline.rst b/docs/source/tutorials/commandline.rst new file mode 100644 index 0000000..2477c65 --- /dev/null +++ b/docs/source/tutorials/commandline.rst @@ -0,0 +1,41 @@ +.. _tutorial_commandline: + +Get started with command-line tools +*********************************** + +pdfminer.six has several tools that can be used from the command line. The +command-line tools are aimed at users that occasionally want to extract text +from a pdf. + +Take a look at the high-level or composable interface if you want to use +pdfminer.six programmatically. + +Examples +======== + +pdf2txt.py +---------- + +:: + + $ python tools/pdf2txt.py example.pdf + all the text from the pdf appears on the command line + +The :ref:`api_pdf2txt` tool extracts all the text from a PDF. It uses layout +analysis with sensible defaults to order and group the text in a sensible way. + +dumppdf.py +---------- + +:: + + $ python tools/dumppdf.py -a example.pdf + + ... + + ... + + +The :ref:`api_dumppdf` tool can be used to extract the internal structure from a +PDF. This tool is primarily for debugging purposes, but that can be useful to +anybody working with PDF's. diff --git a/docs/source/tutorials/composable.rst b/docs/source/tutorials/composable.rst new file mode 100644 index 0000000..971332b --- /dev/null +++ b/docs/source/tutorials/composable.rst @@ -0,0 +1,33 @@ +.. _tutorial_composable: + +Get started using the composable components API +*********************************************** + +The command line tools and the high-level API are just shortcuts for often +used combinations of pdfminer.six components. You can use these components to +modify pdfminer.six to your own needs. + +For example, to extract the text from a PDF file and save it in a python +variable:: + + from io import StringIO + + from pdfminer.converter import TextConverter + from pdfminer.layout import LAParams + from pdfminer.pdfdocument import PDFDocument + from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter + from pdfminer.pdfpage import PDFPage + from pdfminer.pdfparser import PDFParser + + output_string = StringIO() + with open('samples/simple1.pdf', 'rb') as in_file: + parser = PDFParser(in_file) + doc = PDFDocument(parser) + rsrcmgr = PDFResourceManager() + device = TextConverter(rsrcmgr, output_string, laparams=LAParams()) + interpreter = PDFPageInterpreter(rsrcmgr, device) + for page in PDFPage.create_pages(doc): + interpreter.process_page(page) + + print(output_string.getvalue()) + diff --git a/docs/source/tutorials/highlevel.rst b/docs/source/tutorials/highlevel.rst new file mode 100644 index 0000000..15424b9 --- /dev/null +++ b/docs/source/tutorials/highlevel.rst @@ -0,0 +1,67 @@ +.. testsetup:: + + import sys + from pdfminer.high_level import extract_text_to_fp, extract_text + +.. _tutorial_highlevel: + +Get started using the high-level functions +****************************************** + +The high-level API can be used to do common tasks. + +The most simple way to extract text from a PDF is to use +:ref:`api_extract_text`: + +.. doctest:: + + >>> text = extract_text('samples/simple1.pdf') + >>> print(repr(text)) + 'Hello \n\nWorld\n\nWorld\n\nHello \n\nH e l l o \n\nH e l l o \n\nW o r l d\n\nW o r l d\n\n\x0c' + >>> print(text) + ... # doctest: +NORMALIZE_WHITESPACE + Hello + + World + + World + + Hello + + H e l l o + + H e l l o + + W o r l d + + W o r l d + + + +To read text from a PDF and print it on the command line: + +.. doctest:: + + >>> if sys.version_info > (3, 0): + ... from io import StringIO + ... else: + ... from io import BytesIO as StringIO + >>> output_string = StringIO() + >>> with open('samples/simple1.pdf', 'rb') as fin: + ... extract_text_to_fp(fin, output_string) + >>> print(output_string.getvalue().strip()) + Hello WorldHello WorldHello WorldHello World + +Or to convert it to html and use layout analysis: + +.. doctest:: + + >>> if sys.version_info > (3, 0): + ... from io import StringIO + ... else: + ... from io import BytesIO as StringIO + >>> from pdfminer.layout import LAParams + >>> output_string = StringIO() + >>> with open('samples/simple1.pdf', 'rb') as fin: + ... extract_text_to_fp(fin, output_string, laparams=LAParams(), + ... output_type='html', codec=None) diff --git a/docs/source/tutorials/index.rst b/docs/source/tutorials/index.rst new file mode 100644 index 0000000..f1b5b17 --- /dev/null +++ b/docs/source/tutorials/index.rst @@ -0,0 +1,9 @@ +Getting started +*************** + +.. toctree:: + :maxdepth: 2 + + commandline + highlevel + composable diff --git a/docs/style.css b/docs/style.css deleted file mode 100644 index 612e308..0000000 --- a/docs/style.css +++ /dev/null @@ -1,4 +0,0 @@ -blockquote { background: #eeeeee; } -h1 { border-bottom: solid black 2px; } -h2 { border-bottom: solid black 1px; } -.comment { color: darkgreen; } diff --git a/pdfminer/__init__.py b/pdfminer/__init__.py index 181bf7a..d41059a 100644 --- a/pdfminer/__init__.py +++ b/pdfminer/__init__.py @@ -13,7 +13,7 @@ other purposes instead of text analysis. import sys import warnings -__version__ = '20191020' +__version__ = '20191107' if sys.version_info < (3, 0): diff --git a/pdfminer/converter.py b/pdfminer/converter.py index 4e51e37..eaf0520 100644 --- a/pdfminer/converter.py +++ b/pdfminer/converter.py @@ -2,6 +2,7 @@ # -*- coding: utf-8 -*- import logging import re +import sys from .pdfdevice import PDFTextDevice from .pdffont import PDFUnicodeNotDefined from .layout import LTContainer @@ -271,6 +272,8 @@ class HTMLConverter(PDFConverter): def write(self, text): if self.codec: text = text.encode(self.codec) + if sys.version_info < (3, 0): + text = str(text) self.outfp.write(text) return diff --git a/pdfminer/high_level.py b/pdfminer/high_level.py index cdef1e7..17172c5 100644 --- a/pdfminer/high_level.py +++ b/pdfminer/high_level.py @@ -1,56 +1,71 @@ -# -*- coding: utf-8 -*- -""" -Functions that encapsulate "usual" use-cases for pdfminer, for use making -bundled scripts and for using pdfminer as a module for routine tasks. -""" - -import six +"""Functions that can be used for the most common use-cases for pdfminer.six""" + +import logging import sys -from .pdfdocument import PDFDocument -from .pdfparser import PDFParser +import six + +# Conditional import because python 2 is stupid +if sys.version_info > (3, 0): + from io import StringIO +else: + from io import BytesIO as StringIO + from .pdfinterp import PDFResourceManager, PDFPageInterpreter -from .pdfdevice import PDFDevice, TagExtractor +from .pdfdevice import TagExtractor from .pdfpage import PDFPage from .converter import XMLConverter, HTMLConverter, TextConverter -from .cmapdb import CMapDB from .image import ImageWriter +from .layout import LAParams def extract_text_to_fp(inf, outfp, - _py2_no_more_posargs=None, # Bloody Python2 needs a shim output_type='text', codec='utf-8', laparams = None, maxpages=0, page_numbers=None, password="", scale=1.0, rotation=0, layoutmode='normal', output_dir=None, strip_control=False, - debug=False, disable_caching=False, **other): + debug=False, disable_caching=False, **kwargs): """ Parses text from inf-file and writes to outfp file-like object. Takes loads of optional arguments but the defaults are somewhat sane. Beware laparams: Including an empty LAParams is not the same as passing None! Returns nothing, acting as it does on two streams. Use StringIO to get strings. - - output_type: May be 'text', 'xml', 'html', 'tag'. Only 'text' works properly. - codec: Text decoding codec - laparams: An LAParams object from pdfminer.layout. - Default is None but may not layout correctly. - maxpages: How many pages to stop parsing after - page_numbers: zero-indexed page numbers to operate on. - password: For encrypted PDFs, the password to decrypt. - scale: Scale factor - rotation: Rotation factor - layoutmode: Default is 'normal', see pdfminer.converter.HTMLConverter - output_dir: If given, creates an ImageWriter for extracted images. - strip_control: Does what it says on the tin - debug: Output more logging data - disable_caching: Does what it says on the tin + + :param inf: a file-like object to read PDF structure from, such as a + file handler (using the builtin `open()` function) or a `BytesIO`. + :param outfp: a file-like object to write the text to. + :param output_type: May be 'text', 'xml', 'html', 'tag'. Only 'text' works properly. + :param codec: Text decoding codec + :param laparams: An LAParams object from pdfminer.layout. Default is None but may not layout correctly. + :param maxpages: How many pages to stop parsing after + :param page_numbers: zero-indexed page numbers to operate on. + :param password: For encrypted PDFs, the password to decrypt. + :param scale: Scale factor + :param rotation: Rotation factor + :param layoutmode: Default is 'normal', see pdfminer.converter.HTMLConverter + :param output_dir: If given, creates an ImageWriter for extracted images. + :param strip_control: Does what it says on the tin + :param debug: Output more logging data + :param disable_caching: Does what it says on the tin + :param other: + :return: """ + if '_py2_no_more_posargs' in kwargs is not None: + raise DeprecationWarning( + 'The `_py2_no_more_posargs will be removed on January, 2020. At ' + 'that moment pdfminer.six will stop supporting Python 2. Please ' + 'upgrade to Python 3. For more information see ' + 'https://github.com/pdfminer/pdfminer .six/issues/194') + + if debug: + logging.getLogger().setLevel(logging.DEBUG) + if six.PY2 and sys.stdin.encoding: password = password.decode(sys.stdin.encoding) imagewriter = None if output_dir: imagewriter = ImageWriter(output_dir) - + rsrcmgr = PDFResourceManager(caching=not disable_caching) if output_type == 'text': @@ -79,6 +94,44 @@ def extract_text_to_fp(inf, outfp, caching=not disable_caching, check_extractable=True): page.rotate = (page.rotate + rotation) % 360 - interpreter.process_page(page) + interpreter.process_page(page) device.close() + + +def extract_text(pdf_file, password='', page_numbers=None, maxpages=0, + caching=True, codec='utf-8', laparams=None): + """ + Parses and returns the text contained in a PDF file. + Takes loads of optional arguments but the defaults are somewhat sane. + Returns a string containing all of the text extracted. + + :param pdf_file: Path to the PDF file to be worked on + :param password: For encrypted PDFs, the password to decrypt. + :param page_numbers: List of zero-indexed page numbers to extract. + :param maxpages: The maximum number of pages to parse + :param caching: If resources should be cached + :param codec: Text decoding codec + :param laparams: LAParams object from pdfminer.layout. + """ + if laparams is None: + laparams = LAParams() + + with open(pdf_file, "rb") as fp, StringIO() as output_string: + rsrcmgr = PDFResourceManager() + device = TextConverter(rsrcmgr, output_string, codec=codec, + laparams=laparams) + interpreter = PDFPageInterpreter(rsrcmgr, device) + + for page in PDFPage.get_pages( + fp, + page_numbers, + maxpages=maxpages, + password=password, + caching=caching, + check_extractable=True, + ): + interpreter.process_page(page) + + return output_string.getvalue() + diff --git a/pdfminer/image.py b/pdfminer/image.py index 39265fb..c69b700 100644 --- a/pdfminer/image.py +++ b/pdfminer/image.py @@ -1,12 +1,14 @@ -import struct import os import os.path +import struct from io import BytesIO -from .pdftypes import LITERALS_DCT_DECODE + +from .jbig2 import JBIG2StreamReader, JBIG2StreamWriter +from .pdfcolor import LITERAL_DEVICE_CMYK from .pdfcolor import LITERAL_DEVICE_GRAY from .pdfcolor import LITERAL_DEVICE_RGB -from .pdfcolor import LITERAL_DEVICE_CMYK +from .pdftypes import LITERALS_DCT_DECODE, LITERALS_JBIG2_DECODE def align32(x): @@ -57,9 +59,11 @@ class BMPWriter(object): return -## ImageWriter -## class ImageWriter(object): + """Write image to a file + + Supports various image types: JPEG, JBIG2 and bitmaps + """ def __init__(self, outdir): self.outdir = outdir @@ -68,21 +72,15 @@ class ImageWriter(object): return def export_image(self, image): - stream = image.stream - filters = stream.get_filters() (width, height) = image.srcsize - if len(filters) == 1 and filters[0][0] in LITERALS_DCT_DECODE: - ext = '.jpg' - elif (image.bits == 1 or - image.bits == 8 and (LITERAL_DEVICE_RGB in image.colorspace or LITERAL_DEVICE_GRAY in image.colorspace)): - ext = '.%dx%d.bmp' % (width, height) - else: - ext = '.%d.%dx%d.img' % (image.bits, width, height) - name = image.name+ext - path = os.path.join(self.outdir, name) - fp=open(path, 'wb') + + is_jbig2 = self.is_jbig2_image(image) + ext = self._get_image_extension(image, width, height, is_jbig2) + name, path = self._create_unique_image_name(self.outdir, image.name, ext) + + fp = open(path, 'wb') if ext == '.jpg': - raw_data = stream.get_rawdata() + raw_data = image.stream.get_rawdata() if LITERAL_DEVICE_CMYK in image.colorspace: from PIL import Image from PIL import ImageChops @@ -93,9 +91,18 @@ class ImageWriter(object): i.save(fp, 'JPEG') else: fp.write(raw_data) + elif is_jbig2: + input_stream = BytesIO() + input_stream.write(image.stream.get_data()) + input_stream.seek(0) + reader = JBIG2StreamReader(input_stream) + segments = reader.get_segments() + + writer = JBIG2StreamWriter(fp) + writer.write_file(segments) elif image.bits == 1: bmp = BMPWriter(fp, 1, width, height) - data = stream.get_data() + data = image.stream.get_data() i = 0 width = (width+7)//8 for y in range(height): @@ -103,7 +110,7 @@ class ImageWriter(object): i += width elif image.bits == 8 and LITERAL_DEVICE_RGB in image.colorspace: bmp = BMPWriter(fp, 24, width, height) - data = stream.get_data() + data = image.stream.get_data() i = 0 width = width*3 for y in range(height): @@ -111,12 +118,47 @@ class ImageWriter(object): i += width elif image.bits == 8 and LITERAL_DEVICE_GRAY in image.colorspace: bmp = BMPWriter(fp, 8, width, height) - data = stream.get_data() + data = image.stream.get_data() i = 0 for y in range(height): bmp.write_line(y, data[i:i+width]) i += width else: - fp.write(stream.get_data()) + fp.write(image.stream.get_data()) fp.close() return name + + @staticmethod + def is_jbig2_image(image): + filters = image.stream.get_filters() + is_jbig2 = False + for filter_name, params in filters: + if filter_name in LITERALS_JBIG2_DECODE: + is_jbig2 = True + break + return is_jbig2 + + @staticmethod + def _get_image_extension(image, width, height, is_jbig2): + filters = image.stream.get_filters() + if len(filters) == 1 and filters[0][0] in LITERALS_DCT_DECODE: + ext = '.jpg' + elif is_jbig2: + ext = '.jb2' + elif (image.bits == 1 or + image.bits == 8 and (LITERAL_DEVICE_RGB in image.colorspace or LITERAL_DEVICE_GRAY in image.colorspace)): + ext = '.%dx%d.bmp' % (width, height) + else: + ext = '.%d.%dx%d.img' % (image.bits, width, height) + return ext + + @staticmethod + def _create_unique_image_name(dirname, image_name, ext): + name = image_name + ext + path = os.path.join(dirname, name) + img_index = 0 + while os.path.exists(path): + name = '%s.%d%s' % (image_name, img_index, ext) + path = os.path.join(dirname, name) + img_index += 1 + return name, path diff --git a/pdfminer/jbig2.py b/pdfminer/jbig2.py new file mode 100644 index 0000000..39393e5 --- /dev/null +++ b/pdfminer/jbig2.py @@ -0,0 +1,321 @@ +import math +import os +from struct import pack, unpack, calcsize + +# segment structure base +SEG_STRUCT = [ + (">L", "number"), + (">B", "flags"), + (">B", "retention_flags"), + (">B", "page_assoc"), + (">L", "data_length"), +] + +# segment header literals +HEADER_FLAG_DEFERRED = 0b10000000 +HEADER_FLAG_PAGE_ASSOC_LONG = 0b01000000 + +SEG_TYPE_MASK = 0b00111111 + +REF_COUNT_SHORT_MASK = 0b11100000 +REF_COUNT_LONG_MASK = 0x1fffffff +REF_COUNT_LONG = 7 + +DATA_LEN_UNKNOWN = 0xffffffff + +# segment types +SEG_TYPE_IMMEDIATE_GEN_REGION = 38 +SEG_TYPE_END_OF_PAGE = 49 +SEG_TYPE_END_OF_FILE = 50 + +# file literals +FILE_HEADER_ID = b'\x97\x4A\x42\x32\x0D\x0A\x1A\x0A' +FILE_HEAD_FLAG_SEQUENTIAL = 0b00000001 +FILE_HEAD_FLAG_PAGES_UNKNOWN = 0b00000010 + + +def bit_set(bit_pos, value): + return bool((value >> bit_pos) & 1) + + +def check_flag(flag, value): + return bool(flag & value) + + +def masked_value(mask, value): + for bit_pos in range(0, 31): + if bit_set(bit_pos, mask): + return (value & mask) >> bit_pos + + raise Exception("Invalid mask or value") + + +def mask_value(mask, value): + for bit_pos in range(0, 31): + if bit_set(bit_pos, mask): + return (value & (mask >> bit_pos)) << bit_pos + + raise Exception("Invalid mask or value") + + +class JBIG2StreamReader(object): + """Read segments from a JBIG2 byte stream""" + + def __init__(self, stream): + self.stream = stream + + def get_segments(self): + segments = [] + while not self.is_eof(): + segment = {} + for field_format, name in SEG_STRUCT: + field_len = calcsize(field_format) + field = self.stream.read(field_len) + if len(field) < field_len: + segment["_error"] = True + break + value = unpack(field_format, field) + if len(value) == 1: + [value] = value + parser = getattr(self, "parse_%s" % name, None) + if callable(parser): + value = parser(segment, value, field) + segment[name] = value + + if not segment.get("_error"): + segments.append(segment) + return segments + + def is_eof(self): + if self.stream.read(1) == b'': + return True + else: + self.stream.seek(-1, os.SEEK_CUR) + return False + + def parse_flags(self, segment, flags, field): + return { + "deferred": check_flag(HEADER_FLAG_DEFERRED, flags), + "page_assoc_long": check_flag(HEADER_FLAG_PAGE_ASSOC_LONG, flags), + "type": masked_value(SEG_TYPE_MASK, flags) + } + + def parse_retention_flags(self, segment, flags, field): + ref_count = masked_value(REF_COUNT_SHORT_MASK, flags) + retain_segments = [] + ref_segments = [] + + if ref_count < REF_COUNT_LONG: + for bit_pos in range(5): + retain_segments.append(bit_set(bit_pos, flags)) + else: + field += self.stream.read(3) + [ref_count] = unpack(">L", field) + ref_count = masked_value(REF_COUNT_LONG_MASK, ref_count) + ret_bytes_count = int(math.ceil((ref_count + 1) / 8)) + for ret_byte_index in range(ret_bytes_count): + [ret_byte] = unpack(">B", self.stream.read(1)) + for bit_pos in range(7): + retain_segments.append(bit_set(bit_pos, ret_byte)) + + seg_num = segment["number"] + if seg_num <= 256: + ref_format = ">B" + elif seg_num <= 65536: + ref_format = ">I" + else: + ref_format = ">L" + + ref_size = calcsize(ref_format) + + for ref_index in range(ref_count): + ref = self.stream.read(ref_size) + [ref] = unpack(ref_format, ref) + ref_segments.append(ref) + + return { + "ref_count": ref_count, + "retain_segments": retain_segments, + "ref_segments": ref_segments, + } + + def parse_page_assoc(self, segment, page, field): + if segment["flags"]["page_assoc_long"]: + field += self.stream.read(3) + [page] = unpack(">L", field) + return page + + def parse_data_length(self, segment, length, field): + if length: + if (segment["flags"]["type"] == SEG_TYPE_IMMEDIATE_GEN_REGION) \ + and (length == DATA_LEN_UNKNOWN): + + raise NotImplementedError( + "Working with unknown segment length " + "is not implemented yet" + ) + else: + segment["raw_data"] = self.stream.read(length) + + return length + + +class JBIG2StreamWriter(object): + """Write JBIG2 segments to a file in JBIG2 format""" + + def __init__(self, stream): + self.stream = stream + + def write_segments(self, segments, fix_last_page=True): + data_len = 0 + current_page = None + seg_num = None + + for segment in segments: + data = self.encode_segment(segment) + self.stream.write(data) + data_len += len(data) + + seg_num = segment["number"] + + if fix_last_page: + seg_page = segment.get("page_assoc") + + if segment["flags"]["type"] == SEG_TYPE_END_OF_PAGE: + current_page = None + elif seg_page: + current_page = seg_page + + if fix_last_page and current_page and (seg_num is not None): + segment = self.get_eop_segment(seg_num + 1, current_page) + data = self.encode_segment(segment) + self.stream.write(data) + data_len += len(data) + + return data_len + + def write_file(self, segments, fix_last_page=True): + header = FILE_HEADER_ID + header_flags = FILE_HEAD_FLAG_SEQUENTIAL | FILE_HEAD_FLAG_PAGES_UNKNOWN + header += pack(">B", header_flags) + self.stream.write(header) + data_len = len(header) + + data_len += self.write_segments(segments, fix_last_page) + + seg_num = 0 + for segment in segments: + seg_num = segment["number"] + + eof_segment = self.get_eof_segment(seg_num + 1) + data = self.encode_segment(eof_segment) + + self.stream.write(data) + data_len += len(data) + + return data_len + + def encode_segment(self, segment): + data = b'' + for field_format, name in SEG_STRUCT: + value = segment.get(name) + encoder = getattr(self, "encode_%s" % name, None) + if callable(encoder): + field = encoder(value, segment) + else: + field = pack(field_format, value) + data += field + return data + + def encode_flags(self, value, segment): + flags = 0 + if value.get("deferred"): + flags |= HEADER_FLAG_DEFERRED + + if "page_assoc_long" in value: + flags |= HEADER_FLAG_PAGE_ASSOC_LONG \ + if value["page_assoc_long"] else flags + else: + flags |= HEADER_FLAG_PAGE_ASSOC_LONG \ + if segment.get("page", 0) > 255 else flags + + flags |= mask_value(SEG_TYPE_MASK, value["type"]) + + return pack(">B", flags) + + def encode_retention_flags(self, value, segment): + flags = [] + flags_format = ">B" + ref_count = value["ref_count"] + retain_segments = value.get("retain_segments", []) + + if ref_count <= 4: + flags_byte = mask_value(REF_COUNT_SHORT_MASK, ref_count) + for ref_index, ref_retain in enumerate(retain_segments): + flags_byte |= 1 << ref_index + flags.append(flags_byte) + else: + bytes_count = math.ceil((ref_count + 1) / 8) + flags_format = ">L" + ("B" * bytes_count) + flags_dword = mask_value( + REF_COUNT_SHORT_MASK, + REF_COUNT_LONG + ) << 24 + flags.append(flags_dword) + + for byte_index in range(bytes_count): + ret_byte = 0 + ret_part = retain_segments[byte_index * 8:byte_index * 8 + 8] + for bit_pos, ret_seg in enumerate(ret_part): + ret_byte |= 1 << bit_pos if ret_seg else ret_byte + + flags.append(ret_byte) + + ref_segments = value.get("ref_segments", []) + + seg_num = segment["number"] + if seg_num <= 256: + ref_format = "B" + elif seg_num <= 65536: + ref_format = "I" + else: + ref_format = "L" + + for ref in ref_segments: + flags_format += ref_format + flags.append(ref) + + return pack(flags_format, *flags) + + def encode_data_length(self, value, segment): + data = pack(">L", value) + data += segment["raw_data"] + return data + + def get_eop_segment(self, seg_number, page_number): + return { + 'data_length': 0, + 'flags': {'deferred': False, 'type': SEG_TYPE_END_OF_PAGE}, + 'number': seg_number, + 'page_assoc': page_number, + 'raw_data': b'', + 'retention_flags': { + 'ref_count': 0, + 'ref_segments': [], + 'retain_segments': [] + } + } + + def get_eof_segment(self, seg_number): + return { + 'data_length': 0, + 'flags': {'deferred': False, 'type': SEG_TYPE_END_OF_FILE}, + 'number': seg_number, + 'page_assoc': 0, + 'raw_data': b'', + 'retention_flags': { + 'ref_count': 0, + 'ref_segments': [], + 'retain_segments': [] + } + } diff --git a/pdfminer/layout.py b/pdfminer/layout.py index ba9a2bf..8b8e397 100644 --- a/pdfminer/layout.py +++ b/pdfminer/layout.py @@ -1,18 +1,15 @@ -from sortedcontainers import SortedListWithKey +import heapq from .utils import INF from .utils import Plane -from .utils import get_bound -from .utils import uniq -from .utils import fsplit -from .utils import bbox2str -from .utils import matrix2str from .utils import apply_matrix_pt +from .utils import bbox2str +from .utils import fsplit +from .utils import get_bound +from .utils import matrix2str +from .utils import uniq -import six # Python 2+3 compatibility -## IndexAssigner -## class IndexAssigner(object): def __init__(self, index=0): @@ -29,9 +26,33 @@ class IndexAssigner(object): return -## LAParams -## class LAParams(object): + """Parameters for layout analysis + + :param line_overlap: If two characters have more overlap than this they + are considered to be on the same line. The overlap is specified + relative to the minimum height of both characters. + :param char_margin: If two characters are closer together than this + margin they are considered to be part of the same word. If + characters are on the same line but not part of the same word, an + intermediate space is inserted. The margin is specified relative to + the width of the character. + :param word_margin: If two words are are closer together than this + margin they are considered to be part of the same line. A space is + added in between for readability. The margin is specified relative + to the width of the word. + :param line_margin: If two lines are are close together they are + considered to be part of the same paragraph. The margin is + specified relative to the height of a line. + :param boxes_flow: Specifies how much a horizontal and vertical position + of a text matters when determining the order of lines. The value + should be within the range of -1.0 (only horizontal position + matters) to +1.0 (only vertical position matters). + :param detect_vertical: If vertical text should be considered during + layout analysis + :param all_texts: If layout analysis should be performed on text in + figures. + """ def __init__(self, line_overlap=0.5, @@ -55,30 +76,28 @@ class LAParams(object): (self.char_margin, self.line_margin, self.word_margin, self.all_texts)) -## LTItem -## class LTItem(object): + """Interface for things that can be analyzed""" def analyze(self, laparams): """Perform the layout analysis.""" return -## LTText -## class LTText(object): + """Interface for things that have text""" def __repr__(self): return ('<%s %r>' % (self.__class__.__name__, self.get_text())) def get_text(self): + """Text contained in this object""" raise NotImplementedError -## LTComponent -## class LTComponent(LTItem): + """Object with a bounding box""" def __init__(self, bbox): LTItem.__init__(self) @@ -92,10 +111,13 @@ class LTComponent(LTItem): # Disable comparison. def __lt__(self, _): raise ValueError + def __le__(self, _): raise ValueError + def __gt__(self, _): raise ValueError + def __ge__(self, _): raise ValueError @@ -150,9 +172,8 @@ class LTComponent(LTItem): return 0 -## LTCurve -## class LTCurve(LTComponent): + """A generic Bezier curve""" def __init__(self, linewidth, pts, stroke = False, fill = False, evenodd = False, stroking_color = None, non_stroking_color = None): LTComponent.__init__(self, get_bound(pts)) @@ -169,18 +190,22 @@ class LTCurve(LTComponent): return ','.join('%.3f,%.3f' % p for p in self.pts) -## LTLine -## class LTLine(LTCurve): + """A single straight line. + + Could be used for separating text or figures. + """ def __init__(self, linewidth, p0, p1, stroke = False, fill = False, evenodd = False, stroking_color = None, non_stroking_color = None): LTCurve.__init__(self, linewidth, [p0, p1], stroke, fill, evenodd, stroking_color, non_stroking_color) return -## LTRect -## class LTRect(LTCurve): + """A rectangle. + + Could be used for framing another pictures or figures. + """ def __init__(self, linewidth, bbox, stroke = False, fill = False, evenodd = False, stroking_color = None, non_stroking_color = None): (x0, y0, x1, y1) = bbox @@ -188,9 +213,11 @@ class LTRect(LTCurve): return -## LTImage -## class LTImage(LTComponent): + """An image object. + + Embedded images can be in JPEG, Bitmap or JBIG2. + """ def __init__(self, name, stream, bbox): LTComponent.__init__(self, bbox) @@ -211,9 +238,13 @@ class LTImage(LTComponent): bbox2str(self.bbox), self.srcsize)) -## LTAnno -## class LTAnno(LTItem, LTText): + """Actual letter in the text as a Unicode string. + + Note that, while a LTChar object has actual boundaries, LTAnno objects does + not, as these are "virtual" characters, inserted by a layout analyzer + according to the relationship between two characters (e.g. a space). + """ def __init__(self, text): self._text = text @@ -223,9 +254,8 @@ class LTAnno(LTItem, LTText): return self._text -## LTChar -## class LTChar(LTComponent, LTText): + """Actual letter in the text as a Unicode string.""" def __init__(self, matrix, font, fontsize, scaling, rise, text, textwidth, textdisp, ncs, graphicstate): @@ -286,9 +316,8 @@ class LTChar(LTComponent, LTText): return True -## LTContainer -## class LTContainer(LTComponent): + """Object that can be extended and analyzed""" def __init__(self, bbox): LTComponent.__init__(self, bbox) @@ -316,10 +345,7 @@ class LTContainer(LTComponent): return -## LTExpandableContainer -## class LTExpandableContainer(LTContainer): - def __init__(self): LTContainer.__init__(self, (+INF, +INF, -INF, -INF)) return @@ -331,10 +357,7 @@ class LTExpandableContainer(LTContainer): return -## LTTextContainer -## class LTTextContainer(LTExpandableContainer, LTText): - def __init__(self): LTText.__init__(self) LTExpandableContainer.__init__(self) @@ -344,9 +367,12 @@ class LTTextContainer(LTExpandableContainer, LTText): return ''.join(obj.get_text() for obj in self if isinstance(obj, LTText)) -## LTTextLine -## class LTTextLine(LTTextContainer): + """Contains a list of LTChar objects that represent a single text line. + + The characters are aligned either horizontally or vertically, depending on + the text's writing mode. + """ def __init__(self, word_margin): LTTextContainer.__init__(self) @@ -368,7 +394,6 @@ class LTTextLine(LTTextContainer): class LTTextLineHorizontal(LTTextLine): - def __init__(self, word_margin): LTTextLine.__init__(self, word_margin) self._x1 = +INF @@ -394,7 +419,6 @@ class LTTextLineHorizontal(LTTextLine): class LTTextLineVertical(LTTextLine): - def __init__(self, word_margin): LTTextLine.__init__(self, word_margin) self._y0 = -INF @@ -419,12 +443,13 @@ class LTTextLineVertical(LTTextLine): abs(obj.y1-self.y1) < d))] -## LTTextBox -## -## A set of text objects that are grouped within -## a certain rectangular area. -## class LTTextBox(LTTextContainer): + """Represents a group of text chunks in a rectangular area. + + Note that this box is created by geometric analysis and does not necessarily + represents a logical boundary of the text. It contains a list of + LTTextLine objects. + """ def __init__(self): LTTextContainer.__init__(self) @@ -438,7 +463,6 @@ class LTTextBox(LTTextContainer): class LTTextBoxHorizontal(LTTextBox): - def analyze(self, laparams): LTTextBox.analyze(self, laparams) self._objs.sort(key=lambda obj: -obj.y1) @@ -449,7 +473,6 @@ class LTTextBoxHorizontal(LTTextBox): class LTTextBoxVertical(LTTextBox): - def analyze(self, laparams): LTTextBox.analyze(self, laparams) self._objs.sort(key=lambda obj: -obj.x1) @@ -459,10 +482,7 @@ class LTTextBoxVertical(LTTextBox): return 'tb-rl' -## LTTextGroup -## class LTTextGroup(LTTextContainer): - def __init__(self, objs): LTTextContainer.__init__(self) self.extend(objs) @@ -470,7 +490,6 @@ class LTTextGroup(LTTextContainer): class LTTextGroupLRTB(LTTextGroup): - def analyze(self, laparams): LTTextGroup.analyze(self, laparams) # reorder the objects from top-left to bottom-right. @@ -481,7 +500,6 @@ class LTTextGroupLRTB(LTTextGroup): class LTTextGroupTBRL(LTTextGroup): - def analyze(self, laparams): LTTextGroup.analyze(self, laparams) # reorder the objects from top-right to bottom-left. @@ -491,10 +509,7 @@ class LTTextGroupTBRL(LTTextGroup): return -## LTLayoutContainer -## class LTLayoutContainer(LTContainer): - def __init__(self, bbox): LTContainer.__init__(self, bbox) self.groups = None @@ -603,9 +618,22 @@ class LTLayoutContainer(LTContainer): yield box return - # group_textboxes: group textboxes hierarchically. def group_textboxes(self, laparams, boxes): - assert boxes, str((laparams, boxes)) + """Group textboxes hierarchically. + + Get pair-wise distances, via dist func defined below, and then merge from the closest textbox pair. Once + obj1 and obj2 are merged / grouped, the resulting group is considered as a new object, and its distances to + other objects & groups are added to the process queue. + + For performance reason, pair-wise distances and object pair info are maintained in a heap of + (idx, dist, id(obj1), id(obj2), obj1, obj2) tuples. It ensures quick access to the smallest element. Note that + since comparison operators, e.g., __lt__, are disabled for LTComponent, id(obj) has to appear before obj in + element tuples. + + :param laparams: LAParams object. + :param boxes: All textbox objects to be grouped. + :return: a list that has only one element, the final top level textbox. + """ def dist(obj1, obj2): """A distance function between two TextBoxes. @@ -626,8 +654,7 @@ class LTLayoutContainer(LTContainer): return ((x1-x0)*(y1-y0) - obj1.width*obj1.height - obj2.width*obj2.height) def isany(obj1, obj2): - """Check if there's any other object between obj1 and obj2. - """ + """Check if there's any other object between obj1 and obj2.""" x0 = min(obj1.x0, obj2.x0) y0 = min(obj1.y0, obj2.y0) x1 = max(obj1.x1, obj2.x1) @@ -635,39 +662,36 @@ class LTLayoutContainer(LTContainer): objs = set(plane.find((x0, y0, x1, y1))) return objs.difference((obj1, obj2)) - def key_obj(t): - (c,d,_,_) = t - return (c,d) - - dists = SortedListWithKey(key=key_obj) + dists = [] for i in range(len(boxes)): obj1 = boxes[i] for j in range(i+1, len(boxes)): obj2 = boxes[j] - dists.add((0, dist(obj1, obj2), obj1, obj2)) + dists.append((True, dist(obj1, obj2), id(obj1), id(obj2), obj1, obj2)) + heapq.heapify(dists) + plane = Plane(self.bbox) plane.extend(boxes) - while dists: - (c, d, obj1, obj2) = dists.pop(0) - if c == 0 and isany(obj1, obj2): - dists.add((1, d, obj1, obj2)) - continue - if (isinstance(obj1, (LTTextBoxVertical, LTTextGroupTBRL)) or - isinstance(obj2, (LTTextBoxVertical, LTTextGroupTBRL))): - group = LTTextGroupTBRL([obj1, obj2]) - else: - group = LTTextGroupLRTB([obj1, obj2]) - plane.remove(obj1) - plane.remove(obj2) - removed = [obj1, obj2] - to_remove = [ (c,d,obj1,obj2) for (c,d,obj1,obj2) in dists - if (obj1 in removed or obj2 in removed) ] - for r in to_remove: - dists.remove(r) - for other in plane: - dists.add((0, dist(group, other), group, other)) - plane.add(group) - assert len(plane) == 1, str(len(plane)) + done = set() + while len(dists) > 0: + (is_first, d, id1, id2, obj1, obj2) = heapq.heappop(dists) + # Skip objects that are already merged + if (id1 not in done) and (id2 not in done): + if is_first and isany(obj1, obj2): + heapq.heappush(dists, (False, d, id1, id2, obj1, obj2)) + continue + if isinstance(obj1, (LTTextBoxVertical, LTTextGroupTBRL)) or \ + isinstance(obj2, (LTTextBoxVertical, LTTextGroupTBRL)): + group = LTTextGroupTBRL([obj1, obj2]) + else: + group = LTTextGroupLRTB([obj1, obj2]) + plane.remove(obj1) + plane.remove(obj2) + done.update([id1, id2]) + + for other in plane: + heapq.heappush(dists, (False, dist(group, other), id(group), id(other), group, other)) + plane.add(group) return list(plane) def analyze(self, laparams): @@ -701,9 +725,13 @@ class LTLayoutContainer(LTContainer): return -## LTFigure -## class LTFigure(LTLayoutContainer): + """Represents an area used by PDF Form objects. + + PDF Forms can be used to present figures or pictures by embedding yet + another PDF document within a page. Note that LTFigure objects can appear + recursively. + """ def __init__(self, name, bbox, matrix): self.name = name @@ -726,9 +754,12 @@ class LTFigure(LTLayoutContainer): return -## LTPage -## class LTPage(LTLayoutContainer): + """Represents an entire page. + + May contain child objects like LTTextBox, LTFigure, LTImage, LTRect, + LTCurve and LTLine. + """ def __init__(self, pageid, bbox, rotate=0): LTLayoutContainer.__init__(self, bbox) diff --git a/pdfminer/lzw.py b/pdfminer/lzw.py index 078ac04..5b25661 100644 --- a/pdfminer/lzw.py +++ b/pdfminer/lzw.py @@ -5,10 +5,13 @@ import six #Python 2+3 compatibility import logging + +logger = logging.getLogger(__name__) + + class CorruptDataError(Exception): pass - ## LZWDecoder ## class LZWDecoder(object): @@ -90,7 +93,7 @@ class LZWDecoder(object): # just ignore corrupt data and stop yielding there break yield x - logging.debug('nbits=%d, code=%d, output=%r, table=%r' % + logger.debug('nbits=%d, code=%d, output=%r, table=%r' % (self.nbits, code, x, self.table[258:])) return diff --git a/pdfminer/pdfdevice.py b/pdfminer/pdfdevice.py index 54925f1..072980e 100644 --- a/pdfminer/pdfdevice.py +++ b/pdfminer/pdfdevice.py @@ -2,13 +2,13 @@ import six +from . import utils from .pdffont import PDFUnicodeNotDefined -from . import utils -## PDFDevice -## class PDFDevice(object): + """Translate the output of PDFPageInterpreter to the output that is needed + """ def __init__(self, rsrcmgr): self.rsrcmgr = rsrcmgr diff --git a/pdfminer/pdfdocument.py b/pdfminer/pdfdocument.py index 5fb9cce..1c4b276 100644 --- a/pdfminer/pdfdocument.py +++ b/pdfminer/pdfdocument.py @@ -671,7 +671,11 @@ class PDFDocument(object): # can raise PDFObjectNotFound def getobj(self, objid): - assert objid != 0 + """Get object from PDF + + :raises PDFException if PDFDocument is not initialized + :raises PDFObjectNotFound if objid does not exist in PDF + """ if not self.xrefs: raise PDFException('PDFDocument is not initialized') log.debug('getobj: objid=%r', objid) diff --git a/pdfminer/pdfinterp.py b/pdfminer/pdfinterp.py index de54835..0e692e2 100644 --- a/pdfminer/pdfinterp.py +++ b/pdfminer/pdfinterp.py @@ -318,9 +318,8 @@ class PDFContentParser(PSStackParser): return -## Interpreter -## class PDFPageInterpreter(object): + """Processor for the content of a PDF page""" def __init__(self, rsrcmgr, device): self.rsrcmgr = rsrcmgr diff --git a/pdfminer/pdftypes.py b/pdfminer/pdftypes.py index c6e8d86..96e255f 100644 --- a/pdfminer/pdftypes.py +++ b/pdfminer/pdftypes.py @@ -27,7 +27,7 @@ LITERALS_ASCIIHEX_DECODE = (LIT('ASCIIHexDecode'), LIT('AHx')) LITERALS_RUNLENGTH_DECODE = (LIT('RunLengthDecode'), LIT('RL')) LITERALS_CCITTFAX_DECODE = (LIT('CCITTFaxDecode'), LIT('CCF')) LITERALS_DCT_DECODE = (LIT('DCTDecode'), LIT('DCT')) - +LITERALS_JBIG2_DECODE = (LIT('JBIG2Decode'),) ## PDF Objects ## @@ -275,6 +275,8 @@ class PDFStream(PDFObject): # This is probably a JPG stream - it does not need to be decoded twice. # Just return the stream to the user. pass + elif f in LITERALS_JBIG2_DECODE: + pass elif f == LITERAL_CRYPT: # not yet.. raise PDFNotImplementedError('/Crypt filter is unsupported') diff --git a/pdfminer/settings.py b/pdfminer/settings.py index 2dd99c0..810077a 100644 --- a/pdfminer/settings.py +++ b/pdfminer/settings.py @@ -1,8 +1 @@ STRICT = False - -try: - from django.conf import settings - STRICT = getattr(settings, 'PDF_MINER_IS_STRICT', STRICT) -except Exception: - # in case it's not a django project - pass diff --git a/samples/README b/samples/README index e0fa424..8bbfe0c 100644 --- a/samples/README +++ b/samples/README @@ -20,6 +20,17 @@ jo.pdf: (File generated from jo.tex by LaTeX and dvi2pdfm) -- +contrib/matplotlib.pdf + Copyright 2018, James R Barlow + Example file created in matplotlib to add a Type3 font to the samples + Released under the terms of the "LICENSE" file + +-- +nonfree/cmp_itext_logo.pdf + Bruno Lowagie + "iText Logo - Type 3 font" + http://gitlab.itextsupport.com/itext/sandbox/raw/master/cmpfiles/fonts/cmp_itext_logo.pdf + nonfree/dmca.pdf: U.S. Copyright Office The Digital Millenium Copyright Act diff --git a/samples/contrib/matplotlib.pdf b/samples/contrib/matplotlib.pdf new file mode 100644 index 0000000..2f4c0a4 Binary files /dev/null and b/samples/contrib/matplotlib.pdf differ diff --git a/samples/contrib/pdf-with-jbig2.pdf b/samples/contrib/pdf-with-jbig2.pdf new file mode 100644 index 0000000..b110fb4 Binary files /dev/null and b/samples/contrib/pdf-with-jbig2.pdf differ diff --git a/samples/contrib/stamp-no.pdf b/samples/contrib/stamp-no.pdf deleted file mode 100644 index 2dfb7a1..0000000 --- a/samples/contrib/stamp-no.pdf +++ /dev/null @@ -1,9882 +0,0 @@ -%PDF-1.4 % -31 0 obj -<< -/Type /Catalog -/Pages 25 0 R -/Metadata 1 0 R -/OCProperties << /OCGs [ 2 0 R 3 0 R 4 0 R 5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R ] /D << /ON [ 2 0 R 3 0 R 4 0 R 5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R ] /Order [ 13 0 R 8 0 R 12 0 R 11 0 R 2 0 R 10 0 R 4 0 R 6 0 R 14 0 R 9 0 R 5 0 R 7 0 R 3 0 R ] >> >> ->> -endobj -1 0 obj -<>stream - - - - - application/pdf - - 2015-09-10T13:09:30-7:00 - 2015-09-10T13:09:30-7:00 - 2015-09-10T13:09:30-7:00 - e55459e1-81e6-4e9f-bf27-4c718ad41439 - 8212233c-9ebe-4309-af3e-9e4687ec7c5b - - - - - - - - - - - - - - - - - - - - - - - - - -endstream -endobj -16 0 obj -<> -endobj -17 0 obj -<>stream -1 J -1 j -0 w -0.027451 0 0 RG -0.027451 0 0 rg -q -0 0 m -595 0 l -595 842 l -0 842 l -h -W -n -0.12 0 0 0.12 0 0 cm -0 0 0 RG -0 0 0 rg -0.708661 w -/OC /OC0 BDC -3280 3308 m -3241 3308 l -S -3231 3308 m -3221 3308 l -S -3210 3308 m -3159 3308 l -S -3149 3308 m -3138 3308 l -S -3128 3308 m -3077 3308 l -S -3067 3308 m -3056 3308 l -S -3046 3308 m -2995 3308 l -S -2985 3308 m -2974 3308 l -S -2964 3308 m -2913 3308 l -S -2902 3308 m -2892 3308 l -S -2882 3308 m -2831 3308 l -S -2820 3308 m -2810 3308 l -S -2800 3308 m -2748 3308 l -S -2738 3308 m -2728 3308 l -S -2718 3308 m -2666 3308 l -S -2656 3308 m -2646 3308 l -S -2636 3308 m -2584 3308 l -S -2574 3308 m -2564 3308 l -S -2553 3308 m -2502 3308 l -S -2492 3308 m -2482 3308 l -S -2471 3308 m -2420 3308 l -S -2410 3308 m -2399 3308 l -S -2389 3308 m -2338 3308 l -S -2328 3308 m -2317 3308 l -S -2307 3308 m -2256 3308 l -S -2245 3308 m -2235 3308 l -S -2225 3308 m -2186 3308 l -S -2186 3308 m -2186 3363 l -S -2186 3373 m -2186 3383 l -S -2186 3393 m -2186 3445 l -S -2186 3455 m -2186 3465 l -S -2186 3475 m -2186 3527 l -S -2186 3537 m -2186 3547 l -S -2186 3558 m -2186 3609 l -S -2186 3619 m -2186 3629 l -S -2186 3640 m -2186 3691 l -S -2186 3701 m -2186 3712 l -S -2186 3722 m -2186 3773 l -S -2186 3783 m -2186 3794 l -S -2186 3804 m -2186 3858 l -S -2186 3858 m -2225 3858 l -S -2235 3858 m -2245 3858 l -S -2256 3858 m -2307 3858 l -S -2317 3858 m -2328 3858 l -S -2338 3858 m -2389 3858 l -S -2399 3858 m -2410 3858 l -S -2420 3858 m -2471 3858 l -S -2482 3858 m -2492 3858 l -S -2502 3858 m -2553 3858 l -S -2564 3858 m -2574 3858 l -S -2584 3858 m -2636 3858 l -S -2646 3858 m -2656 3858 l -S -2666 3858 m -2718 3858 l -S -2728 3858 m -2738 3858 l -S -2748 3858 m -2800 3858 l -S -2810 3858 m -2820 3858 l -S -2831 3858 m -2882 3858 l -S -2892 3858 m -2902 3858 l -S -2913 3858 m -2964 3858 l -S -2974 3858 m -2985 3858 l -S -2995 3858 m -3046 3858 l -S -3056 3858 m -3067 3858 l -S -3077 3858 m -3128 3858 l -S -3138 3858 m -3149 3858 l -S -3159 3858 m -3210 3858 l -S -3221 3858 m -3231 3858 l -S -3241 3858 m -3280 3858 l -S -1 0 1 RG -1 0 1 rg -EMC -/OC /OC1 BDC -2750 3148 m -2750 3025 l -S -2547 3025 m -2547 3148 l -S -2750 3148 m -2547 3148 l -S -2547 3025 m -2750 3025 l -S -0 1 1 RG -0 1 1 rg -EMC -/OC /OC2 BDC -2648 3025 m -2649 3025 l -2649 3000 l -2648 3000 l -f -2648 3025 m -2649 3025 l -2649 3025 l -2648 3025 l -f -2648 3025 m -2649 3025 l -2649 3000 l -2648 3000 l -f -2649 3000 m -2648 3000 l -2648 3000 l -2649 3000 l -f -2648 3025 m -2648 3000 l -2648 3000 l -2648 3025 l -f -2649 3025 m -2649 3000 l -2649 3000 l -2649 3025 l -f -2648 3172 m -2649 3172 l -2649 3148 l -2648 3148 l -f -2648 3172 m -2649 3172 l -2649 3172 l -2648 3172 l -f -2648 3172 m -2649 3172 l -2649 3148 l -2648 3148 l -f -2649 3148 m -2648 3148 l -2648 3148 l -2649 3148 l -f -2648 3172 m -2648 3148 l -2648 3148 l -2648 3172 l -f -2649 3172 m -2649 3148 l -2649 3148 l -2649 3172 l -f -0 0 0 RG -0 0 0 rg -EMC -/OC /OC3 BDC -2652 3200 m -2645 3206 l -S -2652 3195 m -2645 3201 l -S -2652 3190 m -2645 3196 l -S -2648 3188 m -2648 3207 l -S -2648 3188 m -2658 3172 l -S -2658 3172 m -2638 3172 l -S -2638 3172 m -2648 3188 l -S -2648 3188 m -2632 3178 l -S -2632 3178 m -2632 3198 l -S -2632 3198 m -2648 3188 l -S -1 0.498039 0 RG -1 0.498039 0 rg -EMC -/OC /OC4 BDC -2811 3086 m -2854 3086 l -S -2950 3086 m -2950 3575 l -S -2995 3575 m -2995 3641 l -S -2886 3086 m -2950 3086 l -S -2871 3641 m -2871 3596 l -S -2871 3596 m -2995 3596 l -S -2242 3575 m -2242 3283 l -S -2539 3514 m -2605 3514 l -S -0 0 0 RG -0 0 0 rg -EMC -/OC /OC3 BDC -2747 3618 m -2773 3575 l -S -2773 3618 m -2747 3618 l -S -2784 3599 m -2784.156922 3605.322413 2779.561496 3609.917839 2773.892751 3609.917839 c -2768.224007 3609.917839 2763.628581 3605.322413 2763.628581 3599.653668 c -S -2784 3599 m -2763 3599 l -S -2790 3584 m -2757 3565 l -S -2757 3584 m -2790 3565 l -S -2773 3575 m -2773 3599 l -S -2790 3565 m -2790 3584 l -S -2773 3609 m -2773 3618 l -S -2757 3565 m -2757 3584 l -S -1 0.498039 0 RG -1 0.498039 0 rg -EMC -/OC /OC4 BDC -2757 3575 m -2628 3575 l -S -2615 3575 m -2471 3575 l -S -2438 3575 m -1801 3575 l -S -0 0 0 RG -0 0 0 rg -EMC -/OC /OC3 BDC -2242 3267 m -2220 3267 l -S -1 0.498039 0 RG -1 0.498039 0 rg -EMC -/OC /OC4 BDC -2337 3575 m -2337 3621 l -S -0 0 0 RG -0 0 0 rg -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 2608.90209 3314.112801 Tm -/T3romansHorzN0 1.285714 Tf -(\000\001\002\003\004\005\006\007\001\003\010\003\000\011\001\012\013\010\014\000\001\007\003) Tj -ET -EMC -/OC /OC3 BDC -3072 3584 m -3039 3565 l -S -3039 3565 m -3039 3584 l -S -3072 3565 m -3072 3584 l -S -3050 3573 m -3052 3569 l -3039 3565 l -3039 3565 l -f -3154 3584 m -3121 3565 l -S -3121 3565 m -3121 3584 l -S -3154 3565 m -3154 3584 l -S -3131 3573 m -3134 3569 l -3121 3565 l -3121 3565 l -f -3271 3584 m -3280 3584 l -S -3271 3565 m -3271 3584 l -S -3271 3565 m -3280 3565 l -S -1 0.498039 0 RG -1 0.498039 0 rg -EMC -/OC /OC4 BDC -3271 3575 m -3235 3575 l -S -3202 3575 m -3154 3575 l -S -3121 3575 m -3072 3575 l -S -3039 3575 m -2790 3575 l -S -0 0 0 RG -0 0 0 rg -EMC -/OC /OC3 BDC -2481 4229 m -2481 4150 l -2635 4150 l -2635 4229 l -S -0 0 1 RG -0 0 1 rg -EMC -/OC /OC6 BDC -2586 3819 m -2595 3819 l -S -2601 3819 m -2611 3819 l -S -2616 3819 m -2626 3819 l -S -2631 3819 m -2642 3819 l -S -2647 3819 m -2657 3819 l -S -2662 3819 m -2672 3819 l -S -2678 3819 m -2688 3819 l -S -2693 3819 m -2703 3819 l -S -2708 3819 m -2719 3819 l -S -2724 3819 m -2734 3819 l -S -2739 3819 m -2749 3819 l -S -2755 3819 m -2765 3819 l -S -2770 3819 m -2780 3819 l -S -2785 3819 m -2796 3819 l -S -2801 3819 m -2811 3819 l -S -2816 3819 m -2826 3819 l -S -2832 3819 m -2842 3819 l -S -2847 3819 m -2857 3819 l -S -2862 3819 m -2873 3819 l -S -2878 3819 m -2888 3819 l -S -2893 3819 m -2903 3819 l -S -2908 3819 m -2919 3819 l -S -2924 3819 m -2934 3819 l -S -2939 3819 m -2950 3819 l -S -2955 3819 m -2965 3819 l -S -2970 3819 m -2980 3819 l -S -2985 3819 m -2995 3819 l -S -2995 3819 m -2995 3814 l -S -2995 3809 m -2995 3799 l -S -2995 3794 m -2995 3783 l -S -2995 3778 m -2995 3773 l -S -0 1 0 RG -0 1 0 rg -EMC -/OC /OC7 BDC -1806 3850 m -1766 3850 l -S -0 0 0 RG -0 0 0 rg -EMC -/OC /OC3 BDC -1756 4009 m -1776 4042 l -S -1776 4042 m -1756 4042 l -S -1776 4009 m -1756 4009 l -S -0 J -1 j -4.105668 w -1766 4024 m -1767.954835 4024.358348 1768.87392 4025.277433 1768.87392 4026.411182 c -1768.87392 4027.544931 1767.954835 4028.464017 1766.821086 4028.464017 c -S -1 J -1 j -0.708661 w -0 J -1 j -4.105668 w -1766 4028 m -1765.687337 4028.464017 1764.768251 4027.544931 1764.768251 4026.411182 c -1764.768251 4025.277433 1765.687337 4024.358348 1766.821086 4024.358348 c -S -1 J -1 j -0.708661 w -0 1 0 RG -0 1 0 rg -0.708661 w -EMC -/OC /OC7 BDC -1766 4101 m -1766 4099 l -1075 4099 l -1073 4101 l -f -1766 4101 m -1766 4099 l -1766 4099 l -1766 4101 l -f -1766 4101 m -1766 4099 l -1075 4099 l -1073 4101 l -f -1075 4099 m -1073 4101 l -1073 4101 l -1075 4099 l -f -1766 4101 m -1073 4101 l -1073 4101 l -1766 4101 l -f -1766 4099 m -1075 4099 l -1075 4099 l -1766 4099 l -f -1073 4101 m -1075 4099 l -1075 3586 l -1073 3586 l -f -1073 4101 m -1075 4099 l -1075 4099 l -1073 4101 l -f -1073 4101 m -1075 4099 l -1075 3586 l -1073 3586 l -f -1075 3586 m -1073 3586 l -1073 3586 l -1075 3586 l -f -1073 4101 m -1073 3586 l -1073 3586 l -1073 4101 l -f -1075 4099 m -1075 3586 l -1075 3586 l -1075 4099 l -f -1073 3553 m -1075 3553 l -1075 3080 l -1073 3080 l -f -1073 3553 m -1075 3553 l -1075 3553 l -1073 3553 l -f -1073 3553 m -1075 3553 l -1075 3080 l -1073 3080 l -f -1075 3080 m -1073 3080 l -1073 3080 l -1075 3080 l -f -1073 3553 m -1073 3080 l -1073 3080 l -1073 3553 l -f -1075 3553 m -1075 3080 l -1075 3080 l -1075 3553 l -f -0 0 0 RG -0 0 0 rg -EMC -/OC /OC3 BDC -1791 3585 m -1791 3564 l -S -1791 3564 m -1797.105683 3564.736743 1801.701109 3569.332168 1801.701109 3575.000913 c -1801.701109 3580.669658 1797.105683 3585.265084 1791.436938 3585.265084 c -S -1776 3558 m -1756 3591 l -S -1776 3591 m -1756 3558 l -S -1756 3591 m -1776 3591 l -S -1766 3575 m -1791 3575 l -S -1756 3558 m -1776 3558 l -S -1756 3558 m -1724 3525 l -S -1 0 0 RG -1 0 0 rg -EMC -/OC /OC8 BDC -1765 3550 m -1768 3550 l -1768 3078 l -1765 3081 l -f -1765 3550 m -1768 3550 l -1768 3550 l -1765 3550 l -f -1765 3550 m -1768 3550 l -1768 3078 l -1765 3081 l -f -1768 3078 m -1765 3081 l -1765 3081 l -1768 3078 l -f -1765 3550 m -1765 3081 l -1765 3081 l -1765 3550 l -f -1768 3550 m -1768 3078 l -1768 3078 l -1768 3550 l -f -1765 3081 m -1768 3078 l -1499 3078 l -1499 3081 l -f -1765 3081 m -1768 3078 l -1768 3078 l -1765 3081 l -f -1765 3081 m -1768 3078 l -1499 3078 l -1499 3081 l -f -1499 3078 m -1499 3081 l -1499 3081 l -1499 3078 l -f -1765 3081 m -1499 3081 l -1499 3081 l -1765 3081 l -f -1768 3078 m -1499 3078 l -1499 3078 l -1768 3078 l -f -1466 3081 m -1466 3078 l -896 3078 l -896 3081 l -f -1466 3081 m -1466 3078 l -1466 3078 l -1466 3081 l -f -1466 3081 m -1466 3078 l -896 3078 l -896 3081 l -f -896 3078 m -896 3081 l -896 3081 l -896 3078 l -f -1466 3081 m -896 3081 l -896 3081 l -1466 3081 l -f -1466 3078 m -896 3078 l -896 3078 l -1466 3078 l -f -855 3081 m -855 3078 l -641 3078 l -641 3081 l -f -855 3081 m -855 3078 l -855 3078 l -855 3081 l -f -855 3081 m -855 3078 l -641 3078 l -641 3081 l -f -641 3078 m -641 3081 l -641 3081 l -641 3078 l -f -855 3081 m -641 3081 l -641 3081 l -855 3081 l -f -855 3078 m -641 3078 l -641 3078 l -855 3078 l -f -625 3081 m -625 3078 l -569 3078 l -569 3081 l -f -625 3081 m -625 3078 l -625 3078 l -625 3081 l -f -625 3081 m -625 3078 l -569 3078 l -569 3081 l -f -569 3078 m -569 3081 l -569 3081 l -569 3078 l -f -625 3081 m -569 3081 l -569 3081 l -625 3081 l -f -625 3078 m -569 3078 l -569 3078 l -625 3078 l -f -1765 4001 m -1768 4001 l -1768 3599 l -1765 3599 l -f -1765 4001 m -1768 4001 l -1768 4001 l -1765 4001 l -f -1765 4001 m -1768 4001 l -1768 3599 l -1765 3599 l -f -1768 3599 m -1765 3599 l -1765 3599 l -1768 3599 l -f -1765 4001 m -1765 3599 l -1765 3599 l -1765 4001 l -f -1768 4001 m -1768 3599 l -1768 3599 l -1768 4001 l -f -0 0 0 RG -0 0 0 rg -EMC -/OC /OC0 BDC -859 4229 m -905 4229 l -S -915 4229 m -925 4229 l -S -936 4229 m -987 4229 l -S -997 4229 m -1008 4229 l -S -1018 4229 m -1069 4229 l -S -1079 4229 m -1090 4229 l -S -1100 4229 m -1151 4229 l -S -1162 4229 m -1172 4229 l -S -1182 4229 m -1233 4229 l -S -1244 4229 m -1254 4229 l -S -1264 4229 m -1315 4229 l -S -1326 4229 m -1336 4229 l -S -1346 4229 m -1398 4229 l -S -1408 4229 m -1418 4229 l -S -1428 4229 m -1480 4229 l -S -1490 4229 m -1500 4229 l -S -1510 4229 m -1562 4229 l -S -1572 4229 m -1582 4229 l -S -1593 4229 m -1644 4229 l -S -1654 4229 m -1664 4229 l -S -1675 4229 m -1726 4229 l -S -1736 4229 m -1747 4229 l -S -1757 4229 m -1808 4229 l -S -1818 4229 m -1829 4229 l -S -1839 4229 m -1890 4229 l -S -1901 4229 m -1911 4229 l -S -1921 4229 m -1972 4229 l -S -1983 4229 m -1993 4229 l -S -2003 4229 m -2054 4229 l -S -2065 4229 m -2075 4229 l -S -2085 4229 m -2137 4229 l -S -2147 4229 m -2157 4229 l -S -2167 4229 m -2219 4229 l -S -2229 4229 m -2239 4229 l -S -2250 4229 m -2301 4229 l -S -2311 4229 m -2321 4229 l -S -2332 4229 m -2383 4229 l -S -2393 4229 m -2403 4229 l -S -2414 4229 m -2465 4229 l -S -2475 4229 m -2486 4229 l -S -2496 4229 m -2547 4229 l -S -2557 4229 m -2568 4229 l -S -2578 4229 m -2629 4229 l -S -2640 4229 m -2650 4229 l -S -2660 4229 m -2711 4229 l -S -2722 4229 m -2732 4229 l -S -2742 4229 m -2794 4229 l -S -2804 4229 m -2814 4229 l -S -2824 4229 m -2876 4229 l -S -2886 4229 m -2896 4229 l -S -2906 4229 m -2958 4229 l -S -2968 4229 m -2978 4229 l -S -2989 4229 m -3040 4229 l -S -3050 4229 m -3060 4229 l -S -3071 4229 m -3122 4229 l -S -3132 4229 m -3142 4229 l -S -3153 4229 m -3204 4229 l -S -3214 4229 m -3225 4229 l -S -3235 4229 m -3280 4229 l -S -3280 4229 m -3280 4179 l -S -3280 4168 m -3280 4158 l -S -3280 4148 m -3280 4097 l -S -3280 4086 m -3280 4076 l -S -3280 4066 m -3280 4014 l -S -3280 4004 m -3280 3994 l -S -3280 3984 m -3280 3932 l -S -3280 3922 m -3280 3912 l -S -3280 3902 m -3280 3850 l -S -3280 3840 m -3280 3830 l -S -3280 3819 m -3280 3768 l -S -3280 3758 m -3280 3748 l -S -3280 3737 m -3280 3686 l -S -3280 3676 m -3280 3665 l -S -3280 3655 m -3280 3604 l -S -3280 3594 m -3280 3583 l -S -3280 3573 m -3280 3522 l -S -3280 3512 m -3280 3501 l -S -3280 3491 m -3280 3440 l -S -3280 3429 m -3280 3419 l -S -3280 3409 m -3280 3358 l -S -3280 3347 m -3280 3337 l -S -3280 3327 m -3280 3275 l -S -3280 3265 m -3280 3255 l -S -3280 3245 m -3280 3193 l -S -3280 3183 m -3280 3173 l -S -3280 3163 m -3280 3111 l -S -3280 3101 m -3280 3091 l -S -3280 3080 m -3280 3029 l -S -3280 3019 m -3280 3009 l -S -3280 2998 m -3280 2948 l -S -3280 2948 m -3235 2948 l -S -3225 2948 m -3214 2948 l -S -3204 2948 m -3153 2948 l -S -3142 2948 m -3132 2948 l -S -3122 2948 m -3071 2948 l -S -3060 2948 m -3050 2948 l -S -3040 2948 m -2989 2948 l -S -2978 2948 m -2968 2948 l -S -2958 2948 m -2906 2948 l -S -2896 2948 m -2886 2948 l -S -2876 2948 m -2824 2948 l -S -2814 2948 m -2804 2948 l -S -2794 2948 m -2742 2948 l -S -2732 2948 m -2722 2948 l -S -2711 2948 m -2660 2948 l -S -2650 2948 m -2640 2948 l -S -2629 2948 m -2578 2948 l -S -2568 2948 m -2557 2948 l -S -2547 2948 m -2496 2948 l -S -2486 2948 m -2475 2948 l -S -2465 2948 m -2414 2948 l -S -2403 2948 m -2393 2948 l -S -2383 2948 m -2332 2948 l -S -2321 2948 m -2311 2948 l -S -2301 2948 m -2250 2948 l -S -2239 2948 m -2229 2948 l -S -2219 2948 m -2167 2948 l -S -2157 2948 m -2147 2948 l -S -2137 2948 m -2085 2948 l -S -2075 2948 m -2065 2948 l -S -2054 2948 m -2003 2948 l -S -1993 2948 m -1983 2948 l -S -1972 2948 m -1921 2948 l -S -1911 2948 m -1901 2948 l -S -1890 2948 m -1839 2948 l -S -1829 2948 m -1818 2948 l -S -1808 2948 m -1757 2948 l -S -1747 2948 m -1736 2948 l -S -1726 2948 m -1675 2948 l -S -1664 2948 m -1654 2948 l -S -1644 2948 m -1593 2948 l -S -1582 2948 m -1572 2948 l -S -1562 2948 m -1510 2948 l -S -1500 2948 m -1490 2948 l -S -1480 2948 m -1428 2948 l -S -1418 2948 m -1408 2948 l -S -1398 2948 m -1346 2948 l -S -1336 2948 m -1326 2948 l -S -1315 2948 m -1264 2948 l -S -1254 2948 m -1244 2948 l -S -1233 2948 m -1182 2948 l -S -1172 2948 m -1162 2948 l -S -1151 2948 m -1100 2948 l -S -1090 2948 m -1079 2948 l -S -1069 2948 m -1018 2948 l -S -1008 2948 m -997 2948 l -S -987 2948 m -936 2948 l -S -925 2948 m -915 2948 l -S -905 2948 m -859 2948 l -S -859 2948 m -859 2998 l -S -859 3009 m -859 3019 l -S -859 3029 m -859 3080 l -S -859 3091 m -859 3101 l -S -859 3111 m -859 3163 l -S -859 3173 m -859 3183 l -S -859 3193 m -859 3245 l -S -859 3255 m -859 3265 l -S -859 3275 m -859 3327 l -S -859 3337 m -859 3347 l -S -859 3358 m -859 3409 l -S -859 3419 m -859 3429 l -S -859 3440 m -859 3491 l -S -859 3501 m -859 3512 l -S -859 3522 m -859 3573 l -S -859 3583 m -859 3594 l -S -859 3604 m -859 3655 l -S -859 3665 m -859 3676 l -S -859 3686 m -859 3737 l -S -859 3748 m -859 3758 l -S -859 3768 m -859 3819 l -S -859 3830 m -859 3840 l -S -859 3850 m -859 3902 l -S -859 3912 m -859 3922 l -S -859 3932 m -859 3984 l -S -859 3994 m -859 4004 l -S -859 4014 m -859 4066 l -S -859 4076 m -859 4086 l -S -859 4097 m -859 4148 l -S -859 4158 m -859 4168 l -S -859 4179 m -859 4229 l -S -0 0 1 RG -0 0 1 rg -EMC -/OC /OC6 BDC -2548 3973 m -2548 3982 l -S -2548 3987 m -2548 3997 l -S -2548 4003 m -2548 4013 l -S -2548 4018 m -2548 4028 l -S -2548 4033 m -2548 4044 l -S -2548 4049 m -2548 4059 l -S -2548 4064 m -2548 4074 l -S -2548 4080 m -2548 4090 l -S -2548 4095 m -2548 4105 l -S -2548 4110 m -2548 4121 l -S -2548 4126 m -2548 4136 l -S -2548 4141 m -2548 4150 l -S -1866 4026 m -1872 4026 l -S -1877 4026 m -1887 4026 l -S -1892 4026 m -1903 4026 l -S -1908 4026 m -1918 4026 l -S -1923 4026 m -1933 4026 l -S -1939 4026 m -1949 4026 l -S -1954 4026 m -1964 4026 l -S -1969 4026 m -1980 4026 l -S -1985 4026 m -1995 4026 l -S -2000 4026 m -2010 4026 l -S -2016 4026 m -2026 4026 l -S -2031 4026 m -2041 4026 l -S -2046 4026 m -2057 4026 l -S -2062 4026 m -2072 4026 l -S -2077 4026 m -2087 4026 l -S -2092 4026 m -2103 4026 l -S -2108 4026 m -2118 4026 l -S -2123 4026 m -2134 4026 l -S -2139 4026 m -2149 4026 l -S -2154 4026 m -2164 4026 l -S -2169 4026 m -2180 4026 l -S -2185 4026 m -2195 4026 l -S -2200 4026 m -2211 4026 l -S -2216 4026 m -2226 4026 l -S -2231 4026 m -2241 4026 l -S -2246 4026 m -2257 4026 l -S -2262 4026 m -2272 4026 l -S -2277 4026 m -2288 4026 l -S -2293 4026 m -2303 4026 l -S -2308 4026 m -2318 4026 l -S -2323 4026 m -2334 4026 l -S -2339 4026 m -2349 4026 l -S -2354 4026 m -2364 4026 l -S -2370 4026 m -2380 4026 l -S -2385 4026 m -2395 4026 l -S -2400 4026 m -2411 4026 l -S -2416 4026 m -2426 4026 l -S -2431 4026 m -2441 4026 l -S -2447 4026 m -2457 4026 l -S -2462 4026 m -2472 4026 l -S -2477 4026 m -2488 4026 l -S -2493 4026 m -2503 4026 l -S -2508 4026 m -2518 4026 l -S -2524 4026 m -2530 4026 l -S -1455 3973 m -1465 3973 l -S -1471 3973 m -1481 3973 l -S -1486 3973 m -1496 3973 l -S -1501 3973 m -1512 3973 l -S -1517 3973 m -1527 3973 l -S -1532 3973 m -1542 3973 l -S -1547 3973 m -1558 3973 l -S -1563 3973 m -1573 3973 l -S -1578 3973 m -1589 3973 l -S -1594 3973 m -1604 3973 l -S -1609 3973 m -1619 3973 l -S -1624 3973 m -1635 3973 l -S -1640 3973 m -1650 3973 l -S -1655 3973 m -1666 3973 l -S -1671 3973 m -1681 3973 l -S -1686 3973 m -1696 3973 l -S -1701 3973 m -1712 3973 l -S -1717 3973 m -1727 3973 l -S -1732 3973 m -1743 3973 l -S -1748 3973 m -1758 3973 l -S -1775 3973 m -1782 3973 l -S -1787 3973 m -1797 3973 l -S -1802 3973 m -1812 3973 l -S -1818 3973 m -1828 3973 l -S -1833 3973 m -1843 3973 l -S -1848 3973 m -1859 3973 l -S -1864 3973 m -1874 3973 l -S -1879 3973 m -1889 3973 l -S -1895 3973 m -1905 3973 l -S -1910 3973 m -1920 3973 l -S -1925 3973 m -1936 3973 l -S -1941 3973 m -1951 3973 l -S -1956 3973 m -1966 3973 l -S -1972 3973 m -1982 3973 l -S -1987 3973 m -1997 3973 l -S -2002 3973 m -2013 3973 l -S -2018 3973 m -2028 3973 l -S -2033 3973 m -2043 3973 l -S -2049 3973 m -2059 3973 l -S -2064 3973 m -2074 3973 l -S -2079 3973 m -2090 3973 l -S -2095 3973 m -2105 3973 l -S -2110 3973 m -2120 3973 l -S -2125 3973 m -2136 3973 l -S -2141 3973 m -2151 3973 l -S -2156 3973 m -2167 3973 l -S -2172 3973 m -2182 3973 l -S -2187 3973 m -2197 3973 l -S -2202 3973 m -2213 3973 l -S -2218 3973 m -2228 3973 l -S -2233 3973 m -2244 3973 l -S -2249 3973 m -2259 3973 l -S -2264 3973 m -2274 3973 l -S -2279 3973 m -2290 3973 l -S -2295 3973 m -2305 3973 l -S -2310 3973 m -2321 3973 l -S -2326 3973 m -2336 3973 l -S -2341 3973 m -2351 3973 l -S -2356 3973 m -2367 3973 l -S -2372 3973 m -2382 3973 l -S -2387 3973 m -2398 3973 l -S -2403 3973 m -2413 3973 l -S -2418 3973 m -2428 3973 l -S -2433 3973 m -2444 3973 l -S -2449 3973 m -2459 3973 l -S -2464 3973 m -2474 3973 l -S -2480 3973 m -2490 3973 l -S -2495 3973 m -2505 3973 l -S -2510 3973 m -2521 3973 l -S -2526 3973 m -2536 3973 l -S -2541 3973 m -2548 3973 l -S -2530 4026 m -2530 4032 l -S -2530 4037 m -2530 4047 l -S -2530 4052 m -2530 4063 l -S -2530 4068 m -2530 4078 l -S -2530 4083 m -2530 4093 l -S -2530 4099 m -2530 4109 l -S -2530 4114 m -2530 4124 l -S -2530 4129 m -2530 4140 l -S -2530 4145 m -2530 4150 l -S -2567 3819 m -2567 3828 l -S -2567 3834 m -2567 3844 l -S -2567 3849 m -2567 3859 l -S -2567 3864 m -2567 3875 l -S -2567 3880 m -2567 3890 l -S -2567 3895 m -2567 3905 l -S -2567 3911 m -2567 3921 l -S -2567 3926 m -2567 3936 l -S -2567 3941 m -2567 3952 l -S -2567 3957 m -2567 3967 l -S -2567 3972 m -2567 3982 l -S -2567 3988 m -2567 3998 l -S -2567 4003 m -2567 4013 l -S -2567 4018 m -2567 4029 l -S -2567 4034 m -2567 4044 l -S -2567 4049 m -2567 4059 l -S -2567 4064 m -2567 4075 l -S -2567 4080 m -2567 4090 l -S -2567 4095 m -2567 4106 l -S -2567 4111 m -2567 4121 l -S -2567 4126 m -2567 4136 l -S -2567 4141 m -2567 4150 l -S -2586 3819 m -2586 3828 l -S -2586 3834 m -2586 3844 l -S -2586 3849 m -2586 3859 l -S -2586 3864 m -2586 3875 l -S -2586 3880 m -2586 3890 l -S -2586 3895 m -2586 3905 l -S -2586 3911 m -2586 3921 l -S -2586 3926 m -2586 3936 l -S -2586 3941 m -2586 3952 l -S -2586 3957 m -2586 3967 l -S -2586 3972 m -2586 3982 l -S -2586 3988 m -2586 3998 l -S -2586 4003 m -2586 4013 l -S -2586 4018 m -2586 4029 l -S -2586 4034 m -2586 4044 l -S -2586 4049 m -2586 4059 l -S -2586 4064 m -2586 4075 l -S -2586 4080 m -2586 4090 l -S -2586 4095 m -2586 4106 l -S -2586 4111 m -2586 4121 l -S -2586 4126 m -2586 4136 l -S -2586 4141 m -2586 4150 l -S -1 0.498039 0 RG -1 0.498039 0 rg -EMC -/OC /OC4 BDC -2237 3554 m -2248 3565 l -S -2237 3548 m -2248 3559 l -S -2237 3507 m -2248 3518 l -S -2237 3501 m -2248 3511 l -S -2237 3460 m -2248 3470 l -S -2237 3453 m -2248 3464 l -S -2237 3412 m -2248 3423 l -S -2237 3406 m -2248 3417 l -S -2237 3365 m -2248 3376 l -S -2237 3359 m -2248 3370 l -S -2237 3318 m -2248 3329 l -S -2237 3312 m -2248 3323 l -S -2638 3514 m -2702 3514 l -S -2559 3508 m -2570 3519 l -S -2565 3508 m -2576 3519 l -S -2658 3508 m -2669 3519 l -S -2664 3508 m -2675 3519 l -S -3019 3569 m -3030 3580 l -S -3013 3569 m -3024 3580 l -S -2972 3569 m -2983 3580 l -S -2966 3569 m -2976 3580 l -S -2924 3569 m -2935 3580 l -S -2918 3569 m -2929 3580 l -S -2877 3569 m -2888 3580 l -S -2871 3569 m -2882 3580 l -S -2830 3569 m -2841 3580 l -S -2824 3569 m -2835 3580 l -S -2866 3620 m -2877 3631 l -S -2866 3614 m -2877 3625 l -S -2826 3081 m -2837 3092 l -S -2832 3081 m -2843 3092 l -S -2910 3081 m -2921 3092 l -S -2917 3081 m -2927 3092 l -S -2990 3608 m -3001 3619 l -S -2990 3615 m -3001 3625 l -S -3101 3569 m -3111 3580 l -S -3094 3569 m -3105 3580 l -S -3182 3569 m -3193 3580 l -S -3176 3569 m -3186 3580 l -S -3250 3569 m -3261 3580 l -S -3244 3569 m -3255 3580 l -S -1 0.498039 0.623529 RG -1 0.498039 0.623529 rg -EMC -/OC /OC9 BDC -2995 3674 m -2995 3714 l -S -2871 3674 m -2871 3716 l -S -2337 3654 m -2337 3694 l -S -1455 3805 m -1455 3766 l -S -1770 4026 m -1807 4026 l -S -0 0 0 RG -0 0 0 rg -EMC -/OC /OC3 BDC -2715 3654 m -2757 3584 l -S -EMC -/OC /OC10 BDC -3029 3770 m -3029.518792 3761.106987 3036.871473 3753.754306 3045.941465 3753.754306 c -3055.011456 3753.754306 3062.364137 3761.106987 3062.364137 3770.176978 c -3062.364137 3779.24697 3055.011456 3786.599651 3045.941465 3786.599651 c -3036.871473 3786.599651 3029.518792 3779.24697 3029.518792 3770.176978 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 3034.210984 3764.018476 Tm -/T3romansHorzN0 1.285714 Tf -(\015\016) Tj -ET -EMC -/OC /OC10 BDC -2947 3658 m -2947.684705 3649.634507 2955.037386 3642.281826 2964.107378 3642.281826 c -2973.17737 3642.281826 2980.530051 3649.634507 2980.530051 3658.704498 c -2980.530051 3667.77449 2973.17737 3675.127171 2964.107378 3675.127171 c -2955.037386 3675.127171 2947.684705 3667.77449 2947.684705 3658.704498 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 2952.083635 3652.545996 Tm -/T3romansHorzN0 1.285714 Tf -(\015\017) Tj -ET -EMC -/OC /OC10 BDC -3040 3542 m -3040.339298 3533.624308 3047.691979 3526.271627 3056.761971 3526.271627 c -3065.831962 3526.271627 3073.184643 3533.624308 3073.184643 3542.694299 c -3073.184643 3551.764291 3065.831962 3559.116972 3056.761971 3559.116972 c -3047.691979 3559.116972 3040.339298 3551.764291 3040.339298 3542.694299 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 3044.444966 3536.535797 Tm -/T3romansHorzN0 1.285714 Tf -(\020\021) Tj -ET -EMC -/OC /OC10 BDC -3122 3542 m -3122.773905 3533.624308 3130.126586 3526.271627 3139.196577 3526.271627 c -3148.266569 3526.271627 3155.61925 3533.624308 3155.61925 3542.694299 c -3155.61925 3551.764291 3148.266569 3559.116972 3139.196577 3559.116972 c -3130.126586 3559.116972 3122.773905 3551.764291 3122.773905 3542.694299 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 3126.879573 3536.535797 Tm -/T3romansHorzN0 1.285714 Tf -(\020\021) Tj -ET -EMC -/OC /OC10 BDC -3202 3542 m -3202.902652 3533.624308 3210.255333 3526.271627 3219.325325 3526.271627 c -3228.395317 3526.271627 3235.747998 3533.624308 3235.747998 3542.694299 c -3235.747998 3551.764291 3228.395317 3559.116972 3219.325325 3559.116972 c -3210.255333 3559.116972 3202.902652 3551.764291 3202.902652 3542.694299 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 3206.715058 3536.535797 Tm -/T3romansHorzN0 1.285714 Tf -(\020\022) Tj -ET -EMC -/OC /OC10 BDC -2791 3611 m -2791.525685 3602.646021 2798.878366 3595.29334 2807.948357 3595.29334 c -2817.018349 3595.29334 2824.37103 3602.646021 2824.37103 3611.716013 c -2824.37103 3620.786005 2817.018349 3628.138686 2807.948357 3628.138686 c -2798.878366 3628.138686 2791.525685 3620.786005 2791.525685 3611.716013 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 2796.217877 3605.557511 Tm -/T3romansHorzN0 1.285714 Tf -(\015\022) Tj -ET -EMC -/OC /OC10 BDC -2642 3611 m -2642.178641 3602.646021 2649.531322 3595.29334 2658.601314 3595.29334 c -2667.671305 3595.29334 2675.023986 3602.646021 2675.023986 3611.716013 c -2675.023986 3620.786005 2667.671305 3628.138686 2658.601314 3628.138686 c -2649.531322 3628.138686 2642.178641 3620.786005 2642.178641 3611.716013 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 2647.164095 3605.557511 Tm -/T3romansHorzN0 1.285714 Tf -(\015\021) Tj -ET -EMC -/OC /OC10 BDC -2664 3190 m -2664.894518 3181.905523 2672.247199 3174.552842 2681.31719 3174.552842 c -2690.387182 3174.552842 2697.739863 3181.905523 2697.739863 3190.975514 c -2697.739863 3200.045506 2690.387182 3207.398187 2681.31719 3207.398187 c -2672.247199 3207.398187 2664.894518 3200.045506 2664.894518 3190.975514 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 2669.58671 3184.817012 Tm -/T3romansHorzN0 1.285714 Tf -(\015\023) Tj -ET -EMC -/OC /OC10 BDC -2709 3049 m -2709.842063 3039.944446 2717.194744 3032.591765 2726.264736 3032.591765 c -2735.334727 3032.591765 2742.687408 3039.944446 2742.687408 3049.014438 c -2742.687408 3058.084429 2735.334727 3065.43711 2726.264736 3065.43711 c -2717.194744 3065.43711 2709.842063 3058.084429 2709.842063 3049.014438 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 2716.293827 3042.855936 Tm -/T3romansHorzN0 1.285714 Tf -(\015\020) Tj -ET -EMC -/OC /OC10 BDC -2667 2984 m -2667.218681 2975.133099 2674.571362 2967.780418 2683.641353 2967.780418 c -2692.711345 2967.780418 2700.064026 2975.133099 2700.064026 2984.20309 c -2700.064026 2993.273082 2692.711345 3000.625763 2683.641353 3000.625763 c -2674.571362 3000.625763 2667.218681 2993.273082 2667.218681 2984.20309 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 2671.910873 2978.044588 Tm -/T3romansHorzN0 1.285714 Tf -(\015\015) Tj -ET -EMC -/OC /OC10 BDC -2853 3121 m -2853.525654 3112.206949 2860.878335 3104.854268 2869.948327 3104.854268 c -2879.018319 3104.854268 2886.371 3112.206949 2886.371 3121.27694 c -2886.371 3130.346932 2879.018319 3137.699613 2869.948327 3137.699613 c -2860.878335 3137.699613 2853.525654 3130.346932 2853.525654 3121.27694 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 2858.217847 3115.118438 Tm -/T3romansHorzN0 1.285714 Tf -(\015\024) Tj -ET -EMC -/OC /OC10 BDC -2605 3482 m -2605.129545 3473.703665 2612.482226 3466.350984 2621.552217 3466.350984 c -2630.622209 3466.350984 2637.97489 3473.703665 2637.97489 3482.773657 c -2637.97489 3491.843648 2630.622209 3499.196329 2621.552217 3499.196329 c -2612.482226 3499.196329 2605.129545 3491.843648 2605.129545 3482.773657 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 2609.821737 3476.615154 Tm -/T3romansHorzN0 1.285714 Tf -(\023\024) Tj -ET -EMC -/OC /OC10 BDC -2257 3265 m -2257.839936 3256.505076 2265.192617 3249.152395 2274.262609 3249.152395 c -2283.332601 3249.152395 2290.685282 3256.505076 2290.685282 3265.575067 c -2290.685282 3274.645059 2283.332601 3281.99774 2274.262609 3281.99774 c -2265.192617 3281.99774 2257.839936 3274.645059 2257.839936 3265.575067 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 2262.532129 3259.416565 Tm -/T3romansHorzN0 1.285714 Tf -(\023\015) Tj -ET -EMC -/OC /OC10 BDC -2371 3750 m -2371.041604 3741.330208 2378.394285 3733.977527 2387.464277 3733.977527 c -2396.534268 3733.977527 2403.886949 3741.330208 2403.886949 3750.4002 c -2403.886949 3759.470192 2396.534268 3766.822873 2387.464277 3766.822873 c -2378.394285 3766.822873 2371.041604 3759.470192 2371.041604 3750.4002 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 2375.440534 3744.241698 Tm -/T3romansHorzN0 1.285714 Tf -(\023\017) Tj -ET -EMC -/OC /OC10 BDC -1780 3540 m -1780.719173 3531.253439 1788.071854 3523.900757 1797.141846 3523.900757 c -1806.211838 3523.900757 1813.564519 3531.253439 1813.564519 3540.32343 c -1813.564519 3549.393422 1806.211838 3556.746103 1797.141846 3556.746103 c -1788.071854 3556.746103 1780.719173 3549.393422 1780.719173 3540.32343 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 1791.276606 3534.164928 Tm -/T3romansHorzN0 1.285714 Tf -(\023) Tj -ET -EMC -/OC /OC10 BDC -900 3105 m -900.681216 3096.279871 908.033897 3088.92719 917.103888 3088.92719 c -926.17388 3088.92719 933.526561 3096.279871 933.526561 3105.349862 c -933.526561 3114.419854 926.17388 3121.772535 917.103888 3121.772535 c -908.033897 3121.772535 900.681216 3114.419854 900.681216 3105.349862 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 912.118434 3099.19136 Tm -/T3romansHorzN0 1.285714 Tf -(\020) Tj -ET -EMC -/OC /OC10 BDC -1806 3885 m -1806.794208 3876.011553 1814.146889 3868.658872 1823.216881 3868.658872 c -1832.286873 3868.658872 1839.639554 3876.011553 1839.639554 3885.081545 c -1839.639554 3894.151536 1832.286873 3901.504217 1823.216881 3901.504217 c -1814.146889 3901.504217 1806.794208 3894.151536 1806.794208 3885.081545 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 1817.351641 3878.923043 Tm -/T3romansHorzN0 1.285714 Tf -(\025) Tj -ET -EMC -/OC /OC10 BDC -1718 4026 m -1718.010651 4017.341191 1725.363332 4009.98851 1734.433323 4009.98851 c -1743.503315 4009.98851 1750.855996 4017.341191 1750.855996 4026.411182 c -1750.855996 4035.481174 1743.503315 4042.833855 1734.433323 4042.833855 c -1725.363332 4042.833855 1718.010651 4035.481174 1718.010651 4026.411182 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 1728.274821 4020.25268 Tm -/T3romansHorzN0 1.285714 Tf -(\017) Tj -ET -EMC -/OC /OC10 BDC -1485 3860 m -1485.557062 3851.239639 1492.909743 3843.886958 1501.979734 3843.886958 c -1511.049726 3843.886958 1518.402407 3851.239639 1518.402407 3860.30963 c -1518.402407 3869.379622 1511.049726 3876.732303 1501.979734 3876.732303 c -1492.909743 3876.732303 1485.557062 3869.379622 1485.557062 3860.30963 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 1489.369468 3854.151128 Tm -/T3romansHorzN0 1.285714 Tf -(\020\024) Tj -ET -EMC -/OC /OC10 BDC -2439 4190 m -2439.342626 4181.116725 2446.695307 4173.764044 2455.765299 4173.764044 c -2464.835291 4173.764044 2472.187972 4181.116725 2472.187972 4190.186716 c -2472.187972 4199.256708 2464.835291 4206.609389 2455.765299 4206.609389 c -2446.695307 4206.609389 2439.342626 4199.256708 2439.342626 4190.186716 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 2444.034819 4184.028214 Tm -/T3romansHorzN0 1.285714 Tf -(\023\016) Tj -ET -1 0.498039 0 RG -1 0.498039 0 rg -EMC -/OC /OC4 BDC -2945 3305 m -2956 3316 l -S -2945 3312 m -2956 3323 l -S -0 0 0 RG -0 0 0 rg -EMC -/OC /OC3 BDC -1673 3504 m -1673.768323 3488.613908 1687.003149 3475.379082 1703.329134 3475.379082 c -1719.655119 3475.379082 1732.889945 3488.613908 1732.889945 3504.939893 c -1732.889945 3521.265878 1719.655119 3534.500704 1703.329134 3534.500704 c -1687.003149 3534.500704 1673.768323 3521.265878 1673.768323 3504.939893 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 1685.440151 3508.237589 Tm -/T3romansHorzN0 1.285714 Tf -(\026\013\027) Tj -ET -BT -12.317005 0 0 12.317005 1684.853627 3489.938317 Tm -/T3romansHorzN0 1.285714 Tf -(\020\020\022) Tj -ET -EMC -/OC /OC3 BDC -1425 3835 m -1425.837855 3819.231295 1439.07268 3805.99647 1455.398665 3805.99647 c -1471.72465 3805.99647 1484.959476 3819.231295 1484.959476 3835.55728 c -1484.959476 3851.883265 1471.72465 3865.118091 1455.398665 3865.118091 c -1439.07268 3865.118091 1425.837855 3851.883265 1425.837855 3835.55728 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 1436.923159 3838.854976 Tm -/T3romansHorzN0 1.285714 Tf -(\030\002\031) Tj -ET -BT -12.317005 0 0 12.317005 1437.802945 3820.555705 Tm -/T3romansHorzN0 1.285714 Tf -(\015\023\022) Tj -ET -EMC -/OC /OC3 BDC -1807 4026 m -1807.069173 4010.407543 1820.303999 3997.172717 1836.629984 3997.172717 c -1852.955969 3997.172717 1866.190795 4010.407543 1866.190795 4026.733528 c -1866.190795 4043.059513 1852.955969 4056.294339 1836.629984 4056.294339 c -1820.303999 4056.294339 1807.069173 4043.059513 1807.069173 4026.733528 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 1824.899504 4030.031224 Tm -/T3romansHorzN0 1.285714 Tf -(\032\002) Tj -ET -BT -12.317005 0 0 12.317005 1819.327525 4011.731953 Tm -/T3romansHorzN0 1.285714 Tf -(\024\020\021) Tj -ET -EMC -/OC /OC3 BDC -2307 3724 m -2307.815602 3707.695444 2321.050427 3694.460618 2337.376412 3694.460618 c -2353.702397 3694.460618 2366.937223 3707.695444 2366.937223 3724.021429 c -2366.937223 3740.347414 2353.702397 3753.58224 2337.376412 3753.58224 c -2321.050427 3753.58224 2307.815602 3740.347414 2307.815602 3724.021429 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 2328.871814 3727.319125 Tm -/T3romansHorzN0 1.285714 Tf -(\030\000) Tj -ET -BT -12.317005 0 0 12.317005 2319.780692 3709.019853 Tm -/T3romansHorzN0 1.285714 Tf -(\023\021\023) Tj -ET -EMC -/OC /OC3 BDC -2671 3679 m -2671.148782 3663.016521 2684.383607 3649.781695 2700.709592 3649.781695 c -2717.035577 3649.781695 2730.270403 3663.016521 2730.270403 3679.342506 c -2730.270403 3695.668491 2717.035577 3708.903316 2700.709592 3708.903316 c -2684.383607 3708.903316 2671.148782 3695.668491 2671.148782 3679.342506 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 2682.234086 3682.640201 Tm -/T3romansHorzN0 1.285714 Tf -(\030\013\027) Tj -ET -BT -12.317005 0 0 12.317005 2683.113872 3664.34093 Tm -/T3romansHorzN0 1.285714 Tf -(\015\023\025) Tj -ET -EMC -/OC /OC3 BDC -2842 3746 m -2842.341134 3729.973996 2855.575959 3716.739171 2871.901944 3716.739171 c -2888.227929 3716.739171 2901.462755 3729.973996 2901.462755 3746.299981 c -2901.462755 3762.625966 2888.227929 3775.860792 2871.901944 3775.860792 c -2855.575959 3775.860792 2842.341134 3762.625966 2842.341134 3746.299981 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 2863.397346 3749.597677 Tm -/T3romansHorzN0 1.285714 Tf -(\030\000) Tj -ET -BT -12.317005 0 0 12.317005 2854.012962 3731.298406 Tm -/T3romansHorzN0 1.285714 Tf -(\023\021\017) Tj -ET -EMC -/OC /OC3 BDC -2966 3743 m -2966.29279 3727.472222 2979.527616 3714.237397 2995.853601 3714.237397 c -3012.179586 3714.237397 3025.414411 3727.472222 3025.414411 3743.798207 c -3025.414411 3760.124192 3012.179586 3773.359018 2995.853601 3773.359018 c -2979.527616 3773.359018 2966.29279 3760.124192 2966.29279 3743.798207 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 2977.964618 3747.095903 Tm -/T3romansHorzN0 1.285714 Tf -(\030\002\033) Tj -ET -BT -12.317005 0 0 12.317005 2978.551142 3728.796632 Tm -/T3romansHorzN0 1.285714 Tf -(\015\023\021) Tj -ET -EMC -/OC /OC3 BDC -2554 3246 m -2554.77745 3230.315185 2568.012276 3217.080359 2584.338261 3217.080359 c -2600.664246 3217.080359 2613.899071 3230.315185 2613.899071 3246.64117 c -2613.899071 3262.967155 2600.664246 3276.201981 2584.338261 3276.201981 c -2568.012276 3276.201981 2554.77745 3262.967155 2554.77745 3246.64117 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 2566.156016 3249.938866 Tm -/T3romansHorzN0 1.285714 Tf -(\030\002\027) Tj -ET -BT -12.317005 0 0 12.317005 2566.74254 3231.639594 Tm -/T3romansHorzN0 1.285714 Tf -(\015\020\024) Tj -ET -BT -20.528341 0 0 20.528341 2621.410677 3076.498485 Tm -/T3romansHorzN0 1.285714 Tf -(\027\023\025) Tj -ET -EMC -/OC /OC3 BDC -2621 3587 m -2621 3649 l -S -2592 3679 m -2592.232375 3663.016521 2605.467201 3649.781695 2621.793186 3649.781695 c -2638.119171 3649.781695 2651.353997 3663.016521 2651.353997 3679.342506 c -2651.353997 3695.668491 2638.119171 3708.903316 2621.793186 3708.903316 c -2605.467201 3708.903316 2592.232375 3695.668491 2592.232375 3679.342506 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 2609.769443 3682.640201 Tm -/T3romansHorzN0 1.285714 Tf -(\034\011) Tj -ET -BT -12.317005 0 0 12.317005 2603.317679 3664.34093 Tm -/T3romansHorzN0 1.285714 Tf -(\020\022\035) Tj -ET -EMC -/OC /OC3 BDC -2621 3570 m -2621 3579 l -S -2628 3565 m -2628 3584 l -S -2615 3565 m -2615 3584 l -S -1 0.498039 0 RG -1 0.498039 0 rg -EMC -/OC /OC4 BDC -2594 3569 m -2605 3580 l -S -2588 3569 m -2599 3580 l -S -2547 3569 m -2558 3580 l -S -2541 3569 m -2552 3580 l -S -2500 3569 m -2511 3580 l -S -2494 3569 m -2504 3580 l -S -2736 3569 m -2747 3580 l -S -2730 3569 m -2741 3580 l -S -2689 3569 m -2700 3580 l -S -2683 3569 m -2694 3580 l -S -2642 3569 m -2653 3580 l -S -2636 3569 m -2647 3580 l -S -0 0 0 RG -0 0 0 rg -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 3558.256434 4168.232264 Tm -/T3romansHorzN0 1.285714 Tf -(\004\007\034\036) Tj -ET -BT -12.317005 0 0 12.317005 3646.5283 4168.232264 Tm -/T3romansHorzN0 1.285714 Tf -(\002\000\032\007) Tj -ET -BT -12.317005 0 0 12.317005 4174.693183 4168.232264 Tm -/T3romansHorzN0 1.285714 Tf -(\037\007\002\013\004\000\030\003\000\011\001) Tj -ET -BT -12.317005 0 0 12.317005 3573.212797 4139.492586 Tm -/T3romansHorzN0 1.285714 Tf -(\020) Tj -ET -BT -12.317005 0 0 12.317005 3572.333011 4110.752909 Tm -/T3romansHorzN0 1.285714 Tf -(\015) Tj -ET -BT -12.317005 0 0 12.317005 3572.333011 4082.013232 Tm -/T3romansHorzN0 1.285714 Tf -(\023) Tj -ET -BT -12.317005 0 0 12.317005 3572.039749 4053.273555 Tm -/T3romansHorzN0 1.285714 Tf -(\017) Tj -ET -BT -12.317005 0 0 12.317005 3572.333011 4024.533878 Tm -/T3romansHorzN0 1.285714 Tf -(\016) Tj -ET -BT -12.317005 0 0 12.317005 3572.039749 3995.794201 Tm -/T3romansHorzN0 1.285714 Tf -(\035) Tj -ET -BT -12.317005 0 0 12.317005 3572.333011 3967.054523 Tm -/T3romansHorzN0 1.285714 Tf -(\025) Tj -ET -BT -12.317005 0 0 12.317005 3572.333011 3938.314846 Tm -/T3romansHorzN0 1.285714 Tf -(\022) Tj -ET -BT -12.317005 0 0 12.317005 3572.626273 3909.575169 Tm -/T3romansHorzN0 1.285714 Tf -(\021) Tj -ET -BT -12.317005 0 0 12.317005 3565.587985 3880.835492 Tm -/T3romansHorzN0 1.285714 Tf -(\020\024) Tj -ET -BT -12.317005 0 0 12.317005 3656.205946 4139.492586 Tm -/T3romansHorzN0 1.285714 Tf -(\023\040) Tj -ET -BT -12.317005 0 0 12.317005 3567.347557 3852.095815 Tm -/T3romansHorzN0 1.285714 Tf -(\020\020) Tj -ET -BT -12.317005 0 0 12.317005 3565.587985 3823.356137 Tm -/T3romansHorzN0 1.285714 Tf -(\020\015) Tj -ET -BT -12.317005 0 0 12.317005 3565.587985 3794.61646 Tm -/T3romansHorzN0 1.285714 Tf -(\020\023) Tj -ET -BT -12.317005 0 0 12.317005 3843.013848 4139.492586 Tm -/T3romansHorzN0 1.285714 Tf -(\041\042\041\012\003\042\030\007\012\002\003\004\010\000\001\007\004\012\034\033\010\001\043\007\037\012\010\001\002\000\012\014\020\035\036\016\012\013\033\012\020\016\024\012\004\034) Tj -ET -BT -12.317005 0 0 12.317005 3843.013848 4110.752909 Tm -/T3romansHorzN0 1.285714 Tf -(\044\010\003\007\004\012\000\002\011\033\010\003\000\011\001\012\027\010\033\027\007\012\044\010\034\007\004\012\014\045\034\033\042\012\003\042\030\007) Tj -ET -BT -12.317005 0 0 12.317005 3843.013848 4082.013232 Tm -/T3romansHorzN0 1.285714 Tf -(\044\010\034\007\004\012\037\007\033\005\043\007\012\027\010\033\027\007\012\046\031\011\004\000\032\011\001\003\010\033\012\003\042\030\007\047) Tj -ET -BT -12.317005 0 0 12.317005 3843.013848 4053.273555 Tm -/T3romansHorzN0 1.285714 Tf -(\000\002\011\033\010\003\000\011\001\012\027\010\033\027\007\012\044\010\034\007\004\012\014\045\034\033\042\012\003\042\030\007\012\013\045\044\012\033\000\006\000\003\012\002\044\000\003\013\031\012\046\032\002\050\024\020\021\047) Tj -ET -BT -12.317005 0 0 12.317005 3843.013848 4024.533878 Tm -/T3romansHorzN0 1.285714 Tf -(\014\042\030\010\002\002\012\027\010\033\027\007\012\044\010\034\007\004\012\014\045\034\033\042\012\003\042\030\007) Tj -ET -BT -12.317005 0 0 12.317005 3843.013848 3995.794201 Tm -/T3romansHorzN0 1.285714 Tf -(\037\004\010\000\001\012\051\012\003\007\002\003\012\027\010\033\027\007\012\013\045\044\012\015\052\040\012\000\001\002\003\010\001\003\010\001\007\011\005\002\012\031\011\002\007\012\013\011\005\030\033\000\001\043) Tj -ET -BT -12.317005 0 0 12.317005 3843.013848 3967.054523 Tm -/T3romansHorzN0 1.285714 Tf -(\010\005\003\011\012\037\004\010\000\001\012\027\010\033\027\007\012\046\014\010\033\033\012\037\004\000\030\047) Tj -ET -BT -12.317005 0 0 12.317005 3843.013848 3938.314846 Tm -/T3romansHorzN0 1.285714 Tf -(\030\004\000\006\000\001\043\012\000\002\011\033\010\003\000\011\001\012\027\010\033\027\007) Tj -ET -BT -12.317005 0 0 12.317005 3843.013848 3909.575169 Tm -/T3romansHorzN0 1.285714 Tf -(\002\042\002\003\007\006\012\011\030\007\004\010\003\007\037\012\030\004\007\002\002\005\004\007\012\002\044\000\003\013\031\012\000\002\011\033\010\003\000\011\001\012\027\010\033\027\007) Tj -ET -BT -12.317005 0 0 12.317005 3843.013848 3880.835492 Tm -/T3romansHorzN0 1.285714 Tf -(\002\042\002\003\007\006\012\011\030\007\004\010\003\007\037\012\030\004\007\002\002\005\004\007\012\002\044\000\003\013\031\012\002\007\003\012\010\003\012\020\012\014\010\004\012\004\000\002\000\001\043) Tj -ET -BT -12.317005 0 0 12.317005 3843.013848 3852.095815 Tm -/T3romansHorzN0 1.285714 Tf -(\002\042\002\003\007\006\012\030\004\007\002\005\004\007\012\000\001\037\000\013\010\003\011\004\012\000\002\011\033\010\003\000\011\001\012\027\010\033\027\007) Tj -ET -BT -12.317005 0 0 12.317005 3843.013848 3823.356137 Tm -/T3romansHorzN0 1.285714 Tf -(\002\042\002\003\007\006\012\030\004\007\002\002\005\004\007\012\000\001\037\000\013\010\003\011\004\012\046\024\050\020\035\014\010\004\047\012\035\040\012\037\000\010) Tj -ET -BT -12.317005 0 0 12.317005 3843.013848 3794.61646 Tm -/T3romansHorzN0 1.285714 Tf -(\044\010\003\007\004\012\002\005\030\030\033\042\012\030\004\007\002\002\005\004\007\012\000\001\037\000\013\010\003\011\004\012\000\002\011\033\010\003\000\011\001\012\027\010\033\027\007) Tj -ET -BT -12.317005 0 0 12.317005 3565.294723 3765.876783 Tm -/T3romansHorzN0 1.285714 Tf -(\020\017) Tj -ET -BT -12.317005 0 0 12.317005 3565.587985 3737.137106 Tm -/T3romansHorzN0 1.285714 Tf -(\020\016) Tj -ET -BT -12.317005 0 0 12.317005 3565.587985 3708.397429 Tm -/T3romansHorzN0 1.285714 Tf -(\020\035) Tj -ET -BT -12.317005 0 0 12.317005 3565.587985 3679.657752 Tm -/T3romansHorzN0 1.285714 Tf -(\020\025) Tj -ET -BT -12.317005 0 0 12.317005 3565.587985 3650.918074 Tm -/T3romansHorzN0 1.285714 Tf -(\020\022) Tj -ET -BT -12.317005 0 0 12.317005 3565.881247 3622.178397 Tm -/T3romansHorzN0 1.285714 Tf -(\020\021) Tj -ET -BT -12.317005 0 0 12.317005 3566.467771 3593.43872 Tm -/T3romansHorzN0 1.285714 Tf -(\015\024) Tj -ET -BT -12.317005 0 0 12.317005 3568.227343 3564.699043 Tm -/T3romansHorzN0 1.285714 Tf -(\015\020) Tj -ET -BT -12.317005 0 0 12.317005 3566.467771 3535.959366 Tm -/T3romansHorzN0 1.285714 Tf -(\015\015) Tj -ET -BT -12.317005 0 0 12.317005 3566.467771 3507.219689 Tm -/T3romansHorzN0 1.285714 Tf -(\015\023) Tj -ET -BT -12.317005 0 0 12.317005 3566.174509 3478.480011 Tm -/T3romansHorzN0 1.285714 Tf -(\015\017) Tj -ET -BT -12.317005 0 0 12.317005 3843.013848 3765.876783 Tm -/T3romansHorzN0 1.285714 Tf -(\044\010\003\007\004\012\002\005\030\030\033\042\012\030\004\007\002\002\005\004\007\012\000\001\037\000\013\010\003\011\004\012\046\024\050\015\016\012\014\010\004\047\012\035\040\012\037\000\010) Tj -ET -BT -12.317005 0 0 12.317005 3843.013848 3737.137106 Tm -/T3romansHorzN0 1.285714 Tf -(\030\004\000\006\000\001\043\012\003\007\002\003\012\027\010\033\027\007) Tj -ET -BT -12.317005 0 0 12.317005 3843.013848 3708.397429 Tm -/T3romansHorzN0 1.285714 Tf -(\003\044\000\001\012\000\001\002\003\010\001\003\010\001\007\011\005\002\012\031\011\002\007\012\013\011\001\001\007\013\003\000\011\001\012\015\052\040\012\034\007\006\010\033\007\012) Tj -ET -BT -12.317005 0 0 12.317005 3843.013848 3679.657752 Tm -/T3romansHorzN0 1.285714 Tf -(\011\004\000\034\000\013\007\012\030\033\010\003\007\012\046\037\004\000\033\033\007\037\012\053\053\054\054\047\012) Tj -ET -BT -12.317005 0 0 12.317005 3843.013848 3650.918074 Tm -/T3romansHorzN0 1.285714 Tf -(\010\000\004\012\002\005\030\030\033\042\012\000\002\011\033\010\003\000\011\001\012\027\010\033\027\007) Tj -ET -BT -12.317005 0 0 12.317005 3843.013848 3622.178397 Tm -/T3romansHorzN0 1.285714 Tf -(\010\000\004\012\002\005\030\030\033\042\012\013\031\007\013\055\012\027\010\033\027\007\012\046\015\056\011\034\034\047) Tj -ET -BT -12.317005 0 0 12.317005 3843.013848 3593.43872 Tm -/T3romansHorzN0 1.285714 Tf -(\010\000\004\012\004\007\002\007\004\027\011\000\004\012\000\002\011\033\010\003\000\011\001\012\027\010\033\027\007) Tj -ET -BT -12.317005 0 0 12.317005 3843.013848 3564.699043 Tm -/T3romansHorzN0 1.285714 Tf -(\010\000\004\012\004\007\002\007\004\027\011\000\004\012) Tj -ET -BT -12.317005 0 0 12.317005 3843.013848 3535.959366 Tm -/T3romansHorzN0 1.285714 Tf -(\010\000\004\012\004\007\002\007\004\027\011\000\004\012\037\004\010\000\001\012\027\010\033\027\007) Tj -ET -BT -12.317005 0 0 12.317005 3843.013848 3507.219689 Tm -/T3romansHorzN0 1.285714 Tf -(\010\000\004\012\004\007\002\007\004\027\011\000\004\012\004\007\033\000\007\034\012\027\010\033\027\007\012\002\007\003\012\010\003\012\020\024\012\014\010\004) Tj -ET -BT -12.317005 0 0 12.317005 3843.013848 3478.480011 Tm -/T3romansHorzN0 1.285714 Tf -(\033\011\044\012\010\000\004\012\030\004\007\002\002\005\004\007\012\002\044\000\003\013\031\012\000\002\011\033\010\003\000\011\001\012\027\010\033\027\007) Tj -ET -BT -12.317005 0 0 12.317005 3566.467771 3449.740334 Tm -/T3romansHorzN0 1.285714 Tf -(\015\016) Tj -ET -BT -12.317005 0 0 12.317005 3566.467771 3421.000657 Tm -/T3romansHorzN0 1.285714 Tf -(\015\035) Tj -ET -BT -12.317005 0 0 12.317005 3566.467771 3392.26098 Tm -/T3romansHorzN0 1.285714 Tf -(\015\025) Tj -ET -BT -12.317005 0 0 12.317005 3566.467771 3363.521303 Tm -/T3romansHorzN0 1.285714 Tf -(\015\022) Tj -ET -BT -12.317005 0 0 12.317005 3566.761033 3334.781625 Tm -/T3romansHorzN0 1.285714 Tf -(\015\021) Tj -ET -BT -12.317005 0 0 12.317005 3566.467771 3306.041948 Tm -/T3romansHorzN0 1.285714 Tf -(\023\024) Tj -ET -BT -12.317005 0 0 12.317005 3568.227343 3277.302271 Tm -/T3romansHorzN0 1.285714 Tf -(\023\020) Tj -ET -BT -12.317005 0 0 12.317005 3566.467771 3248.562594 Tm -/T3romansHorzN0 1.285714 Tf -(\023\015) Tj -ET -BT -12.317005 0 0 12.317005 3566.467771 3219.822917 Tm -/T3romansHorzN0 1.285714 Tf -(\023\023) Tj -ET -BT -12.317005 0 0 12.317005 3566.174509 3191.08324 Tm -/T3romansHorzN0 1.285714 Tf -(\023\017) Tj -ET -BT -12.317005 0 0 12.317005 3566.467771 3162.343562 Tm -/T3romansHorzN0 1.285714 Tf -(\023\016) Tj -ET -BT -12.317005 0 0 12.317005 3566.467771 3133.603885 Tm -/T3romansHorzN0 1.285714 Tf -(\023\035) Tj -ET -BT -12.317005 0 0 12.317005 3566.467771 3104.864208 Tm -/T3romansHorzN0 1.285714 Tf -(\023\025) Tj -ET -BT -12.317005 0 0 12.317005 3843.013848 3449.740334 Tm -/T3romansHorzN0 1.285714 Tf -(\033\011\044\012\010\000\004\012\030\004\007\002\002\005\004\007\012\002\044\000\003\013\031\012\002\007\003\012\010\003\012\035\012\014\010\004\012\034\010\033\033\000\001\043) Tj -ET -BT -12.317005 0 0 12.317005 3843.013848 3421.000657 Tm -/T3romansHorzN0 1.285714 Tf -(\010\000\004\012\002\005\030\030\033\042\012\030\004\007\002\002\005\004\007\012\000\001\037\000\013\010\003\011\004\012\000\002\011\033\010\003\000\011\001\012\027\010\033\027\007) Tj -ET -BT -12.317005 0 0 12.317005 3843.013848 3392.26098 Tm -/T3romansHorzN0 1.285714 Tf -(\010\000\004\012\002\005\030\030\033\042\012\030\004\007\002\002\005\004\007\012\000\001\037\000\013\010\003\011\004\012\046\024\050\020\035\012\014\010\004\047\012\035\040\012\037\000\010) Tj -ET -BT -12.317005 0 0 12.317005 3843.013848 3363.521303 Tm -/T3romansHorzN0 1.285714 Tf -(\010\000\004\012\030\004\007\002\002\005\004\007\012\013\011\001\003\004\011\033\012\027\010\033\027\007\012\013\045\044\012\034\000\033\003\007\004) Tj -ET -BT -12.317005 0 0 12.317005 3843.013848 3334.781625 Tm -/T3romansHorzN0 1.285714 Tf -(\004\007\002\003\000\013\003\007\037\012\011\004\000\034\000\013\007\012\046\020\036\016\054\054\012\037\000\010\047) Tj -ET -BT -12.317005 0 0 12.317005 3843.013848 3306.041948 Tm -/T3romansHorzN0 1.285714 Tf -(\004\007\002\003\004\000\013\003\007\037\012\011\004\000\034\000\013\007\012\014\042\030\010\002\002\012\027\010\033\027\007) Tj -ET -BT -12.317005 0 0 12.317005 3843.013848 3277.302271 Tm -/T3romansHorzN0 1.285714 Tf -(\023\050\044\010\042\012\002\011\033\007\001\011\000\037\012\027\010\033\027\007\012\015\017\012\027\011\033\003\012\037\013) Tj -ET -BT -12.317005 0 0 12.317005 3843.013848 3248.562594 Tm -/T3romansHorzN0 1.285714 Tf -(\006\010\001\005\010\033\012\004\007\033\007\010\002\007\012\027\010\033\027\007) Tj -ET -BT -12.317005 0 0 12.317005 3843.013848 3219.822917 Tm -/T3romansHorzN0 1.285714 Tf -(\037\000\010\030\031\004\010\043\006\012\030\004\007\002\002\005\004\007\012\000\001\037\000\013\010\003\011\004\012\000\002\011\033\010\003\000\011\001\012\027\010\033\027\007) Tj -ET -BT -12.317005 0 0 12.317005 3843.013848 3191.08324 Tm -/T3romansHorzN0 1.285714 Tf -(\037\000\010\030\031\004\010\043\006\012\030\004\007\002\002\005\004\007\012\000\001\037\000\013\010\003\011\004\012\046\024\050\020\035\012\014\010\004\047\012\035\040\012\037\000\010) Tj -ET -BT -12.317005 0 0 12.317005 3843.013848 3162.343562 Tm -/T3romansHorzN0 1.285714 Tf -(\001\011\001\050\000\036\002\036\012\002\055\000\037\012\057\005\001\013\003\000\011\001\012\014\011\026\012\046\007\060\061\012\000\000\013\012\003\035\012\013\033\010\002\002\012\020\012\032\011\001\007\012\020\047) Tj -ET -BT -12.317005 0 0 12.317005 3843.013848 3104.864208 Tm -/T3romansHorzN0 1.285714 Tf -(\037\007\033\005\043\007\012\027\010\033\027\007\012\014\011\037\042\012\037\004\010\000\001\012\027\010\033\027\007) Tj -ET -EMC -/OC /OC11 BDC -3543 3901 m -4643 3901 l -S -3543 3930 m -4643 3930 l -S -3543 3958 m -4643 3958 l -S -3543 3987 m -4643 3987 l -S -3543 4016 m -4643 4016 l -S -3543 4045 m -4643 4045 l -S -3543 4073 m -4643 4073 l -S -3543 4102 m -4643 4102 l -S -3543 4131 m -4643 4131 l -S -3543 4160 m -4643 4160 l -S -3543 4188 m -4643 4188 l -S -3543 3872 m -4643 3872 l -S -3543 3843 m -4643 3843 l -S -3543 3815 m -4643 3815 l -S -3543 3786 m -4643 3786 l -S -3543 3757 m -4643 3757 l -S -3543 3728 m -4643 3728 l -S -3543 3700 m -4643 3700 l -S -3543 3671 m -4643 3671 l -S -3543 3642 m -4643 3642 l -S -3543 3613 m -4643 3613 l -S -3543 3585 m -4643 3585 l -S -3543 3556 m -4643 3556 l -S -3543 3527 m -4643 3527 l -S -3543 3499 m -4643 3499 l -S -3543 3470 m -4643 3470 l -S -3543 3441 m -4643 3441 l -S -3543 3412 m -4643 3412 l -S -3543 3384 m -4643 3384 l -S -3543 3355 m -4643 3355 l -S -3543 3326 m -4643 3326 l -S -3543 3297 m -4643 3297 l -S -3543 3269 m -4643 3269 l -S -3543 3240 m -4643 3240 l -S -3543 3211 m -4643 3211 l -S -3543 3182 m -4643 3182 l -S -3543 3154 m -4643 3154 l -S -3543 3125 m -4643 3125 l -S -3543 3096 m -4643 3096 l -S -3543 4188 m -3543 3096 l -S -4643 3096 m -4643 4188 l -S -3613 4188 m -3613 3096 l -S -3719 3096 m -3719 4188 l -S -EMC -/OC /OC5 BDC -BT -7.606829 0 0 7.606829 3662.164747 3938.314846 Tm -/T3romansHorzN0 1.285714 Tf -(\015) Tj -ET -3656 3940 m -3665 3950 l -S -BT -7.606829 0 0 7.606829 3652.254881 3944.002818 Tm -/T3romansHorzN0 1.285714 Tf -(\020) Tj -ET -BT -12.317005 0 0 12.317005 3658.954886 3938.314846 Tm -/T3romansHorzN0 1.285714 Tf -(\012\040) Tj -ET -EMC -/OC /OC11 BDC -3822 3096 m -3822 4188 l -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 3733.920379 4168.232264 Tm -/T3romansHorzN0 1.285714 Tf -(\003\010\043\012\001\011\036) Tj -ET -BT -12.317005 0 0 12.317005 3727.468615 4110.752909 Tm -/T3romansHorzN0 1.285714 Tf -(\034\044\050\025\020\023\024) Tj -ET -BT -12.317005 0 0 12.317005 3728.641663 4082.013232 Tm -/T3romansHorzN0 1.285714 Tf -(\026\013\027\050\020\020\022) Tj -ET -BT -12.317005 0 0 12.317005 3754.155458 4139.492586 Tm -/T3romansHorzN0 1.285714 Tf -(\034\017\021) Tj -ET -BT -12.317005 0 0 12.317005 3727.175353 4053.273555 Tm -/T3romansHorzN0 1.285714 Tf -(\034\044\050\025\020\015\017) Tj -ET -BT -12.317005 0 0 12.317005 3727.761877 4024.533878 Tm -/T3romansHorzN0 1.285714 Tf -(\034\044\050\025\020\015\021) Tj -ET -BT -12.317005 0 0 12.317005 3727.468615 3995.794201 Tm -/T3romansHorzN0 1.285714 Tf -(\034\044\050\025\020\015\035) Tj -ET -BT -12.317005 0 0 12.317005 3737.146262 3823.356137 Tm -/T3romansHorzN0 1.285714 Tf -(\030\000\050\023\021\015) Tj -ET -BT -12.317005 0 0 12.317005 3763.539843 3852.975601 Tm -/T3romansHorzN0 1.285714 Tf -(\050) Tj -ET -BT -12.317005 0 0 12.317005 3727.175353 3880.835492 Tm -/T3romansHorzN0 1.285714 Tf -(\030\002\031\050\015\023\022) Tj -ET -BT -12.317005 0 0 12.317005 3763.539843 3910.454955 Tm -/T3romansHorzN0 1.285714 Tf -(\050) Tj -ET -BT -12.317005 0 0 12.317005 3727.468615 3938.314846 Tm -/T3romansHorzN0 1.285714 Tf -(\034\044\050\025\020\015\025) Tj -ET -BT -12.317005 0 0 12.317005 3727.468615 3967.054523 Tm -/T3romansHorzN0 1.285714 Tf -(\034\044\050\025\020\015\016) Tj -ET -BT -12.317005 0 0 12.317005 3763.539843 3651.79786 Tm -/T3romansHorzN0 1.285714 Tf -(\050) Tj -ET -BT -12.317005 0 0 12.317005 3763.539843 3680.537538 Tm -/T3romansHorzN0 1.285714 Tf -(\050) Tj -ET -BT -12.317005 0 0 12.317005 3763.539843 3709.277215 Tm -/T3romansHorzN0 1.285714 Tf -(\050) Tj -ET -BT -12.317005 0 0 12.317005 3727.468615 3737.137106 Tm -/T3romansHorzN0 1.285714 Tf -(\034\044\050\025\020\015\022) Tj -ET -BT -12.317005 0 0 12.317005 3738.905834 3765.876783 Tm -/T3romansHorzN0 1.285714 Tf -(\030\000\050\023\021\020) Tj -ET -BT -12.317005 0 0 12.317005 3763.539843 3795.496246 Tm -/T3romansHorzN0 1.285714 Tf -(\050) Tj -ET -BT -12.317005 0 0 12.317005 3763.539843 3479.359797 Tm -/T3romansHorzN0 1.285714 Tf -(\050) Tj -ET -BT -12.317005 0 0 12.317005 3728.348401 3507.219689 Tm -/T3romansHorzN0 1.285714 Tf -(\030\002\027\050\015\020\024) Tj -ET -BT -12.317005 0 0 12.317005 3763.539843 3536.839152 Tm -/T3romansHorzN0 1.285714 Tf -(\050) Tj -ET -BT -12.317005 0 0 12.317005 3754.741982 3564.699043 Tm -/T3romansHorzN0 1.285714 Tf -(\027\023\025) Tj -ET -BT -12.317005 0 0 12.317005 3763.539843 3594.318506 Tm -/T3romansHorzN0 1.285714 Tf -(\050) Tj -ET -BT -12.317005 0 0 12.317005 3763.539843 3623.058183 Tm -/T3romansHorzN0 1.285714 Tf -(\050) Tj -ET -BT -12.317005 0 0 12.317005 3763.539843 3623.058183 Tm -/T3romansHorzN0 1.285714 Tf -(\050) Tj -ET -BT -12.317005 0 0 12.317005 3763.539843 3306.921734 Tm -/T3romansHorzN0 1.285714 Tf -(\050) Tj -ET -BT -12.317005 0 0 12.317005 3733.920379 3334.781625 Tm -/T3romansHorzN0 1.285714 Tf -(\034\011\050\020\022\035) Tj -ET -BT -12.317005 0 0 12.317005 3728.055139 3363.521303 Tm -/T3romansHorzN0 1.285714 Tf -(\030\013\027\050\015\023\025) Tj -ET -BT -12.317005 0 0 12.317005 3736.853 3392.26098 Tm -/T3romansHorzN0 1.285714 Tf -(\030\000\050\023\021\017) Tj -ET -BT -12.317005 0 0 12.317005 3763.539843 3421.880443 Tm -/T3romansHorzN0 1.285714 Tf -(\050) Tj -ET -BT -12.317005 0 0 12.317005 3728.934925 3449.740334 Tm -/T3romansHorzN0 1.285714 Tf -(\030\002\033\050\015\023\021) Tj -ET -BT -12.317005 0 0 12.317005 3763.539843 3134.483671 Tm -/T3romansHorzN0 1.285714 Tf -(\050) Tj -ET -BT -12.317005 0 0 12.317005 3763.539843 3163.223348 Tm -/T3romansHorzN0 1.285714 Tf -(\050) Tj -ET -BT -12.317005 0 0 12.317005 3737.146262 3191.08324 Tm -/T3romansHorzN0 1.285714 Tf -(\030\000\050\023\021\023) Tj -ET -BT -12.317005 0 0 12.317005 3763.539843 3220.702703 Tm -/T3romansHorzN0 1.285714 Tf -(\050) Tj -ET -BT -12.317005 0 0 12.317005 3763.539843 3249.44238 Tm -/T3romansHorzN0 1.285714 Tf -(\050) Tj -ET -BT -12.317005 0 0 12.317005 3722.483161 3277.302271 Tm -/T3romansHorzN0 1.285714 Tf -(\026\002\011\027\050\020\015\015) Tj -ET -BT -12.317005 0 0 12.317005 3763.539843 3105.743994 Tm -/T3romansHorzN0 1.285714 Tf -(\050) Tj -ET -BT -12.317005 0 0 12.317005 3843.013848 3133.603885 Tm -/T3romansHorzN0 1.285714 Tf -(\034\011\010\006\045\044\010\003\007\004\012\000\002\011\033\010\003\000\011\001\012\027\010\033\027\007\012\044\010\034\007\004\012\014\045\034\033\042\012\003\042\030\007) Tj -ET -1 0.498039 0 RG -1 0.498039 0 rg -EMC -/OC /OC4 BDC -2405 3569 m -2416 3580 l -S -2399 3569 m -2410 3580 l -S -2358 3569 m -2369 3580 l -S -2352 3569 m -2363 3580 l -S -2311 3569 m -2322 3580 l -S -2305 3569 m -2316 3580 l -S -2539 3514 m -2539 3575 l -S -2702 3514 m -2702 3575 l -S -2533 3542 m -2544 3553 l -S -2533 3535 m -2544 3546 l -S -2697 3542 m -2708 3553 l -S -2697 3535 m -2708 3546 l -S -0 0 0 RG -0 0 0 rg -EMC -/OC /OC3 BDC -2658 3000 m -2638 3000 l -S -2638 3000 m -2658 2967 l -S -2638 2967 m -2658 3000 l -S -2658 2967 m -2638 2967 l -S -2638 2984 m -2638.928195 2978.587874 2643.339803 2974.176265 2648.781798 2974.176265 c -2654.223793 2974.176265 2658.635402 2978.587874 2658.635402 2984.029869 c -2658.635402 2989.471864 2654.223793 2993.883473 2648.781798 2993.883473 c -2643.339803 2993.883473 2638.928195 2989.471864 2638.928195 2984.029869 c -S -2638 3000 m -2643 2992 l -2643 2992 l -2643 2992 l -2644 2992 l -2644 2992 l -2644 2992 l -2644 2992 l -2644 2993 l -2644 2993 l -2645 2993 l -2645 2993 l -2645 2993 l -2645 2993 l -2645 2993 l -2645 2993 l -2645 2993 l -2646 2993 l -2646 2993 l -2646 2993 l -2646 2993 l -2646 2993 l -2646 2993 l -2647 2993 l -2647 2993 l -2647 2993 l -2647 2993 l -2647 2993 l -2647 2993 l -2648 2993 l -2648 2993 l -2648 2993 l -2648 2993 l -2648 2993 l -2648 2993 l -2649 2993 l -2649 2993 l -2649 2993 l -2649 2993 l -2649 2993 l -2649 2993 l -2650 2993 l -2650 2993 l -2650 2993 l -2650 2993 l -2650 2993 l -2650 2993 l -2651 2993 l -2651 2993 l -2651 2993 l -2651 2993 l -2651 2993 l -2651 2993 l -2652 2993 l -2652 2993 l -2652 2993 l -2652 2993 l -2652 2993 l -2652 2993 l -2652 2992 l -2653 2992 l -2653 2992 l -2653 2992 l -2653 2992 l -2653 2992 l -2653 2992 l -2658 3000 l -2638 3000 l -2648 2974 m -2648 2974 l -2648 2974 l -2648 2974 l -2648 2974 l -2647 2974 l -2647 2974 l -2647 2974 l -2647 2974 l -2647 2974 l -2647 2974 l -2646 2974 l -2646 2974 l -2646 2974 l -2646 2974 l -2646 2974 l -2646 2974 l -2645 2974 l -2645 2974 l -2645 2974 l -2645 2974 l -2645 2974 l -2645 2974 l -2645 2974 l -2644 2974 l -2644 2975 l -2644 2975 l -2644 2975 l -2644 2975 l -2644 2975 l -2643 2975 l -2643 2975 l -2643 2975 l -2638 2967 l -2658 2967 l -2653 2975 l -2653 2975 l -2653 2975 l -2653 2975 l -2653 2975 l -2653 2975 l -2652 2975 l -2652 2975 l -2652 2974 l -2652 2974 l -2652 2974 l -2652 2974 l -2652 2974 l -2651 2974 l -2651 2974 l -2651 2974 l -2651 2974 l -2651 2974 l -2651 2974 l -2650 2974 l -2650 2974 l -2650 2974 l -2650 2974 l -2650 2974 l -2650 2974 l -2649 2974 l -2649 2974 l -2649 2974 l -2649 2974 l -2649 2974 l -2649 2974 l -2648 2974 l -2648 2974 l -f* -0 w -110 1853 m -4889 1853 l -4889 5203 l -110 5203 l -110 1853 l -S -0.708661 w -140 1861 m -137 1861 l -137 5195 l -140 5195 l -f -118 1880 m -118 1884 l -4880 1884 l -4880 1880 l -f -4861 1861 m -4858 1861 l -4858 5195 l -4861 5195 l -f -118 5173 m -118 5176 l -4880 5176 l -4880 5173 l -f -924 1882 m -927 1882 l -927 1861 l -924 1861 l -f -BT -7.698128 0 0 10.26417 3065.177482 1912.254833 Tm -/T3romansHorzN0 1.285714 Tf -(\037\004\010\044\000\001\043\012\001\005\006\014\007\004) Tj -ET -BT -7.698128 0 0 10.26417 3393.154385 1912.254833 Tm -/T3romansHorzN0 1.285714 Tf -(\037\007\002\013\004\000\030\003\000\011\001) Tj -ET -4571 2071 m -4574 2071 l -4574 1882 l -4571 1882 l -f -BT -7.698128 0 0 10.26417 4577.163101 1936.888842 Tm -/T3romansHorzN0 1.285714 Tf -(\002\031\003\012\001\062\036) Tj -ET -3955 2071 m -3958 2071 l -3958 1882 l -3955 1882 l -f -3637 2071 m -3640 2071 l -3640 1882 l -3637 1882 l -f -BT -7.698128 0 0 10.26417 4577.163101 2054.926802 Tm -/T3romansHorzN0 1.285714 Tf -(\037\004\010\044\000\001\043\012\001\062\036) Tj -ET -BT -7.698128 0 0 10.26417 3961.312875 2054.926802 Tm -/T3romansHorzN0 1.285714 Tf -(\003\000\003\033\007) Tj -ET -2267 1927 m -3957 1927 l -S -2267 1968 m -3639 1968 l -S -2267 2009 m -3639 2009 l -S -2267 2050 m -3639 2050 l -S -3016 1882 m -3013 1882 l -3013 2071 l -3016 2071 l -f -3220 1907 m -3220 2071 l -S -BT -9.237753 0 0 12.317005 3248.686186 1888.647241 Tm -/T3romansHorzN0 1.285714 Tf -(\004\007\034\007\004\007\001\013\007\012\037\004\010\044\000\001\043\002) Tj -ET -2267 1905 m -2267 1908 l -3639 1908 l -3639 1905 l -f -3639 1907 m -3957 1907 l -S -4573 1952 m -4860 1952 l -S -4716 1952 m -4716 1882 l -S -BT -7.698128 0 0 10.26417 4720.678198 1936.888842 Tm -/T3romansHorzN0 1.285714 Tf -(\004\007\027\012\001\062\036) Tj -ET -2308 2071 m -2308 1907 l -S -2378 2071 m -2378 1907 l -S -2267 1948 m -3957 1948 l -S -2267 1989 m -3639 1989 l -S -2267 2030 m -3639 2030 l -S -BT -9.237753 0 0 12.317005 2606.369064 1888.647241 Tm -/T3romansHorzN0 1.285714 Tf -(\004\007\027\000\002\000\011\001\002) Tj -ET -BT -7.698128 0 0 10.26417 2277.072483 1912.254833 Tm -/T3romansHorzN0 1.285714 Tf -(\004\007\027) Tj -ET -BT -7.698128 0 0 10.26417 2329.749672 1912.254833 Tm -/T3romansHorzN0 1.285714 Tf -(\037\010\003\007) Tj -ET -BT -7.698128 0 0 10.26417 2391.40801 1912.254833 Tm -/T3romansHorzN0 1.285714 Tf -(\014\042) Tj -ET -BT -7.698128 0 0 10.26417 2426.78274 1912.254833 Tm -/T3romansHorzN0 1.285714 Tf -(\013\031\055\036) Tj -ET -BT -7.698128 0 0 10.26417 2468.939154 1912.254833 Tm -/T3romansHorzN0 1.285714 Tf -(\010\030\030\036) Tj -ET -BT -7.698128 0 0 10.26417 2731.775232 1912.254833 Tm -/T3romansHorzN0 1.285714 Tf -(\004\007\006\010\004\055\002) Tj -ET -2419 2071 m -2419 1907 l -S -2501 2071 m -2501 1907 l -S -2460 2071 m -2460 1907 l -S -1711 1882 m -1714 1882 l -1714 1861 l -1711 1861 l -f -2498 1882 m -2501 1882 l -2501 1861 l -2498 1861 l -f -3285 1882 m -3288 1882 l -3288 1861 l -3285 1861 l -f -4071 1882 m -4075 1882 l -4075 1861 l -4071 1861 l -f -BT -10.777379 0 0 14.369839 527.7768 1860.933981 Tm -/T3romansHorzN0 1.285714 Tf -(\010) Tj -ET -138 4627 m -138 4624 l -118 4624 l -118 4627 l -f -BT -10.777379 0 0 14.369839 120.2037 4893.654201 Tm -/T3romansHorzN0 1.285714 Tf -(\020) Tj -ET -BT -10.777379 0 0 14.369839 119.433887 4344.863223 Tm -/T3romansHorzN0 1.285714 Tf -(\015) Tj -ET -BT -10.777379 0 0 14.369839 119.433887 3796.072244 Tm -/T3romansHorzN0 1.285714 Tf -(\023) Tj -ET -BT -10.777379 0 0 14.369839 119.177283 3247.281266 Tm -/T3romansHorzN0 1.285714 Tf -(\017) Tj -ET -BT -10.777379 0 0 14.369839 119.433887 2698.490287 Tm -/T3romansHorzN0 1.285714 Tf -(\016) Tj -ET -BT -10.777379 0 0 14.369839 119.177283 2149.699309 Tm -/T3romansHorzN0 1.285714 Tf -(\035) Tj -ET -138 4079 m -138 4076 l -118 4076 l -118 4079 l -f -138 3530 m -138 3527 l -118 3527 l -118 3530 l -f -138 2981 m -138 2978 l -118 2978 l -118 2981 l -f -138 2432 m -138 2429 l -118 2429 l -118 2432 l -f -4860 4624 m -4860 4627 l -4880 4627 l -4880 4624 l -f -BT -10.777379 0 0 14.369839 4870.46177 4893.654201 Tm -/T3romansHorzN0 1.285714 Tf -(\020) Tj -ET -BT -10.777379 0 0 14.369839 4869.691958 4344.863223 Tm -/T3romansHorzN0 1.285714 Tf -(\015) Tj -ET -BT -10.777379 0 0 14.369839 4869.691958 3796.072244 Tm -/T3romansHorzN0 1.285714 Tf -(\023) Tj -ET -BT -10.777379 0 0 14.369839 4869.435353 3247.281266 Tm -/T3romansHorzN0 1.285714 Tf -(\017) Tj -ET -BT -10.777379 0 0 14.369839 4869.691958 2698.490287 Tm -/T3romansHorzN0 1.285714 Tf -(\016) Tj -ET -BT -10.777379 0 0 14.369839 4869.435353 2149.699309 Tm -/T3romansHorzN0 1.285714 Tf -(\035) Tj -ET -4860 4076 m -4860 4079 l -4880 4079 l -4880 4076 l -f -4860 3527 m -4860 3530 l -4880 3530 l -4880 3527 l -f -4860 2978 m -4860 2981 l -4880 2981 l -4880 2978 l -f -4860 2429 m -4860 2432 l -4880 2432 l -4880 2429 l -f -BT -10.777379 0 0 14.369839 1313.670115 1860.933981 Tm -/T3romansHorzN0 1.285714 Tf -(\014) Tj -ET -BT -10.777379 0 0 14.369839 2100.846452 1860.933981 Tm -/T3romansHorzN0 1.285714 Tf -(\013) Tj -ET -BT -10.777379 0 0 14.369839 2887.50958 1860.933981 Tm -/T3romansHorzN0 1.285714 Tf -(\037) Tj -ET -BT -10.777379 0 0 14.369839 3674.685916 1860.933981 Tm -/T3romansHorzN0 1.285714 Tf -(\007) Tj -ET -BT -10.777379 0 0 14.369839 4461.605649 1860.933981 Tm -/T3romansHorzN0 1.285714 Tf -(\034) Tj -ET -927 5175 m -924 5175 l -924 5195 l -927 5195 l -f -1714 5175 m -1711 5175 l -1711 5195 l -1714 5195 l -f -2501 5175 m -2498 5175 l -2498 5195 l -2501 5195 l -f -3288 5175 m -3285 5175 l -3285 5195 l -3288 5195 l -f -4075 5175 m -4071 5175 l -4071 5195 l -4075 5195 l -f -BT -10.777379 0 0 14.369839 527.7768 5182.419529 Tm -/T3romansHorzN0 1.285714 Tf -(\010) Tj -ET -BT -10.777379 0 0 14.369839 1313.670115 5182.419529 Tm -/T3romansHorzN0 1.285714 Tf -(\014) Tj -ET -BT -10.777379 0 0 14.369839 2100.846452 5182.419529 Tm -/T3romansHorzN0 1.285714 Tf -(\013) Tj -ET -BT -10.777379 0 0 14.369839 2887.50958 5182.419529 Tm -/T3romansHorzN0 1.285714 Tf -(\037) Tj -ET -BT -10.777379 0 0 14.369839 3674.685916 5182.419529 Tm -/T3romansHorzN0 1.285714 Tf -(\007) Tj -ET -BT -10.777379 0 0 14.369839 4461.605649 5182.419529 Tm -/T3romansHorzN0 1.285714 Tf -(\034) Tj -ET -4909 5224 m -4909 5224 l -S -48 1792 m -48 1792 l -S -BT -7.698128 0 0 10.26417 3643.123592 1889.673658 Tm -/T3romansHorzN0 1.285714 Tf -(\006\011\013\045\004\007\034\012\001\062\036) Tj -ET -3729 1907 m -3729 1882 l -S -BT -7.698128 0 0 10.26417 3643.123592 1912.254833 Tm -/T3romansHorzN0 1.285714 Tf -(\002\013\010\033\007) Tj -ET -BT -7.698128 0 0 10.26417 3643.123592 1932.783174 Tm -/T3romansHorzN0 1.285714 Tf -(\037\004\010\044\001) Tj -ET -3688 1948 m -3688 1907 l -S -3846 1948 m -3846 1907 l -S -3887 1948 m -3887 1907 l -S -BT -7.698128 0 0 10.26417 3850.459835 1912.254833 Tm -/T3romansHorzN0 1.285714 Tf -(\002\000\032\007) Tj -ET -BT -7.698128 0 0 10.26417 3850.459835 1932.783174 Tm -/T3romansHorzN0 1.285714 Tf -(\037\010\003\007) Tj -ET -BT -7.698128 0 0 10.26417 3915.710633 1912.254833 Tm -/T3romansHorzN0 1.285714 Tf -(\010\024) Tj -ET -2269 1882 m -2266 1882 l -2266 2072 l -2269 2069 l -f -2269 2069 m -2266 2072 l -4860 2072 l -4860 2069 l -f -BT -15.396256 0 0 20.528341 4713.090043 2010.839746 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -12.317005 0 0 16.422673 4641.974005 1916.604886 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -12.317005 0 0 16.422673 4785.672391 1916.604886 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -15.396256 0 0 20.528341 4261.466545 2041.632257 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -15.396256 0 0 20.528341 4261.466545 2008.786912 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -15.396256 0 0 20.528341 4261.466545 1975.941567 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -15.396256 0 0 20.528341 4261.466545 1943.096221 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -15.396256 0 0 20.528341 4261.466545 1910.250876 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 3766.513584 1937.426489 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 3920.47614 1937.426489 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 3766.513584 1916.898148 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 3733.448292 1889.673658 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 2286.420209 1937.426489 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 2341.84673 1937.426489 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 2397.27325 1937.426489 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 2438.329931 1937.426489 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 2479.386613 1937.426489 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 2286.420209 1957.95483 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 2341.84673 1957.95483 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 2397.27325 1957.95483 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 2438.329931 1957.95483 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 2479.386613 1957.95483 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 2286.420209 1978.483171 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 2341.84673 1978.483171 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 2397.27325 1978.483171 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 2438.329931 1978.483171 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 2479.386613 1978.483171 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 2286.420209 1999.011512 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 2341.84673 1999.011512 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 2397.27325 1999.011512 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 2438.329931 1999.011512 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 2479.386613 1999.011512 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 2286.420209 2019.539852 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 2341.84673 2019.539852 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 2397.27325 2019.539852 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 2438.329931 2019.539852 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 2479.386613 2019.539852 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 2286.420209 2040.068193 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 2341.84673 2040.068193 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 2397.27325 2040.068193 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 2438.329931 2040.068193 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 2479.386613 2040.068193 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 2286.420209 2060.596534 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 2341.84673 2060.596534 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 2397.27325 2060.596534 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 2438.329931 2060.596534 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 2479.386613 2060.596534 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 3115.765179 1937.426489 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 3224.345439 1932.783174 Tm -/T3romansHorzN0 1.285714 Tf -(\030\051\000\037\012\034\000\004\007\044\010\003\007\004\012\006\010\000\001) Tj -ET -BT -7.698128 0 0 10.26417 3115.765179 1957.95483 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 3224.345439 1953.311515 Tm -/T3romansHorzN0 1.285714 Tf -(\037\000\010\043\004\010\006\006\010\003\000\013\012\037\007\003\010\000\033\002\012\030\051\000\037) Tj -ET -BT -7.698128 0 0 10.26417 3115.765179 1978.483171 Tm -/T3romansHorzN0 1.285714 Tf -(\036) Tj -ET -BT -7.698128 0 0 10.26417 3224.345439 1973.839855 Tm -/T3romansHorzN0 1.285714 Tf -(\037\007\033\005\043\007\012\027\010\033\027\007\012\002\055\000\037\012\043\007\001\007\004\010\033\012\010\004\004\010\001\043\007\006\007\001\003) Tj -ET -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 2499.762896 4194.292385 Tm -/T3romansHorzN0 1.285714 Tf -(\001\011\001\050\000\036\002\036\012\057\014) Tj -ET -BT -12.317005 0 0 12.317005 2506.507922 4173.764044 Tm -/T3romansHorzN0 1.285714 Tf -(\015\017\027\011\033\003\012\037\013) Tj -ET -EMC -/OC /OC3 BDC -3005 3641 m -2985 3674 l -S -3005 3674 m -2985 3641 l -S -2985 3641 m -3005 3641 l -S -2985 3674 m -3005 3674 l -S -3013 3657 m -3013 3652 l -S -3013 3657 m -2995 3657 l -S -2995 3657 m -3013 3652 l -S -EMC -/OC /OC10 BDC -2905 3772 m -2905.567136 3763.608761 2912.919817 3756.25608 2921.989809 3756.25608 c -2931.0598 3756.25608 2938.412481 3763.608761 2938.412481 3772.678752 c -2938.412481 3781.748744 2931.0598 3789.101425 2921.989809 3789.101425 c -2912.919817 3789.101425 2905.567136 3781.748744 2905.567136 3772.678752 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 2910.259328 3766.52025 Tm -/T3romansHorzN0 1.285714 Tf -(\015\025) Tj -ET -EMC -/OC /OC10 BDC -2823 3658 m -2823.733049 3649.634507 2831.08573 3642.281826 2840.155722 3642.281826 c -2849.225713 3642.281826 2856.578394 3649.634507 2856.578394 3658.704498 c -2856.578394 3667.77449 2849.225713 3675.127171 2840.155722 3675.127171 c -2831.08573 3675.127171 2823.733049 3667.77449 2823.733049 3658.704498 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 2828.425241 3652.545996 Tm -/T3romansHorzN0 1.285714 Tf -(\015\035) Tj -ET -EMC -/OC /OC3 BDC -2881 3641 m -2862 3674 l -S -2881 3674 m -2862 3641 l -S -2862 3641 m -2881 3641 l -S -2862 3674 m -2881 3674 l -S -2889 3657 m -2889 3652 l -S -2889 3657 m -2871 3657 l -S -2871 3657 m -2889 3652 l -S -1 0.498039 0 RG -1 0.498039 0 rg -EMC -/OC /OC4 BDC -2901 3590 m -2912 3601 l -S -2907 3590 m -2918 3601 l -S -2948 3590 m -2959 3601 l -S -2955 3590 m -2966 3601 l -S -0 0 0 RG -0 0 0 rg -EMC -/OC /OC3 BDC -3289 3559 m -3276 3571 l -3292 3564 l -f -3290 3562 m -3317 3545 l -S -3317 3545 m -3333 3545 l -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 3338.250458 3559.913561 Tm -/T3romansHorzN0 1.285714 Tf -(\020\024\054\054\012\011\045\037) Tj -ET -BT -12.317005 0 0 12.317005 3339.423506 3538.212172 Tm -/T3romansHorzN0 1.285714 Tf -(\034\007\006\010\033\007\012\000\001\002\003\036) Tj -ET -BT -12.317005 0 0 12.317005 3341.183078 3517.683831 Tm -/T3romansHorzN0 1.285714 Tf -(\010\000\004\012\002\005\030\030\033\042) Tj -ET -1 0.498039 0 RG -1 0.498039 0 rg -EMC -/OC /OC4 BDC -2945 3353 m -2956 3364 l -S -2945 3359 m -2956 3370 l -S -2945 3400 m -2956 3411 l -S -2945 3406 m -2956 3417 l -S -2945 3447 m -2956 3458 l -S -2945 3453 m -2956 3464 l -S -2945 3494 m -2956 3505 l -S -2945 3500 m -2956 3511 l -S -2945 3542 m -2956 3552 l -S -2945 3548 m -2956 3559 l -S -0 0 0 RG -0 0 0 rg -EMC -/OC /OC5 BDC -BT --0 -12.317005 12.317005 -0 2964.040701 3465.742441 Tm -/T3romansHorzN0 1.285714 Tf -(\020\024\054\054\012\011\045\037) Tj -ET -BT -12.317005 0 0 12.317005 2741.047406 3548.31407 Tm -/T3romansHorzN0 1.285714 Tf -(\002\007\003\012\010\003) Tj -ET -BT -12.317005 0 0 12.317005 2738.114786 3527.785729 Tm -/T3romansHorzN0 1.285714 Tf -(\017\012\014\010\004\043) Tj -ET -BT -12.317005 0 0 12.317005 2588.94784 3735.59016 Tm -/T3romansHorzN0 1.285714 Tf -(\020\036\016\054\054) Tj -ET -BT -12.317005 0 0 12.317005 2607.130085 3715.061819 Tm -/T3romansHorzN0 1.285714 Tf -(\037\000\010) Tj -ET -1 0.498039 0 RG -1 0.498039 0 rg -EMC -/OC /OC4 BDC -2331 3595 m -2342 3606 l -S -2331 3601 m -2342 3612 l -S -0 0 0 RG -0 0 0 rg -EMC -/OC /OC10 BDC -2289 3638 m -2289.207517 3629.857728 2296.560198 3622.505047 2305.63019 3622.505047 c -2314.700181 3622.505047 2322.052862 3629.857728 2322.052862 3638.92772 c -2322.052862 3647.997712 2314.700181 3655.350393 2305.63019 3655.350393 c -2296.560198 3655.350393 2289.207517 3647.997712 2289.207517 3638.92772 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 2293.899709 3632.769218 Tm -/T3romansHorzN0 1.285714 Tf -(\023\023) Tj -ET -EMC -/OC /OC3 BDC -2347 3621 m -2327 3654 l -S -2347 3654 m -2327 3621 l -S -2327 3621 m -2347 3621 l -S -2327 3654 m -2347 3654 l -S -2355 3638 m -2355 3632 l -S -2355 3638 m -2337 3638 l -S -2337 3638 m -2355 3632 l -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 2195.389425 3588.099571 Tm -/T3romansHorzN0 1.285714 Tf -(\020\024\054\054\012\011\045\037) Tj -ET -1 0.498039 0 RG -1 0.498039 0 rg -EMC -/OC /OC4 BDC -2264 3569 m -2275 3580 l -S -2258 3569 m -2268 3580 l -S -2216 3569 m -2227 3580 l -S -2210 3569 m -2221 3580 l -S -2169 3569 m -2180 3580 l -S -2163 3569 m -2174 3580 l -S -0 0 0 RG -0 0 0 rg -EMC -/OC /OC3 BDC -2455 3544 m -2455 3558 l -S -2445 3558 m -2465 3558 l -S -2471 3584 m -2438 3565 l -S -2438 3584 m -2471 3565 l -S -2471 3565 m -2471 3584 l -S -2438 3565 m -2438 3584 l -S -2455 3575 m -2445 3558 l -S -2465 3558 m -2455 3575 l -S -2455 3575 m -2455 3611 l -S -2455 3575 m -2465 3558 l -2465 3558 l -2445 3558 l -f -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 2433.419721 3509.259029 Tm -/T3romansHorzN0 1.285714 Tf -(\027\007\001\003) Tj -ET -EMC -/OC /OC3 BDC -2457 3544 m -2455 3529 l -2455 3529 l -2453 3544 l -f -2444 3543 m -2446 3528 l -2446 3528 l -2439 3541 l -f -2442 3542 m -2436.887188 3553.949289 2425.955879 3561.586612 2413.515701 3562.58783 c -S -2466 3633 m -2444 3633 l -S -2444 3611 m -2466 3611 l -S -2444 3633 m -2444 3611 l -S -2466 3611 m -2466 3633 l -S -2455 3598 m -2434 3598 l -S -2422 3610 m -2409 3598 l -S -2434 3598 m -2422 3610 l -S -BT -10.26417 0 0 10.26417 2416.73572 3592.873676 Tm -/T3romansHorzN0 1.285714 Tf -(\004) Tj -ET -2409 3598 m -2422 3585 l -S -2422 3585 m -2434 3598 l -S -BT -12.317005 0 0 12.317005 2449.549132 3616.494991 Tm -/T3romansHorzN0 1.285714 Tf -(\002) Tj -ET -0 0 1 RG -0 0 1 rg -EMC -/OC /OC6 BDC -2455 3633 m -2455 3639 l -S -2455 3644 m -2455 3655 l -S -2455 3660 m -2455 3670 l -S -2455 3675 m -2455 3685 l -S -2455 3691 m -2455 3701 l -S -2455 3706 m -2455 3716 l -S -2455 3721 m -2455 3732 l -S -2455 3737 m -2455 3747 l -S -2455 3752 m -2455 3762 l -S -2455 3767 m -2455 3778 l -S -2455 3783 m -2455 3793 l -S -2455 3798 m -2455 3809 l -S -2455 3814 m -2455 3819 l -S -2567 3819 m -2560 3819 l -S -2555 3819 m -2544 3819 l -S -2539 3819 m -2529 3819 l -S -2524 3819 m -2513 3819 l -S -2508 3819 m -2498 3819 l -S -2493 3819 m -2483 3819 l -S -2478 3819 m -2467 3819 l -S -2462 3819 m -2455 3819 l -S -0 0 0 RG -0 0 0 rg -EMC -/OC /OC3 BDC -2513 3654 m -2471 3584 l -S -2499 3679 m -2499.03672 3663.016521 2512.271546 3649.781695 2528.597531 3649.781695 c -2544.923516 3649.781695 2558.158342 3663.016521 2558.158342 3679.342506 c -2558.158342 3695.668491 2544.923516 3708.903316 2528.597531 3708.903316 c -2512.271546 3708.903316 2499.03672 3695.668491 2499.03672 3679.342506 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 2504.550046 3682.640201 Tm -/T3romansHorzN0 1.285714 Tf -(\026\002\011\027) Tj -ET -BT -12.317005 0 0 12.317005 2510.122025 3664.34093 Tm -/T3romansHorzN0 1.285714 Tf -(\020\015\015) Tj -ET -BT -12.317005 0 0 12.317005 2486.759531 3588.099571 Tm -/T3romansHorzN0 1.285714 Tf -(\020\024\054\054\012\011\045\037) Tj -ET -BT -12.317005 0 0 12.317005 2399.69459 3488.730688 Tm -/T3romansHorzN0 1.285714 Tf -(\010\005\003\011\012\033\010\003\013\031) Tj -ET -BT -12.317005 0 0 12.317005 2385.031489 3468.202347 Tm -/T3romansHorzN0 1.285714 Tf -(\006\010\001\005\010\033\012\004\007\002\007\003) Tj -ET -EMC -/OC /OC10 BDC -2391 3537 m -2391.718034 3528.540538 2399.070715 3521.187857 2408.140707 3521.187857 c -2417.210699 3521.187857 2424.56338 3528.540538 2424.56338 3537.610529 c -2424.56338 3546.680521 2417.210699 3554.033202 2408.140707 3554.033202 c -2399.070715 3554.033202 2391.718034 3546.680521 2391.718034 3537.610529 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 2398.169799 3531.452027 Tm -/T3romansHorzN0 1.285714 Tf -(\023\020) Tj -ET -3297 2999 m -3319 2999 l -S -3297 3002 m -3280 2999 l -3280 2999 l -3297 2996 l -f -3264 3002 m -3280 2999 l -3280 2999 l -3264 2996 l -f -3280 2958 m -3280 3023 l -S -3264 2999 m -3241 2999 l -S -BT -12.317005 0 0 12.317005 3202.158824 3009.619672 Tm -/T3romansHorzN0 1.285714 Tf -(\027\007\001\037\011\004) Tj -ET -BT -12.317005 0 0 12.317005 3287.314214 3009.619654 Tm -/T3romansHorzN0 1.285714 Tf -(\013\033\000\007\001\003) Tj -ET -EMC -/OC /OC3 BDC -2252 3283 m -2233 3283 l -S -2233 3283 m -2252 3250 l -S -2233 3250 m -2252 3283 l -S -2252 3250 m -2233 3250 l -S -2233 3267 m -2233.092441 3261.757764 2237.504049 3257.346155 2242.946044 3257.346155 c -2248.388039 3257.346155 2252.799648 3261.757764 2252.799648 3267.199759 c -2252.799648 3272.641754 2248.388039 3277.053362 2242.946044 3277.053362 c -2237.504049 3277.053362 2233.092441 3272.641754 2233.092441 3267.199759 c -S -2233 3283 m -2237 3275 l -2238 3275 l -2238 3275 l -2238 3275 l -2238 3275 l -2238 3276 l -2238 3276 l -2238 3276 l -2239 3276 l -2239 3276 l -2239 3276 l -2239 3276 l -2239 3276 l -2239 3276 l -2239 3276 l -2240 3276 l -2240 3276 l -2240 3276 l -2240 3276 l -2240 3276 l -2240 3276 l -2241 3276 l -2241 3276 l -2241 3276 l -2241 3276 l -2241 3276 l -2241 3277 l -2242 3277 l -2242 3277 l -2242 3277 l -2242 3277 l -2242 3277 l -2242 3277 l -2243 3277 l -2243 3277 l -2243 3277 l -2243 3277 l -2243 3277 l -2243 3277 l -2244 3276 l -2244 3276 l -2244 3276 l -2244 3276 l -2244 3276 l -2244 3276 l -2245 3276 l -2245 3276 l -2245 3276 l -2245 3276 l -2245 3276 l -2245 3276 l -2246 3276 l -2246 3276 l -2246 3276 l -2246 3276 l -2246 3276 l -2246 3276 l -2246 3276 l -2247 3276 l -2247 3276 l -2247 3275 l -2247 3275 l -2247 3275 l -2247 3275 l -2248 3275 l -2252 3283 l -2233 3283 l -2242 3257 m -2242 3257 l -2242 3257 l -2242 3257 l -2242 3257 l -2242 3257 l -2241 3257 l -2241 3257 l -2241 3257 l -2241 3257 l -2241 3257 l -2241 3257 l -2240 3257 l -2240 3257 l -2240 3257 l -2240 3257 l -2240 3257 l -2240 3257 l -2239 3257 l -2239 3257 l -2239 3257 l -2239 3257 l -2239 3258 l -2239 3258 l -2239 3258 l -2238 3258 l -2238 3258 l -2238 3258 l -2238 3258 l -2238 3258 l -2238 3258 l -2238 3258 l -2237 3258 l -2233 3250 l -2252 3250 l -2248 3258 l -2247 3258 l -2247 3258 l -2247 3258 l -2247 3258 l -2247 3258 l -2247 3258 l -2246 3258 l -2246 3258 l -2246 3258 l -2246 3258 l -2246 3257 l -2246 3257 l -2246 3257 l -2245 3257 l -2245 3257 l -2245 3257 l -2245 3257 l -2245 3257 l -2245 3257 l -2244 3257 l -2244 3257 l -2244 3257 l -2244 3257 l -2244 3257 l -2244 3257 l -2243 3257 l -2243 3257 l -2243 3257 l -2243 3257 l -2243 3257 l -2243 3257 l -2242 3257 l -f* -3235 3584 m -3202 3565 l -S -3202 3584 m -3235 3565 l -S -3235 3565 m -3235 3584 l -S -3202 3565 m -3202 3584 l -S -3209 3575 m -3209.256075 3569.558918 3213.667684 3565.14731 3219.109679 3565.14731 c -3224.551674 3565.14731 3228.963283 3569.558918 3228.963283 3575.000913 c -3228.963283 3580.442908 3224.551674 3584.854517 3219.109679 3584.854517 c -3213.667684 3584.854517 3209.256075 3580.442908 3209.256075 3575.000913 c -S -2886 3096 m -2854 3076 l -S -2854 3096 m -2886 3076 l -S -2886 3076 m -2886 3096 l -S -2854 3076 m -2854 3096 l -S -2860 3086 m -2860.592106 3081.32066 2865.003714 3076.909052 2870.445709 3076.909052 c -2875.887704 3076.909052 2880.299313 3081.32066 2880.299313 3086.762655 c -2880.299313 3092.20465 2875.887704 3096.616259 2870.445709 3096.616259 c -2865.003714 3096.616259 2860.592106 3092.20465 2860.592106 3086.762655 c -S -2605 3523 m -2605 3504 l -S -2605 3504 m -2638 3523 l -S -2638 3504 m -2605 3523 l -S -2638 3523 m -2638 3504 l -S -2611 3514 m -2611.939582 3508.578179 2616.351191 3504.16657 2621.793186 3504.16657 c -2627.235181 3504.16657 2631.646789 3508.578179 2631.646789 3514.020174 c -2631.646789 3519.462169 2627.235181 3523.873777 2621.793186 3523.873777 c -2616.351191 3523.873777 2611.939582 3519.462169 2611.939582 3514.020174 c -S -2605 3504 m -2613 3508 l -2613 3509 l -2613 3509 l -2613 3509 l -2613 3509 l -2612 3509 l -2612 3509 l -2612 3509 l -2612 3510 l -2612 3510 l -2612 3510 l -2612 3510 l -2612 3510 l -2612 3510 l -2612 3511 l -2612 3511 l -2612 3511 l -2612 3511 l -2612 3511 l -2612 3511 l -2612 3512 l -2612 3512 l -2612 3512 l -2612 3512 l -2612 3512 l -2612 3512 l -2611 3513 l -2611 3513 l -2611 3513 l -2611 3513 l -2611 3513 l -2611 3513 l -2611 3514 l -2611 3514 l -2611 3514 l -2611 3514 l -2611 3514 l -2611 3514 l -2611 3515 l -2612 3515 l -2612 3515 l -2612 3515 l -2612 3515 l -2612 3515 l -2612 3515 l -2612 3516 l -2612 3516 l -2612 3516 l -2612 3516 l -2612 3516 l -2612 3516 l -2612 3517 l -2612 3517 l -2612 3517 l -2612 3517 l -2612 3517 l -2612 3517 l -2612 3518 l -2612 3518 l -2612 3518 l -2613 3518 l -2613 3518 l -2613 3518 l -2613 3518 l -2613 3519 l -2605 3523 l -2605 3504 l -2631 3514 m -2631 3513 l -2631 3513 l -2631 3513 l -2631 3513 l -2631 3513 l -2631 3513 l -2631 3512 l -2631 3512 l -2631 3512 l -2631 3512 l -2631 3512 l -2631 3512 l -2631 3511 l -2631 3511 l -2631 3511 l -2631 3511 l -2631 3511 l -2631 3511 l -2631 3510 l -2631 3510 l -2631 3510 l -2630 3510 l -2630 3510 l -2630 3510 l -2630 3509 l -2630 3509 l -2630 3509 l -2630 3509 l -2630 3509 l -2630 3509 l -2630 3509 l -2630 3508 l -2638 3504 l -2638 3523 l -2630 3519 l -2630 3518 l -2630 3518 l -2630 3518 l -2630 3518 l -2630 3518 l -2630 3518 l -2630 3518 l -2630 3517 l -2630 3517 l -2630 3517 l -2631 3517 l -2631 3517 l -2631 3517 l -2631 3516 l -2631 3516 l -2631 3516 l -2631 3516 l -2631 3516 l -2631 3516 l -2631 3515 l -2631 3515 l -2631 3515 l -2631 3515 l -2631 3515 l -2631 3515 l -2631 3515 l -2631 3514 l -2631 3514 l -2631 3514 l -2631 3514 l -2631 3514 l -2631 3514 l -f* -1756 4001 m -1776 4001 l -S -1756 4009 m -1776 4009 l -S -1756 4051 m -1776 4051 l -S -1756 4042 m -1776 4042 l -S -3291 3585 m -3276 3576 l -3287 3589 l -f -3289 3587 m -3317 3610 l -S -3317 3610 m -3333 3610 l -S -EMC -/OC /OC5 BDC -BT -8.621903 0 0 8.621903 3339.306201 3618.85701 Tm -/T3romansHorzN0 1.285714 Tf -(\020) Tj -ET -3340 3611 m -3350 3625 l -S -BT -8.621903 0 0 8.621903 3345.464704 3610.235107 Tm -/T3romansHorzN0 1.285714 Tf -(\015) Tj -ET -BT -12.317005 0 0 12.317005 3353.67604 3612.698508 Tm -/T3romansHorzN0 1.285714 Tf -(\040\012\001\030\003\012\034\007\006\010\033\007) Tj -ET -BT -12.317005 0 0 12.317005 3340.01003 3593.812435 Tm -/T3romansHorzN0 1.285714 Tf -(\013\011\001\001\007\013\003\011\004) Tj -ET -EMC -/OC /OC10 BDC -1407 3751 m -1407.22977 3742.053332 1414.582451 3734.700651 1423.652443 3734.700651 c -1432.722434 3734.700651 1440.075115 3742.053332 1440.075115 3751.123324 c -1440.075115 3760.193316 1432.722434 3767.545997 1423.652443 3767.545997 c -1414.582451 3767.545997 1407.22977 3760.193316 1407.22977 3751.123324 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 1418.080465 3744.964822 Tm -/T3romansHorzN0 1.285714 Tf -(\021) Tj -ET -EMC -/OC /OC3 BDC -1465 3733 m -1445 3766 l -S -1465 3766 m -1445 3733 l -S -1445 3733 m -1465 3733 l -S -1445 3766 m -1465 3766 l -S -1473 3750 m -1473 3745 l -S -1473 3750 m -1455 3750 l -S -1455 3750 m -1473 3745 l -S -0 1 1 RG -0 1 1 rg -EMC -/OC /OC2 BDC -1268 3733 m -1269 3733 l -1269 3694 l -1268 3694 l -f -1268 3733 m -1269 3733 l -1269 3733 l -1268 3733 l -f -1268 3733 m -1269 3733 l -1269 3694 l -1268 3694 l -f -1269 3694 m -1268 3694 l -1268 3694 l -1269 3694 l -f -1268 3733 m -1268 3694 l -1268 3694 l -1268 3733 l -f -1269 3733 m -1269 3694 l -1269 3694 l -1269 3733 l -f -1 0.498039 0.623529 RG -1 0.498039 0.623529 rg -EMC -/OC /OC9 BDC -1269 3805 m -1269 3766 l -S -0 0 0 RG -0 0 0 rg -EMC -/OC /OC10 BDC -1299 3860 m -1299.425382 3851.239639 1306.778063 3843.886958 1315.848054 3843.886958 c -1324.918046 3843.886958 1332.270727 3851.239639 1332.270727 3860.30963 c -1332.270727 3869.379622 1324.918046 3876.732303 1315.848054 3876.732303 c -1306.778063 3876.732303 1299.425382 3869.379622 1299.425382 3860.30963 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 1302.944526 3854.151128 Tm -/T3romansHorzN0 1.285714 Tf -(\020\017) Tj -ET -EMC -/OC /OC3 BDC -1239 3835 m -1239.706175 3819.231295 1252.941 3805.99647 1269.266985 3805.99647 c -1285.59297 3805.99647 1298.827796 3819.231295 1298.827796 3835.55728 c -1298.827796 3851.883265 1285.59297 3865.118091 1269.266985 3865.118091 c -1252.941 3865.118091 1239.706175 3851.883265 1239.706175 3835.55728 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 1260.762387 3838.854976 Tm -/T3romansHorzN0 1.285714 Tf -(\030\000) Tj -ET -BT -12.317005 0 0 12.317005 1253.430837 3820.555705 Tm -/T3romansHorzN0 1.285714 Tf -(\023\021\020) Tj -ET -EMC -/OC /OC10 BDC -1221 3751 m -1221.09809 3742.053332 1228.450771 3734.700651 1237.520763 3734.700651 c -1246.590754 3734.700651 1253.943435 3742.053332 1253.943435 3751.123324 c -1253.943435 3760.193316 1246.590754 3767.545997 1237.520763 3767.545997 c -1228.450771 3767.545997 1221.09809 3760.193316 1221.09809 3751.123324 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 1224.910496 3744.964822 Tm -/T3romansHorzN0 1.285714 Tf -(\020\023) Tj -ET -EMC -/OC /OC3 BDC -1279 3733 m -1259 3766 l -S -1279 3766 m -1259 3733 l -S -1259 3733 m -1279 3733 l -S -1259 3766 m -1279 3766 l -S -1287 3750 m -1287 3745 l -S -1287 3750 m -1269 3750 l -S -1269 3750 m -1287 3745 l -S -0 1 1 RG -0 1 1 rg -EMC -/OC /OC2 BDC -1454 3733 m -1456 3733 l -1456 3694 l -1454 3694 l -f -1454 3733 m -1456 3733 l -1456 3733 l -1454 3733 l -f -1454 3733 m -1456 3733 l -1456 3694 l -1454 3694 l -f -1456 3694 m -1454 3694 l -1454 3694 l -1456 3694 l -f -1454 3733 m -1454 3694 l -1454 3694 l -1454 3733 l -f -1456 3733 m -1456 3694 l -1456 3694 l -1456 3733 l -f -0 0 0 RG -0 0 0 rg -EMC -/OC /OC3 BDC -1806 3860 m -1806 3841 l -S -1806 3841 m -1839 3860 l -S -1839 3841 m -1806 3860 l -S -1839 3860 m -1839 3841 l -S -1813 3850 m -1813.363277 3845.453862 1817.774886 3841.042253 1823.216881 3841.042253 c -1828.658876 3841.042253 1833.070485 3845.453862 1833.070485 3850.895857 c -1833.070485 3856.337852 1828.658876 3860.74946 1823.216881 3860.74946 c -1817.774886 3860.74946 1813.363277 3856.337852 1813.363277 3850.895857 c -S -1806 3841 m -1814 3845 l -1814 3845 l -1814 3846 l -1814 3846 l -1814 3846 l -1814 3846 l -1814 3846 l -1814 3846 l -1814 3847 l -1814 3847 l -1814 3847 l -1813 3847 l -1813 3847 l -1813 3847 l -1813 3847 l -1813 3848 l -1813 3848 l -1813 3848 l -1813 3848 l -1813 3848 l -1813 3848 l -1813 3849 l -1813 3849 l -1813 3849 l -1813 3849 l -1813 3849 l -1813 3849 l -1813 3850 l -1813 3850 l -1813 3850 l -1813 3850 l -1813 3850 l -1813 3850 l -1813 3851 l -1813 3851 l -1813 3851 l -1813 3851 l -1813 3851 l -1813 3851 l -1813 3852 l -1813 3852 l -1813 3852 l -1813 3852 l -1813 3852 l -1813 3852 l -1813 3853 l -1813 3853 l -1813 3853 l -1813 3853 l -1813 3853 l -1813 3853 l -1813 3854 l -1813 3854 l -1813 3854 l -1814 3854 l -1814 3854 l -1814 3854 l -1814 3854 l -1814 3855 l -1814 3855 l -1814 3855 l -1814 3855 l -1814 3855 l -1814 3855 l -1814 3855 l -1806 3860 l -1806 3841 l -1833 3850 m -1833 3850 l -1833 3850 l -1833 3850 l -1833 3850 l -1833 3850 l -1833 3849 l -1833 3849 l -1832 3849 l -1832 3849 l -1832 3849 l -1832 3849 l -1832 3848 l -1832 3848 l -1832 3848 l -1832 3848 l -1832 3848 l -1832 3848 l -1832 3847 l -1832 3847 l -1832 3847 l -1832 3847 l -1832 3847 l -1832 3847 l -1832 3847 l -1832 3846 l -1832 3846 l -1832 3846 l -1831 3846 l -1831 3846 l -1831 3846 l -1831 3845 l -1831 3845 l -1839 3841 l -1839 3860 l -1831 3855 l -1831 3855 l -1831 3855 l -1831 3855 l -1831 3855 l -1832 3855 l -1832 3855 l -1832 3854 l -1832 3854 l -1832 3854 l -1832 3854 l -1832 3854 l -1832 3854 l -1832 3854 l -1832 3853 l -1832 3853 l -1832 3853 l -1832 3853 l -1832 3853 l -1832 3853 l -1832 3852 l -1832 3852 l -1832 3852 l -1832 3852 l -1832 3852 l -1833 3852 l -1833 3851 l -1833 3851 l -1833 3851 l -1833 3851 l -1833 3851 l -1833 3851 l -1833 3850 l -f* -1756 3550 m -1776 3550 l -S -1756 3558 m -1776 3558 l -S -1756 3599 m -1776 3599 l -S -1756 3591 m -1776 3591 l -S -0 1 0 RG -0 1 0 rg -EMC -/OC /OC7 BDC -1726 3575 m -1766 3575 l -S -0 0 0 RG -0 0 0 rg -EMC -/OC /OC3 BDC -1726 3584 m -1726 3565 l -S -1726 3565 m -1694 3584 l -S -1694 3565 m -1726 3584 l -S -1694 3584 m -1694 3565 l -S -1700 3575 m -1700.571687 3569.558918 1704.983295 3565.14731 1710.42529 3565.14731 c -1715.867285 3565.14731 1720.278894 3569.558918 1720.278894 3575.000913 c -1720.278894 3580.442908 1715.867285 3584.854517 1710.42529 3584.854517 c -1704.983295 3584.854517 1700.571687 3580.442908 1700.571687 3575.000913 c -S -1726 3565 m -1718 3569 l -1718 3570 l -1719 3570 l -1719 3570 l -1719 3570 l -1719 3570 l -1719 3570 l -1719 3570 l -1719 3571 l -1719 3571 l -1719 3571 l -1719 3571 l -1719 3571 l -1719 3571 l -1719 3572 l -1719 3572 l -1719 3572 l -1719 3572 l -1720 3572 l -1720 3572 l -1720 3573 l -1720 3573 l -1720 3573 l -1720 3573 l -1720 3573 l -1720 3573 l -1720 3574 l -1720 3574 l -1720 3574 l -1720 3574 l -1720 3574 l -1720 3574 l -1720 3575 l -1720 3575 l -1720 3575 l -1720 3575 l -1720 3575 l -1720 3575 l -1720 3575 l -1720 3576 l -1720 3576 l -1720 3576 l -1720 3576 l -1720 3576 l -1720 3576 l -1720 3577 l -1720 3577 l -1719 3577 l -1719 3577 l -1719 3577 l -1719 3577 l -1719 3578 l -1719 3578 l -1719 3578 l -1719 3578 l -1719 3578 l -1719 3578 l -1719 3579 l -1719 3579 l -1719 3579 l -1719 3579 l -1719 3579 l -1719 3579 l -1718 3579 l -1718 3580 l -1726 3584 l -1726 3565 l -1700 3575 m -1700 3574 l -1700 3574 l -1700 3574 l -1700 3574 l -1700 3574 l -1700 3574 l -1700 3573 l -1700 3573 l -1700 3573 l -1700 3573 l -1700 3573 l -1700 3573 l -1700 3572 l -1700 3572 l -1700 3572 l -1700 3572 l -1700 3572 l -1701 3572 l -1701 3571 l -1701 3571 l -1701 3571 l -1701 3571 l -1701 3571 l -1701 3571 l -1701 3570 l -1701 3570 l -1701 3570 l -1701 3570 l -1701 3570 l -1701 3570 l -1701 3570 l -1701 3569 l -1694 3565 l -1694 3584 l -1701 3580 l -1701 3579 l -1701 3579 l -1701 3579 l -1701 3579 l -1701 3579 l -1701 3579 l -1701 3579 l -1701 3578 l -1701 3578 l -1701 3578 l -1701 3578 l -1701 3578 l -1701 3578 l -1701 3577 l -1700 3577 l -1700 3577 l -1700 3577 l -1700 3577 l -1700 3577 l -1700 3576 l -1700 3576 l -1700 3576 l -1700 3576 l -1700 3576 l -1700 3576 l -1700 3575 l -1700 3575 l -1700 3575 l -1700 3575 l -1700 3575 l -1700 3575 l -1700 3575 l -f* -EMC -/OC /OC10 BDC -1694 3609 m -1694.002617 3600.117107 1701.355298 3592.764426 1710.42529 3592.764426 c -1719.495282 3592.764426 1726.847963 3600.117107 1726.847963 3609.187098 c -1726.847963 3618.25709 1719.495282 3625.609771 1710.42529 3625.609771 c -1701.355298 3625.609771 1694.002617 3618.25709 1694.002617 3609.187098 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 1698.69481 3603.028596 Tm -/T3romansHorzN0 1.285714 Tf -(\023\025) Tj -ET -BT -12.317005 0 0 12.317005 182.882669 3085.585612 Tm -/T3romansHorzN0 1.285714 Tf -(\044\010\003\007\004) Tj -ET -BT -12.317005 0 0 12.317005 169.392616 3060.483887 Tm -/T3romansHorzN0 1.285714 Tf -(\002\005\030\030\033\042) Tj -ET -1 0 0 RG -1 0 0 rg -EMC -/OC /OC8 BDC -556 3081 m -556 3078 l -454 3078 l -454 3081 l -f -556 3081 m -556 3078 l -556 3078 l -556 3081 l -f -556 3081 m -556 3078 l -454 3078 l -454 3081 l -f -454 3078 m -454 3081 l -454 3081 l -454 3078 l -f -556 3081 m -454 3081 l -454 3081 l -556 3081 l -f -556 3078 m -454 3078 l -454 3078 l -556 3078 l -f -0 0 0 RG -0 0 0 rg -EMC -/OC /OC3 BDC -454 3070 m -421 3090 l -S -421 3090 m -421 3070 l -S -454 3090 m -454 3070 l -S -0 J -1 j -4.105668 w -439 3080 m -439.921554 3081.492884 439.002469 3082.411969 437.86872 3082.411969 c -436.734971 3082.411969 435.815886 3081.492884 435.815886 3080.359135 c -S -1 J -1 j -0.708661 w -0 J -1 j -4.105668 w -435 3080 m -435.815886 3079.225386 436.734971 3078.306301 437.86872 3078.306301 c -439.002469 3078.306301 439.921554 3079.225386 439.921554 3080.359135 c -S -1 J -1 j -0.708661 w -0.708661 w -563 3092 m -563 3155 l -S -454 3090 m -473 3123 l -S -458 3149 m -458.889476 3132.753193 472.124301 3119.518367 488.450286 3119.518367 c -504.776271 3119.518367 518.011097 3132.753193 518.011097 3149.079178 c -518.011097 3165.405163 504.776271 3178.639988 488.450286 3178.639988 c -472.124301 3178.639988 458.889476 3165.405163 458.889476 3149.079178 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 475.546758 3152.376873 Tm -/T3romansHorzN0 1.285714 Tf -(\034\044) Tj -ET -BT -12.317005 0 0 12.317005 471.147828 3134.077602 Tm -/T3romansHorzN0 1.285714 Tf -(\024\017\021) Tj -ET -EMC -/OC /OC3 BDC -533 3184 m -533.728272 3168.374742 546.963097 3155.139916 563.289082 3155.139916 c -579.615067 3155.139916 592.849893 3168.374742 592.849893 3184.700727 c -592.849893 3201.026712 579.615067 3214.261538 563.289082 3214.261538 c -546.963097 3214.261538 533.728272 3201.026712 533.728272 3184.700727 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 551.26534 3187.998423 Tm -/T3romansHorzN0 1.285714 Tf -(\034\011) Tj -ET -BT -12.317005 0 0 12.317005 545.693362 3169.699151 Tm -/T3romansHorzN0 1.285714 Tf -(\015\025\023) Tj -ET -EMC -/OC /OC3 BDC -563 3076 m -563 3084 l -S -569 3070 m -569 3090 l -S -556 3070 m -556 3090 l -S -EMC -/OC /OC0 BDC -357 3225 m -388 3225 l -S -398 3225 m -409 3225 l -S -419 3225 m -470 3225 l -S -481 3225 m -491 3225 l -S -501 3225 m -552 3225 l -S -563 3225 m -573 3225 l -S -583 3225 m -634 3225 l -S -645 3225 m -655 3225 l -S -665 3225 m -697 3225 l -S -697 3225 m -697 3177 l -S -697 3167 m -697 3157 l -S -697 3147 m -697 3095 l -S -697 3085 m -697 3075 l -S -697 3064 m -697 3013 l -S -697 3003 m -697 2993 l -S -697 2982 m -697 2935 l -S -697 2935 m -665 2935 l -S -655 2935 m -645 2935 l -S -634 2935 m -583 2935 l -S -573 2935 m -563 2935 l -S -552 2935 m -501 2935 l -S -491 2935 m -481 2935 l -S -470 2935 m -419 2935 l -S -409 2935 m -398 2935 l -S -388 2935 m -357 2935 l -S -357 2935 m -357 2982 l -S -357 2993 m -357 3003 l -S -357 3013 m -357 3064 l -S -357 3075 m -357 3085 l -S -357 3095 m -357 3147 l -S -357 3157 m -357 3167 l -S -357 3177 m -357 3225 l -S -EMC -/OC /OC3 BDC -625 3070 m -625 3090 l -S -641 3075 m -641 3085 l -S -641 3085 m -625 3090 l -S -641 3075 m -625 3070 l -S -437 3080 m -437 3256 l -S -422 3256 m -422.208131 3260.273852 429.219615 3262.950693 437.86872 3262.950693 c -446.517825 3262.950693 453.529309 3260.273852 453.529309 3256.971801 c -453.529309 3253.669751 446.517825 3250.99291 437.86872 3250.99291 c -429.219615 3250.99291 422.208131 3253.669751 422.208131 3256.971801 c -S -426 3261 m -448 3252 l -S -448 3261 m -426 3252 l -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 400.03792 3269.109195 Tm -/T3romansHorzN0 1.285714 Tf -(\002\030\000\001\037\033\007) Tj -ET -BT -12.317005 0 0 12.317005 607.423857 3093.555925 Tm -/T3romansHorzN0 1.285714 Tf -(\017\040\026\023\040) Tj -ET -BT -12.317005 0 0 12.317005 513.137116 2941.461428 Tm -/T3romansHorzN0 1.285714 Tf -(\030\000\003) Tj -ET -EMC -/OC /OC3 BDC -872 3104 m -863 3090 l -867 3106 l -f -870 3105 m -893 3161 l -S -893 3161 m -909 3161 l -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 916.369628 3165.285704 Tm -/T3romansHorzN0 1.285714 Tf -(\013\033\010\002\002\012\020\016\024) Tj -ET -BT -12.317005 0 0 12.317005 917.542676 3144.757363 Tm -/T3romansHorzN0 1.285714 Tf -(\010\001\002\000\012\014\020\035\036\016) Tj -ET -EMC -/OC /OC3 BDC -863 3090 m -863 3070 l -S -855 3090 m -855 3070 l -S -863 3080 m -896 3080 l -S -863 3070 m -863 3090 l -S -896 3070 m -896 3090 l -S -876 3080 m -891 3062 l -S -895 3066 m -886 3059 l -S -904 3033 m -904.557633 3016.826058 917.792458 3003.591233 934.118443 3003.591233 c -950.444428 3003.591233 963.679254 3016.826058 963.679254 3033.152043 c -963.679254 3049.478028 950.444428 3062.712854 934.118443 3062.712854 c -917.792458 3062.712854 904.557633 3049.478028 904.557633 3033.152043 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 927.959941 3036.449739 Tm -/T3romansHorzN0 1.285714 Tf -(\034) Tj -ET -BT -12.317005 0 0 12.317005 922.681225 3018.150468 Tm -/T3romansHorzN0 1.285714 Tf -(\017\021) Tj -ET -EMC -/OC /OC3 BDC -896 3070 m -913 3054 l -S -1499 3070 m -1466 3090 l -S -1466 3090 m -1466 3070 l -S -1499 3090 m -1499 3070 l -S -0 J -1 j -4.105668 w -1485 3080 m -1485.369396 3081.492884 1484.450311 3082.411969 1483.316562 3082.411969 c -1482.182813 3082.411969 1481.263728 3081.492884 1481.263728 3080.359135 c -S -1 J -1 j -0.708661 w -0 J -1 j -4.105668 w -1481 3080 m -1481.263728 3079.225386 1482.182813 3078.306301 1483.316562 3078.306301 c -1484.450311 3078.306301 1485.369396 3079.225386 1485.369396 3080.359135 c -S -1 J -1 j -0.708661 w -0.708661 w -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 1470.119771 3094.728973 Tm -/T3romansHorzN0 1.285714 Tf -(\001\011) Tj -ET -EMC -/OC /OC10 BDC -1467 3048 m -1467.304175 3038.982529 1474.656856 3031.629848 1483.726848 3031.629848 c -1492.79684 3031.629848 1500.149521 3038.982529 1500.149521 3048.052521 c -1500.149521 3057.122512 1492.79684 3064.475193 1483.726848 3064.475193 c -1474.656856 3064.475193 1467.304175 3057.122512 1467.304175 3048.052521 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 1477.861608 3041.894018 Tm -/T3romansHorzN0 1.285714 Tf -(\015) Tj -ET -BT -12.317005 0 0 12.317005 1533.743075 3086.928204 Tm -/T3romansHorzN0 1.285714 Tf -(\023\040) Tj -ET -EMC -/OC /OC3 BDC -1084 3586 m -1064 3553 l -S -1064 3553 m -1084 3553 l -S -1064 3586 m -1084 3586 l -S -0 J -1 j -4.105668 w -1074 3571 m -1073.579892 3571.818153 1072.660806 3570.899068 1072.660806 3569.765319 c -1072.660806 3568.63157 1073.579892 3567.712485 1074.713641 3567.712485 c -S -1 J -1 j -0.708661 w -0 J -1 j -4.105668 w -1074 3567 m -1075.84739 3567.712485 1076.766475 3568.63157 1076.766475 3569.765319 c -1076.766475 3570.899068 1075.84739 3571.818153 1074.713641 3571.818153 c -S -1 J -1 j -0.708661 w -0.708661 w -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 1030.724339 3563.606817 Tm -/T3romansHorzN0 1.285714 Tf -(\001\013) Tj -ET -EMC -/OC /OC10 BDC -1090 3570 m -1090.597582 3561.105613 1097.950263 3553.752932 1107.020255 3553.752932 c -1116.090246 3553.752932 1123.442927 3561.105613 1123.442927 3570.175605 c -1123.442927 3579.245597 1116.090246 3586.598278 1107.020255 3586.598278 c -1097.950263 3586.598278 1090.597582 3579.245597 1090.597582 3570.175605 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 1101.155014 3564.017103 Tm -/T3romansHorzN0 1.285714 Tf -(\016) Tj -ET -1 0 0 RG -1 0 0 rg -EMC -/OC /OC8 BDC -1765 4225 m -1768 4225 l -1768 4156 l -1765 4156 l -f -1765 4225 m -1768 4225 l -1768 4225 l -1765 4225 l -f -1765 4225 m -1768 4225 l -1768 4156 l -1765 4156 l -f -1768 4156 m -1765 4156 l -1765 4156 l -1768 4156 l -f -1765 4225 m -1765 4156 l -1765 4156 l -1765 4225 l -f -1768 4225 m -1768 4156 l -1768 4156 l -1768 4225 l -f -1765 4140 m -1768 4140 l -1768 4051 l -1765 4051 l -f -1765 4140 m -1768 4140 l -1768 4140 l -1765 4140 l -f -1765 4140 m -1768 4140 l -1768 4051 l -1765 4051 l -f -1768 4051 m -1765 4051 l -1765 4051 l -1768 4051 l -f -1765 4140 m -1765 4051 l -1765 4051 l -1765 4140 l -f -1768 4140 m -1768 4051 l -1768 4051 l -1768 4140 l -f -0 0 0 RG -0 0 0 rg -EMC -/OC /OC3 BDC -1776 4140 m -1756 4140 l -S -1771 4156 m -1761 4156 l -S -1761 4156 m -1756 4140 l -S -1771 4156 m -1776 4140 l -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 1687.191127 4142.199625 Tm -/T3romansHorzN0 1.285714 Tf -(\023\040\060\015) Tj -ET -BT -7.606829 0 0 7.606829 1736.173308 4142.199625 Tm -/T3romansHorzN0 1.285714 Tf -(\015) Tj -ET -1730 4144 m -1739 4154 l -S -BT -7.606829 0 0 7.606829 1726.263443 4147.887597 Tm -/T3romansHorzN0 1.285714 Tf -(\020) Tj -ET -BT -12.317005 0 0 12.317005 1732.963448 4142.199625 Tm -/T3romansHorzN0 1.285714 Tf -(\012\040) Tj -ET -EMC -/OC /OC3 BDC -1776 4225 m -1756 4225 l -S -1776 4234 m -1756 4234 l -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 1738.291454 3779.867557 Tm -/T3romansHorzN0 1.285714 Tf -(\023\040) Tj -ET -0 1 0 RG -0 1 0 rg -EMC -/OC /OC7 BDC -1806 3740 m -1766 3740 l -S -0 0 0 RG -0 0 0 rg -EMC -/OC /OC3 BDC -1806 3750 m -1806 3730 l -S -1806 3730 m -1839 3750 l -S -1839 3730 m -1806 3750 l -S -1839 3750 m -1839 3730 l -S -1813 3740 m -1813.363277 3735.261191 1817.774886 3730.849582 1823.216881 3730.849582 c -1828.658876 3730.849582 1833.070485 3735.261191 1833.070485 3740.703186 c -1833.070485 3746.145181 1828.658876 3750.556789 1823.216881 3750.556789 c -1817.774886 3750.556789 1813.363277 3746.145181 1813.363277 3740.703186 c -S -1806 3730 m -1814 3735 l -1814 3735 l -1814 3735 l -1814 3736 l -1814 3736 l -1814 3736 l -1814 3736 l -1814 3736 l -1814 3736 l -1814 3736 l -1814 3737 l -1813 3737 l -1813 3737 l -1813 3737 l -1813 3737 l -1813 3737 l -1813 3738 l -1813 3738 l -1813 3738 l -1813 3738 l -1813 3738 l -1813 3738 l -1813 3739 l -1813 3739 l -1813 3739 l -1813 3739 l -1813 3739 l -1813 3739 l -1813 3740 l -1813 3740 l -1813 3740 l -1813 3740 l -1813 3740 l -1813 3740 l -1813 3741 l -1813 3741 l -1813 3741 l -1813 3741 l -1813 3741 l -1813 3741 l -1813 3742 l -1813 3742 l -1813 3742 l -1813 3742 l -1813 3742 l -1813 3742 l -1813 3743 l -1813 3743 l -1813 3743 l -1813 3743 l -1813 3743 l -1813 3743 l -1813 3743 l -1813 3744 l -1814 3744 l -1814 3744 l -1814 3744 l -1814 3744 l -1814 3744 l -1814 3745 l -1814 3745 l -1814 3745 l -1814 3745 l -1814 3745 l -1814 3745 l -1806 3750 l -1806 3730 l -1833 3740 m -1833 3740 l -1833 3740 l -1833 3740 l -1833 3740 l -1833 3739 l -1833 3739 l -1833 3739 l -1832 3739 l -1832 3739 l -1832 3739 l -1832 3738 l -1832 3738 l -1832 3738 l -1832 3738 l -1832 3738 l -1832 3738 l -1832 3737 l -1832 3737 l -1832 3737 l -1832 3737 l -1832 3737 l -1832 3737 l -1832 3736 l -1832 3736 l -1832 3736 l -1832 3736 l -1832 3736 l -1831 3736 l -1831 3736 l -1831 3735 l -1831 3735 l -1831 3735 l -1839 3730 l -1839 3750 l -1831 3745 l -1831 3745 l -1831 3745 l -1831 3745 l -1831 3745 l -1832 3745 l -1832 3744 l -1832 3744 l -1832 3744 l -1832 3744 l -1832 3744 l -1832 3744 l -1832 3743 l -1832 3743 l -1832 3743 l -1832 3743 l -1832 3743 l -1832 3743 l -1832 3743 l -1832 3742 l -1832 3742 l -1832 3742 l -1832 3742 l -1832 3742 l -1832 3742 l -1833 3741 l -1833 3741 l -1833 3741 l -1833 3741 l -1833 3741 l -1833 3741 l -1833 3740 l -1833 3740 l -f* -0 1 0 RG -0 1 0 rg -EMC -/OC /OC7 BDC -1879 3740 m -1839 3740 l -S -0 0 0 RG -0 0 0 rg -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 1900.141017 3744.808854 Tm -/T3romansHorzN0 1.285714 Tf -(\037\004\010\000\001) Tj -ET -BT -12.317005 0 0 12.317005 1900.141017 3724.280513 Tm -/T3romansHorzN0 1.285714 Tf -(\051\012\003\007\002\003) Tj -ET -EMC -/OC /OC3 BDC -1897 3759 m -1885 3747 l -1893 3762 l -f -1895 3760 m -1926 3800 l -S -1926 3800 m -1942 3800 l -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 1949.085043 3802.217261 Tm -/T3romansHorzN0 1.285714 Tf -(\015) Tj -ET -BT -8.621903 0 0 8.621903 1958.352122 3808.375764 Tm -/T3romansHorzN0 1.285714 Tf -(\020) Tj -ET -1959 3801 m -1969 3815 l -S -BT -8.621903 0 0 8.621903 1964.510624 3799.75386 Tm -/T3romansHorzN0 1.285714 Tf -(\015) Tj -ET -BT -12.317005 0 0 12.317005 1972.721961 3802.217261 Tm -/T3romansHorzN0 1.285714 Tf -(\040\012\000\001\002\003\010\001\003\010\001\007\011\005\002) Tj -ET -BT -12.317005 0 0 12.317005 1948.498519 3783.331188 Tm -/T3romansHorzN0 1.285714 Tf -(\034\007\006\010\033\007\012\013\011\005\030\033\000\001\043) Tj -ET -BT -12.317005 0 0 12.317005 1776.543477 3747.272255 Tm -/T3romansHorzN0 1.285714 Tf -(\015\040) Tj -ET -EMC -/OC /OC10 BDC -1807 3773 m -1807.204494 3763.939808 1814.557175 3756.587127 1823.627167 3756.587127 c -1832.697159 3756.587127 1840.04984 3763.939808 1840.04984 3773.0098 c -1840.04984 3782.079791 1832.697159 3789.432472 1823.627167 3789.432472 c -1814.557175 3789.432472 1807.204494 3782.079791 1807.204494 3773.0098 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 1817.468665 3766.851297 Tm -/T3romansHorzN0 1.285714 Tf -(\035) Tj -ET -1 0.498039 0 RG -1 0.498039 0 rg -EMC -/OC /OC4 BDC -2945 3164 m -2956 3175 l -S -2945 3170 m -2956 3181 l -S -2945 3211 m -2956 3222 l -S -2945 3217 m -2956 3228 l -S -2945 3258 m -2956 3269 l -S -2945 3264 m -2956 3275 l -S -0 1 0 RG -0 1 0 rg -EMC -/OC /OC7 BDC -1199 3694 m -1345 3694 l -S -1378 3694 m -1664 3694 l -S -1697 3694 m -1766 3694 l -S -0 1 1 RG -0 1 1 rg -EMC -/OC /OC2 BDC -1627 3733 m -1628 3733 l -1628 3694 l -1627 3694 l -f -1627 3733 m -1628 3733 l -1628 3733 l -1627 3733 l -f -1627 3733 m -1628 3733 l -1628 3694 l -1627 3694 l -f -1628 3694 m -1627 3694 l -1627 3694 l -1628 3694 l -f -1627 3733 m -1627 3694 l -1627 3694 l -1627 3733 l -f -1628 3733 m -1628 3694 l -1628 3694 l -1628 3733 l -f -1 0.498039 0.623529 RG -1 0.498039 0.623529 rg -EMC -/OC /OC9 BDC -1627 3805 m -1627 3766 l -S -0 0 0 RG -0 0 0 rg -EMC -/OC /OC10 BDC -1657 3860 m -1657.963668 3851.239639 1665.316349 3843.886958 1674.386341 3843.886958 c -1683.456332 3843.886958 1690.809013 3851.239639 1690.809013 3860.30963 c -1690.809013 3869.379622 1683.456332 3876.732303 1674.386341 3876.732303 c -1665.316349 3876.732303 1657.963668 3869.379622 1657.963668 3860.30963 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 1661.776074 3854.151128 Tm -/T3romansHorzN0 1.285714 Tf -(\020\015) Tj -ET -EMC -/OC /OC3 BDC -1598 3835 m -1598.244461 3819.231295 1611.479287 3805.99647 1627.805272 3805.99647 c -1644.131257 3805.99647 1657.366083 3819.231295 1657.366083 3835.55728 c -1657.366083 3851.883265 1644.131257 3865.118091 1627.805272 3865.118091 c -1611.479287 3865.118091 1598.244461 3851.883265 1598.244461 3835.55728 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 1619.300673 3838.854976 Tm -/T3romansHorzN0 1.285714 Tf -(\030\000) Tj -ET -BT -12.317005 0 0 12.317005 1610.209551 3820.555705 Tm -/T3romansHorzN0 1.285714 Tf -(\023\021\015) Tj -ET -EMC -/OC /OC10 BDC -1579 3751 m -1579.636376 3742.053332 1586.989057 3734.700651 1596.059049 3734.700651 c -1605.129041 3734.700651 1612.481722 3742.053332 1612.481722 3751.123324 c -1612.481722 3760.193316 1605.129041 3767.545997 1596.059049 3767.545997 c -1586.989057 3767.545997 1579.636376 3760.193316 1579.636376 3751.123324 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 1585.208355 3744.964822 Tm -/T3romansHorzN0 1.285714 Tf -(\020\020) Tj -ET -EMC -/OC /OC3 BDC -1637 3733 m -1617 3766 l -S -1637 3766 m -1617 3733 l -S -1617 3733 m -1637 3733 l -S -1617 3766 m -1637 3766 l -S -1645 3750 m -1645 3745 l -S -1645 3750 m -1627 3750 l -S -1627 3750 m -1645 3745 l -S -0 0 1 RG -0 0 1 rg -EMC -/OC /OC6 BDC -1455 3865 m -1455 3870 l -S -1455 3875 m -1455 3885 l -S -1455 3890 m -1455 3901 l -S -1455 3906 m -1455 3916 l -S -1455 3921 m -1455 3932 l -S -1455 3937 m -1455 3947 l -S -1455 3952 m -1455 3962 l -S -1455 3967 m -1455 3973 l -S -0 0 0 RG -0 0 0 rg -EMC -/OC /OC3 BDC -1345 3704 m -1345 3684 l -S -1345 3684 m -1378 3704 l -S -1378 3684 m -1345 3704 l -S -1378 3704 m -1378 3684 l -S -1352 3694 m -1352.479222 3688.990994 1356.89083 3684.579385 1362.332825 3684.579385 c -1367.77482 3684.579385 1372.186429 3688.990994 1372.186429 3694.432989 c -1372.186429 3699.874984 1367.77482 3704.286592 1362.332825 3704.286592 c -1356.89083 3704.286592 1352.479222 3699.874984 1352.479222 3694.432989 c -S -1345 3684 m -1353 3689 l -1353 3689 l -1353 3689 l -1353 3689 l -1353 3689 l -1353 3690 l -1353 3690 l -1353 3690 l -1353 3690 l -1353 3690 l -1353 3690 l -1353 3691 l -1353 3691 l -1352 3691 l -1352 3691 l -1352 3691 l -1352 3691 l -1352 3691 l -1352 3692 l -1352 3692 l -1352 3692 l -1352 3692 l -1352 3692 l -1352 3692 l -1352 3693 l -1352 3693 l -1352 3693 l -1352 3693 l -1352 3693 l -1352 3693 l -1352 3694 l -1352 3694 l -1352 3694 l -1352 3694 l -1352 3694 l -1352 3694 l -1352 3695 l -1352 3695 l -1352 3695 l -1352 3695 l -1352 3695 l -1352 3695 l -1352 3696 l -1352 3696 l -1352 3696 l -1352 3696 l -1352 3696 l -1352 3696 l -1352 3697 l -1352 3697 l -1352 3697 l -1352 3697 l -1353 3697 l -1353 3697 l -1353 3698 l -1353 3698 l -1353 3698 l -1353 3698 l -1353 3698 l -1353 3698 l -1353 3698 l -1353 3699 l -1353 3699 l -1353 3699 l -1353 3699 l -1345 3704 l -1345 3684 l -1372 3694 m -1372 3694 l -1372 3694 l -1372 3693 l -1372 3693 l -1372 3693 l -1372 3693 l -1372 3693 l -1372 3693 l -1372 3692 l -1372 3692 l -1372 3692 l -1371 3692 l -1371 3692 l -1371 3692 l -1371 3691 l -1371 3691 l -1371 3691 l -1371 3691 l -1371 3691 l -1371 3691 l -1371 3691 l -1371 3690 l -1371 3690 l -1371 3690 l -1371 3690 l -1371 3690 l -1371 3690 l -1371 3689 l -1371 3689 l -1370 3689 l -1370 3689 l -1370 3689 l -1378 3684 l -1378 3704 l -1370 3699 l -1370 3699 l -1370 3699 l -1371 3699 l -1371 3698 l -1371 3698 l -1371 3698 l -1371 3698 l -1371 3698 l -1371 3698 l -1371 3698 l -1371 3697 l -1371 3697 l -1371 3697 l -1371 3697 l -1371 3697 l -1371 3697 l -1371 3696 l -1371 3696 l -1371 3696 l -1371 3696 l -1372 3696 l -1372 3696 l -1372 3695 l -1372 3695 l -1372 3695 l -1372 3695 l -1372 3695 l -1372 3695 l -1372 3694 l -1372 3694 l -1372 3694 l -1372 3694 l -f* -EMC -/OC /OC10 BDC -1346 3726 m -1346.320439 3717.669611 1353.67312 3710.31693 1362.743111 3710.31693 c -1371.813103 3710.31693 1379.165784 3717.669611 1379.165784 3726.739603 c -1379.165784 3735.809594 1371.813103 3743.162275 1362.743111 3743.162275 c -1353.67312 3743.162275 1346.320439 3735.809594 1346.320439 3726.739603 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 1350.132845 3720.5811 Tm -/T3romansHorzN0 1.285714 Tf -(\020\016) Tj -ET -EMC -/OC /OC3 BDC -1697 3704 m -1664 3684 l -S -1664 3704 m -1697 3684 l -S -1697 3684 m -1697 3704 l -S -1664 3684 m -1664 3704 l -S -1671 3694 m -1671.089862 3688.990994 1675.501471 3684.579385 1680.943466 3684.579385 c -1686.385461 3684.579385 1690.797069 3688.990994 1690.797069 3694.432989 c -1690.797069 3699.874984 1686.385461 3704.286592 1680.943466 3704.286592 c -1675.501471 3704.286592 1671.089862 3699.874984 1671.089862 3694.432989 c -S -EMC -/OC /OC10 BDC -1664 3726 m -1664.931079 3717.669611 1672.28376 3710.31693 1681.353752 3710.31693 c -1690.423743 3710.31693 1697.776424 3717.669611 1697.776424 3726.739603 c -1697.776424 3735.809594 1690.423743 3743.162275 1681.353752 3743.162275 c -1672.28376 3743.162275 1664.931079 3735.809594 1664.931079 3726.739603 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 1675.488511 3720.5811 Tm -/T3romansHorzN0 1.285714 Tf -(\022) Tj -ET -BT -12.317005 0 0 12.317005 1487.942557 3701.002058 Tm -/T3romansHorzN0 1.285714 Tf -(\020\024\054\054\012\011\045\037) Tj -ET -0 1 0 RG -0 1 0 rg -EMC -/OC /OC7 BDC -1199 3694 m -1199 3080 l -S -0 0 0 RG -0 0 0 rg -EMC -/OC /OC5 BDC -EMC -/OC /OC3 BDC -1766 4234 m -1766 4732 l -S -1766 4732 m -2165 4732 l -S -2280 4732 m -2384 4732 l -S -2401 4732 m -2579 4732 l -S -2074 4497 m -2271 4497 l -2271 4300 l -2074 4300 l -2074 4497 l -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 2080.119551 4308.766577 Tm -/T3romansHorzN0 1.285714 Tf -(\034\011\010\006\012\003\010\001\055) Tj -ET -EMC -/OC /OC3 BDC -2222 4347 m -2222 4547 l -S -2222 4580 m -2222 4637 l -S -2222 4670 m -2222 4727 l -S -2212 4580 m -2232 4547 l -S -2212 4547 m -2232 4580 l -S -2232 4580 m -2212 4580 l -S -2232 4547 m -2212 4547 l -S -2579 4840 m -2579 4624 l -S -2579 4624 m -2822 4624 l -S -2579 4840 m -2822 4840 l -S -2165 4752 m -2165 4711 l -S -2177 4752 m -2177 4711 l -S -2267 4752 m -2267 4711 l -S -2280 4752 m -2280 4711 l -S -2177 4752 m -2177 4748 l -S -2177 4748 m -2243 4732 l -S -2177 4715 m -2243 4732 l -S -2267 4748 m -2222 4737 l -S -2267 4715 m -2222 4727 l -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 3656.205946 4110.752909 Tm -/T3romansHorzN0 1.285714 Tf -(\023\040) Tj -ET -BT -12.317005 0 0 12.317005 3656.205946 4082.013232 Tm -/T3romansHorzN0 1.285714 Tf -(\023\040) Tj -ET -BT -12.317005 0 0 12.317005 3656.205946 4053.273555 Tm -/T3romansHorzN0 1.285714 Tf -(\023\040) Tj -ET -BT -12.317005 0 0 12.317005 3656.205946 4024.533878 Tm -/T3romansHorzN0 1.285714 Tf -(\023\040) Tj -ET -BT -12.317005 0 0 12.317005 3656.205946 3995.794201 Tm -/T3romansHorzN0 1.285714 Tf -(\015\040) Tj -ET -BT -12.317005 0 0 12.317005 3655.32616 3967.054523 Tm -/T3romansHorzN0 1.285714 Tf -(\020\040) Tj -ET -BT -7.606829 0 0 7.606829 3662.164747 3909.575169 Tm -/T3romansHorzN0 1.285714 Tf -(\015) Tj -ET -3656 3911 m -3665 3921 l -S -BT -7.606829 0 0 7.606829 3652.254881 3915.263141 Tm -/T3romansHorzN0 1.285714 Tf -(\020) Tj -ET -BT -12.317005 0 0 12.317005 3658.954886 3909.575169 Tm -/T3romansHorzN0 1.285714 Tf -(\012\040) Tj -ET -3656 3882 m -3665 3893 l -S -BT -7.606829 0 0 7.606829 3652.254881 3886.523464 Tm -/T3romansHorzN0 1.285714 Tf -(\020) Tj -ET -BT -7.606829 0 0 7.606829 3660.658773 3880.835492 Tm -/T3romansHorzN0 1.285714 Tf -(\017) Tj -ET -BT -12.317005 0 0 12.317005 3657.43757 3880.835492 Tm -/T3romansHorzN0 1.285714 Tf -(\012\040) Tj -ET -BT -7.606829 0 0 7.606829 3662.164747 3852.095815 Tm -/T3romansHorzN0 1.285714 Tf -(\015) Tj -ET -3656 3854 m -3665 3864 l -S -BT -7.606829 0 0 7.606829 3652.254881 3857.783787 Tm -/T3romansHorzN0 1.285714 Tf -(\020) Tj -ET -BT -12.317005 0 0 12.317005 3658.954886 3852.095815 Tm -/T3romansHorzN0 1.285714 Tf -(\012\040) Tj -ET -BT -7.606829 0 0 7.606829 3662.164747 3823.356137 Tm -/T3romansHorzN0 1.285714 Tf -(\015) Tj -ET -3656 3825 m -3665 3835 l -S -BT -7.606829 0 0 7.606829 3652.254881 3829.04411 Tm -/T3romansHorzN0 1.285714 Tf -(\020) Tj -ET -BT -12.317005 0 0 12.317005 3658.954886 3823.356137 Tm -/T3romansHorzN0 1.285714 Tf -(\012\040) Tj -ET -BT -7.606829 0 0 7.606829 3662.164747 3794.61646 Tm -/T3romansHorzN0 1.285714 Tf -(\015) Tj -ET -3656 3796 m -3665 3807 l -S -BT -7.606829 0 0 7.606829 3652.254881 3800.304433 Tm -/T3romansHorzN0 1.285714 Tf -(\020) Tj -ET -BT -12.317005 0 0 12.317005 3658.954886 3794.61646 Tm -/T3romansHorzN0 1.285714 Tf -(\012\040) Tj -ET -BT -7.606829 0 0 7.606829 3662.164747 3765.876783 Tm -/T3romansHorzN0 1.285714 Tf -(\015) Tj -ET -3656 3767 m -3665 3778 l -S -BT -7.606829 0 0 7.606829 3652.254881 3771.564755 Tm -/T3romansHorzN0 1.285714 Tf -(\020) Tj -ET -BT -12.317005 0 0 12.317005 3658.954886 3765.876783 Tm -/T3romansHorzN0 1.285714 Tf -(\012\040) Tj -ET -BT -7.606829 0 0 7.606829 3662.164747 3737.137106 Tm -/T3romansHorzN0 1.285714 Tf -(\015) Tj -ET -3656 3739 m -3665 3749 l -S -BT -7.606829 0 0 7.606829 3652.254881 3742.825078 Tm -/T3romansHorzN0 1.285714 Tf -(\020) Tj -ET -BT -12.317005 0 0 12.317005 3658.954886 3737.137106 Tm -/T3romansHorzN0 1.285714 Tf -(\012\040) Tj -ET -BT -12.317005 0 0 12.317005 3656.205946 3708.397429 Tm -/T3romansHorzN0 1.285714 Tf -(\023\040) Tj -ET -BT -12.317005 0 0 12.317005 3656.205946 3679.657752 Tm -/T3romansHorzN0 1.285714 Tf -(\023\040) Tj -ET -BT -7.606829 0 0 7.606829 3662.164747 3650.918074 Tm -/T3romansHorzN0 1.285714 Tf -(\015) Tj -ET -3656 3652 m -3665 3663 l -S -BT -7.606829 0 0 7.606829 3652.254881 3656.606047 Tm -/T3romansHorzN0 1.285714 Tf -(\020) Tj -ET -BT -12.317005 0 0 12.317005 3658.954886 3650.918074 Tm -/T3romansHorzN0 1.285714 Tf -(\012\040) Tj -ET -BT -7.606829 0 0 7.606829 3662.164747 3622.178397 Tm -/T3romansHorzN0 1.285714 Tf -(\015) Tj -ET -3656 3624 m -3665 3634 l -S -BT -7.606829 0 0 7.606829 3652.254881 3627.866369 Tm -/T3romansHorzN0 1.285714 Tf -(\020) Tj -ET -BT -12.317005 0 0 12.317005 3658.954886 3622.178397 Tm -/T3romansHorzN0 1.285714 Tf -(\012\040) Tj -ET -BT -7.606829 0 0 7.606829 3662.164747 3593.43872 Tm -/T3romansHorzN0 1.285714 Tf -(\015) Tj -ET -3656 3595 m -3665 3605 l -S -BT -7.606829 0 0 7.606829 3652.254881 3599.126692 Tm -/T3romansHorzN0 1.285714 Tf -(\020) Tj -ET -BT -12.317005 0 0 12.317005 3658.954886 3593.43872 Tm -/T3romansHorzN0 1.285714 Tf -(\012\040) Tj -ET -BT -12.317005 0 0 12.317005 3638.316963 3565.872091 Tm -/T3romansHorzN0 1.285714 Tf -(\035\012\033\003\004) Tj -ET -BT -7.606829 0 0 7.606829 3662.164747 3535.959366 Tm -/T3romansHorzN0 1.285714 Tf -(\015) Tj -ET -3656 3537 m -3665 3548 l -S -BT -7.606829 0 0 7.606829 3652.254881 3541.647338 Tm -/T3romansHorzN0 1.285714 Tf -(\020) Tj -ET -BT -12.317005 0 0 12.317005 3658.954886 3535.959366 Tm -/T3romansHorzN0 1.285714 Tf -(\012\040) Tj -ET -BT -7.606829 0 0 7.606829 3662.164747 3507.219689 Tm -/T3romansHorzN0 1.285714 Tf -(\015) Tj -ET -3656 3509 m -3665 3519 l -S -BT -7.606829 0 0 7.606829 3652.254881 3512.907661 Tm -/T3romansHorzN0 1.285714 Tf -(\020) Tj -ET -BT -12.317005 0 0 12.317005 3658.954886 3507.219689 Tm -/T3romansHorzN0 1.285714 Tf -(\012\040) Tj -ET -BT -7.606829 0 0 7.606829 3662.164747 3478.480011 Tm -/T3romansHorzN0 1.285714 Tf -(\015) Tj -ET -3656 3480 m -3665 3490 l -S -BT -7.606829 0 0 7.606829 3652.254881 3484.167984 Tm -/T3romansHorzN0 1.285714 Tf -(\020) Tj -ET -BT -12.317005 0 0 12.317005 3658.954886 3478.480011 Tm -/T3romansHorzN0 1.285714 Tf -(\012\040) Tj -ET -3656 3451 m -3665 3462 l -S -BT -7.606829 0 0 7.606829 3652.254881 3455.428306 Tm -/T3romansHorzN0 1.285714 Tf -(\020) Tj -ET -BT -7.606829 0 0 7.606829 3660.658773 3449.740334 Tm -/T3romansHorzN0 1.285714 Tf -(\017) Tj -ET -BT -12.317005 0 0 12.317005 3657.43757 3449.740334 Tm -/T3romansHorzN0 1.285714 Tf -(\012\040) Tj -ET -BT -7.606829 0 0 7.606829 3662.164747 3421.000657 Tm -/T3romansHorzN0 1.285714 Tf -(\015) Tj -ET -3656 3422 m -3665 3433 l -S -BT -7.606829 0 0 7.606829 3652.254881 3426.688629 Tm -/T3romansHorzN0 1.285714 Tf -(\020) Tj -ET -BT -12.317005 0 0 12.317005 3658.954886 3421.000657 Tm -/T3romansHorzN0 1.285714 Tf -(\012\040) Tj -ET -BT -7.606829 0 0 7.606829 3662.164747 3392.26098 Tm -/T3romansHorzN0 1.285714 Tf -(\015) Tj -ET -3656 3394 m -3665 3404 l -S -BT -7.606829 0 0 7.606829 3652.254881 3397.948952 Tm -/T3romansHorzN0 1.285714 Tf -(\020) Tj -ET -BT -12.317005 0 0 12.317005 3658.954886 3392.26098 Tm -/T3romansHorzN0 1.285714 Tf -(\012\040) Tj -ET -3656 3365 m -3665 3375 l -S -BT -7.606829 0 0 7.606829 3652.254881 3369.209275 Tm -/T3romansHorzN0 1.285714 Tf -(\020) Tj -ET -BT -7.606829 0 0 7.606829 3660.658773 3363.521303 Tm -/T3romansHorzN0 1.285714 Tf -(\017) Tj -ET -BT -12.317005 0 0 12.317005 3657.43757 3363.521303 Tm -/T3romansHorzN0 1.285714 Tf -(\012\040) Tj -ET -BT -12.317005 0 0 12.317005 3636.557391 3335.954674 Tm -/T3romansHorzN0 1.285714 Tf -(\020\024\054\054) Tj -ET -BT -12.317005 0 0 12.317005 3658.845304 3164.396396 Tm -/T3romansHorzN0 1.285714 Tf -(\050) Tj -ET -BT -7.606829 0 0 7.606829 3662.164747 3306.041948 Tm -/T3romansHorzN0 1.285714 Tf -(\015) Tj -ET -3656 3307 m -3665 3318 l -S -BT -7.606829 0 0 7.606829 3652.254881 3311.729921 Tm -/T3romansHorzN0 1.285714 Tf -(\020) Tj -ET -BT -12.317005 0 0 12.317005 3658.954886 3306.041948 Tm -/T3romansHorzN0 1.285714 Tf -(\012\040) Tj -ET -3656 3279 m -3665 3289 l -S -BT -7.606829 0 0 7.606829 3652.254881 3282.990243 Tm -/T3romansHorzN0 1.285714 Tf -(\020) Tj -ET -BT -7.606829 0 0 7.606829 3660.658773 3277.302271 Tm -/T3romansHorzN0 1.285714 Tf -(\017) Tj -ET -BT -12.317005 0 0 12.317005 3657.43757 3277.302271 Tm -/T3romansHorzN0 1.285714 Tf -(\012\040) Tj -ET -BT -7.606829 0 0 7.606829 3662.164747 3248.562594 Tm -/T3romansHorzN0 1.285714 Tf -(\015) Tj -ET -3656 3250 m -3665 3260 l -S -BT -7.606829 0 0 7.606829 3652.254881 3254.250566 Tm -/T3romansHorzN0 1.285714 Tf -(\020) Tj -ET -BT -12.317005 0 0 12.317005 3658.954886 3248.562594 Tm -/T3romansHorzN0 1.285714 Tf -(\012\040) Tj -ET -BT -7.606829 0 0 7.606829 3662.164747 3219.822917 Tm -/T3romansHorzN0 1.285714 Tf -(\015) Tj -ET -3656 3221 m -3665 3232 l -S -BT -7.606829 0 0 7.606829 3652.254881 3225.510889 Tm -/T3romansHorzN0 1.285714 Tf -(\020) Tj -ET -BT -12.317005 0 0 12.317005 3658.954886 3219.822917 Tm -/T3romansHorzN0 1.285714 Tf -(\012\040) Tj -ET -BT -7.606829 0 0 7.606829 3662.164747 3191.08324 Tm -/T3romansHorzN0 1.285714 Tf -(\015) Tj -ET -3656 3193 m -3665 3203 l -S -BT -7.606829 0 0 7.606829 3652.254881 3196.771212 Tm -/T3romansHorzN0 1.285714 Tf -(\020) Tj -ET -BT -12.317005 0 0 12.317005 3658.954886 3191.08324 Tm -/T3romansHorzN0 1.285714 Tf -(\012\040) Tj -ET -BT -7.606829 0 0 7.606829 3662.164747 3104.864208 Tm -/T3romansHorzN0 1.285714 Tf -(\015) Tj -ET -3656 3106 m -3665 3117 l -S -BT -7.606829 0 0 7.606829 3652.254881 3110.55218 Tm -/T3romansHorzN0 1.285714 Tf -(\020) Tj -ET -BT -12.317005 0 0 12.317005 3658.954886 3104.864208 Tm -/T3romansHorzN0 1.285714 Tf -(\012\040) Tj -ET -BT -12.317005 0 0 12.317005 3656.205946 3133.603885 Tm -/T3romansHorzN0 1.285714 Tf -(\023\040) Tj -ET -0 1 1 RG -0 1 1 rg -EMC -/OC /OC2 BDC -641 4831 m -641 4790 l -S -0 0 0 RG -0 0 0 rg -EMC -/OC /OC3 BDC -631 4757 m -641 4774 l -651 4757 l -f -641 4774 m -651 4790 l -631 4790 l -f -0 1 1 RG -0 1 1 rg -EMC -/OC /OC2 BDC -641 4757 m -641 4716 l -S -723 4831 m -723 4790 l -S -0 0 0 RG -0 0 0 rg -EMC -/OC /OC3 BDC -713 4757 m -723 4774 l -733 4757 l -f -723 4774 m -733 4790 l -713 4790 l -f -0 1 1 RG -0 1 1 rg -EMC -/OC /OC2 BDC -723 4757 m -723 4716 l -S -641 4716 m -723 4716 l -S -682 4716 m -682 4660 l -S -682 4647 m -682 4591 l -S -641 4591 m -723 4591 l -S -1 0.498039 0.623529 RG -1 0.498039 0.623529 rg -EMC -/OC /OC9 BDC -694 4654 m -757 4654 l -S -0 0 0 RG -0 0 0 rg -EMC -/OC /OC3 BDC -678 4654 m -686 4654 l -S -672 4647 m -692 4647 l -S -672 4660 m -692 4660 l -S -757 4654 m -757.015848 4637.691958 770.250674 4624.457132 786.576659 4624.457132 c -802.902644 4624.457132 816.13747 4637.691958 816.13747 4654.017943 c -816.13747 4670.343928 802.902644 4683.578754 786.576659 4683.578754 c -770.250674 4683.578754 757.015848 4670.343928 757.015848 4654.017943 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 773.67313 4647.85944 Tm -/T3romansHorzN0 1.285714 Tf -(\004\011) Tj -ET -EMC -/OC /OC3 BDC -641 4581 m -641 4601 l -S -756 4581 m -723 4601 l -S -723 4601 m -723 4581 l -S -756 4601 m -756 4581 l -S -0 J -1 j -4.105668 w -741 4591 m -741.767255 4592.612775 740.84817 4593.53186 739.714421 4593.53186 c -738.580672 4593.53186 737.661587 4592.612775 737.661587 4591.479026 c -S -1 J -1 j -0.708661 w -0 J -1 j -4.105668 w -737 4591 m -737.661587 4590.345277 738.580672 4589.426192 739.714421 4589.426192 c -740.84817 4589.426192 741.767255 4590.345277 741.767255 4591.479026 c -S -1 J -1 j -0.708661 w -0.708661 w -EMC -/OC /OC0 BDC -471 4863 m -525 4863 l -S -536 4863 m -546 4863 l -S -556 4863 m -607 4863 l -S -618 4863 m -628 4863 l -S -638 4863 m -689 4863 l -S -700 4863 m -710 4863 l -S -720 4863 m -772 4863 l -S -782 4863 m -792 4863 l -S -802 4863 m -854 4863 l -S -864 4863 m -874 4863 l -S -885 4863 m -936 4863 l -S -946 4863 m -956 4863 l -S -967 4863 m -1018 4863 l -S -1028 4863 m -1038 4863 l -S -1049 4863 m -1103 4863 l -S -1103 4863 m -1103 4836 l -S -1103 4826 m -1103 4815 l -S -1103 4805 m -1103 4754 l -S -1103 4743 m -1103 4733 l -S -1103 4723 m -1103 4672 l -S -1103 4661 m -1103 4651 l -S -1103 4641 m -1103 4589 l -S -1103 4579 m -1103 4569 l -S -1103 4559 m -1103 4531 l -S -1103 4531 m -1049 4531 l -S -1038 4531 m -1028 4531 l -S -1018 4531 m -967 4531 l -S -956 4531 m -946 4531 l -S -936 4531 m -885 4531 l -S -874 4531 m -864 4531 l -S -854 4531 m -802 4531 l -S -792 4531 m -782 4531 l -S -772 4531 m -720 4531 l -S -710 4531 m -700 4531 l -S -689 4531 m -638 4531 l -S -628 4531 m -618 4531 l -S -607 4531 m -556 4531 l -S -546 4531 m -536 4531 l -S -525 4531 m -471 4531 l -S -471 4531 m -471 4559 l -S -471 4569 m -471 4579 l -S -471 4589 m -471 4641 l -S -471 4651 m -471 4661 l -S -471 4672 m -471 4723 l -S -471 4733 m -471 4743 l -S -471 4754 m -471 4805 l -S -471 4815 m -471 4826 l -S -471 4836 m -471 4863 l -S -EMC -/OC /OC10 BDC -823 4654 m -823.459269 4644.947951 830.81195 4637.59527 839.881942 4637.59527 c -848.951933 4637.59527 856.304614 4644.947951 856.304614 4654.017943 c -856.304614 4663.087934 848.951933 4670.440615 839.881942 4670.440615 c -830.81195 4670.440615 823.459269 4663.087934 823.459269 4654.017943 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 827.271675 4647.85944 Tm -/T3romansHorzN0 1.285714 Tf -(\020\025) Tj -ET -EMC -/OC /OC10 BDC -723 4559 m -723.702034 4550.10242 731.054715 4542.749739 740.124707 4542.749739 c -749.194698 4542.749739 756.547379 4550.10242 756.547379 4559.172412 c -756.547379 4568.242404 749.194698 4575.595085 740.124707 4575.595085 c -731.054715 4575.595085 723.702034 4568.242404 723.702034 4559.172412 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 728.394226 4553.01391 Tm -/T3romansHorzN0 1.285714 Tf -(\023\035) Tj -ET -BT -12.317005 0 0 12.317005 854.276308 4839.00389 Tm -/T3romansHorzN0 1.285714 Tf -(\034\011\010\006\012\003\007\002\003\012\010\002\002\007\006\014\033\042) Tj -ET -BT -12.317005 0 0 12.317005 854.276308 4818.475549 Tm -/T3romansHorzN0 1.285714 Tf -(\022\035\035\012\033\045\006\000\001) Tj -ET -BT -12.317005 0 0 12.317005 854.276308 4797.947208 Tm -/T3romansHorzN0 1.285714 Tf -(\010\003\012\020\024\036\024\012\014\010\004) Tj -ET -BT -12.317005 0 0 12.317005 764.758716 4553.01391 Tm -/T3romansHorzN0 1.285714 Tf -(\023\040\012\001\014\012\000\002\011\033\010\003\000\011\001\012\027\010\033\027\007) Tj -ET -EMC -/OC /OC3 BDC -739 4823 m -730 4837 l -743 4827 l -f -741 4825 m -835 4728 l -S -835 4728 m -852 4728 l -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 858.600807 4731.024263 Tm -/T3romansHorzN0 1.285714 Tf -(\015) Tj -ET -BT -8.621903 0 0 8.621903 867.867886 4737.182766 Tm -/T3romansHorzN0 1.285714 Tf -(\020) Tj -ET -868 4730 m -878 4744 l -S -BT -8.621903 0 0 8.621903 874.026389 4728.560863 Tm -/T3romansHorzN0 1.285714 Tf -(\015) Tj -ET -BT -12.317005 0 0 12.317005 882.237725 4731.024263 Tm -/T3romansHorzN0 1.285714 Tf -(\040\012\000\001\002\003\010\001\003\010\001\007\011\005\002) Tj -ET -BT -12.317005 0 0 12.317005 858.014283 4712.13819 Tm -/T3romansHorzN0 1.285714 Tf -(\034\007\006\010\033\007\012\011\005\003\033\007\003\012\015\012\011\034\034) Tj -ET -BT -12.317005 0 0 12.317005 2936.898817 4824.226384 Tm -/T3romansHorzN0 1.285714 Tf -(\030\011\005\004\007\004\012\020) Tj -ET -EMC -/OC /OC3 BDC -2276 4767 m -2267 4752 l -2271 4769 l -f -2273 4768 m -2297 4830 l -S -2297 4830 m -2313 4830 l -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 2319.762794 4845.585243 Tm -/T3romansHorzN0 1.285714 Tf -(\030\004\011\030\011\004\003\000\011\001\007\004) Tj -ET -BT -12.317005 0 0 12.317005 2318.589746 4823.883854 Tm -/T3romansHorzN0 1.285714 Tf -(\020\024\023\024\012\033\045\006\000\001\012\010\003) Tj -ET -BT -12.317005 0 0 12.317005 2318.589746 4802.182465 Tm -/T3romansHorzN0 1.285714 Tf -(\020\024\012\014\010\004) Tj -ET -BT -12.317005 0 0 12.317005 2477.245176 4738.957285 Tm -/T3romansHorzN0 1.285714 Tf -(\023\040) Tj -ET -BT -12.317005 0 0 12.317005 1955.339552 4738.957285 Tm -/T3romansHorzN0 1.285714 Tf -(\015) Tj -ET -BT -7.606829 0 0 7.606829 1975.135866 4738.957285 Tm -/T3romansHorzN0 1.285714 Tf -(\015) Tj -ET -1969 4740 m -1978 4751 l -S -BT -7.606829 0 0 7.606829 1965.226001 4744.645257 Tm -/T3romansHorzN0 1.285714 Tf -(\020) Tj -ET -BT -12.317005 0 0 12.317005 1971.926005 4738.957285 Tm -/T3romansHorzN0 1.285714 Tf -(\012\040) Tj -ET -EMC -/OC /OC3 BDC -772 4594 m -756 4591 l -770 4599 l -f -771 4597 m -835 4620 l -S -835 4620 m -851 4620 l -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 857.959282 4624.180073 Tm -/T3romansHorzN0 1.285714 Tf -(\013\033\010\002\002\012\020\016\024) Tj -ET -BT -12.317005 0 0 12.317005 859.13233 4603.651732 Tm -/T3romansHorzN0 1.285714 Tf -(\010\001\002\000\012\014\020\035\036\016) Tj -ET -EMC -/OC /OC3 BDC -632 4605 m -641 4591 l -628 4601 l -f -630 4603 m -615 4620 l -S -615 4620 m -598 4620 l -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 488.478763 4624.180073 Tm -/T3romansHorzN0 1.285714 Tf -(\013\033\010\002\002\012\020\016\024) Tj -ET -BT -12.317005 0 0 12.317005 486.719191 4603.651732 Tm -/T3romansHorzN0 1.285714 Tf -(\010\001\002\000\012\014\020\035\036\016) Tj -ET -EMC -/OC /OC3 BDC -2287 4532 m -2247 4532 l -S -2287 4542 m -2287 4522 l -S -2287 4522 m -2319 4542 l -S -2319 4522 m -2287 4542 l -S -2319 4542 m -2319 4522 l -S -2293 4532 m -2293.616442 4527.342221 2298.02805 4522.930613 2303.470045 4522.930613 c -2308.91204 4522.930613 2313.323649 4527.342221 2313.323649 4532.784216 c -2313.323649 4538.226211 2308.91204 4542.63782 2303.470045 4542.63782 c -2298.02805 4542.63782 2293.616442 4538.226211 2293.616442 4532.784216 c -S -2287 4522 m -2295 4527 l -2294 4527 l -2294 4527 l -2294 4528 l -2294 4528 l -2294 4528 l -2294 4528 l -2294 4528 l -2294 4528 l -2294 4529 l -2294 4529 l -2294 4529 l -2294 4529 l -2294 4529 l -2294 4529 l -2294 4529 l -2293 4530 l -2293 4530 l -2293 4530 l -2293 4530 l -2293 4530 l -2293 4530 l -2293 4531 l -2293 4531 l -2293 4531 l -2293 4531 l -2293 4531 l -2293 4531 l -2293 4532 l -2293 4532 l -2293 4532 l -2293 4532 l -2293 4532 l -2293 4532 l -2293 4533 l -2293 4533 l -2293 4533 l -2293 4533 l -2293 4533 l -2293 4533 l -2293 4534 l -2293 4534 l -2293 4534 l -2293 4534 l -2293 4534 l -2293 4534 l -2293 4535 l -2293 4535 l -2293 4535 l -2294 4535 l -2294 4535 l -2294 4535 l -2294 4536 l -2294 4536 l -2294 4536 l -2294 4536 l -2294 4536 l -2294 4536 l -2294 4536 l -2294 4537 l -2294 4537 l -2294 4537 l -2294 4537 l -2294 4537 l -2295 4537 l -2287 4542 l -2287 4522 l -2313 4532 m -2313 4532 l -2313 4532 l -2313 4532 l -2313 4532 l -2313 4531 l -2313 4531 l -2313 4531 l -2313 4531 l -2313 4531 l -2313 4531 l -2313 4530 l -2313 4530 l -2313 4530 l -2313 4530 l -2313 4530 l -2312 4530 l -2312 4529 l -2312 4529 l -2312 4529 l -2312 4529 l -2312 4529 l -2312 4529 l -2312 4529 l -2312 4528 l -2312 4528 l -2312 4528 l -2312 4528 l -2312 4528 l -2312 4528 l -2312 4527 l -2312 4527 l -2311 4527 l -2319 4522 l -2319 4542 l -2311 4537 l -2312 4537 l -2312 4537 l -2312 4537 l -2312 4537 l -2312 4537 l -2312 4536 l -2312 4536 l -2312 4536 l -2312 4536 l -2312 4536 l -2312 4536 l -2312 4536 l -2312 4535 l -2312 4535 l -2312 4535 l -2312 4535 l -2313 4535 l -2313 4535 l -2313 4534 l -2313 4534 l -2313 4534 l -2313 4534 l -2313 4534 l -2313 4534 l -2313 4533 l -2313 4533 l -2313 4533 l -2313 4533 l -2313 4533 l -2313 4533 l -2313 4532 l -2313 4532 l -f* -2247 4532 m -2247 4497 l -S -2328 4542 m -2328 4522 l -S -2319 4542 m -2319 4522 l -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 2293.205875 4545.981007 Tm -/T3romansHorzN0 1.285714 Tf -(\015\040) Tj -ET -EMC -/OC /OC3 BDC -2034 4315 m -2074 4315 l -S -2001 4325 m -2001 4305 l -S -2001 4305 m -2034 4325 l -S -2034 4305 m -2001 4325 l -S -2034 4325 m -2034 4305 l -S -2008 4315 m -2008.090078 4310.342803 2012.501686 4305.931194 2017.943681 4305.931194 c -2023.385676 4305.931194 2027.797285 4310.342803 2027.797285 4315.784798 c -2027.797285 4321.226793 2023.385676 4325.638402 2017.943681 4325.638402 c -2012.501686 4325.638402 2008.090078 4321.226793 2008.090078 4315.784798 c -S -2001 4305 m -2009 4310 l -2009 4310 l -2009 4311 l -2009 4311 l -2009 4311 l -2009 4311 l -2009 4311 l -2008 4311 l -2008 4311 l -2008 4312 l -2008 4312 l -2008 4312 l -2008 4312 l -2008 4312 l -2008 4312 l -2008 4312 l -2008 4313 l -2008 4313 l -2008 4313 l -2008 4313 l -2008 4313 l -2008 4313 l -2008 4314 l -2008 4314 l -2008 4314 l -2008 4314 l -2008 4314 l -2008 4314 l -2008 4315 l -2008 4315 l -2008 4315 l -2008 4315 l -2008 4315 l -2008 4315 l -2008 4316 l -2008 4316 l -2008 4316 l -2008 4316 l -2008 4316 l -2008 4316 l -2008 4317 l -2008 4317 l -2008 4317 l -2008 4317 l -2008 4317 l -2008 4317 l -2008 4318 l -2008 4318 l -2008 4318 l -2008 4318 l -2008 4318 l -2008 4318 l -2008 4319 l -2008 4319 l -2008 4319 l -2008 4319 l -2008 4319 l -2008 4319 l -2009 4319 l -2009 4320 l -2009 4320 l -2009 4320 l -2009 4320 l -2009 4320 l -2009 4320 l -2001 4325 l -2001 4305 l -2027 4315 m -2027 4315 l -2027 4315 l -2027 4315 l -2027 4315 l -2027 4314 l -2027 4314 l -2027 4314 l -2027 4314 l -2027 4314 l -2027 4314 l -2027 4313 l -2027 4313 l -2027 4313 l -2027 4313 l -2027 4313 l -2027 4313 l -2027 4312 l -2027 4312 l -2027 4312 l -2027 4312 l -2027 4312 l -2027 4312 l -2027 4312 l -2026 4311 l -2026 4311 l -2026 4311 l -2026 4311 l -2026 4311 l -2026 4311 l -2026 4311 l -2026 4310 l -2026 4310 l -2034 4305 l -2034 4325 l -2026 4320 l -2026 4320 l -2026 4320 l -2026 4320 l -2026 4320 l -2026 4320 l -2026 4319 l -2026 4319 l -2026 4319 l -2027 4319 l -2027 4319 l -2027 4319 l -2027 4319 l -2027 4318 l -2027 4318 l -2027 4318 l -2027 4318 l -2027 4318 l -2027 4318 l -2027 4317 l -2027 4317 l -2027 4317 l -2027 4317 l -2027 4317 l -2027 4317 l -2027 4316 l -2027 4316 l -2027 4316 l -2027 4316 l -2027 4316 l -2027 4316 l -2027 4315 l -2027 4315 l -f* -1993 4325 m -1993 4305 l -S -2001 4325 m -2001 4305 l -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 2007.679511 4328.981588 Tm -/T3romansHorzN0 1.285714 Tf -(\015\040) Tj -ET -EMC -/OC /OC3 BDC -641 4581 m -641 4601 l -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 2608.454938 4628.64361 Tm -/T3romansHorzN0 1.285714 Tf -(\023\040\050\034\044\050\020\020\021\025\050\013\020\020\017) Tj -ET -BT -12.317005 0 0 12.317005 2608.454938 4845.165292 Tm -/T3romansHorzN0 1.285714 Tf -(\023\040\050\034\044\050\020\020\021\035\050\013\020\020\017) Tj -ET -EMC -/OC /OC3 BDC -2401 4742 m -2401 4722 l -S -2384 4737 m -2384 4727 l -S -2384 4727 m -2401 4722 l -S -2384 4737 m -2401 4742 l -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 2360.158519 4746.758055 Tm -/T3romansHorzN0 1.285714 Tf -(\015) Tj -ET -BT -8.621903 0 0 8.621903 2369.425599 4752.916557 Tm -/T3romansHorzN0 1.285714 Tf -(\020) Tj -ET -2370 4745 m -2380 4759 l -S -BT -8.621903 0 0 8.621903 2375.584101 4744.294654 Tm -/T3romansHorzN0 1.285714 Tf -(\015) Tj -ET -BT -12.317005 0 0 12.317005 2383.795438 4746.758055 Tm -/T3romansHorzN0 1.285714 Tf -(\040\026\023\040) Tj -ET -EMC -/OC /OC3 BDC -2212 4637 m -2232 4670 l -S -2232 4670 m -2212 4670 l -S -2232 4637 m -2212 4637 l -S -2223 4660 m -2232 4670 l -2232 4670 l -2227 4657 l -f -EMC -/OC /OC5 BDC -713 3276 m -736 3276 l -S -713 3279 m -697 3276 l -697 3276 l -713 3273 l -f -680 3279 m -697 3276 l -697 3276 l -680 3273 l -f -697 3235 m -697 3301 l -S -680 3276 m -658 3276 l -S -BT -12.317005 0 0 12.317005 665.316523 3287.000366 Tm -/T3romansHorzN0 1.285714 Tf -(\005\043) Tj -ET -BT -12.317005 0 0 12.317005 703.54999 3287.000348 Tm -/T3romansHorzN0 1.285714 Tf -(\010\043) Tj -ET -1 0 1 RG -1 0 1 rg -EMC -/OC /OC1 BDC -2547 3148 m -2513.206025 3148.204525 2485.697563 3120.696063 2485.697563 3086.762655 c -2485.697563 3052.829248 2513.206025 3025.320785 2547.139432 3025.320785 c -S -2750 3025 m -2784.357572 3025.320785 2811.866034 3052.829248 2811.866034 3086.762655 c -2811.866034 3120.696063 2784.357572 3148.204525 2750.424164 3148.204525 c -S -0 0 0 RG -0 0 0 rg -EMC -/OC /OC3 BDC -2863 4820 m -2863 4861 l -S -2822 4861 m -2822 4820 l -S -2924 4848 m -2924 4832 l -S -2822 4820 m -2863 4820 l -S -2863 4832 m -2924 4832 l -S -2863 4861 m -2822 4861 l -S -2863 4848 m -2924 4848 l -S -2755 4928 m -2796 4928 l -S -2796 4928 m -2796 4887 l -S -2755 4908 m -2796 4908 l -S -2755 4887 m -2755 4928 l -S -2796 4887 m -2755 4887 l -S -EMC -/OC /OC5 BDC -BT -10.26417 0 0 10.26417 2765.709158 4913.371638 Tm -/T3romansHorzN0 1.285714 Tf -(\002\030) Tj -ET -BT -10.26417 0 0 10.26417 2756.422527 4892.843297 Tm -/T3romansHorzN0 1.285714 Tf -(\015\017\020\021) Tj -ET -EMC -/OC /OC3 BDC -2796 4887 m -2822 4861 l -S -2863 4603 m -2863 4644 l -S -2822 4644 m -2822 4603 l -S -2924 4632 m -2924 4615 l -S -2822 4603 m -2863 4603 l -S -2863 4615 m -2924 4615 l -S -2863 4644 m -2822 4644 l -S -2863 4632 m -2924 4632 l -S -2755 4712 m -2796 4712 l -S -2796 4712 m -2796 4671 l -S -2755 4691 m -2796 4691 l -S -2755 4671 m -2755 4712 l -S -2796 4671 m -2755 4671 l -S -EMC -/OC /OC5 BDC -BT -10.26417 0 0 10.26417 2765.709158 4696.849957 Tm -/T3romansHorzN0 1.285714 Tf -(\002\030) Tj -ET -BT -10.26417 0 0 10.26417 2756.422527 4676.321616 Tm -/T3romansHorzN0 1.285714 Tf -(\015\017\020\021) Tj -ET -EMC -/OC /OC3 BDC -2796 4671 m -2822 4644 l -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 1773.857103 4205.96088 Tm -/T3romansHorzN0 1.285714 Tf -(\003\030\015) Tj -ET -1 0 0 RG -1 0 0 rg -EMC -/OC /OC12 BDC -601 3159 m -597 3157 l -624 3204 l -624 3200 l -f -624 3200 m -624 3204 l -652 3157 l -648 3159 l -f -648 3159 m -652 3157 l -597 3157 l -601 3159 l -f -BT -14.369839 0 0 14.369839 613.497011 3163.526853 Tm -/Type0TTF1 1.397641 Tf -(SR) Tj -ET -0 0 0 RG -0 0 0 rg -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 712.529364 3140.667038 Tm -/T3romansHorzN0 1.285714 Tf -(\010\003\012\033\011\044\012\030\011\000\001\003) Tj -ET -BT -12.317005 0 0 12.317005 722.793534 3160.264532 Tm -/T3romansHorzN0 1.285714 Tf -(\037\004\010\000\001\012\031\011\033\007) Tj -ET -BT -12.317005 0 0 12.317005 711.398042 3179.862026 Tm -/T3romansHorzN0 1.285714 Tf -(\030\004\011\027\000\037\007\012\023\054\054) Tj -ET -EMC -/OC /OC3 BDC -788 3090 m -788 3080 l -788 3080 l -784 3090 l -f -786 3090 m -779 3135 l -S -EMC -/OC /OC5 BDC -474 3019 m -497 3019 l -S -458 3060 m -458 2994 l -S -441 3016 m -458 3019 l -458 3019 l -441 3021 l -f -441 3019 m -419 3019 l -S -474 3016 m -458 3019 l -458 3019 l -474 3021 l -f -BT -12.317005 0 0 12.317005 404.235563 2996.603522 Tm -/T3romansHorzN0 1.285714 Tf -(\013\020\020\023) Tj -ET -BT -12.317005 0 0 12.317005 464.756944 2996.603504 Tm -/T3romansHorzN0 1.285714 Tf -(\013\020\020\017) Tj -ET -BT -12.317005 0 0 12.317005 2936.898817 4844.754725 Tm -/T3romansHorzN0 1.285714 Tf -(\034\011\010\006) Tj -ET -BT -12.317005 0 0 12.317005 2936.898817 4607.704703 Tm -/T3romansHorzN0 1.285714 Tf -(\030\011\005\004\007\004\012\015) Tj -ET -BT -12.317005 0 0 12.317005 2936.898817 4628.233044 Tm -/T3romansHorzN0 1.285714 Tf -(\034\011\010\006) Tj -ET -EMC -/OC /OC3 BDC -361 3090 m -361 3070 l -S -353 3090 m -353 3070 l -S -1 0 0 RG -1 0 0 rg -EMC -/OC /OC8 BDC -421 3081 m -421 3078 l -361 3078 l -361 3081 l -f -421 3081 m -421 3078 l -421 3078 l -421 3081 l -f -421 3081 m -421 3078 l -361 3078 l -361 3081 l -f -361 3078 m -361 3081 l -361 3081 l -361 3078 l -f -421 3081 m -361 3081 l -361 3081 l -421 3081 l -f -421 3078 m -361 3078 l -361 3078 l -421 3078 l -f -353 3081 m -353 3078 l -250 3078 l -250 3081 l -f -353 3081 m -353 3078 l -353 3078 l -353 3081 l -f -353 3081 m -353 3078 l -250 3078 l -250 3081 l -f -250 3078 m -250 3081 l -250 3081 l -250 3078 l -f -353 3081 m -250 3081 l -250 3081 l -353 3081 l -f -353 3078 m -250 3078 l -250 3078 l -353 3078 l -f -332 3083 m -353 3080 l -353 3080 l -332 3076 l -f -1 0.498039 0 RG -1 0.498039 0 rg -EMC -/OC /OC4 BDC -2122 3569 m -2133 3580 l -S -2116 3569 m -2127 3580 l -S -0 0 0 RG -0 0 0 rg -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 1046.184009 3779.867557 Tm -/T3romansHorzN0 1.285714 Tf -(\023\040) Tj -ET -BT -12.317005 0 0 12.317005 816.542518 3059.597384 Tm -/T3romansHorzN0 1.285714 Tf -(\003\030\020) Tj -ET -BT -12.317005 0 0 12.317005 3244.448038 3542.922796 Tm -/T3romansHorzN0 1.285714 Tf -(\003\030\016) Tj -ET -EMC -/OC /OC3 BDC -2632 3188 m -2588 3188 l -S -2608 3185 m -2588 3188 l -2588 3188 l -2608 3192 l -f -2632 3198 m -2605 3225 l -S -1 0.498039 0 RG -1 0.498039 0 rg -EMC -/OC /OC4 BDC -2945 3117 m -2956 3127 l -S -2945 3123 m -2956 3134 l -S -0 0 0 RG -0 0 0 rg -EMC -/OC /OC3 BDC -1879 3750 m -1889 3750 l -S -1879 3730 m -1879 3750 l -S -1879 3730 m -1889 3730 l -S -1 0.498039 0 RG -1 0.498039 0 rg -EMC -/OC /OC4 BDC -2075 3569 m -2086 3580 l -S -2069 3569 m -2080 3580 l -S -2028 3569 m -2039 3580 l -S -2021 3569 m -2032 3580 l -S -1980 3569 m -1991 3580 l -S -1974 3569 m -1985 3580 l -S -1933 3569 m -1944 3580 l -S -1927 3569 m -1938 3580 l -S -1886 3569 m -1897 3580 l -S -1880 3569 m -1891 3580 l -S -1839 3569 m -1850 3580 l -S -1833 3569 m -1843 3580 l -S -0 0 0 RG -0 0 0 rg -EMC -/OC /OC3 BDC -631 4831 m -631 4841 l -S -651 4831 m -631 4831 l -S -651 4831 m -651 4841 l -S -713 4831 m -713 4841 l -S -733 4831 m -713 4831 l -S -733 4831 m -733 4841 l -S -EMC -/OC /OC10 BDC -665 4831 m -665.812394 4822.445577 673.165075 4815.092896 682.235066 4815.092896 c -691.305058 4815.092896 698.657739 4822.445577 698.657739 4831.515568 c -698.657739 4840.58556 691.305058 4847.938241 682.235066 4847.938241 c -673.165075 4847.938241 665.812394 4840.58556 665.812394 4831.515568 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 669.6248 4825.357066 Tm -/T3romansHorzN0 1.285714 Tf -(\020\035) Tj -ET -BT -12.317005 0 0 12.317005 601.860331 4574.477118 Tm -/T3romansHorzN0 1.285714 Tf -(\003\030\023) Tj -ET -BT -12.317005 0 0 12.317005 761.992793 4574.477118 Tm -/T3romansHorzN0 1.285714 Tf -(\003\030\017) Tj -ET -BT -12.317005 0 0 12.317005 3567.503683 3010.43384 Tm -/T3romansHorzN0 1.285714 Tf -(\003\010\043\012\001\062\036) Tj -ET -BT -12.317005 0 0 12.317005 3588.032024 2981.694163 Tm -/T3romansHorzN0 1.285714 Tf -(\002\023\020) Tj -ET -BT -12.317005 0 0 12.317005 3682.966057 2981.694163 Tm -/T3romansHorzN0 1.285714 Tf -(\002\033\005\043\012\030\000\003) Tj -ET -EMC -/OC /OC11 BDC -3543 3030 m -3939 3030 l -S -3543 3002 m -3939 3002 l -S -3543 2973 m -3939 2973 l -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 3682.966057 3010.43384 Tm -/T3romansHorzN0 1.285714 Tf -(\030\004\011\003\007\013\003\007\037\012\010\004\007\010) Tj -ET -EMC -/OC /OC11 BDC -3543 3030 m -3543 2973 l -S -3664 3030 m -3664 2973 l -S -3939 2973 m -3939 3030 l -S -EMC -/OC /OC3 BDC -2187 3250 m -2220 3250 l -S -2187 3283 m -2220 3283 l -S -2187 3250 m -2187 3283 l -S -2220 3250 m -2220 3283 l -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 2196.748494 3261.041112 Tm -/T3romansHorzN0 1.285714 Tf -(\006) Tj -ET -EMC -/OC /OC3 BDC -1499 3090 m -1518 3123 l -S -1504 3149 m -1504.337318 3132.753193 1517.572143 3119.518367 1533.898128 3119.518367 c -1550.224113 3119.518367 1563.458939 3132.753193 1563.458939 3149.079178 c -1563.458939 3165.405163 1550.224113 3178.639988 1533.898128 3178.639988 c -1517.572143 3178.639988 1504.337318 3165.405163 1504.337318 3149.079178 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 1520.9946 3152.376873 Tm -/T3romansHorzN0 1.285714 Tf -(\034\044) Tj -ET -BT -12.317005 0 0 12.317005 1510.437167 3134.077602 Tm -/T3romansHorzN0 1.285714 Tf -(\025\020\023\024) Tj -ET -EMC -/OC /OC3 BDC -1084 3586 m -1103 3619 l -S -1089 3645 m -1089.165327 3628.728446 1102.400153 3615.49362 1118.726138 3615.49362 c -1135.052123 3615.49362 1148.286949 3628.728446 1148.286949 3645.054431 c -1148.286949 3661.380416 1135.052123 3674.615242 1118.726138 3674.615242 c -1102.400153 3674.615242 1089.165327 3661.380416 1089.165327 3645.054431 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 1105.822609 3648.352127 Tm -/T3romansHorzN0 1.285714 Tf -(\034\044) Tj -ET -BT -12.317005 0 0 12.317005 1095.558439 3630.052856 Tm -/T3romansHorzN0 1.285714 Tf -(\025\020\015\021) Tj -ET -EMC -/OC /OC3 BDC -1378 3684 m -1412 3665 l -S -1408 3650 m -1408.061126 3634.094506 1421.295952 3620.85968 1437.621937 3620.85968 c -1453.947922 3620.85968 1467.182748 3634.094506 1467.182748 3650.420491 c -1467.182748 3666.746476 1453.947922 3679.981302 1437.621937 3679.981302 c -1421.295952 3679.981302 1408.061126 3666.746476 1408.061126 3650.420491 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 1424.718409 3653.718187 Tm -/T3romansHorzN0 1.285714 Tf -(\034\044) Tj -ET -BT -12.317005 0 0 12.317005 1414.160976 3635.418916 Tm -/T3romansHorzN0 1.285714 Tf -(\025\020\015\022) Tj -ET -EMC -/OC /OC3 BDC -1664 3684 m -1631 3665 l -S -1576 3650 m -1576.093543 3634.094506 1589.328369 3620.85968 1605.654354 3620.85968 c -1621.980339 3620.85968 1635.215165 3634.094506 1635.215165 3650.420491 c -1635.215165 3666.746476 1621.980339 3679.981302 1605.654354 3679.981302 c -1589.328369 3679.981302 1576.093543 3666.746476 1576.093543 3650.420491 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 1592.750825 3653.718187 Tm -/T3romansHorzN0 1.285714 Tf -(\034\044) Tj -ET -BT -12.317005 0 0 12.317005 1582.193393 3635.418916 Tm -/T3romansHorzN0 1.285714 Tf -(\025\020\015\025) Tj -ET -EMC -/OC /OC3 BDC -1839 3860 m -1858 3894 l -S -1844 3919 m -1844.237637 3903.289914 1857.472462 3890.055089 1873.798447 3890.055089 c -1890.124432 3890.055089 1903.359258 3903.289914 1903.359258 3919.615899 c -1903.359258 3935.941884 1890.124432 3949.17671 1873.798447 3949.17671 c -1857.472462 3949.17671 1844.237637 3935.941884 1844.237637 3919.615899 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 1860.894919 3922.913595 Tm -/T3romansHorzN0 1.285714 Tf -(\034\044) Tj -ET -BT -12.317005 0 0 12.317005 1850.337486 3904.614324 Tm -/T3romansHorzN0 1.285714 Tf -(\025\020\015\016) Tj -ET -EMC -/OC /OC3 BDC -1776 4042 m -1795 4076 l -S -1781 4101 m -1781.272772 4085.374309 1794.507598 4072.139484 1810.833583 4072.139484 c -1827.159568 4072.139484 1840.394394 4085.374309 1840.394394 4101.700294 c -1840.394394 4118.026279 1827.159568 4131.261105 1810.833583 4131.261105 c -1794.507598 4131.261105 1781.272772 4118.026279 1781.272772 4101.700294 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 1797.930054 4104.99799 Tm -/T3romansHorzN0 1.285714 Tf -(\034\044) Tj -ET -BT -12.317005 0 0 12.317005 1787.07936 4086.698719 Tm -/T3romansHorzN0 1.285714 Tf -(\025\020\015\017) Tj -ET -EMC -/OC /OC3 BDC -1839 3750 m -1858 3783 l -S -1844 3809 m -1844.237637 3793.097244 1857.472462 3779.862418 1873.798447 3779.862418 c -1890.124432 3779.862418 1903.359258 3793.097244 1903.359258 3809.423229 c -1903.359258 3825.749214 1890.124432 3838.984039 1873.798447 3838.984039 c -1857.472462 3838.984039 1844.237637 3825.749214 1844.237637 3809.423229 c -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 1860.894919 3812.720924 Tm -/T3romansHorzN0 1.285714 Tf -(\034\044) Tj -ET -BT -12.317005 0 0 12.317005 1850.337486 3794.421653 Tm -/T3romansHorzN0 1.285714 Tf -(\025\020\015\035) Tj -ET -1 0 0 RG -1 0 0 rg -EMC -/OC /OC12 BDC -BT -12.317005 0 0 12.317005 281.713699 1973.111898 Tm -/T3romansHorzN0 1.285714 Tf -(\002\010\034\007\003\042\012\004\007\033\010\003\007\037\012\037\007\027\000\013\007\012\046\002\004\037\047) Tj -ET -BT -12.317005 0 0 12.317005 212.054092 2036.877828 Tm -/T3romansHorzN0 1.285714 Tf -(\055\007\042\056) Tj -ET -208 1962 m -204 1960 l -231 2007 l -231 2003 l -f -231 2003 m -231 2007 l -259 1960 l -255 1962 l -f -255 1962 m -259 1960 l -204 1960 l -208 1962 l -f -BT -14.369839 0 0 14.369839 220.566692 1966.232725 Tm -/Type0TTF1 1.397641 Tf -(SR) Tj -ET -0 0 0 RG -0 0 0 rg -EMC -/OC /OC3 BDC -1775 4248 m -1766 4234 l -1770 4250 l -f -1773 4249 m -1796 4305 l -S -1796 4305 m -1812 4305 l -S -EMC -/OC /OC5 BDC -BT -12.317005 0 0 12.317005 1819.271103 4309.162276 Tm -/T3romansHorzN0 1.285714 Tf -(\013\033\010\002\002\012\020\016\024) Tj -ET -BT -12.317005 0 0 12.317005 1820.444151 4288.633935 Tm -/T3romansHorzN0 1.285714 Tf -(\010\001\002\000\012\014\020\035\036\016) Tj -ET -EMC -Q -endstream -endobj -15 0 obj -<>/Properties<>/Font<>>> -endobj -19 0 obj -[ /Indexed /DeviceRGB 22 0 R 23 0 R] -endobj -22 0 obj -255 -endobj -23 0 obj -<>stream -RR??LL&&&&?)gRO?LL/&& &R|R?_?L&L9&&&|R_o?L9LB&&&!R?LLLL&&&&&|R_o?9LBL&&!&R|R?_?&L9L&&&?)gRO?L/L& &&RR??L&L&&&?)Rg?OL&L/& &RR|??_L&&L9&&|R_?oL9&LB&&!R?LL&LL&&&&|R_?o9L&BL&!&RR|??_&L&9L&&?)Rg?OL&/L &&RR??L&&L&&?)gRO?L/&L &&R|R?_?&L9&L&&|R_o?9LB&L&!&R?LLL&L&&&&ߥ|R_?oL9L&B&&!RR|??_L&L&9&&?)Rg?OLL&/& &---[[[endstream -endobj -2 0 obj -<> -endobj -3 0 obj -<> -endobj -4 0 obj -<> -endobj -5 0 obj -<> -endobj -6 0 obj -<> -endobj -7 0 obj -<> -endobj -8 0 obj -<> -endobj -9 0 obj -<> -endobj -10 0 obj -<> -endobj -11 0 obj -<> -endobj -12 0 obj -<> -endobj -13 0 obj -<> -endobj -14 0 obj -<> -endobj -18 0 obj -<> -endobj -24 0 obj -<> -endobj -27 0 obj -<>stream - -  !"#$%&'()*+,-./0123456endstream -endobj -28 0 obj -<>stream -xyfyz^Iu%{o׭nlm6^X2im 1C0CN&!B„,LNB2Al!fkPuwA&s3'y[J+HN3/8GssŅ^xuoy O`u[_^pyY|=zg8 `ϻwpkv^m+5.@Ko -|?]싮9/욗~^0iS~^9v_yzW^^?>Ы%W]kx 84=һ_G^y ^җ^O^ k/'~kn= |n|o<? ]~;?==|M<P0{wzі$8Ѕ@o~|v}5=g+zoF:<. =aNp/s>.8p~\`x'b$\ IBzCc/<N;=|;t~{>K \w {x:g;YU -^9 .0s݄3Mx &nB'p p_s%1w"og ܌!x%:ltnq[0Cfw^_?O.Bոs!sQ[댬CC,:᦭]t#U8݄}&\'݄}aMnMpsSN\W&\n®*\0n Csr@:8aqC4tn?vL-Mx4~Ϝps"pu0m~py,{ݝ*w.r7!r7޹p{;`ԃW#@U*l|r8]ft.ep~> -'w/eu50]C2G` V{.A&,`'zrwr7zr /$#f -gVas\|QXu@v_nV*<={w:W*#w@{9 nrp:.ࢣ :]ð[ - -* {p -VᙽUX/ValԶ P0 ނu v7{սUxk .Zrpv7asp,!x{tw -fyu7a߱1؃p{Mxs\nKp7=."wvCpKo/vS0̣L{7/8o{ ܆>Y7dw> ;ѳ-Pa?&J28^ _G{l!x{.AGz :`aeWw~d">ҶH7G/N]WU{EQp: {{P "\[{_pVB8XCG?>>#8>~Q^bjtfApYp{ۇaxs\sSNtnvUpMk;݄8گ#.'됢C;z:7?~r8@=%G?߿l?nm/V/{ | -:>/ 4C JW!wzlN}t\ (:~l^«GiSt0: cLoɽONwnt-&s@Իp :a=q@n {~wv -׹n 5L`u|u&ԽnCgps{f [a )0nlGϠp{ ܆n@vq wmp{'܆o|ܲ\C[b - }@Oí  n#Kp t>~^An>/fw9\v>p > ׺!Dou&r_׻p{:PWP_ Up2>^QݫjY0F!mԻw$&9 ̹}':B,\ }"֛  -Eo*zpjoVt&Fq|#wrGNɴ'u1?~i%g0q"̒wshG`[kmecO=8>玓9N:g}ws'w,Kqc}GAlnkt|XtюvNvc}wqé|};ֱu%gI;)2+r8㔺dc*A6(qdl `Y(_eq0wʁ8,:)kAX'pGl8'ӎvt8ݎh8q#k8ֱ~P}8.;l8]arq:u@.g f-0hd=~4{~ w.Xw .߅;C~@ -q!m cC>dc0y0} J(oC64P߆oд߆!4` ` o`K7a -[7av߂h +~Va~`> -~6`섵pl.> -Q''îa/nQ{گ~N}ተ:Oh_ 8;8<~ ~Nog~ Άi -Oگ9p گypv8~ -گ+t8 -<o Bxje~.__g3/Kcpa\?~ _3G? <}.K/sy/eaax><} yCB}pE>•Cp\~_AxW‹p\>?WR}^׵Enl???~^ /io?[jxE{? -7mps{hWk>i^^YxU{/^ ?z{s/϶/Og{gsWuMx3 -?o_h__h? ~ -~~~~3,?3_Mg`~~ ~on -oi߆_kwww¯߃߇wo~K)~ -~ -~ -~ - $~$ww!..S.3xg x/.sOw?l?QqxQqx?885=Gp=?m#xo1[cp'y{> -~ l?lx_{>k? -.xQ$UQuQ4M{' h;N> w½N[l?;ۿGA8~GڏC0~l? ×|n?_϶{s(~o[m|x<_h?߁/oqbhono3=}}__>_>/_KAx)\>xӯoWypS$x1Oi^>6xy{?hWog'gU}<>x^pk{< n_n7ϴ_׶{GMz;/u?υ>σgo紏p%lBxyp \> Cp\>ۇ~?GoNw/w@-Rຮ1#=E8:'B(aRB(au~q{ c]Äݞ Rz<+zmcB)w])#`'2 &z=$!zRsLp`Bu]G0cL0=bD1Sq)`1#]!$0Ŕ2N(RJJT1B)!"sQԉ#n[mpoK'.J)fQaLcEK(C!#QB F5!1˜Ƙ)  J0Fb] a]hƄ^(F# ⺮ &(뺈`I{IRF)as(3 Ů#K?&>ʦp]*bJ.Ba)XP^B))xcb])-6v)fP 30uK1uc)#QDFRE!J(唟PPRR%QB8Cxf'n cu;I]{CQңX0gqFM8b(3Rc`J8u)A F0ƤjM1`PJ(J 1pw.8 FSL"3^FcWH꺮)ƽhcI{!"%Ǣ[2F)c.3mQ "#=F!:EG$GB0!ʘDJ).)BHBNDc 1߱QL%SF$QB {K#0CE0B1ńqB0E4TS9a1NM֚1=%R! S0ôc$c;=ձI`809G!9w3L&eJ)g.%d2#0 2J)TؤQFd2! n]gNa2!cSp HJBbؤEKE(1]¨ 8Q.,K\I)s1r3.8ݞv PJa+1F9! QFTQ* -!e6ȣ2溮+٤.# R(pLPN9 N!R"9TP8bs) S.( yf3rʹcߓ Θc)SFeTPAӣsq!t -vMr]JK.6BbBb)KcKgS&K).SB1P̹K)LR\h%)1ʘS&wB28Q2J) B )uSf!D EUEw{B1[]pr*sʹb"E.u%e!R)Ec@;&LBr)gRsҔS.(՜ Fu9G8lrJ1R2%cSNN66GqJnRJ9g>cb ! /QKXA [18L0y( eSqN]N+✺ -)D!.%JsN˹\p(gRRJ en73B.eTpI9w]iX\1\p)Lp)\s(fJ 3LQ_2)u]WΝ딺.B31f#td=΅\ -rRp.& 0dK]cݜf .z8f\cI9g)cf3θ`\zydSʾM)b[Ac169þ[mǦBXkBךKDXo[lJ&d }l2)r$ ֜S3OKF4\sN]ƄRJa1(\\ .gs)]s1vtQFpc+*R)ȹfB0\p.ZKͅ'&cRԒ( cia!DWŘp:^uR -R %.Bc.\9瘹ݜBH!*Bc&1\rc\p8P>B+:l0cBẮRnc $Tpᮅnw] .έ1'K n[0ԜSA$E(B!BK.VD“a2 %.TR%LpOrɏ\w;K,G-FqbFrr.+BBj)s奌r2)0rΕL -eB&ǥBK%B %rMKT3δ18'iN)gطc`qcLK`,EnTJJ(-RI_*1fB ;Lǂk9ADHҪؕ=]w4%DYmRB c!7BBX)!%r! h,!J)tAK %GJ(.B)PRI!@ Z(KKε'TIAX226B 6':8ZISR)TS+.RhJ(qNHr.PSN]H -kGBhZk!7H+.KIɥ RmqdR@y36(EJ\zRJ)8FJI@\ -ŚRJ -#(BRArM(!"B*1g}" -|ko9ΦFzHt{YE/G2|RX}+|S#=1_ʓT~0 -#kmx"EQssYyyB(_(*|嫣$6R*鴪髮žب$؏}#R~唚 ac|bL{73&hRR(ET)--QJY*"$ԞoQD |M_iŴ2B)RJI!UxV)ŤGRI *#=`PQ2O>f{Qz.<}k}Z|oJʹVXHk1EJ*Fַ2.AZ3A1ƾk}q0~u~b{G144} !$ Ckoi4Qj_cQ#u 󵯭Fjnա2_jVeύ|n`f`\Y/ >`AYIbBkLJY"!k гjҽ -Ji u%֗84"M/6 0QQ}cGք=JhMҒkOjeX[#X'֘$ 4/JHy*LTJaP >ci_n(PJgs. /"0$aDaA>Tn6C&1pM֜raFVե>asQ 4Y&Ƀ 3SJHε6й RJ( -p۷444WIuC 3"4LCh"4񵯽0FT_W MQzBu]a7~ơ#`ޗ LC&2LhBs}&ֆt:#daI`4efa&Ipy2IA4FaAG4he ha2^QcL^P0}? M( BFA8a ce4g6 -΃"A`B_\o-;6 ^ ga1qEG#x}y66,"/ LdclD&6xYfEd"c=yQQy;om#?N~4????EQPfYDf -TTyױ&2ٚ -GOM3ڂ8VQQc4MS.9L  4 -(m$1 |e12ixm(fƘ8H0`o  04 6Y=@c<%%˖˲YfQII3c$S¬eYJ)4M]V&ʤHTI1f8MʤN_2+ˬ2Y5YmjS&*lYI^,p`E].vŮGݻv5??gd2XIU̟a8YI4Y5Y/Q&I&:M鬳M2eӺLDphcťp4TeYErX,\lTYʲ$2$Yb,ҺQY5_J%Q>W_n.rO&zVgYϳ2ʲ0/Y?Kd1Ź4g&Bb&,I;Ei_5sssZ]7M=6_fXzԳh~HynškI]`VM<_,_3FzЯY~Y뺮z86Mc˺?&u>7x< s]~~y3hs{yM>@&oAFS66M?tj\a5ՎjGWjk*PE:;NIa՞MrIaj$A0k+f8WƋ;f8\|2UUEUUWTU5  K`89T/wfa: 7w..W aVUzTVeUdŬ˳f2UʨY/"سAP (8|{h#kcabsd<-j\^-OF˓}Z;h6UΦiM\UUNjdymXuiҔM$h6;%&L&͎S'q3Ef4L&kkN ϛ hM&Zk֖mt,oR*Tfq1;w;Ef,'ͤi&hr,GѤQ,7jT6M1Iǣ&99sFw/g]+N$ySlvS|htZC%{YQ̊I\-WfLfYkf띛WyjNZ\noyRy=kl}˓kΝ;wFYM6vvﴓt2Zd8L6VdX4YUTfaԳU4dIZ\Z'xdy:Y9y}xfa>Yl&sMS,Nf檝BsRW+MTg7jӧQEͤY.0Gf:Mq( ɳlk=lffgi4 zFhF4fh4M8j֛Itzf3ktu:G];m}֘SvMN[?mYcF{Mt }O89Vfp6ۻk}6f{N -grFM9M3jR=Z8)F'/°9}lqexw}l}v6[hi1VѨFQS5'7K {Nޱsaap4Sf$gi:5%q1>y˲rXݻ7VG'޿66V8^fh:SkGthh4ʢlycc.AtX9sl9O߹stswfssg-_I+}'%k0Ǔ<:[]xghAUϜ^35S-y|cXK<%Sb.1Sf{s# <>Kד>mzUë@Scccc `fuuȒBov{dd<>#x)xT:[x -$%䫦ėyjG ^[MIMIM/[6W6^9 yK >_yIP+|#|Ǔ=O^(5xtÏ{㏟xɧydsϟ>}ŗ^>{W_;o歷΅w߻?.ɕ@3EX,`-ލɛ- Jmޥexz&=?}CV5ݚauZ֡րuzQ֧mMc2lN6˶v"d u.#%Òѐ;o9A2:TG#1p,rswlvlwq6ɘ6\kV^;pm5k.j۵k;|?8cڏWvϗ?7.3_哗+.%X X N8 - --rX+`%V]x:wpF ?~<!,r(~<Cx(F JQ1胛(>qx#؅x -~V܆x`E%B5\OQZ|_Dq;/Yp ~w=>??'t?gcssCX )9Q%ቊhCtDyO HL$I*I#Bd; ,@/c!$$Yd&..&[q0<5NspW`_R؉#pޏq(J%CC| y+{PӑiϰY-iѠi5jTeRXı M -{e5⬏NQ9J{5lEE}`T&bF !kdA -IH6$rsvkB}5XgFjAkvN[#r{fͱZ+˭VD*WZQ_]RI,,́.^&́H +cE*+vss*"ckErT44E&L(7lܜ5D>2tX+"PV_,•%9!۬]9n0-k75̬P ܜGn͉uqYar]_5z]yy0Qm%Za\`T˷ndXV[17'7VQnWlF(GEm]f ssИcPh{yra{5B9Z#bH muz -uv[l6viakm۩тu[rsxUrʁLLv[Xz <,ͩhPP6Z#P[g{8C`kfقS ".֭?@au?@9f6G˕,–IssG\ܜܜj{ oTWX#0. yMdo`Nn-nb]l9nͱEjMcuZnnytk*i'+ -k8Ns6lfvo,ͩWoZiVn_7n[TߚR6sDCss"Ոh(3 &sLn3G*#||S=^=qzbkj$K׍ Hx Ň'XzEmy>*n" X`+V8p[kl~l[Vp7H[aw)*,nNrs]7MEh;%Gn(t[''Y+4BLV%qeX  -_Een1őGȘ`!  LJAyzӨ\=i(G6`A zawf KluO?o%sɖiQr۲gZSۓū`eѴ(9(-MAe}%UIW2STbx >p aܮw]ǹ]k]anWk*k -)YETQ(ҋ")D2D$"ZDD hjR=i$VG5Bko=#}$FP=y12]Am箎pfu!F((wl0Geu=>s o/'VOh ֞,q4;nv"TO<x'EӂՑI֙u=#UM(+jzG`u3zoV@ެ(0^zƛI…NJ?VzXPEm]d$̺y]Uzd#:d#˃(38[)*ʻB`]3,Rg TG'YguMVQVQaZEm]״ʃȘ5VQZVQ[Ӱ<Ȧ$| j.:O뮴UVl+VG/'uW6TVl+vWV̷Wԗ`B^R@x7#Ozwъ^WGocvm{wrtioPΆp]{<^nu?4#]pbr]Q!\=KUao(r{py^ns?4#s]pbr]!\=GSao(błI#zB]Ff&T.7ۂ#|f\kO##rȈ'wDs/ 4(##ʁ&O 4}$,4e 'Oɟ(rSj:-ч?p$&%MD 5CjB̄Fa,`3lvB'< < sp.7cfa+d3\>o Iy CF -RMjt2#GRRF*PUEUQ TABnz:BeIVX;da/_KY'܀o*y FA\qĩ;qybOp'7uKYDR0&j/{G~K0Xx-x/i2O/2yL3sy5wܟDE_lJJdŲ*Lc ?S|Bu@u]ޤjmCQa1lJ(5՛ZMJniy޺w[m}[?8{jo_?RTT4hCO;Ox<0'CC5C-I-R?#ŰgJ;0K$\qȔ#/˖m);R|wU|Y9r{U*gU[F pGcS;ꏫ+>xرsƮk/?Mhk\5j|7N1nU>_3~g&'p߄G&D'\tڅj&uNz~a/N4tʴ)Sޝr}OSES6L]9iæ͘:mӴE6iNGRWTW]Pn[ݑ>:`u!"=pLӹӫ7N_=ǧ8[f3 EZ:ljvM/7x hr>l9+欟999?s:'7j 4Nh 7DjnJo*l4iOsM4}¶}gϵ͛;l63oYpb ^]ނOm?f-,_j;x9=Ңg,x{Z|w~vfk5/m|6|Eboo nZ.|oմz˒%c\rKZKK/]tK{Y_vpYd>^r\nX|,_[^1bŴW[g+ήX9~劕W>2ݕqbU檡jW-\n^_Qۮ+m~׬.V^]zꍫ~n_juߚqkf;׬X5|خj7im?Tj׮Xc/}k[ZWs]sGr{6Že[?~gA!kð 6ܱ m\qo|tzSof\l6?osb[o/n{b[׶ml{k>n>Qm;ٝw.ۮ}ݯ[w_==Ovt:Ý{;|O۹ <z}߼́<|`;$;4Н8ᑇ}0~н=л} -r F`(1 "?\ y - U6æē8(!"(Nfz1$-R5J(`% Ч:E.aEp{8`y,{^caQ6žc],J%@7|PZ | i(UJEWrϸ6>(1V$^f 0:E*A)8F ò(."E%󕜅#nzEdfc3ލ;^D{0d|_k(~JCi>|@(PE:**Q˳O8:1:oI% _R;K` wS:A1MiA̰*8R7Kdo+9ޠP*BCi -=&3S,IfI5YQnaUfl b-Xa05ʵF\v\yAPTDfh0J D sFh1D<^0(yBCNYmt}}u>_>p:ݘ -x`q7yv| 4BPSH4TN]c46ja~zRUkF||x՚DɰD„O;3ILb޽db*);(RS0ҋi=1'==JH-*Ht艢EtQQW`Jz6[Niώ"-LP7扣H ڬQb'[WtUj ܛdegF2/f^d!ӚI2$C`zY6CPNP()w)sʋko4<=|ߒP̟ʟ -jJo]/ į?xJ @A>IT<|h_2/1i-~D< k0,1f. d"TQ -d=%JA~ȑsEGq= r/z#=ƮV `V!x -&,D)^{["+KB >A%PQ)jAnIy) }Br^)Vg@~(HN+`sp4yhJ ވ}JW ~Ҿ@olu@`t[j>ǽPK__XTӲ\p?QY!.ܔYc= Y  S@~HRg.`4B1 "_!, @A`&M ҿJcIpK%`s)(B)4h:ӻݦqu ci4S:,D2q'-/I9 -"};"Ѧ:16韛Ai4V_&䠑qĚ0*0hM DBƇAhD}:4kЫxb ^_-VN{[O7z㵧/rGxM%l5{' x8q>sH3s$0K4WD2Q|%R'(` qc;PP( cIWfW)+BY^pӫg+߮@js`Sم-= KK͊2aA.mW3`!:tQ[Ø4E.QsL՛[̔9J$ϓѩ) -݈jnĠ4Uj MPhbD# -X+ Cgs}uOp,uZ)j~޺{ϿDyf]~rK?lS_PӘs iMd +4D1"+/kRqC5) !?՞%J3x/jii2m|IKc;fy5d$c^Ѯۓ-i4u(ů'WGUr%Ne8#d(a[0R5adT886e, +w_VGGB:iC38a r҉NKN ͍*Kj,߶iF{kOm^wX2 }h̃N_ &1 9<$%4+#L._0ShMqf$ 8 ,=%DP(wYyP -pNX ȃp{pD -?oIkhVh֍n~URyxobD]0hX%Va16WqEWq{at/8uIMF ǯ4%^W7+ mV,"[-&bsh49 R"7rp/UrLk~I_ެ .^OmI,0ai;v Gm~wxblo|kYhڦy;qcX6d!,#݄ -iHd;&K=O(V -Jݘ )~!@ICi,\)3Ҭ84LYFh#tuj|FrGX=4%6W KĎ(֞(vX/b0T= VzjOX{L}8#ɞZ^]䵶-QR};lIH G;&~>5$iN2!m&di (ٳ_س|&>1>V)*QEC'N. $iN@sPM(Jul@K7u4? mTjиpnt@Q+׀)j/A-!4eA˲紕zS W+VMe"cD='P%W#&bSmݛ\ -5En:BVxT|S@`&>LY(0 .A1bGn /@A>ڊl*[ZT_P)ԬC'Ws' ZD`)˰ZassJ)0W+V&R0F4!>jbTEb,Bj*t$Na)N%*j\2{2Avjәi&\c"NeqwpӓGW4.ݑw&& ߃< ,څ>g+_z*l>*kZMRQxf(JTR5\޳E^$x%-/^zrjT"o.4 ]7 L!;b=F7+xt{?cˀTP3FJc1FL67)6&~;ndY00!T1ؙwFGC,G4_;h)ʈb)peDY0aXq+qFOmQl>g)JaycgR=#Y4X]\|.L24Qit7W@n$*^Y:cN 8PnmjI|s1ul@t# (}adQ&3<&%9,HE"Lj4#b#H&Dȉi e7P DFӳA - aؠXŷ8(!橗<?=!Yߍڇ .J|1QN/,okh < , "YjUpРYgHVSIzZ8m3LɎXY -ԴzL:wC6 -P(~#']; -I%C:VOXar* kaNȰJ kѢEľs 22浘!O_ Ҭ( ˻nPe-Lvy}ñhݨk[έm##==lXoݘW^UtuL)pٸTB8eA[CۼQSՄe99iZ*4PT Kr*TټtT봄;lb_q`gӍk NyO"p6[3k&>&ܲ~w lYPb wRtVDD" A" ؃9&o4W[G  nn~-o@A~2|o@|}&QtB @E^"!eNIYu318+l IZ(5I~EP`G;L3 g.A&թf6kkOhFe:Td D"1*O TjVfIu3 ɰSODIjMC`b7B>b*?/!\WynfJEC0HSV[gnV:}- Ejh|TP)О9 Ph<)D1~SXgݙVk/-{}CIdikc`s{0ʻ7^IW:)VyTP, 'I b$,pV*hHQK]]O?y0BUʦ*TU6UzH|'?NTINk(2@ ʴ0]Qs|ÈyF`ABPIV'Vu@p"pUɨ^(:j  -UG0?U I^ezA d#y\XzirQ3 -NĊ(kQ$ׂݮ_|EB3;ٙӔ#]?XģkJGٔJ@X@bzA -dKV+6>**aE%$U2SBɑe9D,0bX"zc5[h%F"f)Z4!RI")Ns;_zLNDn6w(HG}%x52$o0( )i$oݢv<'@A>`IxX(F;r5GȔQ.1u7M䋿&h@X@cz MӻhBG`[< DH-U8cY_*Tt LO?@ /E@ϖV좏H(.җRI%ҫ -VI[( MV| @vY~YsL*/'U(\Z!OɾVhǫd5˒!\%Ma|*BJP2\'KffNY{*z(̲aSKvD~H8T'KӹҠB#\fU44d4iN!)%GR.$""Wr2Z$ْ#f%Ql<({{gd$MFF"YͅPf*l; 8P.U+[[e*5UǝP_}x@fswI慄4)\Ȫ= -ߜ]p0=DUO֬w0i &'L -CnkcLU^f<zz9?:d3 gãY$KۨoxA-n!"(PwpO4!N`XmRm fz3W&W&&źG0Q-ZT v7Y]L&l :}ȇ%%{ʛʣ/}PIpV9e]m" -F:cB51)u<. -!K;]t.Db]yĺ\o!:xBPBGщF0* 8dWm:V`1iũw"m쿳}/~?_bvo:~UXʃ]we? C\УyQ28] jk6po8C.E -m \ 74KُVc geOyFz.GztF*yIҬPI<{p(Ey \V B˺GIὺ3u vXX?,ͦ ~9oN<ܺ 7c̜dΝ(Dq*3-R.밐_ygBS#j.\ݘ+XvADЋ\%8ٹdߞK.c\9ˎ{e/&Э̍Tq´/i9 cROB5 -!Zu(ގ%cjwi$Lai ,9dYzQ§d+ - r)䍑VIwK;RIJdPĈGzO -ɻNYL ;,cGlq*"~!sKDK#LV7I@.hгȍV7WηS< Ϩ|'O~_sϫRO'ӃLi$#H3Fd 3_0K 0 4B5Ww47t4 n.˝+ô,/؊|o@o}}S͟g/ Ǐ[آ;wnW[[W[2[ -L?pp>n:]͐y4E8_rșC 0=p^Ū󻌜??h$Z! hx$v1}6}EG~C^Ҫ[_Z%T)$V@ݞ¤n7hU@S@ }8FҌ'rr"GGZQ6:4ƾe!(u!ȼr[F4 lx19 -1ZרQfomL>~82jكo4 Mz,X-=-L7u'<,,%pf}w,E,I ]0BQ A¤pnuxi ݇?_Rx0'{tLq]33DeZc AI×FpsYCJF2Qt0iG+/V0g>u& 0Wi7n0Yv%%wOU{K).3WX-u{nVz<{Mol8O8gF5/B7hy~=ozGGm[[]˰ D*]\&=< s!Mps?5d׫%MvMKJCxu.W Ý%54jw#6&rBCG*@s1fWTU+ZS~Ŀ_:&)mۏى=mN 2)l׋C V p'@FPI wS]I$ 'cd 74b1UHdp~D"5ЕĮd0y܍M(0Q8'/xG"w+GeCm?Ze|ٿ{MO;;^0`2L jKNgSzEa%$Z(DPUUes,$ɢfET%BY^` %vC". 𦩰Gn X{a:>`ZLܱ2'gn^=>̊>+:4F.wc=*`CaC.y峉QJ|x}o^9K~s>cޞ~["U6f5cJKyOkXvV`)a(9DQX Y =b -=$KuJτρB|߮ܮx093תǻ*OI#5 [_'74S_Og'vPJO~-ET(H;iyDZDYGEV)HJ5%˦Fj>R`OH$Xlfp>5+ڀM,/̴SFf~3zz;-pc_fKrEo%Vl)̉*E߷Jt5y43v- jQ8Сl7o?y<x=$vRS҉[GLb1El>u34Vl^ IH(ʱ*E8ASua(`i<0*gj.sfrpfA3i6X Q-klǃlA1 9 ,l  P,ì)MS,@&v]t e`Q֋SHnB*"a9pis{L:2?ooTphpCKB]AP8PL 8o_L?kWn' Mo 2rn)rT;cPr.%u5A W()4T @ C'/]ek=K[XXj]Fz0fdjl4$҉qH@6oZCWnE_Z1j a4aPCxljL`}] rC)ęCSSw͹ixr 7u-]RʁvvSϞQmi+RoC=5 -X:*kDŽ)UԱ; O;nz]gf]9L鱹8Z&8Zɺ[kNܸ @(H5gxߺ~Ϸٹw]{xoD-gՍ@ik*Y_30OwyW+:7W@tΥ%(u`h)ӭ3o8bvrsׇ&ߟ$v# -!ck| -v -|޹i ^Ey@Y9܄rg<Hp[L{c֢h*yl]Y̒[37/wLA]3b|7~W?Πǃ!q}3K*FQUV;W`pZa p yx&i% -*kkex} 'ss¦qBa Yr}ꅽMkζb%/縟ۇ^Ў@5`I ʜ<;itz<Og0*ғJRvBuh$#h.eja\oQzcp>c'х݉Ձ4l6ԏh :CVĥb=Gm7vEċ޳K@4;ǃ*JjfՉ*j}r0yz%OwT\ wI\%s-"n1thZ+<)ܨkxE*fu_=~~ -ߨhUՄS\eaPM$9=0B'keNowd33Ó1Oմ6㽤FT:M6sKMw_ֶ>=U Vmu7ҡg_*xL<ֵ'38Inwǃ V.>۝lrY,@KۚV ޚi#P@"n"}n[;hA:;޶ѺB2Yo77l-k{::sߛYAqǏe~@akjzӊn -^!?c):8Z/_+nuvV5%7˻\6馈ryd;W3mͷ~6YϜk8y͏lUAUb}!,+q"I#@-ryZWu{fOywoY|UwN2MgDj{o>|M.ǃOe*D$AKuB -A:">r|E}ň/'.${=G힇*~ -&XD?@cZuqP׈w'(zi .tpkp -ܰ^*9Ztnw3!Nq<+׬},dA#=4]sdac)u(`Um ?|yz; y, t }ME`eX[~Xf -u+Euh%t8]cp.$H#?|L@&n#MJ+kRs[EdF -A&-<{j{bL`+^@S7L{$vS@pPtDdL/C8Q<MqO&idϛ6hTF5[̖c8}%Ukju|L4مI -`n?0H)dOo;Zu#?{'Ͷ{PсG~,9)@Cb@i٪m LLLҡ,Y8EviejUY&dVYye)*,^WH *,2AS#dUYX@~$ !K3,koboՖK<z@ÍsWŪ=y?pT-V7q>wqxߔMLڈ -u܍ -”g?MQ)-==#)M=d~Se @΢bt8Kڛ63y<2þYm1K%۪uKwY?>V>2]ޣS^L(J\GlD% -Eq$,,9r,+{=˝)6]7Ȭ">Yt.PRa'U==ߘߕL1011Si(s2ڀlЄgDL>F̖]h.>@7g"< -UYD`NBK / )Ǖ\O-#\YrpMrH/=hъR~U.A{=} @9"r*BD#!999a"9Yv%F|0=_&q1'UրaO8tY).4? -0\EUc[ΟR?72 }M̫zm_u 97m;(os -߷}m~pS̫>@6M.FY$),',be9(_δdq3i<6by 2c )D1{i2fms]thy4e1=<>`oۉj[Losb۾6b;j.{)"zxTLF?ssSLS2C_SUW>/l=^Fo17Gtwim B,45y$qD gl -2 YiC^Сz09Rz},`W efMnPl -OvCkv@`,y>NCEh46s-m*a(jc!ɌAEm.bgdv93*KŊF%U7Z][4E.'\b+'/Z4yEZKL?A526"VF/V -aNMӺ >>0">?lUϫ(dC}?]LYy%xpK˟€.uqK|+JY hjќb>-\S]åOWJ:mZmh#vγE~V/&0^˻ko ggQs0 ѻiuj V; Vv[+bn+~$!. _3JJL`ﲊŶSٛfe鐗)Bɗj^tH\/*(ǯI?B[ZyrG)_`tfk>槈^)c危 =YYzMJ:_jpEjsssLicz&jQww3C p(1P4,@wv]nS3áNzгdEvǸ_mq~A6S&/t*mn*ihBߖ^wƍo?4qmɾMKO-h\؊ ,V8݇~ -.V} mׇ.]\w^X֘X1B3 A^PS]طrp@ufڶv[^6{-u==]߳vP~PᒃY - <غ_KUEuL7kt\g&[ b5wDΠԂښj{ aoHv -mc aW $G;w|}`$iCY*KheގMZ}{YEv_ -衼PA\A,T> -TG>EX]/=Cu#E8=X[g0jЁ8d*` xBf)>=JA#=b&x0gkk̺Wܑ†zS %X: ӟ-kx뛍 B-]K R_=ꮝ}kėX|ǕG׭I]rBxeOpUω衿џ2'Au^~i~EOWWWTV&T;ƌum \8_OPpK@US__OhpX]cھ(_R8VwRSEm -X/ -~B OILQ#NC"cJ%29LoCْ/oZ|ѵK]-?O*/]\zkx_װ+k9{>}gDUV.4=oϫf޲3V&8J¡mE}/7#)Vp.)m>ih+NtImEmE]ڨ7mmbŞ9mZHiHdN3\E;m@Al{ w (&)ʝc7~zY}ݽ}/=tk tŔώϨ%ĉOo,6ɝl{#L?pO WHˤUҝ-~}bb6F)V6۵$Ѣjڵ!IJN3C9G -WyEh|Z!PSX2܇H>7~>\N giBL\}$']I`CZ4ZP|B?ҧu/{ȑի3S̍䞳e.'G2S05zKh+!Orf-i~kX'g,$;_ l=Vz E -nUnde%eRZVa"nl'-NuB -9x/=3M9 q5~:ͶXPU[FikehA$Qev/ɊV?5޷ߗGY>|&;&L9s -JoJ,o%ehJRTFj:ΥPUSSJJeE! Պ֤BBJ%> (U2*M)eBWBGTVjE_>" G{jaaWqNQ+<W"3T.Db˿*P(X#esH+DP 7UaN{`1.i4se[6~g=gVcHv/K8_ -#_?C{LD?m3>a]B~sEMX -&vBP z*Je}YW~PyoE+VZ.PIEjaw۩FR6-mR -_ӵ`Fh!#NdӃƈuރhbD!T(`m(fs5fs^3lpV:#s2>:7M7mIdwG;T"/tkҤiZuܹ-[)UiK;fF.8^yT妊 {SeȦu%gOw:\ә޺8vٔKZ] ~ #𞗬uY}+V *IvCvSDXO6/CauNH(> Kޝ]r^>)f9ܜMc7gps6Lgt0q`A^z/o7؏',`Q,C;0@uMZX,b -DZ.h_چZԸړYnjc{r09d.N}6Krv,&Ybٟ3_/ۋI`>G /A2 f&.p^~H ЄBJXS-B -\#>073mY'& !lgs0Uǽ]rgp 8>>LF'l( *#9xF !?E@#;ǁ6 }F(e킺GS/q~ -@ )`!=SO)]qs=Z!ό#0b^qZLJ/4F΀3 hx{yl>졧V}?"z?˲?Ƌټ9{^Ķn'2 vP!CzM@wp$yd~* LͳZeUAwQp D"ZlVm!TW;@rIPu84*eBnA;YO34#Q 6p҂ؠQ=Qlk.8xi-ЙO׵S3Yn{@`WԻIȃ0KpJL3^'_+6))rN=4Uk֮mvi4vBB;ZCzH3sb0\a)p ާs%HH"b3BtKH\lS ||[~z]o9' wɤK[o쥻93:{_d>O?{`lf/ošO%M%JfDfhyK - -Q"Y??5?!$24SB/v+u)`GCY7202q7SKh,ޛDkHY0srڱbUlxu$-p)on~mG/S? 郯⠃ ~ENKY]xRʛo{P QKc-tO =8{n=޵ww\L2e2B=ZàAf5y85~#-ﷹ_WktbuYGأDb(1$XN4!z7;D|XZ?V>1ʭ ʗ^w]r),/ m)#Py)K_%ѽԳ%1}qq1e|3*} 8a /sNH@!BpB[ڵy-«jo@Ia,Z:nĪHJ"($*T+q^TxR` Abt"p"NHu,J 8SL7+V Mv7C`47DnR -SU$<@/3X*iVK^WLf3ϒHgО䗘,CX'i~p4vy/3Eyf (|:&)P4]}nΖ1[-d lM-6^mgDn;Fs1,evN_/oGQ#JО߈94b$wN!`/Ekڙѣ6l#G92ḛqQ[W&ːgM -׏| -_4xf,‚=/7t 5() -Tc? Q8KYx~aVưp~awũnsN8$ S(g}͖&A(Ud>yj=T`_n$=IA@j'qyy.`v[}gG0jsyQ-'P!Ǐ_ix~:pM);uJzE |y~LPÍGzԧq1zV+{Xd"?S5*o] qTi6_t(E~nL٩Sթ;":a4% @t -.$쿂 -cPe2(ϧ^܏G bÀ $dvP8a14BBQ³ XHx,C)ň>[Q<64ʈt(ϭx b=x+o(k;a?LMҮ7H=>4jF/_,zsѝ_x.CWAqF-M@G]zZ {lU 4E_*"WOGЉt.]N7}; %27L  rB@(!$G#o>h 1A=F2KԬd7 ` qtr0j&v>6mt<_m5 g %c1e|=Fzyqr"1æM|A (4Ǡ#z .AV|ǭ5#*f"tC*6 -<ad4pd ]'g0i(#`9 A=,LρqC _@}"!'*_;^ݏN:uT/{9|Dꪲ|쇠^#`$y^"MGsQ 035w#{P'^2i/M1f%D_I%X A>#iR&y 0dXa8hxѠ{#Im휬n'J2!l>ެ+5\t37C15lJL: -(h(<9lw+w{{[g?'_hoZ_?̙E~#]s^{FVLʟW/{a (~t;8Ռu丵pV͢; -ߕwwŏ;~q bǘ:se5V`ui)]c A%Vnm6Z1P=V |X[TDޥ BKö6jK#]*tYjOOo8"q &I\{qlj97&u;T}]BP=@hESLWVF4"B on.h2_7Bjr,m$*iwjBQ -m -زR:eCwl]qDK{?23O,tE=G;3G^zY)y͵C{wO'mLMnJn-y˭ʇ;O&S/MYx%-GnR% @~YF>ݺwb6on}'w%g5n`kneFl"h -#8E4k8My$me0'3]G"ShcMcL2u<ñ:&72ХfI_";Ȕv^>݆PB2UaF1q[ζ )zߩSʟ+S@,$GR2a*Oh#:ry[CC6Fbb.֋c:Xf'1Hh1X\ Gvb#lȾN@ɇi -Md0K,09Awgp> .$dO:pY]Ѷ3]<65ĞVr$|€Z\c,פ.-M̛Snm߼=ݞ$]-Xr=ӏza? iBTWݛ7"-9!'/U$KEM0 k|JSU4!2M>VE6il,߳z}%6c%9uuًK(RbהJ (ip -Qi{Fym6XXz0^p .RV| ut顃mעBsꐵVB;e'LKYOi5p{[[('ѽ}vzqZoCNVD kuhvQhpxNvb G%EV )%PrU+_;,"j`Ve̳Xm:Ax 09&>73AsDƛ.60=o=OWqOȉNhDB389~_V(V8D9C#8aøXaa@>P(~L@3Ŋk3yd֩S?}ISuz S$0OfGoF#WOd|@<]rV5j|ɰdb @KQH`Yx3F^&or7汧 -+:KGuYfoNU2;ǡ{zX*/?^)#P$m{M>Och?M.Jc\2&!Lf5 꿤|Aoj߯: BBH 2BFr>S橩ZW#vk Z1ѹ`>'ʲK1P_10~wm10nVg 81 ZlcB;C@Ec*ػ{]1081t 1tLgWQ{ޏn?w9Vlӭn]jJ=B:?_ UALu%Tc⿘9ۇvP]VշsGyΞ{mai'Ϣod hlPc1gD<B֏K&x_X|,{o&A0ޫc}yN{U>Fbp,*; ~efh|WWl'{Ssy'wUf [6( -} -ۭA?WpiϯG8c}U[#P\YV5lR-vie;0b_ޜ>Dzzu^io) -HrLna_ r*lgG}q4i3>۠2B;,&ɈΔ]Ͼ I> UB * =q/\ȜaDmUm[=|h5XR'̒b#?ɍyS ̼EdIZ.oٟٝw&f-UY7rwhL/97qK _Hf g0$x (Qmo*ܿfl0?Eo[0ꕈkQ - #+I=g%E7;J#Rqn. ׃ gG@0j\GK* -$_oѰ f.s(/`%8`JoXyD "bۓ k_3њ@9dƌ g\_ջw(Ի7 ܠ܄σ lJP?>/$5d,: O!p|FP ,` -\k{2{@D-+~߳ >t;_ f@R}0`[b-,mj(W4?<„dhUsq8['3~s@A ܫE`JI7)It4 {3P/bmU8Q==ThMzjqC&1=nh+'j?sta_j"T` PWCAs[j:s"$kcE!ȉsB&)jnrޥ9DѸ^; /#Q6'g?g0Y 0vIsLd}#:HcxB\40uf |XCƨdeHUs99^B8\ARmɕb&u*H֙3wvn#O,xp5UY;8A ]9x>HX(j_S}` :y*GBe!Y@?$44j:~Z¾LbTޮj"iы~ ڀgM@ 2<{ =al!A yPC 9Z rUŠh"\=꼼[ K$X!RQ?񧑕*(*DZng] `, LML ¦$Si3umX:ىLP_rIۼ KfP;6YVyfY0Sv g0:#^9DX{nF~3xEVnݺDC:`Z ./@߹z5ĭ˔ \:QZ߆Cʟ_97h{f{R(PfTgw%:s,zXynQrFrl#a`"BXeu^>P0tKϡtqT¥% !SQ2UkmwTjWQ .EsiKLFF(ח6B0Bq#BE@[銻x T*+e/ptDE~z[??4( `μu;{"6mEY\VhD;zɗimśNfj)Vj~ Vvq{U+V0ntYܶwz6GJM5*jzYnD*b*L4D'kN\w"?ǐ:Ve,~殱BӧR+fk6Wח?WUD}F x޳O|ꗻKmʭHmDҋ)'=wFGOE(IvJd YĴ{AHm -?꧋ھ^|?*a:0JuAoFŦeu<`0#ia 1_GzQu>9uQ#9yW9Cs^*t#'x]BP@: -ףKW!U)H&+Y$SEQpaϥkXDy]ym)TNa="A)<5M)y2 Q?Y}\cBQQ`4hbգD[dL}*"G{c<"b)q3mo}VBN>#6m)[{ml1CzwƬSPcRn%d2;:zà)L9UĉTgHbq8a9;Bh4fmq뢥ե+b/Y3UL;a^%K-"oCL>k[ -1z+3z6ޛ3 &SɅ/_``pgk>6,k7wmvvTUx{;ԻOګO{[n޳naK!=o.Uu9#6֍V옼Y}= 1GRTGcThɗ.:S4# :±nA9!eLe i,#YźZ#@Je4T1A Wc[xeLAIi~గF(qx!_,lR[Gwoe.߭\mRTl+6nE3?FGP ^sx}ʟ1ǢE;*!ƌg\љP;yncNi$s* -PgobܗNL@xl:(%=Y@2JjV'-|Q*G)thvԏJ=;!fe,kgOxEL;2)cz2JTUϟI ʵ6ӬE>c< cb @f~)^ (SQQfsoq _dFp R]G`odz2J9-O|eZ|b^jqn}+`AH -·f0w1Ns?Se_ .$;KZlM/vXt§ UZs2|]g |fC,d_U 3(XdhnЦݠߣ]BA{Tpю{8* Wa'4ܟm ^S;y?ϣ[bMWXnYd ۵~th~u}Owj"Iy`Nq@a&+a>6+-߳ %DBPWj^_^/p}#xTjIzr1Kyi2ҕ/3 du1k6{m.HP@ -tyˀڗ`A\LbV0N`2-Ly&Ą 0Ɉ…yHhdFI5RXv} ->Q wm*W4x7~~×zO){fR^W>VU^# 0{mOP`+a4u8Ԉ [t]mef:ݺmyˈ #Yo -%L&i`A=gaIqqqq #g %3Pr^F %r"PBNh8$F(bP,R# -MQK,?'V>3/w䷜EjHyV{-m1_O=GO0=E0SMJFg;@H^=h*ZL4H1i.GbB&)'9IGꓙHU\QpP35e仦KW9wgKmk_޶u`sM_o @.-ÞýqD􉶺\G`8+حV0 Λ~/͖:`qV;0cwɸGVX9B -i9bpWp!Sd6$Z]y ->S+Zk+**UVeTd$mQd4Xec7mJd(nٱ64m9wަlʭm}%|~}?>?zwd? H`0չ"Fơp֡d4! ytEh3) "X "Øz1`;DIՉH&P!FB6kIdB#h UTdj+*q\. -5^aG?麹f 鮇,3[u:1l1Zez1=@!\a.oD#/$h#'3Uat:$ j#uR{Fso_' f[֬i[KQK`avW(%B>ƔK8j`:VZQJ>+uYdH싇Uu4}5giYP~:\u4})RN\ -%+***^z L;d6n@NpLopCfKy;Ob:x:1F*2[D.4.oy)n3i|K$D2[J$")\km(!Osɪ0e$ZcuhwĚXCr6Om+<~iv9NKȎl#T=ys҃dS3lCd%(lu!SщPB -URͷX//s9 @){XЃlJ3+"Rb;lo[BX  a n_'p/p/rq_psfnw{cp(pڅ%!#O!S[Jfgjk>rDUa#~]Ob1걟|ۿN] -%Am86@j>RRhL - ̷~ u xx8! Z|2ejH( -Ĉ#.C3/JldOQCfWfQ_U -_:hDH\i*7iLW;tmp 0/'$O.24 --hI`m9:&tCkת9Uӡ>~X=jT~}j`DŽa&\_[^^Xc~  a_CI(k YĈP6$׆Z5Ts,ֆr"!ֆ4Huu}&UsxU6]_% ЃڡyuyŠMThM%QHu^I5UCw"wݰ &}GNԺ9>P1{^OVlwNva[~/{⽗1[7{(޵c -Q7h˘+:y^^o5gΘ74^}-x?Hg<hoĿ ]<9c'&}^4qon^a2`@x]r1(!g-oΞ:i"КL>r؄z/M]~ycq_圭OruCut];9{]+Z.1"<䃕g5]кPKO1/?A>n/~HDB2 u:m_Qo`z=!߿_?=L DD=~Q{v\TZd)]# O)Wh$0s)P$P$ -D/^y>'+dǽ N m 9ᭇ)-ʷ\be^ӥbd3erXg*[n<%USIqRĽCF$uLɾDN@Ͼt q_@(FD|1%o0ɝverXtŠȾ,J-l5`[y;F ig>)L]zI@`U~3Ev'[}%^Gb^k#E)5>?"3Evʳ#[R[rIaEMvLki0Db_"'Wrhe?g3ti$K)8SLk.E%~ ;rȎ٩dZmُ.uQr&% o'@MN~1"bsJ@{(#i_ -zO;^'+R>u*V$CvI1(E(]Slur FPf F[P;(E#b؜"k)eu[0i}|#*y6!Ϧ}RxCT꒠|UgQ`ꔼiM]ziUksN'.z}/?P5)y;{m@O.o@%jNyى7߷եN!ň#!ԩ~Mr ύA~V'/FRYRge)~Rmu)f>9ZDh_ =;$ռ0x9gSr i:Q?ק.gꔼxIHa3=yyc*F6Q~Qթ Es^smSVm}Uk[R[с,j*61"(~1u*K]JW2 R^`vNڧ(&;R0$2sik4%ԩ.9ؑK#"ߓkS)e jJe7KBF5Uj̍jmUn9?HԒttjGjcZSvJEͧT7մ.+J7&.jujL{hRn!;Rd6Гmuj&N+FGYGhr 4X0r)F=%F^gSt4'wy#PMR~ :>zh()5\kRGVpE-ko\!RZYv-,Aڷ՞ֽ:2RT{C!פښbѓ7OTF s؏Y/jc=m̹򞼝S("6#NLStK|b P A( -AP`,a2LY0b[,9\w/䧵?[ZZZd{K Ws3bKbniQZZ?(y͊bş3:.v\4wܜ;!Am/ -kal <OA -1x^Wux ޅ!>/k+|>O9ҟg#`Oq77_lnrRsKt|oiry.?tH'u?;巴0d/67(ɖ@FklЏfܩ*Yy#{Z`FI­0Z`%al1xg_KpބS>|gG3| AGhC圹:J+舔_u?!ݶh)}{6WvˁoW67v\4㢖Kώk--͝]}YYߢm[pQKߎ.&tg?:_4à P/z{YB ʝo؍ Uz$ n@٧ػzd-_#_ @O؍rO';@eȽE޺}rtf"t!hMotr`њJ㷝Y(G)ʢ3s]Kziɱpp®gwM88=C @Ӿ=8G/Z~IW)~n-lڄ̖eeU  -abPOB={WomǔS?zq<ܤ\g"oقt=mR _ %[L2LgcV"?.$Ur.(gbWb PH~z-7ogψgZ5B0" ]t9]~<ŠXXX{cj+j*.:m Q4` k?߲mЦ= ',Q9 )X2^{~͚__? ʟ&뇔Ϫ;֤pw//,~3ZtVk͚֝__WFK@9jks/4K+3-hRoO~{3x'^~mwO))Xnkqݥ.{_yY򧥯(OK\ nS,B5vvE̋%ޣܷcw#~ΐv:e-, C.npqXO|lhc̻"d4c`)F:Vc~흍+n|`2yn>}ͨW7mփywkM\L֗~ĉ uӂyb<.@Was,M\0PV^V^.vPXlt앺i/vLHLyh-lx^5fb½~.x7҅=GzEJo{Wb@7u̻`+\TT=yH [RPumsF*+/9g^'*ߞ{ v˼ ys|YyYy,7ǡ{뮯X|~E̻ Ӈqt_j fOώ"T",`.ީ𫲧#k&4@z`廗 Ďʳv3mzE߉_ۯlʭ++j;(ڜ.B;q҂]笺oi^g3w^2yּBrxۯmX6͕¾̽ yw3`c`(lf+#|`(`.dd m|)K|d4 -,\taC,W FՇ{8Pz 9:bOPpQfd=S2; Şԕteee]]x\n>&EEv;ҍt_um-1z.4>) ve?4N>穭ޗYzazjf톮(qō 5 (( B!hD5bPP@{Z #qF+qDrtl駪sscC1U@W o`$2φ뭷/9y}k(N ]v&ZNZ^^P]bS&9d0:YM1ol+g޶foM\j岁d#oElzī;*kw̽[YZz<T,s;?$`(iwPb8Và,W/]`A%(ZߤRtZUtU*fd -JWu+M&kZzcFc!|>9WS’7-ZDflvvϵ.ѵ#C?3:6nu${'7ksf,#.9"vLS;P3R~@_#WPL0Ȑ3 h{ww‹Q'vIn3)XϒYV0ԯ:MٳkLu]?]uY&_Ugw 2^uݺ~mSxAtL!u|7ek5I>w5UQڡ5SJ_ҋҠpjYnUrZ[F. k >eJ4-AڲX!g˽oPgTY( g50IFZSVWFvU$k@^u<ݬOsFE{P~&.<-dHSt׺{]g/)29M<4#<Ŭ%-zG͑ѳGAw0+&3(8|Z# 3ztl#,a:vĴhY#aFɓ8@HzA3036-'qN :btK6\W^0; +Ӹ2nO m9)?|Ed96tҽ񊛵JJٵ-2\Rj:8֕+eϕ$v ,z7Qk88#2xMM%d2&%AO46S&ElELb)UJ";G&C1s‡駶zLR n7;󚱽3:qqA1'JĸbX}V`w_n\&OZ}u(pza\C70 - -ƩQD.gkzBA_ÛQjV佥г<`_ƭ6Oqfv@nzE,\V#Rv{cYaAK:0O Z ץB&-RA)mTTYakqR<{N{Xm)qĶ_nk~dOӝvD!vMbj=$@P6s5^r% >"Ct\/7d [I46@[jSKbUckKl,=`IWf^릇G\d|~ͤI?*][8g*6v SgG/=bï6c,1gs"}l#4惏_"$ "M,֮yLHg9]S}<Ŕ)5ӼahYH@dgR;zȑbdi1~#zb2"Xc[S{xvtx0OH |UPV:Jb,.^} )`?@Clޥ@ntB>N)6G(`j2iʭyTOLvjSR۬6fׯukl`{|%qq[7na~9s#CYMA't44f`؝r?ʼnxi vb ~G.{-0B]M P\V<80qcuUVf8ÏQR2FVpe <(cV֧eqG\(?F,Fp8/V3΄Y_`}@ioK9NJ4!he. @&(Ǒ;ds_gZR9[vHxcoAkhhT"nJ/92ULST"0dXL47Q襣tnDS2lQ쇄'/9'Jx(anPtY#- ͧMMR0qR Jo҇VAVpj5:Lh5nw^cx rGF)9u. -{p&PwRa3ouGʫFy09γ>_%ⰿ+wܠ8ѺaAP)׃W9t3J ZuޙwVW9c ժHAQ L.f|.~+OfBAz2# A7ǣ%ԘuL5Ox -Ksu(B) -(b$ur.KFu+s΁w573,)ktlEHaB ǚu cVAikma6|϶dw(x -)o-a^z:$pM9RՎ]oxO[}38).7c]㶌|7ÐN,n:^|L*i%-& sp)&%]LKGDcXZkV+yܾr>`G^ -G[ּG;~ꉵ_WTM_{atʩےSgf݊uPn:u+z70bS |swL+ Z h58K*_8 g]tNg*ŴJy` PCXPU/cQN,yx[,=j|#~ ◽/!.ぞgoƟ∞Ƨ%{ؓPӋV֜4E-XoRU!ӜI$&R ^%KIs :ɥBVWyĢ|b R&*?>WY±T&r= Q;, D5ehG Ű )]BDpəؤ&'oipoݥA.ع'npv ^Z9LkVQ?fYUUoؤ46Z|ߡе^6rC(t/dˇP"D?G}@AV Rx)I>r9 ^!Tn~}ɏ Tkyr.r]J ,mޢw$ذh` -ķh(ZP Uѕ(~)-JXyO>yۻwr)<O$Bv([Q -|3P@dA= 7ލ6\i.;eϕw֔Qz?(JD4Z!nJSvЀ*zsƼ3F!Wۍ A6WZIRK-"*C>%CwM̫g}!$ (;dfA+qF;AGlhK90^ [YLj5Rn3UCq2fZAef47r3ya@[bQcK&J/ k0yh7'^HJ3Lxaw0y1 S<0_Ӑ݄ Xx~nA"eexA O K" -38ߺJnE (ݪ_q/ t:I.QYcvXuM?ONG,XvS@[&O{l -PgeOk]a>`X n(5"6((ݲ*gj#,uS3$8He۷{/D0/4J4NfaAfj sv%gxt[/ Ig - 3-ITh'^Pa -$nԒ(3hM .؅o*R`0R&Ǚ5xx[GrH).W: l)O/GIAA`Џ6g`j:hU PvYULd2SH$0M KTi&%(HG~# `$F>|vc .7ύl ? |$&e\q0?TX?]dr0H )^*gjj# Z<#-^x c:Q0ϐ-lGZ,uxw0s,Ngn`B.}E53&-$><{A o̦3#V-r_.w痝~z$du{%z-6; -am^oKdJ$Gdiv4ETT23zBolD"cOMXsyl<GvW5쵎;X_#vQ۹ssuw=NyoUikOڥ/\wϷ3lz#;m̦T,NKR4E% f"M bgh,E 2fr])ȕwR+kND koH$BII*3C&*t:YɌIX\Ɔ!TQ4#o6^YG JM<{c6 $+'L`j0~M)hG%\.;e˕i>#%$[&SU ZPdUU'$erH#<fc-cPcuQ:}ϟ}R2#/9agÝӾE-Yj{͕NLNY6{XG;کrʕi`O!9p;\Y#2zLVrL@u&caDf Ss7y -..}EMgvp/%\6H-*)͢C)d,OY,`m%#E rcH;f,9M,RCt^LC&Q$ -Τ:HX0"`,J0Mx[߶?5GEh&)1~TC0nJeA"m(O YBnX8 "P+$-b((:W\PUFZ lF4}A\yn툈1T$?;~QG - |A;񙓓ۘM5uZ gGю eRds(m@s=;s_xV8 >^LK !Ig U-(J!\6!jlU<ڥWfRӕMڍwޢfd;<=uT5/BʸaIP~N,3uC i#6+k+YT[r$lBD^UtUydUUԂrTT6)ΤRH66Hꉲwmfc[Z`ؖzL֨ޓ.۾~>ec[L}7sןv.4Cμjg%FO ^C=$9SLtlW&Yp6oMʕi͑K6GRbXsA1G=)D7MRcR J`bftĢ86DSHowhc3?YsĘM=20~1x -NZZ6&ˮ6;oD!J6{*}KB1aSvAHBohE-( =b)dMf+aX8]ɔweLԍvѵM]Opǽfm~fXieSY?s9+޿F:QpOȲQԅCt  NRI' e'tD;}}O> -n&+wnSrGַ1@'Ep@-`A" 4r[Ų#n#4#KD-4Cd9 ew\_B#( G6J"Z#Gŕ g}O[Q cN7yo7q3a|/&E/ɴ3T0]6)EJ6)e6WCOmbwgCyr]oʓ+k͞xg8^21) z.(#ErvZGh/&ӄ -fo4svGyG-,'qS8^=_Ly]Fφ6cA$z,9lSEHǖ#!GRtDI -2y\M^yf=S |$yLH\ǰs\G'|E}kEF?K&TR$^hXߣEK_}Lxa[-}ɾ!u0SSv\nWBk{014zrrLd~՘3w<Ǘ;Wؠq-LT9#aH VKt rIƊ+_NO[{9X&"9kxRB8Kõd:MD-tdvu,'I2 U<1o e1f'NN:;SVЮr.]oipہjǵ0 GϑjMҎNK{VޡӒQHNYm\OdȢj-7J*Zbj܂zW^3=uK꿓YXcYɃ pw!.cxw'!YJ^G'ERHiT -j~%UIKt:ShlpEd\ :庈M7sWe -2ɟgSg 5zE}O5T)<i+|^;q3vIA1nbGPݪDfDch4VR҈Fn tYў(zѤ=㦦fnQT}5ǾsFL1U5bzcĆF4֫lUdT/F:9|_TAeYB֪*J -W:\EWUkҡwΤw/LKJ IE%u]!6TӾ$Y1[+c;œ۔'`BQ#b19rT:`kVjW>jI+n^v+SwYx7̻7^]T/0^yUL6&_\/j܆yyf?~\ҍ+57>d[㏟zzB%"s{md蹕'OB']ɮiUuZQY:9D>Z|>Wob4nt#w[*-]Svgg٨ZIz>j]]Q_ߏ=j!Tr㪲Ԥtzw@?*Me=H. k?6ovGgp 7O篍gqsÜOYt;ƏăǶW+dݧ2yZa Zx) pK$,^z*J]Na" d%IW}(터ih ZT,*>U%uȤXӗ3M-E99|˼I?\|CuMx.nI]9y -Lx77~> PSկ`/}I 5'^+"Ju4v:$K:ޡwM((nVcɆV?IC>#Z*UKX sx!<*F@sg A6q%E$AgXBQe +^ h)hYVP|_Q0y)k+V̗JoM.bG7{զVV\Snv퇩T&?p'u~,iO}LdC-־T˯5GEp@/rC2jaId˳,r6z9|U.R.jkDĭNxXdADM(F•D Yl8O9c'`x=n]ƷGl|!)q`}.vtk8~?Zվ[޹7e1Џ3y P iz}6*y:HJy'vBr |%(HF1 tFFbr *[>~w-/}:\vwN2˘bZ;y@pKrMqQ.WB{#@R<@K0 -`- /W=q)$4PLƑ!Xjd "a&gkd6.!ߌcF׵~r8>7.3~kjL4ڄ+K_3 5Zɼ#^o*ΎΩS]e}hJ -ABzY -3.sDԢaWucccv8 Nvs<8tZN(3Ѥdtd -&*^*NbQbr %%[8?-$~pێ /qxXS\N>6jDZAo6h_ @z+⅔]I4 &JGeBpve֜?lZfoambB\%o76G?Դ6YdB}!gkxhtP#g˞< K'IE2:BR9&AGcI,jGn0'TZ! I~BOvL_X㺯?{}s8aX];3ian6ax:of*|\] S;xuɆDxG-zY+RbrI;BemeF(WE~pNcqvs]󆕻U7"y|V.|E&@ǁf2h]b#2 !Db _,_?0qJ -2\2- ,YYdYI Y$N-_ tZP - Ng -JPAp)^ҍ[wt|`A|Rbo@p`iMǡKߑvHxW_|bM545mwývj%;ƛ(f56ZuyX*6 ǎ<ߜȎbݞP8"(&mm9lLIç5g8uQyndlqF'45) 2sRuTĩQFHMd:y͍niO1>1zBeIth>w]cXm2Naqr&zճM>ܶg<aD(y`v_8!Q ~#; 9ZV Xl BP - R< 68+x[pEp1M3}|Xt2@0tIR˝#(Q#҉BR.{3wV ~9#&GZuec+G> P]6>׻Č}*NK489TsMxIn2RusCTjҪT1UUղŴ/_%MU?`jL%} -3/dkQp{9|s,7|U U_j&.҂LXF VFSjyA䈬9\n':.rl*HFѽ@FMrtyi~<5z\\5:~37{n=+lӪ$Rgl" -d֝syR6M ,<x[U@^P:J6 -[wZ+Z\/J"w'B@QJQN&$dҲ*J"QJw.5T^/_?Zg_C86Z6 -jq>Aj i`9Q8} -EetIDѬ ûGt<#GYcV03ߩAX@qd8;!T>5[@vdY7sNz•&z$@ Ag9EZrx6z d -1a0s8 ?xw,o[GG\efZqtqO=TA1q@c3C&(1\0G7oo?ώjs9hc 7KUF&v;IIuGN ֵx.覹pùlu]hA#[;,ޠ6( D?O&^2=-)ɤL&P?c2[*tt{&YEYrk升X~džw_;ۦYm{ߝ]sؿȰ?a eg,w2|+|J%{5m̡qIvXdW@R9cWB2J19;$ӝōf,-^CQk?‡St0]٧=,ȱmU୺&"sDּna 쀽\^4d2`^R5YU[e|q٪&^"]uۏww\ނ:nuXs:u׈ .w6ID1Gdelafb}ccybxYњEY|Nɞz̧O=t3@Ř4qpZf -,:+]tGȚ(I"!~px,+әR떞z_xG:V$-"XڲE>-c%6]r#}Vd-Cc2eĈLvӯn?5o +b=w׭k\ù?0N̯WëNUQ@UTT+ܥm-6ny&_Cc%Y+ 5mV\O4 9)GdVgBTGJa0L:t)IE:UXL3̐gx=|,He1`|9\7%4*86+{u_Ե~O'H6J >Brɪ]m6tj'@VjVǻ~ĻMxJH%%@@&qZex6C .r".[X br0V9%B)IeSmrXi5K9ݿlC}aۯNn\g<`IbU T8 Slq.`wC1??1K;` tqCiH~6%tIx8qb@ykuCN_a!jgrR)v[P˵cM-{]5ƬK] -Qҿ龥7[6?~z=ɮ/YG^7Eon`e#mdHȂam+kXu6_.Eu9b]uɴx6o@O/2°!ӏUg^44vdxyvӶ?A>n 10̺Cs<>"W&  {fB8"" A3ɴLh>]]E*⽺뮻~+zѿ?zg=Le~uuճ.t?U-"<&c*°J'F"rÁ0Wn:0W'V/k~YA@O "8l^ BEH)q%U)LܹB~-_f ^D/ْ~;2>z~J`LȼS'DE"Ek&WL>1W7⁚*K+5C'8q̎~GEE .pGJ`đ&WFvVQ8/<|b8ܩp`%t)L!Ju<^-7·Ȥ;>4p@n8 7X_HArDT=r=^gKwro?}f]sb|ڭ~{q(MKh÷;^z7պ   e0%(͞Wqťx}kooX-l;wru~J:5>SBWTQ\ơRr8ŏK\ ­CN:X$/p)^lXzùj-9ZlkyqՃ#W*:5 B-1oFUuuGyŰ򚲒uej\SS1r9B[Fzb TUV{oҪY+Qe$1rĈq\9J{F  #eW) ;z@xhiQҧ/*8lq-Ͳf#M\ܱzhjƶѦMW˗sEob7o a8A44<s5jpbCn; -fC7-?eĿ(<@;UgUwggx;zV)G1wh 3ot1c‡=l]LyC$yV#3xYxb=vψ6L4L O;04 6:ӦM& -5GM=L oл̍R)NSiZSiahCI8K:!q, |#g6.N =u0 ~?lV}#돘MW:blN,iG:1{дyu#ЈwKKѻx6ot!蚒dƾ4~huuiKC~ɉC C ~0~C0jhFXC{}  Tڛ -2L@F!TzBPyzoyJPC80k(L -7QX@Zb{ k(y -x! -k}^?DaQ ^ DQQ48Tz*Pu@y }I^aqXCx^?ġqX8A>qTC#TzU4B0F @#LA#,A#,@#ڼh54:ShD!o4Q7MyTh*ڛ -M0&&A, {K}+h^4*`MpM(A -{}ЄJhVoZa76 ~h0JjBkuP:>y`7 n p^? -AC!{}(>&Xo`7BC!TPp>TQU@C -hP - -T -Th{h44zh44yh4hT 1P1P1fZzFoB7jQ7jQ7B׏B׏nPTz-~T^ q^ ^ I^@ukAuⵠ:X쵠:X⽆`ׂۇo#5>Tk~T~TB^CaաRա@P鵠zQ=T{-y-{-&y}$oCׂaׂa^ 6ocxP=Q=Q= -y}TJTFz T?堒0"h&aja1 $rI8ep2 zN0 -H[@mh,pB`( -*|*pBP/P0T+* UJ$ #M$a CY$́ƵpFqpFqWpFpwp<=A %px(S. W[KpyVCy -_(T:g P`Rwj+pBCUEpB#Cy8F!S UQE - -M C*NPh`RRP^q2pPkn%AU)?ʶlwsNvt״|s:ͯ0;Sn_ad HlvL=/YatҺCœF^ɚK3hcik?uuѥ;x'ś 2]#ɯtulvS':SM_j&RvZNc&L_笤ds|e MYö\޵ͤͼn%cZ.-װ\^2]Hy7ei3aXYw +w >\MIUM+%L>m7SyHұtH&Mw ״B~Kf5ͩktelGwf>iXi[OnݿtmnLF0xSF:3fR.! 6fTJpA I*nQAvx@4a,͐x68l`& iH+NH Ya0tHKAV4d,HR8%A COǦs1! < @66tZ,%\0 (^AJHDi`3wh|H Z:2TOt` C@þo -\?_0PQbTJQ*GhDU E5hFhƠZ4CQQ=&I4MA04 MG3LԀ$" HA*PP5Y Fs\45|-D-hZZHeh9:@+*ԆAt,ZCzt<:tԎ( ԁ:Q -$Q2h#rP(Qڄ6-dt -:NG[6ԋ@g>Fsy|t].FKtډ.GW+Ujt څEסQ?݈nB7[Э6t;݉Bw_{н>ݏЃ!0z=C{o>8z=BOgгw9<=z^BBF/WЫ5:zB-6zC!}>A % - }Aߢ 0`1pqb\Kq.xU5xGxZ<qq='I<O0< O3L܀,b X*pp7Y s\<7|/-x^[Hex9>+*܆|,^z|<>u܎8 ܁;q -$q3x#vp8qބ7-d| ->O[6܋g>sy||_/ƗK|މ/W+Uj| ޅq?߈o7[6|;߉w_{>ߏ!0~?{o>8~?Ogw9<=~_/W5:~-6~!? % -  89 qa.q\ Wʕq\7䪸jn(W s#(n47r\sn"7;MrqӸ n& I)i\qq5q9\np nkpGqKerhn[ŵqp5ܱZ8n;;;ӹv.%9:gr'q4Yee9q\mNNNNNr۸^ LΝŝ͝Ý˝ǝ]]]]]].vrsWgZtʲ.`Z+ #blJ95R+n8Yӊ$tZw20,DNVeskdM3mdtǰF[rΔ[g]1Bt.N]]z$92HpL;Φl*plζ n1PsBfeMmXaL!˴pNVI2vڶBi# sz1tp7挬kIG] 6:ܒv=!ֳrcv2=0̈́$r]>FK؎tnҹ;zH.׮;펞03لif:i4'M1f6Vg4i=PO\#ԏ,V"CtnLkޑ668Na1D4ȧ48Ǥ8kF~Tj~Ԝ5GQQsIp"I1P°k8i, ״H{.6ܒ蝎IvNn%R4ɒ옝)$gz"AiŖsz7/,˦lش:Lt7dҹli%i#56t91͆uIJN%\WUD@)1brNGON2-2m'٥giܲT֍+3{J9iXiLiv=i&t#m;Ug2ؘ%p.r+:sf:mtnph#63Y3itn#ߤeNxBlJTJ{V-1gFpK7lWz$ivI(mo1Nds^o@'\ӶB s]љ3YL5Natd{z$ 5#9ЃY#_v=ke Mٹn%˚ +[XGD5J數oV=sVJ8~e~eTv__ڨ_:(NnfOat Ƕm$mWO$ 9YDTԝ\WZϹӶ VdI6gS2?$tǶJ{aMq?D5«RcݔX.eri̤7ٖe Ǵ2n1ٖelklѭDdQctv6BI-^I8Z%$c[EIJnmGdv#~zctE~;gdIXMTB qtBwl+$itv#K-҉,ї%%v??V_fkU.n.hnBwl+Vg8VgI[\=sڤ톶$m7HëRsSfXOgRz8i]dʹmfgιzˤ̊;2ٞ.!}T{ -~$cd W/In8vO.S;w=IC*!ђVy>Ԟ5JmMٝM52(36n=mX #sY1 ei|-^" - +[D|@RP@,ăA@%%G -Aj#HA)G R>.'%(B,UU򑃜>J |> BQ.ӞV{Nl;O%ٔ4ٔ4)=it鴑l7!HEcꝹ鐿$L'6JLL|2F0M;YKO.=m=i\{8e[4.JuDT*lO#yRgؙ2kDF¶%zijĂP,Y,IBT,cbdSe_fs+ϲ+Q'm7HnB?# ^ׅI I-[DI(iΤ/ -N([LIQiN(ծ;V%pZI]LRV.#?ˎr?.>2dž1 +[I3Q$9V'gXEHlRe~v6WWRUR]wBnDֿ6/\p\j**|,L Ҷՙ-mvLSO\TICnH6gS~.KtvaXzX󃵞hX?NG6ctNH񨱩D0M!W#]k$Kl0Δ*wSAٲ;gn -~H]]?YIáeg+ZegKәږ-_迯\۲ ]ےVʗu ^FE.]etMnNgRzp rBk Wzvz&G]IKsxYDMnE4;tn+"sS&G7o4EA ~U!5h>ˇAH|ZP\|.R>)OO,s9|r>g9r 9_/CΗ!ːe(2|J %_/.J %_/C)s>OShZ>E4_h.|]D9G9G9G9G99˗˗˗˗˗˗˗˗ϗϗϗϗϗϗϗ/\G! Q!1kW!%R!-C|(_/Pgpm~ -A`T#Θv ffw~BX50;SnWq"8\LAc3N>ŝ͙I@,E0@\ł-',ZrLJ.~ձ7\/\u/2ŕ& x)o] bl( -|ɈR!!D_?\HȦ;їXЋ¦XP¦їZ_uבX&$WX&%גX&&T&&T&&?1/& &ML/& &ML/& &ML/&l+G*(GeS+G*(GeS+G*(GeS+G~쁑6M \&&\&& -b߈䂘461ɾ䂘461ɾ䂘461ɾ䂘461ɾ䂘461ɾ䂘461)B7uC(r_9JA9Q6(rrlQ(r_9JA9Q6(rrlQ|(DٔQ -ʉ)GeS+G-('ʦWZPNM9rT_9jA916娾rԂrbg2|.('ƦWZPNM9rT_9jA916娾rԂrbl|hؔ -ʉ)GgS+G+('ΦWVPNM98̋L -ʉ)GgS+G+('ΦWVPNM9Q_9тrlʉʉ# -l҉҉JTJ6D}De*%xx -M=Q_=QJ&/Fd{J&/hJɦhJ&/@dPPҐȦ!MC1_C1JC"bbD6 | ( lQ454$2" €( lQ454$i(k(NiHbPPҐĦ8!MCq_CqJC⾆┆$6 } ) IlS454 -Hi( -MT6$Ʒ((HTZr V -ZQ dQ(IbԾ((TZ6UዂFe3BJH4(ĩ -(5%Sҕ̨USZb\k\MjIfĸX!К㊅pkpj -TKKb)V-.`"E%¬E -ZK -RBu1kB"E%¯E -`K -)-1~Pl㲂H@Hlq@$,[`ĸF -` )-23 lb"#`}T1hl""# )c~#-R@[da"AڢL Y/("#H )-2jm1 )-2rJ nQE-R;cdRbD+""E%9HxHX%LHAo^{HзzDBEcWK HS(#o ieF4 2{E50`m"(GY UZQ"EF.".H\aMLHaqIf4F{E -t\$x\ kZ"' - z""EcQ - N -RHXHXuAxK-Q$\ȸp*l.R\d\ 9)tc%"MPDE3hAHH1tu~E HQtu~ l(iIX$$]PzLb$""Echt16hXm-.A"c# Xc̐5-Q뀖uKu2kCX@!IPm$ITb7ѬF$]zc.iΏ ~))HH1xMD8m -1 ؋/I#RHxHĸ~ $/>PyqgX<0ˤ;^L3-0/ i} 0hIDyƙDDy DDy%\yS7yJyJy#8yO$F^ _eV]0/Q`u+0/Q`>ʸ 0/Q`>8(0e\(0EKKgH%DQE)oONYr2.II9棬o`UNyq)_fR`[.ѻ[X]Q`^f,)0/3")02.u&`^i^ \^ sD$ >ςlUރ \^zdzdz%X^i\0L;w%3ZJK%%3KK4g<(,/2JJ &T^|LfBDayGJKDDQyudGDAyuae=NKW%%KA%Ƶ"y"☤[q[DDyqDؼDyFzyIYۊJۊyF$%3"ryB:DмDyKKѼDмDyqT҂{tZg+XLtEyUKYgK$%ˬ:% -ˬ3Q% -ˬ3Q(=rg $%3ZH`c(5rg4œ(*/& ((/3IKM$% -ˬoB%ˌ&beFS-y2Dx]3$=#d`1+1!R_1^/aR_v&л:$]h1%.Q]f_.Q]f_.Q]fjs:k(.Nq4i`|vvjSdRԾ.LL8LL8c!.S=hr!.S=θ%.S=κw"qֽMqW;!0huv^-dn2a2cY #P2A&]{Le} v)SנdeTƅ3w1B&]ˌ;ide -T42a2c!LLXqLLX!]{,ƸG4)3ȄYML!XUۄ+SS@xqnC&^(|\a\f ) W{8|\am  -#8yH|\e\^d:15Q,>>ρ -U8}}Krq]8p|\e\0 yqqB!"/SD>2(deVB&L^Vh:QRwBX_ -0VI -0VI -0fJDa -0#B+uHȼ -cDм -c{6/X*8/g2J+q(*ZaW&|^Vi1_zY%^Vi1.+*03aF+qQB&^=˨!Beڻ8՗ i3*\_&^̨}z42e-pF$YG˃<0ʄ˴uXA`L{mdBe zq˄k^&^}\cb/GiSgArFLW&^ -c\>Za#B(0֗;rVp{9F+#^ -ccr/h1FG deژ>hh x/S>ef0ǣ*e -ǣ%yc/hY+R2!2E1F#E |BLL1x/S?c%44go ŗih,/3j`|9NVFw r<$Jad*BMq8VWh1*+4L!,_Y` -0h7UBG7*(+=[!8_  - -m@8TWhzyB`B3N1pWK0^/A -m@|l |lp|l`|l8%QWh6 -ن*+gF{T |l8PWh6&E -cP$>cPP$>gP$>gbaU+1BHBE ͡P:'%$^بBڏʸB!$^H|LeiiTֱ! -뜟w6%]{uJ)F!*{uJxB8r_VslBpS lWi-4kgXUU3*!*MUv팽J8J3nS gWiy9J8Jq8ɀJ8*1/*]*{QbtήRήRݥήR=θήR=5TUJ8Jq8"J8Jq8DpvqEMpvqFήJ6FmHqXOA&]8{g3nT gW)g©ήF,UUFqHή2g=ڏj<~DW A8:>QyU`ƂiV |W[**}҇ -c]UWuKJ*0īiRJJ* W3]F]y>U`2.az<8ߞV8]3i155VH]#t^h155VX]#|^h155VF& -c4Zaa@+XZ#^h1ZKkk"0H+բF8& -cP->4B5VFP& -cDZa{45V7zMh\55ڱh`I-5B5VF& -c\$ZaD+J]#^h1kk0F;up{MhpI-5B5żȸܯtga}ȸxѧQ}ȸ|Q^55WM#_(2Z hk "!FF 45׼hpEFP|6/2hky@#_͋FB+bA#$_Sh1hk9"݁FX -ckk -0֑>Ec jkΏ)53Nb55F>1" p{BhkA#x^,S(8g'%BмW~R -̫I'I)[eFZ*bXu ˗/<+\tUeK/RVj]u"KQQ*ռe+j^ŋ yWKTT@@<]zkHao]!L( 0ztZPoЮt꛱׍: `ClH.0,4;Wwt_OnWB/aqբGG_ֵB*UE0˄p&µkWYp,~1a*)[suL RpmҚȪ86µj_ 5;̄% "\[A~^evYWʘV'?Y?BEIPAa -Q%Ad5 -+ʶG -c8JӚηZ4a_Є~e+VN0fM[E R܋{sn?+K?ٿNc_}gYsmxC?iύM˞}dŌbןPa1O㿟d?7*ޜԽz-'3+ܼX=MsCx3p;=WV#gYmmuY럭t͙XzG@QNymΔoOޙ0Y41'[)z[;苣|a17|:]ߦv1l=g}s^UP""(.B(t0Y-Rilhn1f53aw C#\۸PA6.(mK. '=(uZ*g&P*JZp6!/0"\۸8027WSje$( U۶ ?vXWNc<׹kS?gwԼZQѢ) gv,Oڇ57Z,#nYpm/[,rzgg^9͹o}/P~WҬ)_=B<K}N={.99?dqb㸚a_TJ2Hzx)Q :rO{|58:VuH[^*zWaڎ:7<G kw^9~) s^uK/'ms[q[іO5?)| ^Nz޻Es }ܪC\zdW|Dq0٪7|;Bׇ̻wшۛVG>;9˧?4w&Ώ\y;lV6=;i;>4)W:ꬭ##Y$?ӅÄCwM5izlvFBpˆ6 <*"gmʼtgzǿ`\y'?Wۅ'pkt'YnyMSvtִ|잟5s~YI3?5/HOgG

yW7{qL|_]4uQ3s_ -~=Mߗ܏s&_Kق:yowބ^T4Y2tsoOyÛ*O2:>y^7{l}ݝcڛrᭇQ;~y}_ B/*a/tvsL|b0.0lvΔʋx?L8vp)vwuPߦQWض7ܔfaȊxTEAADIɟ 5r;>]Z{5Wl:^u\p :suS]tÓ?U~_l{5gvĆ-_f%tFUW&_BG[3yo˻sbOq]no=g,y{Z>V,4[޽dڨwf,15aqg}uG'k_zm=l}U-tK%O49o;JocV{#^7wlyO1κg =g{j~fa ¶"\8v튭Uǽtxi~}ԅuA\/B.Q=h_{?[wte싞i|ӏW~߮EO_5k-*मɊyq;^,9{Ωc8|'[{w֧V}/wP?.=WMoh~u9uז'q须'O8/ٳkn~/}2vs{tWG wUኚ=wiW__ۅ9Ec\}۟l~';^z-K6M^놋"򚻏?R BoJ!0~@(o2 -}_\m -!* -"UY - s?=t7_m/7}\~Iz˞~#/9~B_1}nuчMO=رvOV|c6}[g|zktu`\Gsm/,xcwwO@_>^3=s׽g;ㆇ\Xqݿ+~3;pсGGc=:?T_,^s W>w6V'?ޚGyOxˉC^tЋ.ܥ|ʆ[r+_aё?\O|DqCۮ]G{k#paޮ97R !lH8醌c's 70N+NkfifI ˨|Y2ɷ5f؜0G;c?_aWY~|oUmxUީ~LϜR[yڹ>?7N={ѧ_ͺgq#^1sk6K6ή}89o_>dWz㷟<_-~X͚O>Ϫ{8tqC _+ye/?ݫqֳ>%:O>|k?lf3E&kcڳ^U/}b[o~oK?wi{oYsh]D7>k:A|c0,B=E\8Fo} '\KU&_  Cа5|_XsU>ٮ \ʔVCehn /fVtOl)\^jV1Ojy~[$?Oi|6o{1^k|oyr 6\g\0l1/v<8a2'ɈXxscmt牳џl> -endobj -26 0 obj -<>/W[ 82 [ 591 546]]/CIDToGIDMap 27 0 R/FontDescriptor 29 0 R>> -endobj -21 0 obj -<> -endobj -30 0 obj -<> -endobj -25 0 obj -<< -/Type /Pages -/Kids [24 0 R ] -/Count 1 ->> - -endobj -32 0 obj -<< -/Size 33 -/Info 30 0 R -/Root 31 0 R -/ID[<81B67C66A238AB4B692FCB506343ADED><81B67C66A238AB4B692FCB506343ADED>] /Type/XRef /Index [ 0 33 ] /W [ 1 3 1 ] /Filter /FlateDecode /Length 139 >> -stream -xMa&(wV&q%qGa C(@|kL?a#1a~b3 - - - - -S -e -c -r -e -t -! - - - - -

-
- - - - - diff --git a/samples/jo.html.ref b/samples/jo.html.ref deleted file mode 100644 index 7404147..0000000 --- a/samples/jo.html.ref +++ /dev/null @@ -1,72 +0,0 @@ - - - - - -
  序 -
  -
わたくしといふ現象は -
假定された有機交流電燈の -
ひとつの青い照明です -
(あらゆる透明な幽霊の複合体) -
風景やみんなといっしょに -
せはしくせはしく明滅しながら -
いかにもたしかにともりつづける -
因果交流電燈の -
ひとつの青い照明です -
(ひかりはたもち、その電燈は失はれ) -
   -
これらは二十二箇月の -
過去とかんずる方角から -
紙と鑛質インクをつらね -
(すべてわたくしと明滅し -
 みんなが同時に感ずるもの) -
ここまでたもちつゞけられた -
かげとひかりのひとくさりづつ -
そのとほりの心象スケッチです -
   -
これらについて人や銀河や修羅や海膽は -
宇宙塵をたべ、または空気や塩水を呼吸しながら -
それぞれ新鮮な本体論もかんがへませうが -
それらも畢竟こゝろのひとつの風物です -
たゞたしかに記録されたこれらのけしきは -
記録されたそのとほりのこのけしきで -
それが虚無ならば虚無自身がこのとほりで -
ある程度まではみんなに共通いたします -
(すべてがわたくしの中のみんなであるやうに -
 みんなのおのおののなかのすべてですから) -
けれどもこれら新世代沖積世の -
巨大に明るい時間の集積のなかで -
正しくうつされた筈のこれらのことばが -
わづかその一點にも均しい明暗のうちに -
   (あるひは修羅の十億年) -
すでにはやくもその組立や質を變じ -
しかもわたくしも印刷者も -
それを変らないとして感ずることは -
傾向としてはあり得ます -
けだしわれわれがわれわれの感官や -
風景や人物をかんずるやうに -
そしてたゞ共通に感ずるだけであるやうに -
記録や歴史、あるひは地史といふものも -
それのいろいろの論料といっしょに -
(因果の時空的制約のもとに) -
われわれがかんじてゐるのに過ぎません -
おそらくこれから二千年もたったころは -
それ相當のちがった地質學が流用され -
相當した證據もまた次次過去から現出し -
みんなは二千年ぐらゐ前には -
青ぞらいっぱいの無色な孔雀が居たとおもひ -
新進の大學士たちは気圏のいちばんの上層 -
きらびやかな氷窒素のあたりから -
すてきな化石を發堀したり -
あるひは白堊紀砂岩の層面に -
透明な人類の巨大な足跡を -
発見するかもしれません -
   -
すべてこれらの命題は -
心象や時間それ自身の性質として -
第四次延長のなかで主張されます -
   -
大正十三年一月廿日  宮澤賢治 -
Page: 1
- diff --git a/samples/jo.tex b/samples/jo.tex deleted file mode 100644 index 8b0bc9e..0000000 --- a/samples/jo.tex +++ /dev/null @@ -1,173 +0,0 @@ -\documentclass[landscape,twocolumn]{tarticle} - -\setlength{\hoffset}{-0.6in} -\setlength{\voffset}{-0.7in} - -\setlength{\textwidth}{18cm} -%\setlength{\textheight}{9in} - -%\setlength{\oddsidemargin}{-0.5in} -%\setlength{\evensidemargin}{-0.5in} -\setlength{\topmargin}{0in} -\setlength{\columnsep}{0.4in} - -\pagestyle{empty} -\makeatletter -\def\kanjistrut{\vrule \@height0.88zw \@depth0.12zw \@width\z@} -\newdimen\mytempdima -\newcommand{\ruby}[2]{% - \leavevmode - \setbox0=\hbox{#1}% - \mytempdima=\f@size\p@ - \setbox1=\hbox{\fontsize{0.5\mytempdima}{0pt}\selectfont #2}% - \ifdim\wd0>\wd1 \dimen0=\wd0 \else \dimen0=\wd1 \fi - \hbox{% - \kanjiskip=0pt plus 2fil - \xkanjiskip=0pt plus 2fil - \vbox{% - \hbox to \dimen0{% - \fontsize{0.5\mytempdima}{0pt}\selectfont \kanjistrut\hfil#2\hfil}% - \nointerlineskip - \hbox to \dimen0{\kanjistrut\hfil#1\hfil}}}} -\makeatother - -\begin{document} - - -\vspace{0.4in} - -\begin{flushleft} -錄Ȥոݤ - -ꤵ줿ͭή - -ҤȤĤĤǤ - -ʤƩͩʣΡ - -ʤߤʤȤä - -ϤϤǤʤ - -ˤ⤿ˤȤĤŤ - -̸ή - -ҤȤĤĤǤ - -ʤҤϤϼϤ - - - -շ - -Ȥ󤺤Ѥ - -ʼ󥯤Ĥ - -ʤ٤Ƥ錄Ǥ - -ߤʤƱ˴Ρ - -ޤǤġ줿 - -ȤҤΤҤȤŤ - -ΤȤۤοݥåǤ - - - -ˤĤƿͤϤ佤䳤缤 - -Ф򤿤١ޤ϶Ƶۤʤ - -줾쿷⤫󤬤ؤޤ - -ɭ盧ΤҤȤĤʪǤ - -˵Ͽ줿Τ - -Ͽ줿ΤȤۤΤΤ - -줬̵ʤе̵ȤΤȤۤ - -٤ޤǤϤߤʤ˶̤ޤ - -ʤ٤Ƥ錄ΤߤʤǤ䤦 - -ߤʤΤΤΤΤʤΤ٤ƤǤ -\newpage - - -\vspace{1.0in} - -ɤ⤳鿷岭 - -뤤֤νѤΤʤ - -Ĥ줿ȦΤΤȤФ - -ŤΰڤˤѤŤΤ - -ʤҤϽνǯ - -ǤˤϤ䤯⤽ΩΤ - -錄Ԥ - -ѤʤȤƴ뤳Ȥ - -ȤƤϤޤ - -줬δ - -ʤʪ򤫤󤺤䤦 - -Ƥ̤˴Ǥ䤦 - -ϿˡҤϻˤȤդΤ - -ΤȤä - -ʰ̤λŪΤȤˡ - -줬󤸤ƤΤ˲᤮ޤ - -餯줫ǯ⤿ä - -ĤΤäϼܤήѤ - -Ĥڡޤ鸽Ф - -ߤʤǯˤ - -Ĥ餤äѤ̵ʹ錄Ȥ - -ʤܻΤϵΤФξ - -Ӥ䤫ɹǤΤ꤫ - -ƤʲФ٤ - -Ҥ̤ - -Ʃʿε­פ - -ȯ뤫⤷ޤ - - - -٤Ƥ̿ - -ݤ֤켫ȤȤ - -ͼĹΤʤǼĥޤ - - -\end{flushleft} - -\begin{flushright} -ǯ߷ -\end{flushright} - -\end{document} diff --git a/samples/jo.txt.ref b/samples/jo.txt.ref deleted file mode 100644 index e61d487..0000000 --- a/samples/jo.txt.ref +++ /dev/null @@ -1,71 +0,0 @@ -  序 - -  - -わたくしといふ現象は -假定された有機交流電燈の -ひとつの青い照明です -(あらゆる透明な幽霊の複合体) -風景やみんなといっしょに -せはしくせはしく明滅しながら -いかにもたしかにともりつづける -因果交流電燈の -ひとつの青い照明です -(ひかりはたもち、その電燈は失はれ) -   -これらは二十二箇月の -過去とかんずる方角から -紙と鑛質インクをつらね -(すべてわたくしと明滅し - みんなが同時に感ずるもの) -ここまでたもちつゞけられた -かげとひかりのひとくさりづつ -そのとほりの心象スケッチです -   -これらについて人や銀河や修羅や海膽は -宇宙塵をたべ、または空気や塩水を呼吸しながら -それぞれ新鮮な本体論もかんがへませうが -それらも畢竟こゝろのひとつの風物です -たゞたしかに記録されたこれらのけしきは -記録されたそのとほりのこのけしきで -それが虚無ならば虚無自身がこのとほりで -ある程度まではみんなに共通いたします -(すべてがわたくしの中のみんなであるやうに - みんなのおのおののなかのすべてですから) - -けれどもこれら新世代沖積世の -巨大に明るい時間の集積のなかで -正しくうつされた筈のこれらのことばが -わづかその一點にも均しい明暗のうちに -   (あるひは修羅の十億年) -すでにはやくもその組立や質を變じ -しかもわたくしも印刷者も -それを変らないとして感ずることは -傾向としてはあり得ます -けだしわれわれがわれわれの感官や -風景や人物をかんずるやうに -そしてたゞ共通に感ずるだけであるやうに -記録や歴史、あるひは地史といふものも -それのいろいろの論料といっしょに -(因果の時空的制約のもとに) -われわれがかんじてゐるのに過ぎません -おそらくこれから二千年もたったころは -それ相當のちがった地質學が流用され -相當した證據もまた次次過去から現出し -みんなは二千年ぐらゐ前には -青ぞらいっぱいの無色な孔雀が居たとおもひ -新進の大學士たちは気圏のいちばんの上層 -きらびやかな氷窒素のあたりから -すてきな化石を發堀したり -あるひは白堊紀砂岩の層面に -透明な人類の巨大な足跡を -発見するかもしれません -   -すべてこれらの命題は -心象や時間それ自身の性質として -第四次延長のなかで主張されます -   - -大正十三年一月廿日  宮澤賢治 - - \ No newline at end of file diff --git a/samples/jo.xml.ref b/samples/jo.xml.ref deleted file mode 100644 index a659c99..0000000 --- a/samples/jo.xml.ref +++ /dev/null @@ -1,1188 +0,0 @@ - - - - - -  -  - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -  -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -  - - - - - - - - - - - - - -廿 - -  -  - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/nonfree/cmp_itext_logo.pdf b/samples/nonfree/cmp_itext_logo.pdf new file mode 100644 index 0000000..c5d8dd3 Binary files /dev/null and b/samples/nonfree/cmp_itext_logo.pdf differ diff --git a/samples/nonfree/dmca.html.ref b/samples/nonfree/dmca.html.ref deleted file mode 100644 index 07d7ef0..0000000 --- a/samples/nonfree/dmca.html.ref +++ /dev/null @@ -1,50 +0,0 @@ - - - - - -
THE DIGITAL MILLENNIUM COPYRIGHT ACT OF 1998 -
U.S. Copyright Office Summary -
INTRODUCTION -
December 1998 -
The Digital Millennium Copyright Act (DMCA) was signed into law by -
President Clinton on October 28, 1998. The legislation implements two 1996 World -
Intellectual Property Organization (WIPO) treaties: the WIPO Copyright Treaty and -
the WIPO Performances and Phonograms Treaty. The DMCA also addresses a -
number of other significant copyright-related issues. -
1 -
The DMCA is divided into five titles: -
! -
! -
! -
! -
! -
Title I, the “WIPO Copyright and Performances and Phonograms -
Treaties Implementation Act of 1998
,” implements the WIPO -
treaties. -
Title II, the “
Online Copyright Infringement Liability Limitation -
Act
,” creates limitations on the liability of online service providers for -
copyright infringement when engaging in certain types of activities. -
Title III, the “
Computer Maintenance Competition Assurance -
Act
,” creates an exemption for making a copy of a computer program -
by activating a computer for purposes of maintenance or repair. -
Title IV contains six
miscellaneous provisions, relating to the -
functions of the Copyright Office, distance education, the exceptions -
in the Copyright Act for libraries and for making ephemeral recordings, -
“webcasting” of sound recordings on the Internet, and the applicability -
of collective bargaining agreement obligations in the case of transfers -
of rights in motion pictures. -
Title V, the “
Vessel Hull Design Protection Act,” creates a new form -
of protection for the design of vessel hulls. -
This memorandum summarizes briefly each title of the DMCA. It provides -
merely an overview of the law’s provisions; for purposes of length and readability a -
significant amount of detail has been omitted.
A complete understanding of any -
provision of the DMCA requires reference to the text of the legislation itself. -
Pub. L. No. 105-304, 112 Stat. 2860 (Oct. 28, 1998). -
1 -
Copyright Office Summary -
December 1998 -
Page 1 -
-
Page: 1
- diff --git a/samples/nonfree/dmca.txt.ref b/samples/nonfree/dmca.txt.ref deleted file mode 100644 index e6e1de8..0000000 --- a/samples/nonfree/dmca.txt.ref +++ /dev/null @@ -1,61 +0,0 @@ -THE DIGITAL MILLENNIUM COPYRIGHT ACT OF 1998 - -U.S. Copyright Office Summary - -INTRODUCTION - -December 1998 - -The Digital Millennium Copyright Act (DMCA) was signed into law by -President Clinton on October 28, 1998. The legislation implements two 1996 World -Intellectual Property Organization (WIPO) treaties: the WIPO Copyright Treaty and -the WIPO Performances and Phonograms Treaty. The DMCA also addresses a -number of other significant copyright-related issues. - -1 - -The DMCA is divided into five titles: - -! - -! - -! - -! - -! - -Title I, the “WIPO Copyright and Performances and Phonograms -Treaties Implementation Act of 1998,” implements the WIPO -treaties. -Title II, the “Online Copyright Infringement Liability Limitation -Act,” creates limitations on the liability of online service providers for -copyright infringement when engaging in certain types of activities. -Title III, the “Computer Maintenance Competition Assurance -Act,” creates an exemption for making a copy of a computer program -by activating a computer for purposes of maintenance or repair. -Title IV contains six miscellaneous provisions, relating to the -functions of the Copyright Office, distance education, the exceptions -in the Copyright Act for libraries and for making ephemeral recordings, -“webcasting” of sound recordings on the Internet, and the applicability -of collective bargaining agreement obligations in the case of transfers -of rights in motion pictures. -Title V, the “Vessel Hull Design Protection Act,” creates a new form -of protection for the design of vessel hulls. - -This memorandum summarizes briefly each title of the DMCA. It provides -merely an overview of the law’s provisions; for purposes of length and readability a -significant amount of detail has been omitted. A complete understanding of any -provision of the DMCA requires reference to the text of the legislation itself. - -Pub. L. No. 105-304, 112 Stat. 2860 (Oct. 28, 1998). -1 - -Copyright Office Summary - -December 1998 - -Page 1 - - \ No newline at end of file diff --git a/samples/nonfree/dmca.xml.ref b/samples/nonfree/dmca.xml.ref deleted file mode 100644 index 64ec108..0000000 --- a/samples/nonfree/dmca.xml.ref +++ /dev/null @@ -1,2223 +0,0 @@ - - - - - -T -H -E - -D -I -G -I -T -A -L - -M -I -L -L -E -N -N -I -U -M - -C -O -P -Y -R -I -G -H -T - -A -C -T - -O -F - -1 -9 -9 -8 - - - - - - -U -. -S -. - -C -o -p -y -r -i -g -h -t - -O -f -f -i -c -e - -S -u -m -m -a -r -y - - - - - - -I -N -T -R -O -D -U -C -T -I -O -N - - - - - - -D -e -c -e -m -b -e -r - -1 -9 -9 -8 - - - - - - -T -h -e - - -D -i -g -i -t -a -l - - -M -i -l -l -e -n -n -i -u -m - - -C -o -p -y -r -i -g -h -t - - -A -c -t - - -( -D -M -C -A -) - - - -w -a -s - - -s -i -g -n -e -d - - -i -n -t -o - - -l -a -w - - -b -y - - - - -P -r -e -s -i -d -e -n -t - -C -l -i -n -t -o -n - -o -n - -O -c -t -o -b -e -r - -2 -8 -, - -1 -9 -9 -8 -. - - -T -h -e - -l -e -g -i -s -l -a -t -i -o -n - -i -m -p -l -e -m -e -n -t -s - -t -w -o - -1 -9 -9 -6 - -W -o -r -l -d - - - - -I -n -t -e -l -l -e -c -t -u -a -l - -P -r -o -p -e -r -t -y - -O -r -g -a -n -i -z -a -t -i -o -n - -( -W -I -P -O -) - -t -r -e -a -t -i -e -s -: - - -t -h -e - -W -I -P -O - -C -o -p -y -r -i -g -h -t - -T -r -e -a -t -y - -a -n -d - - - - -t -h -e - - -W -I -P -O - - -P -e -r -f -o -r -m -a -n -c -e -s - - -a -n -d - - -P -h -o -n -o -g -r -a -m -s - - -T -r -e -a -t -y -. - - - - -T -h -e - - -D -M -C -A - - -a -l -s -o - - -a -d -d -r -e -s -s -e -s - - -a - - - - -n -u -m -b -e -r - -o -f - -o -t -h -e -r - -s -i -g -n -i -f -i -c -a -n -t - -c -o -p -y -r -i -g -h -t -- -r -e -l -a -t -e -d - -i -s -s -u -e -s -. - - - - - - -1 - - - - - - -T -h -e - -D -M -C -A - -i -s - -d -i -v -i -d -e -d - -i -n -t -o - -f -i -v -e - -t -i -t -l -e -s -: - - - - - - - - -! - - - - - - -! - - - - - - -! - - - - - - -! - - - - - - -! - - - - - - -T -i -t -l -e - -I -, - -t -h -e - - -W -I -P -O - -C -o -p -y -r -i -g -h -t - -a -n -d - -P -e -r -f -o -r -m -a -n -c -e -s - -a -n -d - -P -h -o -n -o -g -r -a -m -s - - - - -T -r -e -a -t -i -e -s - - -I -m -p -l -e -m -e -n -t -a -t -i -o -n - - -A -c -t - - -o -f - - -1 -9 -9 -8 -, - - - -i -m -p -l -e -m -e -n -t -s - - -t -h -e - - -W -I -P -O - - - - -t -r -e -a -t -i -e -s -. - - - - -T -i -t -l -e - -I -I -, - -t -h -e - - -O -n -l -i -n -e - -C -o -p -y -r -i -g -h -t - -I -n -f -r -i -n -g -e -m -e -n -t - -L -i -a -b -i -l -i -t -y - -L -i -m -i -t -a -t -i -o -n - - - - -A -c -t -, - - -c -r -e -a -t -e -s - -l -i -m -i -t -a -t -i -o -n -s - -o -n - -t -h -e - -l -i -a -b -i -l -i -t -y - -o -f - -o -n -l -i -n -e - -s -e -r -v -i -c -e - -p -r -o -v -i -d -e -r -s - -f -o -r - - - - -c -o -p -y -r -i -g -h -t - -i -n -f -r -i -n -g -e -m -e -n -t - - -w -h -e -n - -e -n -g -a -g -i -n -g - -i -n - -c -e -r -t -a -i -n - -t -y -p -e -s - -o -f - -a -c -t -i -v -i -t -i -e -s -. - - - - -T -i -t -l -e - - -I -I -I -, - - -t -h -e - - - -C -o -m -p -u -t -e -r - - -M -a -i -n -t -e -n -a -n -c -e - - -C -o -m -p -e -t -i -t -i -o -n - - -A -s -s -u -r -a -n -c -e - - - - -A -c -t -, - - -c -r -e -a -t -e -s - -a -n - -e -x -e -m -p -t -i -o -n - -f -o -r - -m -a -k -i -n -g - -a - -c -o -p -y - -o -f - -a - -c -o -m -p -u -t -e -r - -p -r -o -g -r -a -m - - - - -b -y - -a -c -t -i -v -a -t -i -n -g - -a - -c -o -m -p -u -t -e -r - -f -o -r - -p -u -r -p -o -s -e -s - -o -f - -m -a -i -n -t -e -n -a -n -c -e - -o -r - -r -e -p -a -i -r -. - - - - -T -i -t -l -e - - -I -V - - -c -o -n -t -a -i -n -s - - -s -i -x - - -m -i -s -c -e -l -l -a -n -e -o -u -s - - -p -r -o -v -i -s -i -o -n -s -, - - -r -e -l -a -t -i -n -g - - -t -o - - -t -h -e - - - - -f -u -n -c -t -i -o -n -s - -o -f - -t -h -e - -C -o -p -y -r -i -g -h -t - -O -f -f -i -c -e -, - -d -i -s -t -a -n -c -e - -e -d -u -c -a -t -i -o -n -, - -t -h -e - -e -x -c -e -p -t -i -o -n -s - - - - -i -n - -t -h -e - -C -o -p -y -r -i -g -h -t - -A -c -t - -f -o -r - -l -i -b -r -a -r -i -e -s - -a -n -d - -f -o -r - -m -a -k -i -n -g - -e -p -h -e -m -e -r -a -l - -r -e -c -o -r -d -i -n -g -s -, - - - - - -w -e -b -c -a -s -t -i -n -g - - -o -f - -s -o -u -n -d - -r -e -c -o -r -d -i -n -g -s - -o -n - -t -h -e - -I -n -t -e -r -n -e -t -, - -a -n -d - -t -h -e - -a -p -p -l -i -c -a -b -i -l -i -t -y - - - - -o -f - -c -o -l -l -e -c -t -i -v -e - -b -a -r -g -a -i -n -i -n -g - -a -g -r -e -e -m -e -n -t - -o -b -l -i -g -a -t -i -o -n -s - -i -n - -t -h -e - -c -a -s -e - -o -f - -t -r -a -n -s -f -e -r -s - - - - -o -f - -r -i -g -h -t -s - -i -n - -m -o -t -i -o -n - -p -i -c -t -u -r -e -s -. - - - - -T -i -t -l -e - -V -, - -t -h -e - - -V -e -s -s -e -l - -H -u -l -l - -D -e -s -i -g -n - -P -r -o -t -e -c -t -i -o -n - -A -c -t -, - - -c -r -e -a -t -e -s - -a - -n -e -w - -f -o -r -m - - - - -o -f - -p -r -o -t -e -c -t -i -o -n - -f -o -r - -t -h -e - -d -e -s -i -g -n - -o -f - -v -e -s -s -e -l - -h -u -l -l -s -. - - - - - - -T -h -i -s - -m -e -m -o -r -a -n -d -u -m - -s -u -m -m -a -r -i -z -e -s - -b -r -i -e -f -l -y - -e -a -c -h - -t -i -t -l -e - -o -f - -t -h -e - -D -M -C -A -. - - -I -t - -p -r -o -v -i -d -e -s - - - - -m -e -r -e -l -y - -a -n - -o -v -e -r -v -i -e -w - -o -f - -t -h -e - -l -a -w - -s - -p -r -o -v -i -s -i -o -n -s -; - -f -o -r - -p -u -r -p -o -s -e -s - -o -f - -l -e -n -g -t -h - -a -n -d - -r -e -a -d -a -b -i -l -i -t -y - -a - - - - -s -i -g -n -i -f -i -c -a -n -t - -a -m -o -u -n -t - -o -f - -d -e -t -a -i -l - -h -a -s - -b -e -e -n - -o -m -i -t -t -e -d -. - - -A - -c -o -m -p -l -e -t -e - -u -n -d -e -r -s -t -a -n -d -i -n -g - -o -f - -a -n -y - - - - -p -r -o -v -i -s -i -o -n - -o -f - -t -h -e - -D -M -C -A - -r -e -q -u -i -r -e -s - -r -e -f -e -r -e -n -c -e - -t -o - -t -h -e - -t -e -x -t - -o -f - -t -h -e - -l -e -g -i -s -l -a -t -i -o -n - -i -t -s -e -l -f -. - - - - - - -P -u -b -. - -L -. - -N -o -. - -1 -0 -5 -- -3 -0 -4 -, - -1 -1 -2 - -S -t -a -t -. - -2 -8 -6 -0 - -( -O -c -t -. - -2 -8 -, - -1 -9 -9 -8 -) -. - - - - -1 - - - - - - -C -o -p -y -r -i -g -h -t - -O -f -f -i -c -e - -S -u -m -m -a -r -y - - - - - - -D -e -c -e -m -b -e -r - -1 -9 -9 -8 - - - - - - -P -a -g -e - -1 - - - - - -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
diff --git a/samples/nonfree/f1040nr.html.ref b/samples/nonfree/f1040nr.html.ref deleted file mode 100644 index e0d71fb..0000000 --- a/samples/nonfree/f1040nr.html.ref +++ /dev/null @@ -1,475 +0,0 @@ - - - - - -
OMB No. 1545-0074 -
-
2007 -
Identifying number (see page 8) -
-
I -
Check if: -
-
ndividual -
-
Estate or Trust -
Type of entry visa (see page 8) -
, 20 -
-
䊳 -
resent home address (number, street, and apt. no., or rural route). If you have a P.O. box, see page 8. -
-
City, town or post office, state, and ZIP code. If you have a foreign address, see page 8. -
-
Country 䊳 -
Give address outside the United States to which you want any -
refund check mailed. If same as above, write “Same.” -
-
-
Of what country were you a citizen or national during the tax year? 䊳 -
Give address in the country where you are a permanent resident. -
If same as above, write “Same.” -
-
-
U.S. Nonresident Alien Income Tax Return -
-
beginning -
For the year January 1–December 31, 2007, or other tax year -
-
, 2007, and ending -
Last name -
-
1040NR -
-
Form -
Department of the Treasury -
Internal Revenue Service -
-
Your first name and initial -
P -
Please print or type. -
-
Also attach Form(s) 1099-R if tax was withheld. -
Attach Forms W-2 here. -
7a -
7b -
Yourself -
-
Spouse -
-
-
䊳 -
䊳 -
䊳 -
䊳 -
䊳 -
-
-
-
-
-
No. of boxes checked -
on 7a and 7b -
-
No. of children on -
7c who: -
-
lived with you -
did not live with -
you due to divorce -
or separation -
-
Dependents on 7c -
not entered above -
dd numbers entered -
on lines above -
-
8 -
-
9a -
A -
10a -
11 -
12 -
13 -
14 -
15 -
16b -
17b -
18 -
19 -
20 -
21 -
23 -
34 -
35
-
Form 1040NR (2007) -
-
If you check box 7b, enter your spouse’s -
identifying number
䊳 -
relationship -
to you -
-
(4) -
if qualifying -
child for child tax -
credit (see page 9) -
-
-
-
-
-
Filing status. Check only one box (1–6 below). -
-
1 -
-
2 -
-
3 -
-
4 -
-
5 -
-
6 -
-
Caution: Do not check box 7a if your parent (or someone else) can claim you as a dependent. -
Do not check box 7b if your spouse had any U.S. gross income. -
7c -
Single resident of Canada or Mexico, or a single U.S. national -
Other single nonresident alien -
Married resident of Canada or Mexico, or a married U.S. national -
-
Married resident of the Republic of Korea (South Korea) -
-
Other married nonresident alien -
-
Qualifying widow(er) with dependent child (see page 9) -
-
Dependents: (see page 9) -
(3) Dependent’s -
-
-
Filing Status and Exemptions for Individuals (see page 8) -
-
(1) First name -
-
Last name -
-
(2) Dependent’s -
identifying number -
-
. -
. -
. -
-
. -
. -
. -
-
. -
. -
. -
-
. -
. -
. -
-
. -
. -
. -
-
. -
. -
. -
-
. -
. -
. -
-
. -
. -
. -
-
-
-
-
-
-
9b -
10b -
16b -
17b -
16a -
-
17a -
-
Total number of exemptions claimed -
-
Wages, salaries, tips, etc. Attach Form(s) W-2 -
-
Taxable interest -
Tax-exempt interest. Do not include on line 9a -
Ordinary dividends -
-
Qualified dividends (see page 11) -
Taxable refunds, credits, or offsets of state and local income taxes (see page 11) -
-
Scholarship and fellowship grants. Attach Form(s) 1042-S or required statement (see page 11) -
-
Business income or (loss). Attach Schedule C or C-EZ (Form 1040) -
-
Capital gain or (loss). Attach Schedule D (Form 1040) if required. If not required, check here -
-
Other gains or (losses). Attach Form 4797 -
IRA distributions -
-
Pensions and annuities -
Rental real estate, royalties, partnerships, trusts, etc. Attach Schedule E (Form 1040) -
Farm income or (loss). Attach Schedule F (Form 1040) -
-
Unemployment compensation -
Other income. List type and amount (see page 15) -
Total income exempt by a treaty from page 5, Item M -
Add lines 8, 9a, 10a, 11–15, 16b, and 17b–21. This is your
total effectively connected income 䊳 -
-
Educator expenses (see page 15) -
Health savings account deduction. Attach Form 8889 -
Moving expenses. Attach Form 3903 -
Self-employed SEP, SIMPLE, and qualified plans -
-
Self-employed health insurance deduction (see page 16) -
Penalty on early withdrawal of savings -
-
Scholarship and fellowship grants excluded -
-
IRA deduction (see page 16) -
-
Student loan interest deduction (see page 16) -
-
Domestic production activities deduction. Attach Form 8903 -
-
Add lines 24 through 33 -
Subtract line 34 from line 23. Enter here and on line 36. This is your
adjusted gross income 䊳 -
-
-
24 -
25 -
26 -
27 -
28 -
29 -
30 -
31 -
32 -
33 -
Taxable amount (see page 12) -
-
Taxable amount (see page 13) -
-
22 -
-
-
-
-
-
-
-
-
d -
-
8 -
-
9a -
b -
-
10a -
b -
-
11 -
12 -
13 -
14 -
15 -
16a -
17a -
18 -
19 -
20 -
21 -
22 -
23 -
24 -
25 -
26 -
27 -
28 -
29 -
30 -
31 -
32 -
33 -
34 -
35 -
Income Effectively Connected With U.S. Trade/Business -
-
Adjusted Gross Income -
-
Enclose, but do not attach, any payment. -
-
-
For Disclosure, Privacy Act, and Paperwork Reduction Act Notice, see page 32. -
-
Cat. No. 11364D -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Page: 1
- diff --git a/samples/nonfree/f1040nr.txt.ref b/samples/nonfree/f1040nr.txt.ref deleted file mode 100644 index e1b204f..0000000 --- a/samples/nonfree/f1040nr.txt.ref +++ /dev/null @@ -1,431 +0,0 @@ -OMB No. 1545-0074 - - -2007 - -Identifying number (see page 8) - - - I - -Check if: - - -ndividual - -Estate or Trust -Type of entry visa (see page 8) - -, 20 - - -䊳 - -resent home address (number, street, and apt. no., or rural route). If you have a P.O. box, see page 8. - - - -City, town or post office, state, and ZIP code. If you have a foreign address, see page 8. - - -Country 䊳 -Give address outside the United States to which you want any -refund check mailed. If same as above, write “Same.” - - - - -Of what country were you a citizen or national during the tax year? 䊳 - -Give address in the country where you are a permanent resident. -If same as above, write “Same.” - - - - -U.S. Nonresident Alien Income Tax Return - - -beginning - -For the year January 1–December 31, 2007, or other tax year - - -, 2007, and ending - -Last name - - -1040NR - - -Form -Department of the Treasury -Internal Revenue Service - - -Your first name and initial - - P - -Please print or type. - - - -Also attach Form(s) 1099-R if tax was withheld. - -Attach Forms W-2 here. - -7a - -7b - -Yourself - - -Spouse - - -兵 - -䊳 - -䊳 - -䊳 - -䊳 - -䊳 - - - - - - - - - - - -No. of boxes checked -on 7a and 7b - -No. of children on -7c who: - -● lived with you - ● did not live with -you due to divorce -or separation - -Dependents on 7c -not entered above - -dd numbers entered - -on lines above - - -8 - -9a - - A - -10a - -11 -12 -13 -14 -15 -16b -17b -18 -19 -20 -21 - -23 - -34 -35 - -Form 1040NR (2007) - - - -If you check box 7b, enter your spouse’s -identifying number 䊳 - -relationship - -to you - - -(4) -if qualifying -child for child tax -credit (see page 9) - - - - - - - - -其 - -Filing status. Check only one box (1–6 below). - -1 - -2 - -3 - -4 - -5 - -6 - -Caution: Do not check box 7a if your parent (or someone else) can claim you as a dependent. -Do not check box 7b if your spouse had any U.S. gross income. -7c - -Single resident of Canada or Mexico, or a single U.S. national -Other single nonresident alien -Married resident of Canada or Mexico, or a married U.S. national - -Married resident of the Republic of Korea (South Korea) - -Other married nonresident alien - -Qualifying widow(er) with dependent child (see page 9) - - -Dependents: (see page 9) - -(3) Dependent’s - - - - - -Filing Status and Exemptions for Individuals (see page 8) - - - -(1) First name - - - -Last name - - -(2) Dependent’s -identifying number - - -. -. -. - -. -. -. - -. -. -. - -. -. -. - - -. -. -. - -. -. -. - -. -. -. - -. -. -. - - - - - - - - - - - - -9b - -10b - -16b -17b - -16a - -17a - - -Total number of exemptions claimed - -Wages, salaries, tips, etc. Attach Form(s) W-2 - -Taxable interest -Tax-exempt interest. Do not include on line 9a -Ordinary dividends - -Qualified dividends (see page 11) -Taxable refunds, credits, or offsets of state and local income taxes (see page 11) - -Scholarship and fellowship grants. Attach Form(s) 1042-S or required statement (see page 11) - -Business income or (loss). Attach Schedule C or C-EZ (Form 1040) - -Capital gain or (loss). Attach Schedule D (Form 1040) if required. If not required, check here - -Other gains or (losses). Attach Form 4797 -IRA distributions - -Pensions and annuities -Rental real estate, royalties, partnerships, trusts, etc. Attach Schedule E (Form 1040) -Farm income or (loss). Attach Schedule F (Form 1040) - -Unemployment compensation -Other income. List type and amount (see page 15) -Total income exempt by a treaty from page 5, Item M -Add lines 8, 9a, 10a, 11–15, 16b, and 17b–21. This is your total effectively connected income 䊳 - -Educator expenses (see page 15) -Health savings account deduction. Attach Form 8889 -Moving expenses. Attach Form 3903 -Self-employed SEP, SIMPLE, and qualified plans - -Self-employed health insurance deduction (see page 16) -Penalty on early withdrawal of savings - -Scholarship and fellowship grants excluded - -IRA deduction (see page 16) - -Student loan interest deduction (see page 16) - -Domestic production activities deduction. Attach Form 8903 - -Add lines 24 through 33 -Subtract line 34 from line 23. Enter here and on line 36. This is your adjusted gross income 䊳 - - - -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 - -Taxable amount (see page 12) - -Taxable amount (see page 13) - - -22 - - - - - - - - - - - - - - - - - -d - - -8 - -9a -b - -10a -b - - -11 -12 -13 -14 -15 -16a -17a -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 - -Income Effectively Connected With U.S. Trade/Business - - - -Adjusted Gross Income - - - -Enclose, but do not attach, any payment. - - - - - -For Disclosure, Privacy Act, and Paperwork Reduction Act Notice, see page 32. - - -Cat. No. 11364D - - - \ No newline at end of file diff --git a/samples/nonfree/f1040nr.xml.ref b/samples/nonfree/f1040nr.xml.ref deleted file mode 100644 index 914dab6..0000000 --- a/samples/nonfree/f1040nr.xml.ref +++ /dev/null @@ -1,6026 +0,0 @@ - - - - - -O -M -B - -N -o -. - -1 -5 -4 -5 -- -0 -0 -7 -4 - - - - - - - - - - - -2 -0 -0 -7 - - - - - - - -I -d -e -n -t -i -f -y -i -n -g - -n -u -m -b -e -r - -( -s -e -e - -p -a -g -e - -8 -) - - - - - - - - - - - - -I - - - - - - -C -h -e -c -k - -i -f -: - - - - - - - - - - - -n -d -i -v -i -d -u -a -l - - - - - - - - - -E -s -t -a -t -e - -o -r - -T -r -u -s -t - - - - -T -y -p -e - -o -f - -e -n -t -r -y - -v -i -s -a - -( -s -e -e - -p -a -g -e - -8 -) - - - - - - -, - -2 -0 - - - - - - - - - - - - - - - - - - - - -r -e -s -e -n -t - -h -o -m -e - -a -d -d -r -e -s -s - -( -n -u -m -b -e -r -, - -s -t -r -e -e -t -, - -a -n -d - -a -p -t -. - -n -o -. -, - -o -r - -r -u -r -a -l - -r -o -u -t -e -) -. - -I -f - -y -o -u - -h -a -v -e - -a - -P -. -O -. - -b -o -x -, - -s -e -e - -p -a -g -e - -8 -. - - - - - - - - - - - - - -C -i -t -y -, - -t -o -w -n - -o -r - -p -o -s -t - -o -f -f -i -c -e -, - -s -t -a -t -e -, - -a -n -d - -Z -I -P - -c -o -d -e -. - -I -f - -y -o -u - -h -a -v -e - -a - -f -o -r -e -i -g -n - -a -d -d -r -e -s -s -, - -s -e -e - -p -a -g -e - -8 -. - - - - - - - - - - - -C -o -u -n -t -r -y - - - - - - -G -i -v -e - -a -d -d -r -e -s -s - -o -u -t -s -i -d -e - -t -h -e - -U -n -i -t -e -d - -S -t -a -t -e -s - -t -o - -w -h -i -c -h - -y -o -u - -w -a -n -t - -a -n -y - - - - -r -e -f -u -n -d - -c -h -e -c -k - -m -a -i -l -e -d -. - -I -f - -s -a -m -e - -a -s - -a -b -o -v -e -, - -w -r -i -t -e - - -S -a -m -e -. - - - - - - - - - - - - - - - - - - - -O -f - -w -h -a -t - -c -o -u -n -t -r -y - -w -e -r -e - -y -o -u - -a - -c -i -t -i -z -e -n - -o -r - -n -a -t -i -o -n -a -l - -d -u -r -i -n -g - -t -h -e - -t -a -x - -y -e -a -r -? - - - - - - - - -G -i -v -e - -a -d -d -r -e -s -s - -i -n - -t -h -e - -c -o -u -n -t -r -y - -w -h -e -r -e - -y -o -u - -a -r -e - -a - -p -e -r -m -a -n -e -n -t - -r -e -s -i -d -e -n -t -. - - - - -I -f - -s -a -m -e - -a -s - -a -b -o -v -e -, - -w -r -i -t -e - - -S -a -m -e -. - - - - - - - - - - - - - - - - - - - -U -. -S -. - -N -o -n -r -e -s -i -d -e -n -t - -A -l -i -e -n - -I -n -c -o -m -e - -T -a -x - -R -e -t -u -r -n - - - - - - - - - - - -b -e -g -i -n -n -i -n -g - - - - - - -F -o -r - -t -h -e - -y -e -a -r - -J -a -n -u -a -r -y - -1 - -D -e -c -e -m -b -e -r - -3 -1 -, - -2 -0 -0 -7 -, - -o -r - -o -t -h -e -r - -t -a -x - -y -e -a -r - - - - - - - - - - - -, - -2 -0 -0 -7 -, - -a -n -d - -e -n -d -i -n -g - - - - - - - -L -a -s -t - -n -a -m -e - - - - - - - - - - - -1 -0 -4 -0 -N -R - - - - - - - - - - - -F -o -r -m - - - - - -D -e -p -a -r -t -m -e -n -t - -o -f - -t -h -e - -T -r -e -a -s -u -r -y - - - - -I -n -t -e -r -n -a -l - -R -e -v -e -n -u -e - -S -e -r -v -i -c -e - - - - - - - - - - - -Y -o -u -r - -f -i -r -s -t - -n -a -m -e - -a -n -d - -i -n -i -t -i -a -l - - - - - - - - -P - - - - - - -P -l -e -a -s -e - -p -r -i -n -t - -o -r - -t -y -p -e -. - - - - - - - - - - - - - -A -l -s -o - -a -t -t -a -c -h - -F -o -r -m -( -s -) - -1 -0 -9 -9 -- -R - -i -f - -t -a -x - -w -a -s - -w -i -t -h -h -e -l -d -. - - - - - - -A -t -t -a -c -h - -F -o -r -m -s - -W -- -2 - -h -e -r -e -. - - - - - - -7 -a - - - - - - - -7 -b - - - - - - - -Y -o -u -r -s -e -l -f - - - - - - - - - - - -S -p -o -u -s -e - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -N -o -. - -o -f - -b -o -x -e -s - -c -h -e -c -k -e -d - - - - -o -n - -7 -a - -a -n -d - -7 -b - - - - - - - - - -N -o -. - -o -f - -c -h -i -l -d -r -e -n - -o -n - - - - -7 -c - -w -h -o -: - - - - - - - - - - - -l -i -v -e -d - -w -i -t -h - -y -o -u - - - - - - - -d -i -d - -n -o -t - -l -i -v -e - -w -i -t -h - - - - -y -o -u - -d -u -e - -t -o - -d -i -v -o -r -c -e - - - - - -o -r - -s -e -p -a -r -a -t -i -o -n - - - - - - - - - -D -e -p -e -n -d -e -n -t -s - -o -n - -7 -c - - - - -n -o -t - -e -n -t -e -r -e -d - -a -b -o -v -e - - - - - - -d -d - -n -u -m -b -e -r -s - -e -n -t -e -r -e -d - - - - - - -o -n - -l -i -n -e -s - -a -b -o -v -e - - - - - - - - - - - -8 - - - - - - - - - -9 -a - - - - - - - - -A - - - - - - -1 -0 -a - - - - - - - -1 -1 - - - - - -1 -2 - - - - - -1 -3 - - - - - -1 -4 - - - - - -1 -5 - - - - - -1 -6 -b - - - - - -1 -7 -b - - - - - -1 -8 - - - - - -1 -9 - - - - - -2 -0 - - - - - -2 -1 - - - - - - - -2 -3 - - - - - - - -3 -4 - - - - - -3 -5 - - - - - - - -F -o -r -m - -1 -0 -4 -0 -N -R - -( -2 -0 -0 -7 -) - - - - - - - - - - - - - -I -f - -y -o -u - -c -h -e -c -k - -b -o -x - -7 -b -, - -e -n -t -e -r - -y -o -u -r - -s -p -o -u -s -e - -s - - - - -i -d -e -n -t -i -f -y -i -n -g - -n -u -m -b -e -r - - - - - - - - -r -e -l -a -t -i -o -n -s -h -i -p - - - - - - -t -o - -y -o -u - - - - - - - - - - - -( -4 -) - - - - - -i -f - -q -u -a -l -i -f -y -i -n -g - - - - -c -h -i -l -d - -f -o -r - -c -h -i -l -d - -t -a -x - - - - -c -r -e -d -i -t - -( -s -e -e - -p -a -g -e - -9 -) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -F -i -l -i -n -g - -s -t -a -t -u -s -. - -C -h -e -c -k - -o -n -l -y - -o -n -e - -b -o -x - -( -1 - -6 - -b -e -l -o -w -) -. - - - - - - - - - -1 - - - - - - - - - -2 - - - - - - - - - -3 - - - - - - - - - -4 - - - - - - - - - -5 - - - - - - - - - -6 - - - - - - - - - -C -a -u -t -i -o -n -: - -D -o - -n -o -t - -c -h -e -c -k - -b -o -x - -7 -a - -i -f - -y -o -u -r - -p -a -r -e -n -t - -( -o -r - -s -o -m -e -o -n -e - -e -l -s -e -) - -c -a -n - -c -l -a -i -m - -y -o -u - -a -s - -a - -d -e -p -e -n -d -e -n -t -. - - - - -D -o - -n -o -t - -c -h -e -c -k - -b -o -x - -7 -b - -i -f - -y -o -u -r - -s -p -o -u -s -e - -h -a -d - -a -n -y - -U -. -S -. - -g -r -o -s -s - -i -n -c -o -m -e -. - - - - -7 -c - - - - - - - -S -i -n -g -l -e - -r -e -s -i -d -e -n -t - -o -f - -C -a -n -a -d -a - -o -r - -M -e -x -i -c -o -, - -o -r - -a - -s -i -n -g -l -e - -U -. -S -. - -n -a -t -i -o -n -a -l - - - - -O -t -h -e -r - -s -i -n -g -l -e - -n -o -n -r -e -s -i -d -e -n -t - -a -l -i -e -n - - - - -M -a -r -r -i -e -d - -r -e -s -i -d -e -n -t - -o -f - -C -a -n -a -d -a - -o -r - -M -e -x -i -c -o -, - -o -r - -a - -m -a -r -r -i -e -d - -U -. -S -. - -n -a -t -i -o -n -a -l - - - - - - - - - -M -a -r -r -i -e -d - -r -e -s -i -d -e -n -t - -o -f - -t -h -e - -R -e -p -u -b -l -i -c - -o -f - -K -o -r -e -a - -( -S -o -u -t -h - -K -o -r -e -a -) - - - - - - - - - -O -t -h -e -r - -m -a -r -r -i -e -d - -n -o -n -r -e -s -i -d -e -n -t - -a -l -i -e -n - - - - - - - - - -Q -u -a -l -i -f -y -i -n -g - -w -i -d -o -w -( -e -r -) - -w -i -t -h - -d -e -p -e -n -d -e -n -t - -c -h -i -l -d - -( -s -e -e - -p -a -g -e - -9 -) - - - - - - - - - - - -D -e -p -e -n -d -e -n -t -s -: - -( -s -e -e - -p -a -g -e - -9 -) - - - - - - -( -3 -) - -D -e -p -e -n -d -e -n -t - -s - - - - - - - - - - - - - - - - - - - - -F -i -l -i -n -g - -S -t -a -t -u -s - -a -n -d - -E -x -e -m -p -t -i -o -n -s - -f -o -r - -I -n -d -i -v -i -d -u -a -l -s - -( -s -e -e - -p -a -g -e - -8 -) - - - - - - - - - - - - - -( -1 -) - -F -i -r -s -t - -n -a -m -e - - - - - - - - - - - - - -L -a -s -t - -n -a -m -e - - - - - - - - - - - -( -2 -) - -D -e -p -e -n -d -e -n -t - -s - - - - - -i -d -e -n -t -i -f -y -i -n -g - -n -u -m -b -e -r - - - - - - - - - - - -. - - - - -. - - - - -. - - - - - - - - - -. - - - - -. - - - - -. - - - - - - - - - -. - - - - -. - - - - -. - - - - - - - - - -. - - - - -. - - - - -. - - - - - - - - - - - -. - - - - -. - - - - -. - - - - - - - - - -. - - - - -. - - - - -. - - - - - - - - - -. - - - - -. - - - - -. - - - - - - - - - -. - - - - -. - - - - -. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -9 -b - - - - - - - -1 -0 -b - - - - - - - -1 -6 -b - - - - - -1 -7 -b - - - - - - - -1 -6 -a - - - - - - - - - -1 -7 -a - - - - - - - - - - - -T -o -t -a -l - -n -u -m -b -e -r - -o -f - -e -x -e -m -p -t -i -o -n -s - -c -l -a -i -m -e -d - - - - - - - - - -W -a -g -e -s -, - -s -a -l -a -r -i -e -s -, - -t -i -p -s -, - -e -t -c -. - -A -t -t -a -c -h - -F -o -r -m -( -s -) - -W -- -2 - - - - - - - - - -T -a -x -a -b -l -e - -i -n -t -e -r -e -s -t - - - - -T -a -x -- -e -x -e -m -p -t - -i -n -t -e -r -e -s -t -. - -D -o - -n -o -t - -i -n -c -l -u -d -e - -o -n - -l -i -n -e - -9 -a - - - - - -O -r -d -i -n -a -r -y - -d -i -v -i -d -e -n -d -s - - - - - - - - - -Q -u -a -l -i -f -i -e -d - -d -i -v -i -d -e -n -d -s - -( -s -e -e - -p -a -g -e - -1 -1 -) - - - - - -T -a -x -a -b -l -e - -r -e -f -u -n -d -s -, - -c -r -e -d -i -t -s -, - -o -r - -o -f -f -s -e -t -s - -o -f - -s -t -a -t -e - -a -n -d - -l -o -c -a -l - -i -n -c -o -m -e - -t -a -x -e -s - -( -s -e -e - -p -a -g -e - -1 -1 -) - - - - - - - - - - -S -c -h -o -l -a -r -s -h -i -p - -a -n -d - -f -e -l -l -o -w -s -h -i -p - -g -r -a -n -t -s -. - -A -t -t -a -c -h - -F -o -r -m -( -s -) - -1 -0 -4 -2 -- -S - -o -r - -r -e -q -u -i -r -e -d - -s -t -a -t -e -m -e -n -t - -( -s -e -e - -p -a -g -e - -1 -1 -) - - - - - - - - - - -B -u -s -i -n -e -s -s - -i -n -c -o -m -e - -o -r - -( -l -o -s -s -) -. - -A -t -t -a -c -h - -S -c -h -e -d -u -l -e - -C - -o -r - -C -- -E -Z - -( -F -o -r -m - -1 -0 -4 -0 -) - - - - - - - - - -C -a -p -i -t -a -l - -g -a -i -n - -o -r - -( -l -o -s -s -) -. - -A -t -t -a -c -h - -S -c -h -e -d -u -l -e - -D - -( -F -o -r -m - -1 -0 -4 -0 -) - -i -f - -r -e -q -u -i -r -e -d -. - -I -f - -n -o -t - -r -e -q -u -i -r -e -d -, - -c -h -e -c -k - -h -e -r -e - - - - - - - - - -O -t -h -e -r - -g -a -i -n -s - -o -r - -( -l -o -s -s -e -s -) -. - -A -t -t -a -c -h - -F -o -r -m - -4 -7 -9 -7 - - - - -I -R -A - -d -i -s -t -r -i -b -u -t -i -o -n -s - - - - - - - - - -P -e -n -s -i -o -n -s - -a -n -d - -a -n -n -u -i -t -i -e -s - - - - -R -e -n -t -a -l - -r -e -a -l - -e -s -t -a -t -e -, - -r -o -y -a -l -t -i -e -s -, - -p -a -r -t -n -e -r -s -h -i -p -s -, - -t -r -u -s -t -s -, - -e -t -c -. - -A -t -t -a -c -h - -S -c -h -e -d -u -l -e - -E - -( -F -o -r -m - -1 -0 -4 -0 -) - - - - -F -a -r -m - -i -n -c -o -m -e - -o -r - -( -l -o -s -s -) -. - -A -t -t -a -c -h - -S -c -h -e -d -u -l -e - -F - -( -F -o -r -m - -1 -0 -4 -0 -) - - - - - - - - - -U -n -e -m -p -l -o -y -m -e -n -t - -c -o -m -p -e -n -s -a -t -i -o -n - - - - -O -t -h -e -r - -i -n -c -o -m -e -. - -L -i -s -t - -t -y -p -e - -a -n -d - -a -m -o -u -n -t - -( -s -e -e - -p -a -g -e - -1 -5 -) - - - - -T -o -t -a -l - -i -n -c -o -m -e - -e -x -e -m -p -t - -b -y - -a - -t -r -e -a -t -y - -f -r -o -m - -p -a -g -e - -5 -, - -I -t -e -m - -M - - - - -A -d -d - -l -i -n -e -s - -8 -, - -9 -a -, - -1 -0 -a -, - -1 -1 - -1 -5 -, - -1 -6 -b -, - -a -n -d - -1 -7 -b - -2 -1 -. - -T -h -i -s - -i -s - -y -o -u -r - -t -o -t -a -l - -e -f -f -e -c -t -i -v -e -l -y - -c -o -n -n -e -c -t -e -d - -i -n -c -o -m -e - - - - - - - - - - - -E -d -u -c -a -t -o -r - -e -x -p -e -n -s -e -s - -( -s -e -e - -p -a -g -e - -1 -5 -) - - - - -H -e -a -l -t -h - -s -a -v -i -n -g -s - -a -c -c -o -u -n -t - -d -e -d -u -c -t -i -o -n -. - -A -t -t -a -c -h - -F -o -r -m - -8 -8 -8 -9 - - - - -M -o -v -i -n -g - -e -x -p -e -n -s -e -s -. - -A -t -t -a -c -h - -F -o -r -m - -3 -9 -0 -3 - - - - -S -e -l -f -- -e -m -p -l -o -y -e -d - -S -E -P -, - -S -I -M -P -L -E -, - -a -n -d - -q -u -a -l -i -f -i -e -d - -p -l -a -n -s - - - - - - - - - -S -e -l -f -- -e -m -p -l -o -y -e -d - -h -e -a -l -t -h - -i -n -s -u -r -a -n -c -e - -d -e -d -u -c -t -i -o -n - -( -s -e -e - -p -a -g -e - -1 -6 -) - - - - - -P -e -n -a -l -t -y - -o -n - -e -a -r -l -y - -w -i -t -h -d -r -a -w -a -l - -o -f - -s -a -v -i -n -g -s - - - - - - - - - -S -c -h -o -l -a -r -s -h -i -p - -a -n -d - -f -e -l -l -o -w -s -h -i -p - -g -r -a -n -t -s - -e -x -c -l -u -d -e -d - - - - - - - - - -I -R -A - -d -e -d -u -c -t -i -o -n - -( -s -e -e - -p -a -g -e - -1 -6 -) - - - - - - - - - -S -t -u -d -e -n -t - -l -o -a -n - -i -n -t -e -r -e -s -t - -d -e -d -u -c -t -i -o -n - -( -s -e -e - -p -a -g -e - -1 -6 -) - - - - - - - - - -D -o -m -e -s -t -i -c - -p -r -o -d -u -c -t -i -o -n - -a -c -t -i -v -i -t -i -e -s - -d -e -d -u -c -t -i -o -n -. - -A -t -t -a -c -h - -F -o -r -m - -8 -9 -0 -3 - - - - - - - - - -A -d -d - -l -i -n -e -s - -2 -4 - -t -h -r -o -u -g -h - -3 -3 - - - - -S -u -b -t -r -a -c -t - -l -i -n -e - -3 -4 - -f -r -o -m - -l -i -n -e - -2 -3 -. - -E -n -t -e -r - -h -e -r -e - -a -n -d - -o -n - -l -i -n -e - -3 -6 -. - -T -h -i -s - -i -s - -y -o -u -r - -a -d -j -u -s -t -e -d - -g -r -o -s -s - -i -n -c -o -m -e - - - - - - - - - - - - - - - - - - -2 -4 - - - - - -2 -5 - - - - - -2 -6 - - - - - -2 -7 - - - - - -2 -8 - - - - - -2 -9 - - - - - -3 -0 - - - - - -3 -1 - - - - - -3 -2 - - - - - -3 -3 - - - - - - - -T -a -x -a -b -l -e - -a -m -o -u -n -t - -( -s -e -e - -p -a -g -e - -1 -2 -) - - - - - - - - - -T -a -x -a -b -l -e - -a -m -o -u -n -t - -( -s -e -e - -p -a -g -e - -1 -3 -) - - - - - - - - - - - -2 -2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -d - - - - - - - - - - - -8 - - - - - - - - - -9 -a - - - - - -b - - - - - - - - - -1 -0 -a - - - - - -b - - - - - - - - - - - -1 -1 - - - - - -1 -2 - - - - - -1 -3 - - - - - -1 -4 - - - - - -1 -5 - - - - - -1 -6 -a - - - - - -1 -7 -a - - - - - -1 -8 - - - - - -1 -9 - - - - - -2 -0 - - - - - -2 -1 - - - - - -2 -2 - - - - - -2 -3 - - - - - -2 -4 - - - - - -2 -5 - - - - - -2 -6 - - - - - -2 -7 - - - - - -2 -8 - - - - - -2 -9 - - - - - -3 -0 - - - - - -3 -1 - - - - - -3 -2 - - - - - -3 -3 - - - - - -3 -4 - - - - - -3 -5 - - - - - - - -I -n -c -o -m -e - -E -f -f -e -c -t -i -v -e -l -y - -C -o -n -n -e -c -t -e -d - -W -i -t -h - -U -. -S -. - -T -r -a -d -e -/ -B -u -s -i -n -e -s -s - - - - - - - - - - - - - -A -d -j -u -s -t -e -d - -G -r -o -s -s - -I -n -c -o -m -e - - - - - - - - - - - - - -E -n -c -l -o -s -e -, - -b -u -t - -d -o - -n -o -t - -a -t -t -a -c -h -, - -a -n -y - -p -a -y -m -e -n -t -. - - - - - - - - - - - - - - - - - - - - -F -o -r - -D -i -s -c -l -o -s -u -r -e -, - -P -r -i -v -a -c -y - -A -c -t -, - -a -n -d - -P -a -p -e -r -w -o -r -k - -R -e -d -u -c -t -i -o -n - -A -c -t - -N -o -t -i -c -e -, - -s -e -e - -p -a -g -e - -3 -2 -. - - - - - - - - - - - -C -a -t -. - -N -o -. - -1 -1 -3 -6 -4 -D - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/nonfree/i1040nr.html.ref b/samples/nonfree/i1040nr.html.ref deleted file mode 100644 index 607df01..0000000 --- a/samples/nonfree/i1040nr.html.ref +++ /dev/null @@ -1,209 +0,0 @@ - - - - - -
PAGER/SGML -
Page 1 of 48 Instructions for Form 1040NR -
Userid: ________ DTD INSTR04 -
Fileid: -
D:\USERS\8fllb\documents\epicfiles\2007Instructions1040NR.sgm -
Leadpct: 0% Pt. size: 9.5 Draft -
Ok to Print -
(Init. & date) -
7:48 - 6-DEC-2007 -
The type and rule above prints on all proofs including departmental reproduction proofs. MUST be removed before printing. -
2007 -
Instructions for -
Form 1040NR -
U.S. Nonresident Alien Income Tax Return -
Section references are to the Internal -
Revenue Code unless otherwise noted. -
use a different address this year. See -
Where To File on page 4. -
General Instructions deduction. The deduction rate for -
Domestic production activities -
What’s New for 2007 -
Tax benefits extended. The following -
tax benefits were extended through -
2007. -
Deduction for educator expenses in -
figuring adjusted gross income. -
District of Columbia first-time -
homebuyer credit. -
Alternative minimum tax (AMT) -
exemption amount decreased.
The -
AMT exemption amount is decreased to -
$33,750 ($45,000 if a qualifying -
widow(er); $22,500 if married filing -
separately). -
For -
If you are -
2007 is increased to 6%. -
Unreported social security and -
Medicare tax on wages. -
an employee and your employer did not -
withhold social security and Medicare -
tax, see Form 8919 to figure and report -
this tax. -
Refundable credit for prior-year -
minimum tax. -
If you have an unused -
minimum tax credit carryforward from -
2004, see Form 8801 to find if you can -
take this credit. -
Health savings account (HSA) -
funding distributions.
You may be -
able to elect to exclude from income a -
distribution made from your IRA to your -
HSA. See the instructions for lines 16a -
and 16b beginning on page 12. -
New recordkeeping requirements for -
contributions of money. -
charitable contributions of money, -
regardless of the amount, you must -
maintain as a record of the contribution -
a bank record (such as a cancelled -
check) or a written record from the -
charity. The written record must include -
the name of the charity, date, and -
amount of the contribution. See
Gifts to -
U.S. Charities
that begins on page 26. -
Exemption for housing a person -
displaced by Hurricane Katrina -
expires. The additional exemption -
amount for housing a person displaced -
by Hurricane Katrina does not apply for -
2007 or later years. -
Telephone excise tax credit. -
credit was available only on your 2006 -
return. If you filed but did not request it -
on your 2006 return, file Form 1040X -
using a simplified procedure explained -
in its instructions to amend your 2006 -
return. If you were not required to file a -
2006 return, see the 2006 Form -
1040EZ-T. -
What’s New for 2008 -
IRA deduction expanded. You may -
be able to deduct up to $5,000 ($6,000 -
if age 50 or older at the end of the -
year). You may be able to take an IRA -
deduction if you were covered by a -
This -
Cat. No. 11368V -
! -
At the time these instructions -
went to print, Congress was -
considering legislation that -
CAUTION -
would increase the amounts above. To -
find out if this legislation was enacted, -
and for more details, see the -
Instructions for Form 6251. -
IRA deduction expanded. -
covered by a retirement plan, you may -
be able to take an IRA deduction if your -
2007 modified adjusted gross income -
(AGI) is less than $62,000 ($103,000 if -
a qualifying widow(er)). -
If you were -
You may be able to deduct up to an -
additional $3,000 if you were a -
participant in a 401(k) plan and your -
employer was in bankruptcy in an -
earlier year. -
Standard mileage rates. The 2007 -
rate for business use of your vehicle is -
48
1/2 cents a mile. The 2007 rate for -
use of your vehicle to move is 20 cents -
a mile. The special rate for charitable -
use of your vehicle to provide relief -
related to Hurricane Katrina has -
expired. -
Elective salary deferrals. The -
maximum amount you can defer under -
all plans is generally limited to $15,500 -
($10,500 if you only have SIMPLE -
plans; $18,500 for section 403(b) plans -
if you qualify for the 15-year rule). See -
the instructions for line 8 on page 10. -
Mailing your return. -
If you are filing -
the return for an estate or trust, you will -
Department of the Treasury -
Internal Revenue Service -
retirement plan and your 2008 modified -
AGI is less than $63,000 ($105,000) if a -
qualifying widow(er)). -
You may be able to deduct up to an -
additional $3,000 if you were a -
participant in a 401(k) plan and your -
employer was in bankruptcy in an -
earlier year. -
Personal exemption and itemized -
deduction phaseouts reduced. -
Taxpayers with adjusted gross income -
above a certain amount may lose part -
of their deduction for personal -
exemptions and itemized deductions. -
The amount by which these deductions -
are reduced in 2008 will be only
1/2 of -
the amount of the reduction that -
otherwise would have applied in 2007. -
Capital gain tax rate reduced. -
The -
5% capital gain tax rate is reduced to -
zero. -
Tax on children’s income. -
8615 will be required to figure the tax -
for the following children with -
investment income of more than -
$1,800. -
Form -
1. Children under age 18 at the end -
of 2008. -
2. The following children if their -
earned income is not more than half -
their support. -
a. Children age 18 at the end of -
2008. -
b. Children over age 18 and under -
age 24 at the end of 2008 who are -
full-time students. -
The election to report a child’s -
investment income on a parent’s return -
and the special rule for when a child -
must file Form 6251 will also apply to -
the children listed above. -
Expiring tax benefits. The following -
benefits are scheduled to expire and -
will not apply for 2008. -
Deduction for educator expenses in -
figuring adjusted gross income. -
The exclusion from income of -
qualified charitable deductions. -
Credit for nonbusiness energy -
property. -
District of Columbia first-time -
homebuyer credit (for homes -
purchased after 2007). -
- - - - - - - - - - - - - - - - -
Page: 1
- diff --git a/samples/nonfree/i1040nr.txt.ref b/samples/nonfree/i1040nr.txt.ref deleted file mode 100644 index 5b40c0d..0000000 --- a/samples/nonfree/i1040nr.txt.ref +++ /dev/null @@ -1,220 +0,0 @@ -PAGER/SGML -Page 1 of 48 Instructions for Form 1040NR - -Userid: ________ DTD INSTR04 -Fileid: - -D:\USERS\8fllb\documents\epicfiles\2007Instructions1040NR.sgm - -Leadpct: 0% Pt. size: 9.5 ❏ Draft - -❏ Ok to Print - -(Init. & date) -7:48 - 6-DEC-2007 - -The type and rule above prints on all proofs including departmental reproduction proofs. MUST be removed before printing. - -2007 -Instructions for -Form 1040NR -U.S. Nonresident Alien Income Tax Return - -Section references are to the Internal -Revenue Code unless otherwise noted. - -use a different address this year. See -Where To File on page 4. -General Instructions deduction. The deduction rate for -Domestic production activities -What’s New for 2007 -Tax benefits extended. The following -tax benefits were extended through -2007. -• Deduction for educator expenses in -figuring adjusted gross income. -• District of Columbia first-time -homebuyer credit. -Alternative minimum tax (AMT) -exemption amount decreased. The -AMT exemption amount is decreased to -$33,750 ($45,000 if a qualifying -widow(er); $22,500 if married filing -separately). - - For - - If you are - -2007 is increased to 6%. -Unreported social security and -Medicare tax on wages. -an employee and your employer did not -withhold social security and Medicare -tax, see Form 8919 to figure and report -this tax. -Refundable credit for prior-year -minimum tax. -If you have an unused -minimum tax credit carryforward from -2004, see Form 8801 to find if you can -take this credit. -Health savings account (HSA) -funding distributions. You may be -able to elect to exclude from income a -distribution made from your IRA to your -HSA. See the instructions for lines 16a -and 16b beginning on page 12. -New recordkeeping requirements for -contributions of money. -charitable contributions of money, -regardless of the amount, you must -maintain as a record of the contribution -a bank record (such as a cancelled -check) or a written record from the -charity. The written record must include -the name of the charity, date, and -amount of the contribution. See Gifts to -U.S. Charities that begins on page 26. -Exemption for housing a person -displaced by Hurricane Katrina -expires. The additional exemption -amount for housing a person displaced -by Hurricane Katrina does not apply for -2007 or later years. -Telephone excise tax credit. -credit was available only on your 2006 -return. If you filed but did not request it -on your 2006 return, file Form 1040X -using a simplified procedure explained -in its instructions to amend your 2006 -return. If you were not required to file a -2006 return, see the 2006 Form -1040EZ-T. -What’s New for 2008 -IRA deduction expanded. You may -be able to deduct up to $5,000 ($6,000 -if age 50 or older at the end of the -year). You may be able to take an IRA -deduction if you were covered by a - - This - -Cat. No. 11368V - -! - -At the time these instructions -went to print, Congress was -considering legislation that - -CAUTION -would increase the amounts above. To -find out if this legislation was enacted, -and for more details, see the -Instructions for Form 6251. -IRA deduction expanded. -covered by a retirement plan, you may -be able to take an IRA deduction if your -2007 modified adjusted gross income -(AGI) is less than $62,000 ($103,000 if -a qualifying widow(er)). - -If you were - -You may be able to deduct up to an - -additional $3,000 if you were a -participant in a 401(k) plan and your -employer was in bankruptcy in an -earlier year. -Standard mileage rates. The 2007 -rate for business use of your vehicle is -481/2 cents a mile. The 2007 rate for -use of your vehicle to move is 20 cents -a mile. The special rate for charitable -use of your vehicle to provide relief -related to Hurricane Katrina has -expired. -Elective salary deferrals. The -maximum amount you can defer under -all plans is generally limited to $15,500 -($10,500 if you only have SIMPLE -plans; $18,500 for section 403(b) plans -if you qualify for the 15-year rule). See -the instructions for line 8 on page 10. -Mailing your return. - If you are filing -the return for an estate or trust, you will - -Department of the Treasury -Internal Revenue Service - -retirement plan and your 2008 modified -AGI is less than $63,000 ($105,000) if a -qualifying widow(er)). - -You may be able to deduct up to an - -additional $3,000 if you were a -participant in a 401(k) plan and your -employer was in bankruptcy in an -earlier year. -Personal exemption and itemized -deduction phaseouts reduced. -Taxpayers with adjusted gross income -above a certain amount may lose part -of their deduction for personal -exemptions and itemized deductions. -The amount by which these deductions -are reduced in 2008 will be only 1/2 of -the amount of the reduction that -otherwise would have applied in 2007. -Capital gain tax rate reduced. - The -5% capital gain tax rate is reduced to -zero. -Tax on children’s income. -8615 will be required to figure the tax -for the following children with -investment income of more than -$1,800. - - Form - -1. Children under age 18 at the end - -of 2008. - -2. The following children if their - -earned income is not more than half -their support. - -a. Children age 18 at the end of - -2008. - -b. Children over age 18 and under - -age 24 at the end of 2008 who are -full-time students. -The election to report a child’s -investment income on a parent’s return -and the special rule for when a child -must file Form 6251 will also apply to -the children listed above. -Expiring tax benefits. The following -benefits are scheduled to expire and -will not apply for 2008. -• Deduction for educator expenses in -figuring adjusted gross income. -• The exclusion from income of -qualified charitable deductions. -• Credit for nonbusiness energy -property. -• District of Columbia first-time -homebuyer credit (for homes -purchased after 2007). - - \ No newline at end of file diff --git a/samples/nonfree/i1040nr.xml.ref b/samples/nonfree/i1040nr.xml.ref deleted file mode 100644 index a0bbf0f..0000000 --- a/samples/nonfree/i1040nr.xml.ref +++ /dev/null @@ -1,6424 +0,0 @@ - - - - - -P -A -G -E -R -/ -S -G -M -L - - - - -P -a -g -e - -1 - -o -f - -4 -8 - -I -n -s -t -r -u -c -t -i -o -n -s - -f -o -r - -F -o -r -m - -1 -0 -4 -0 -N -R - - - - - - -U -s -e -r -i -d -: - -_ -_ -_ -_ -_ -_ -_ -_ - -D -T -D - -I -N -S -T -R -0 -4 - - - - -F -i -l -e -i -d -: - - - - - - -D -: -\ -U -S -E -R -S -\ -8 -f -l -l -b -\ -d -o -c -u -m -e -n -t -s -\ -e -p -i -c -f -i -l -e -s -\ -2 -0 -0 -7 -I -n -s -t -r -u -c -t -i -o -n -s -1 -0 -4 -0 -N -R -. -s -g -m - - - - - - -L -e -a -d -p -c -t -: - -0 -% - -P -t -. - -s -i -z -e -: - -9 -. -5 - - - -D -r -a -f -t - - - - - - - - -O -k - -t -o - -P -r -i -n -t - - - - - - -( -I -n -i -t -. - -& - -d -a -t -e -) - - - - -7 -: -4 -8 - -- - - -6 -- -D -E -C -- -2 -0 -0 -7 - - - - - - -T -h -e - -t -y -p -e - -a -n -d - -r -u -l -e - -a -b -o -v -e - -p -r -i -n -t -s - -o -n - -a -l -l - -p -r -o -o -f -s - -i -n -c -l -u -d -i -n -g - -d -e -p -a -r -t -m -e -n -t -a -l - -r -e -p -r -o -d -u -c -t -i -o -n - -p -r -o -o -f -s -. - -M -U -S -T - -b -e - -r -e -m -o -v -e -d - -b -e -f -o -r -e - -p -r -i -n -t -i -n -g -. - - - - - - -2 -0 -0 -7 - - - - -I -n -s -t -r -u -c -t -i -o -n -s - -f -o -r - - - - -F -o -r -m - -1 -0 -4 -0 -N -R - - - - -U -. -S -. - -N -o -n -r -e -s -i -d -e -n -t - -A -l -i -e -n - -I -n -c -o -m -e - -T -a -x - -R -e -t -u -r -n - - - - - - -S -e -c -t -i -o -n - -r -e -f -e -r -e -n -c -e -s - -a -r -e - -t -o - -t -h -e - -I -n -t -e -r -n -a -l - - - - -R -e -v -e -n -u -e - -C -o -d -e - -u -n -l -e -s -s - -o -t -h -e -r -w -i -s -e - -n -o -t -e -d -. - - - - - - -u -s -e - -a - -d -i -f -f -e -r -e -n -t - -a -d -d -r -e -s -s - -t -h -i -s - -y -e -a -r -. - -S -e -e - - - - -W -h -e -r -e - -T -o - -F -i -l -e - -o -n - -p -a -g -e - -4 -. - - - - -G -e -n -e -r -a -l - -I -n -s -t -r -u -c -t -i -o -n -s - -d -e -d -u -c -t -i -o -n -. - -T -h -e - -d -e -d -u -c -t -i -o -n - -r -a -t -e - -f -o -r - - - - -D -o -m -e -s -t -i -c - -p -r -o -d -u -c -t -i -o -n - -a -c -t -i -v -i -t -i -e -s - - - - -W -h -a -t - -s - -N -e -w - -f -o -r - -2 -0 -0 -7 - - - - -T -a -x - -b -e -n -e -f -i -t -s - -e -x -t -e -n -d -e -d -. - -T -h -e - -f -o -l -l -o -w -i -n -g - - - - -t -a -x - -b -e -n -e -f -i -t -s - -w -e -r -e - -e -x -t -e -n -d -e -d - -t -h -r -o -u -g -h - - - - -2 -0 -0 -7 -. - - - - - - -D -e -d -u -c -t -i -o -n - -f -o -r - -e -d -u -c -a -t -o -r - -e -x -p -e -n -s -e -s - -i -n - - - - -f -i -g -u -r -i -n -g - -a -d -j -u -s -t -e -d - -g -r -o -s -s - -i -n -c -o -m -e -. - - - - - - -D -i -s -t -r -i -c -t - -o -f - -C -o -l -u -m -b -i -a - -f -i -r -s -t -- -t -i -m -e - - - - -h -o -m -e -b -u -y -e -r - -c -r -e -d -i -t -. - - - - -A -l -t -e -r -n -a -t -i -v -e - -m -i -n -i -m -u -m - -t -a -x - -( -A -M -T -) - - - - -e -x -e -m -p -t -i -o -n - -a -m -o -u -n -t - -d -e -c -r -e -a -s -e -d -. - -T -h -e - - - - -A -M -T - -e -x -e -m -p -t -i -o -n - -a -m -o -u -n -t - -i -s - -d -e -c -r -e -a -s -e -d - -t -o - - - - -$ -3 -3 -, -7 -5 -0 - -( -$ -4 -5 -, -0 -0 -0 - -i -f - -a - -q -u -a -l -i -f -y -i -n -g - - - - -w -i -d -o -w -( -e -r -) -; - -$ -2 -2 -, -5 -0 -0 - -i -f - -m -a -r -r -i -e -d - -f -i -l -i -n -g - - - - -s -e -p -a -r -a -t -e -l -y -) -. - - - - - - - -F -o -r - - - - - - - -I -f - -y -o -u - -a -r -e - - - - - - -2 -0 -0 -7 - -i -s - -i -n -c -r -e -a -s -e -d - -t -o - -6 -% -. - - - - -U -n -r -e -p -o -r -t -e -d - -s -o -c -i -a -l - -s -e -c -u -r -i -t -y - -a -n -d - - - - -M -e -d -i -c -a -r -e - -t -a -x - -o -n - -w -a -g -e -s -. - - - - -a -n - -e -m -p -l -o -y -e -e - -a -n -d - -y -o -u -r - -e -m -p -l -o -y -e -r - -d -i -d - -n -o -t - - - - -w -i -t -h -h -o -l -d - -s -o -c -i -a -l - -s -e -c -u -r -i -t -y - -a -n -d - -M -e -d -i -c -a -r -e - - - - -t -a -x -, - -s -e -e - -F -o -r -m - -8 -9 -1 -9 - -t -o - -f -i -g -u -r -e - -a -n -d - -r -e -p -o -r -t - - - - -t -h -i -s - -t -a -x -. - - - - -R -e -f -u -n -d -a -b -l -e - -c -r -e -d -i -t - -f -o -r - -p -r -i -o -r -- -y -e -a -r - - - - -m -i -n -i -m -u -m - -t -a -x -. - - - - -I -f - -y -o -u - -h -a -v -e - -a -n - -u -n -u -s -e -d - - - - -m -i -n -i -m -u -m - -t -a -x - -c -r -e -d -i -t - -c -a -r -r -y -f -o -r -w -a -r -d - -f -r -o -m - - - - -2 -0 -0 -4 -, - -s -e -e - -F -o -r -m - -8 -8 -0 -1 - -t -o - -f -i -n -d - -i -f - -y -o -u - -c -a -n - - - - -t -a -k -e - -t -h -i -s - -c -r -e -d -i -t -. - - - - -H -e -a -l -t -h - -s -a -v -i -n -g -s - -a -c -c -o -u -n -t - -( -H -S -A -) - - - - -f -u -n -d -i -n -g - -d -i -s -t -r -i -b -u -t -i -o -n -s -. - -Y -o -u - -m -a -y - -b -e - - - - -a -b -l -e - -t -o - -e -l -e -c -t - -t -o - -e -x -c -l -u -d -e - -f -r -o -m - -i -n -c -o -m -e - -a - - - - -d -i -s -t -r -i -b -u -t -i -o -n - -m -a -d -e - -f -r -o -m - -y -o -u -r - -I -R -A - -t -o - -y -o -u -r - - - - -H -S -A -. - -S -e -e - -t -h -e - -i -n -s -t -r -u -c -t -i -o -n -s - -f -o -r - -l -i -n -e -s - -1 -6 -a - - - - -a -n -d - -1 -6 -b - -b -e -g -i -n -n -i -n -g - -o -n - -p -a -g -e - -1 -2 -. - - - - -N -e -w - -r -e -c -o -r -d -k -e -e -p -i -n -g - -r -e -q -u -i -r -e -m -e -n -t -s - -f -o -r - - - - -c -o -n -t -r -i -b -u -t -i -o -n -s - -o -f - -m -o -n -e -y -. - - - - -c -h -a -r -i -t -a -b -l -e - -c -o -n -t -r -i -b -u -t -i -o -n -s - -o -f - -m -o -n -e -y -, - - - - -r -e -g -a -r -d -l -e -s -s - -o -f - -t -h -e - -a -m -o -u -n -t -, - -y -o -u - -m -u -s -t - - - - -m -a -i -n -t -a -i -n - -a -s - -a - -r -e -c -o -r -d - -o -f - -t -h -e - -c -o -n -t -r -i -b -u -t -i -o -n - - - - -a - -b -a -n -k - -r -e -c -o -r -d - -( -s -u -c -h - -a -s - -a - -c -a -n -c -e -l -l -e -d - - - - -c -h -e -c -k -) - -o -r - -a - -w -r -i -t -t -e -n - -r -e -c -o -r -d - -f -r -o -m - -t -h -e - - - - -c -h -a -r -i -t -y -. - -T -h -e - -w -r -i -t -t -e -n - -r -e -c -o -r -d - -m -u -s -t - -i -n -c -l -u -d -e - - - - -t -h -e - -n -a -m -e - -o -f - -t -h -e - -c -h -a -r -i -t -y -, - -d -a -t -e -, - -a -n -d - - - - -a -m -o -u -n -t - -o -f - -t -h -e - -c -o -n -t -r -i -b -u -t -i -o -n -. - -S -e -e - -G -i -f -t -s - -t -o - - - - -U -. -S -. - -C -h -a -r -i -t -i -e -s - -t -h -a -t - -b -e -g -i -n -s - -o -n - -p -a -g -e - -2 -6 -. - - - - -E -x -e -m -p -t -i -o -n - -f -o -r - -h -o -u -s -i -n -g - -a - -p -e -r -s -o -n - - - - -d -i -s -p -l -a -c -e -d - -b -y - -H -u -r -r -i -c -a -n -e - -K -a -t -r -i -n -a - - - - -e -x -p -i -r -e -s -. - -T -h -e - -a -d -d -i -t -i -o -n -a -l - -e -x -e -m -p -t -i -o -n - - - - -a -m -o -u -n -t - -f -o -r - -h -o -u -s -i -n -g - -a - -p -e -r -s -o -n - -d -i -s -p -l -a -c -e -d - - - - -b -y - -H -u -r -r -i -c -a -n -e - -K -a -t -r -i -n -a - -d -o -e -s - -n -o -t - -a -p -p -l -y - -f -o -r - - - - -2 -0 -0 -7 - -o -r - -l -a -t -e -r - -y -e -a -r -s -. - - - - -T -e -l -e -p -h -o -n -e - -e -x -c -i -s -e - -t -a -x - -c -r -e -d -i -t -. - - - - -c -r -e -d -i -t - -w -a -s - -a -v -a -i -l -a -b -l -e - -o -n -l -y - -o -n - -y -o -u -r - -2 -0 -0 -6 - - - - -r -e -t -u -r -n -. - -I -f - -y -o -u - -f -i -l -e -d - -b -u -t - -d -i -d - -n -o -t - -r -e -q -u -e -s -t - -i -t - - - - -o -n - -y -o -u -r - -2 -0 -0 -6 - -r -e -t -u -r -n -, - -f -i -l -e - -F -o -r -m - -1 -0 -4 -0 -X - - - - -u -s -i -n -g - -a - -s -i -m -p -l -i -f -i -e -d - -p -r -o -c -e -d -u -r -e - -e -x -p -l -a -i -n -e -d - - - - -i -n - -i -t -s - -i -n -s -t -r -u -c -t -i -o -n -s - -t -o - -a -m -e -n -d - -y -o -u -r - -2 -0 -0 -6 - - - - -r -e -t -u -r -n -. - -I -f - -y -o -u - -w -e -r -e - -n -o -t - -r -e -q -u -i -r -e -d - -t -o - -f -i -l -e - -a - - - - -2 -0 -0 -6 - -r -e -t -u -r -n -, - -s -e -e - -t -h -e - -2 -0 -0 -6 - -F -o -r -m - - - - -1 -0 -4 -0 -E -Z -- -T -. - - - - -W -h -a -t - -s - -N -e -w - -f -o -r - -2 -0 -0 -8 - - - - -I -R -A - -d -e -d -u -c -t -i -o -n - -e -x -p -a -n -d -e -d -. - -Y -o -u - -m -a -y - - - - -b -e - -a -b -l -e - -t -o - -d -e -d -u -c -t - -u -p - -t -o - -$ -5 -, -0 -0 -0 - -( -$ -6 -, -0 -0 -0 - - - - -i -f - -a -g -e - -5 -0 - -o -r - -o -l -d -e -r - -a -t - -t -h -e - -e -n -d - -o -f - -t -h -e - - - - -y -e -a -r -) -. - -Y -o -u - -m -a -y - -b -e - -a -b -l -e - -t -o - -t -a -k -e - -a -n - -I -R -A - - - - -d -e -d -u -c -t -i -o -n - -i -f - -y -o -u - -w -e -r -e - -c -o -v -e -r -e -d - -b -y - -a - - - - - - - -T -h -i -s - - - - - - -C -a -t -. - -N -o -. - -1 -1 -3 -6 -8 -V - - - - - - -! - - - - - - -A -t - -t -h -e - -t -i -m -e - -t -h -e -s -e - -i -n -s -t -r -u -c -t -i -o -n -s - - - - -w -e -n -t - -t -o - -p -r -i -n -t -, - -C -o -n -g -r -e -s -s - -w -a -s - - - - -c -o -n -s -i -d -e -r -i -n -g - -l -e -g -i -s -l -a -t -i -o -n - -t -h -a -t - - - - - - -C -A -U -T -I -O -N - - - - -w -o -u -l -d - -i -n -c -r -e -a -s -e - -t -h -e - -a -m -o -u -n -t -s - -a -b -o -v -e -. - -T -o - - - - -f -i -n -d - -o -u -t - -i -f - -t -h -i -s - -l -e -g -i -s -l -a -t -i -o -n - -w -a -s - -e -n -a -c -t -e -d -, - - - - -a -n -d - -f -o -r - -m -o -r -e - -d -e -t -a -i -l -s -, - -s -e -e - -t -h -e - - - - -I -n -s -t -r -u -c -t -i -o -n -s - -f -o -r - -F -o -r -m - -6 -2 -5 -1 -. - - - - -I -R -A - -d -e -d -u -c -t -i -o -n - -e -x -p -a -n -d -e -d -. - - - - -c -o -v -e -r -e -d - -b -y - -a - -r -e -t -i -r -e -m -e -n -t - -p -l -a -n -, - -y -o -u - -m -a -y - - - - -b -e - -a -b -l -e - -t -o - -t -a -k -e - -a -n - -I -R -A - -d -e -d -u -c -t -i -o -n - -i -f - -y -o -u -r - - - - -2 -0 -0 -7 - -m -o -d -i -f -i -e -d - -a -d -j -u -s -t -e -d - -g -r -o -s -s - -i -n -c -o -m -e - - - - -( -A -G -I -) - -i -s - -l -e -s -s - -t -h -a -n - -$ -6 -2 -, -0 -0 -0 - -( -$ -1 -0 -3 -, -0 -0 -0 - -i -f - - - - -a - -q -u -a -l -i -f -y -i -n -g - -w -i -d -o -w -( -e -r -) -) -. - - - - - - -I -f - -y -o -u - -w -e -r -e - - - - - - -Y -o -u - -m -a -y - -b -e - -a -b -l -e - -t -o - -d -e -d -u -c -t - -u -p - -t -o - -a -n - - - - - - -a -d -d -i -t -i -o -n -a -l - -$ -3 -, -0 -0 -0 - -i -f - -y -o -u - -w -e -r -e - -a - - - - -p -a -r -t -i -c -i -p -a -n -t - -i -n - -a - -4 -0 -1 -( -k -) - -p -l -a -n - -a -n -d - -y -o -u -r - - - - -e -m -p -l -o -y -e -r - -w -a -s - -i -n - -b -a -n -k -r -u -p -t -c -y - -i -n - -a -n - - - - -e -a -r -l -i -e -r - -y -e -a -r -. - - - - -S -t -a -n -d -a -r -d - -m -i -l -e -a -g -e - -r -a -t -e -s -. - -T -h -e - -2 -0 -0 -7 - - - - -r -a -t -e - -f -o -r - -b -u -s -i -n -e -s -s - -u -s -e - -o -f - -y -o -u -r - -v -e -h -i -c -l -e - -i -s - - - - -4 -8 -1 -/ -2 - -c -e -n -t -s - -a - -m -i -l -e -. - -T -h -e - -2 -0 -0 -7 - -r -a -t -e - -f -o -r - - - - -u -s -e - -o -f - -y -o -u -r - -v -e -h -i -c -l -e - -t -o - -m -o -v -e - -i -s - -2 -0 - -c -e -n -t -s - - - - -a - -m -i -l -e -. - -T -h -e - -s -p -e -c -i -a -l - -r -a -t -e - -f -o -r - -c -h -a -r -i -t -a -b -l -e - - - - -u -s -e - -o -f - -y -o -u -r - -v -e -h -i -c -l -e - -t -o - -p -r -o -v -i -d -e - -r -e -l -i -e -f - - - - -r -e -l -a -t -e -d - -t -o - -H -u -r -r -i -c -a -n -e - -K -a -t -r -i -n -a - -h -a -s - - - - -e -x -p -i -r -e -d -. - - - - -E -l -e -c -t -i -v -e - -s -a -l -a -r -y - -d -e -f -e -r -r -a -l -s -. - -T -h -e - - - - -m -a -x -i -m -u -m - -a -m -o -u -n -t - -y -o -u - -c -a -n - -d -e -f -e -r - -u -n -d -e -r - - - - -a -l -l - -p -l -a -n -s - -i -s - -g -e -n -e -r -a -l -l -y - -l -i -m -i -t -e -d - -t -o - -$ -1 -5 -, -5 -0 -0 - - - - -( -$ -1 -0 -, -5 -0 -0 - -i -f - -y -o -u - -o -n -l -y - -h -a -v -e - -S -I -M -P -L -E - - - - -p -l -a -n -s -; - -$ -1 -8 -, -5 -0 -0 - -f -o -r - -s -e -c -t -i -o -n - -4 -0 -3 -( -b -) - -p -l -a -n -s - - - - -i -f - -y -o -u - -q -u -a -l -i -f -y - -f -o -r - -t -h -e - -1 -5 -- -y -e -a -r - -r -u -l -e -) -. - -S -e -e - - - - -t -h -e - -i -n -s -t -r -u -c -t -i -o -n -s - -f -o -r - -l -i -n -e - -8 - -o -n - -p -a -g -e - -1 -0 -. - - - - -M -a -i -l -i -n -g - -y -o -u -r - -r -e -t -u -r -n -. - - - - - -I -f - -y -o -u - -a -r -e - -f -i -l -i -n -g - - - - -t -h -e - -r -e -t -u -r -n - -f -o -r - -a -n - -e -s -t -a -t -e - -o -r - -t -r -u -s -t -, - -y -o -u - -w -i -l -l - - - - - - -D -e -p -a -r -t -m -e -n -t - -o -f - -t -h -e - -T -r -e -a -s -u -r -y - - - - -I -n -t -e -r -n -a -l - -R -e -v -e -n -u -e - -S -e -r -v -i -c -e - - - - - - -r -e -t -i -r -e -m -e -n -t - -p -l -a -n - -a -n -d - -y -o -u -r - -2 -0 -0 -8 - -m -o -d -i -f -i -e -d - - - - -A -G -I - -i -s - -l -e -s -s - -t -h -a -n - -$ -6 -3 -, -0 -0 -0 - -( -$ -1 -0 -5 -, -0 -0 -0 -) - -i -f - -a - - - - -q -u -a -l -i -f -y -i -n -g - -w -i -d -o -w -( -e -r -) -) -. - - - - - - -Y -o -u - -m -a -y - -b -e - -a -b -l -e - -t -o - -d -e -d -u -c -t - -u -p - -t -o - -a -n - - - - - - -a -d -d -i -t -i -o -n -a -l - -$ -3 -, -0 -0 -0 - -i -f - -y -o -u - -w -e -r -e - -a - - - - -p -a -r -t -i -c -i -p -a -n -t - -i -n - -a - -4 -0 -1 -( -k -) - -p -l -a -n - -a -n -d - -y -o -u -r - - - - -e -m -p -l -o -y -e -r - -w -a -s - -i -n - -b -a -n -k -r -u -p -t -c -y - -i -n - -a -n - - - - -e -a -r -l -i -e -r - -y -e -a -r -. - - - - -P -e -r -s -o -n -a -l - -e -x -e -m -p -t -i -o -n - -a -n -d - -i -t -e -m -i -z -e -d - - - - -d -e -d -u -c -t -i -o -n - -p -h -a -s -e -o -u -t -s - -r -e -d -u -c -e -d -. - - - - -T -a -x -p -a -y -e -r -s - -w -i -t -h - -a -d -j -u -s -t -e -d - -g -r -o -s -s - -i -n -c -o -m -e - - - - -a -b -o -v -e - -a - -c -e -r -t -a -i -n - -a -m -o -u -n -t - -m -a -y - -l -o -s -e - -p -a -r -t - - - - -o -f - -t -h -e -i -r - -d -e -d -u -c -t -i -o -n - -f -o -r - -p -e -r -s -o -n -a -l - - - - -e -x -e -m -p -t -i -o -n -s - -a -n -d - -i -t -e -m -i -z -e -d - -d -e -d -u -c -t -i -o -n -s -. - - - - -T -h -e - -a -m -o -u -n -t - -b -y - -w -h -i -c -h - -t -h -e -s -e - -d -e -d -u -c -t -i -o -n -s - - - - -a -r -e - -r -e -d -u -c -e -d - -i -n - -2 -0 -0 -8 - -w -i -l -l - -b -e - -o -n -l -y - -1 -/ -2 - -o -f - - - - -t -h -e - -a -m -o -u -n -t - -o -f - -t -h -e - -r -e -d -u -c -t -i -o -n - -t -h -a -t - - - - -o -t -h -e -r -w -i -s -e - -w -o -u -l -d - -h -a -v -e - -a -p -p -l -i -e -d - -i -n - -2 -0 -0 -7 -. - - - - -C -a -p -i -t -a -l - -g -a -i -n - -t -a -x - -r -a -t -e - -r -e -d -u -c -e -d -. - - - - - -T -h -e - - - - -5 -% - -c -a -p -i -t -a -l - -g -a -i -n - -t -a -x - -r -a -t -e - -i -s - -r -e -d -u -c -e -d - -t -o - - - - -z -e -r -o -. - - - - -T -a -x - -o -n - -c -h -i -l -d -r -e -n - -s - -i -n -c -o -m -e -. - - - - -8 -6 -1 -5 - -w -i -l -l - -b -e - -r -e -q -u -i -r -e -d - -t -o - -f -i -g -u -r -e - -t -h -e - -t -a -x - - - - -f -o -r - -t -h -e - -f -o -l -l -o -w -i -n -g - -c -h -i -l -d -r -e -n - -w -i -t -h - - - - -i -n -v -e -s -t -m -e -n -t - -i -n -c -o -m -e - -o -f - -m -o -r -e - -t -h -a -n - - - - -$ -1 -, -8 -0 -0 -. - - - - - - - -F -o -r -m - - - - - - -1 -. - -C -h -i -l -d -r -e -n - -u -n -d -e -r - -a -g -e - -1 -8 - -a -t - -t -h -e - -e -n -d - - - - - - -o -f - -2 -0 -0 -8 -. - - - - - - -2 -. - -T -h -e - -f -o -l -l -o -w -i -n -g - -c -h -i -l -d -r -e -n - -i -f - -t -h -e -i -r - - - - - - -e -a -r -n -e -d - -i -n -c -o -m -e - -i -s - -n -o -t - -m -o -r -e - -t -h -a -n - -h -a -l -f - - - - -t -h -e -i -r - -s -u -p -p -o -r -t -. - - - - - - -a -. - -C -h -i -l -d -r -e -n - -a -g -e - -1 -8 - -a -t - -t -h -e - -e -n -d - -o -f - - - - - - -2 -0 -0 -8 -. - - - - - - -b -. - -C -h -i -l -d -r -e -n - -o -v -e -r - -a -g -e - -1 -8 - -a -n -d - -u -n -d -e -r - - - - - - -a -g -e - -2 -4 - -a -t - -t -h -e - -e -n -d - -o -f - -2 -0 -0 -8 - -w -h -o - -a -r -e - - - - -f -u -l -l -- -t -i -m -e - -s -t -u -d -e -n -t -s -. - - - - -T -h -e - -e -l -e -c -t -i -o -n - -t -o - -r -e -p -o -r -t - -a - -c -h -i -l -d - -s - - - - -i -n -v -e -s -t -m -e -n -t - -i -n -c -o -m -e - -o -n - -a - -p -a -r -e -n -t - -s - -r -e -t -u -r -n - - - - -a -n -d - -t -h -e - -s -p -e -c -i -a -l - -r -u -l -e - -f -o -r - -w -h -e -n - -a - -c -h -i -l -d - - - - -m -u -s -t - -f -i -l -e - -F -o -r -m - -6 -2 -5 -1 - -w -i -l -l - -a -l -s -o - -a -p -p -l -y - -t -o - - - - -t -h -e - -c -h -i -l -d -r -e -n - -l -i -s -t -e -d - -a -b -o -v -e -. - - - - -E -x -p -i -r -i -n -g - -t -a -x - -b -e -n -e -f -i -t -s -. - -T -h -e - -f -o -l -l -o -w -i -n -g - - - - -b -e -n -e -f -i -t -s - -a -r -e - -s -c -h -e -d -u -l -e -d - -t -o - -e -x -p -i -r -e - -a -n -d - - - - -w -i -l -l - -n -o -t - -a -p -p -l -y - -f -o -r - -2 -0 -0 -8 -. - - - - - - -D -e -d -u -c -t -i -o -n - -f -o -r - -e -d -u -c -a -t -o -r - -e -x -p -e -n -s -e -s - -i -n - - - - -f -i -g -u -r -i -n -g - -a -d -j -u -s -t -e -d - -g -r -o -s -s - -i -n -c -o -m -e -. - - - - - - -T -h -e - -e -x -c -l -u -s -i -o -n - -f -r -o -m - -i -n -c -o -m -e - -o -f - - - - -q -u -a -l -i -f -i -e -d - -c -h -a -r -i -t -a -b -l -e - -d -e -d -u -c -t -i -o -n -s -. - - - - - - -C -r -e -d -i -t - -f -o -r - -n -o -n -b -u -s -i -n -e -s -s - -e -n -e -r -g -y - - - - -p -r -o -p -e -r -t -y -. - - - - - - -D -i -s -t -r -i -c -t - -o -f - -C -o -l -u -m -b -i -a - -f -i -r -s -t -- -t -i -m -e - - - - -h -o -m -e -b -u -y -e -r - -c -r -e -d -i -t - -( -f -o -r - -h -o -m -e -s - - - - -p -u -r -c -h -a -s -e -d - -a -f -t -e -r - -2 -0 -0 -7 -) -. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/nonfree/kampo.html.ref b/samples/nonfree/kampo.html.ref deleted file mode 100644 index 201b96c..0000000 --- a/samples/nonfree/kampo.html.ref +++ /dev/null @@ -1,113 +0,0 @@ - - - - - -
平成 ™— ™œ 日 金曜日 -
官 -
報 -
›Ÿ˜ž 号 -
› -
政令第百四十九号 -
道路交通法施行令の一部を改正する政令 -
内閣は道路交通法の一部を改正する法律平成十九年法律第九十号の一部の施行に伴い並び -
に道路交通法昭和三十五年法律第百五号第四条第一項及び第四項第五条第一項第三十九条第 -
一項第五十一条第九項同条第二十二項同法第七十二条の二第三項及び第七十五条の八第二項に -
おいて準用する場合を含む。)、第五十一条の三第一項第六十三条の四第一項第二号第七十一条の -
三第二項ただし書第七十一条の六第一項第九十条第一項ただし書第百条の二第一項本文及び第 -
四号第百二条の二並びに第百二十五条第一項及び第三項の規定に基づきこの政令を制定する。 -
道路交通法施行令昭和三十五年政令第二百七十号の一部を次のように改正する。 -
第一条の二第四項第三号中一・五メトル一メトルに改め同条第五項第三号中第 -
六十三条の四第一項第六十三条の四第一項第一号に改める。 -
第二条第一項の表の青色の灯火の項第三号中含む。)」含む青色の灯火の矢印の項を除き、 -
「 -
歩行者は進行することができること。 -
以下この条において同じ。)に改め同表中 -
歩行者は道路の横断を始めてはならずまた道 -
横断を終わるか又は横断をやめて引き返さなけれ -
一の五 医療機関が傷病者の緊急搬送をしようとする都道府県又は市町村の要請を受けて当該 -
傷病者が医療機関に緊急搬送をされるまでの間における応急の治療を行う医師を当該傷病者の所 -
在する場所にまで運搬するために使用する自動車 -
第十六条中第二号を削り第三号を第二号とする。 -
第十六条の二及び第十六条の三中第五十一条第十一項第五十一条第十二項に改める。 -
第十六条の五中第五十一条第二十項第五十一条第二十一項に改める。 -
第十七条中第五十一条第二十一項第五十一条第二十二項に改め、「「とあるのは前 -
号の公示に係る積載物のうち特に貴重と認められるものについては同号同条第三号中を削 -
。 -
第十七条の二を次のように改める。 -
委託することのできない事務) -
第十七条の二 法第五十一条の三第一項の政令で定めるものは次に掲げるとおりとする。 -
一 法第五十一条第五項の規定による車両の移動の決定 -
二 法第五十一条第六項同条第二十二項において準用する場合を含む。)の規定により保管した車 -
積載物を含む以下この条において同じ。)の返還の決定 -
三 法第五十一条第七項同条第二十二項において読み替えて準用する場合を含む。)又は第八項の -
規定による告知 -
歩行者は道路を横断してはならないこと。 -
四 法第五十一条第九項同条第二十二項において読み替えて準用する場合を含む。)の規定による -
「 -
一 歩行者は進行することができること。 -
二 普通自転車法第六十三条の三に規定す -
号において同じ。)横断歩道において直 -
路を横断している歩行者はすみやかにその -
ばならないこと
。 -
を -
」 -
一 歩行者は道路の横断を始めてはならず、 -
横断を終わるか又は横断をやめて引き返 -
二 横断歩道を進行しようとする普通自転車 -
一 歩行者は道路を横断してはならないこ -
二 横断歩道を進行しようとする普通自転車 -
る普通自転車をいう以下この条及び第二十六条第三 -
進をし
又は左折することができること。 -
また道路を横断している歩行者は速やかにその -
さなければならないこと
。 -
道路の横断を始めてはならないこと。 -
に改め同条第四項の表の人の形の記号を有 -
。 -
道路の横断を始めてはならないこと。 -
」 -
する青色の灯火の項第二号中直進右折しようとして右折する地点まで直進しその地点において -
右折することを含む。)直進をしに改める。 -
第三条の二第一項中行なわせる行わせる、「次の各号に次に、「こえないを -
超えないに改め第十号を第十二号とし第四号から第九号までを二号ずつ繰り下げ第三号を -
第四号とし同号の次に次の一号を加える。 -
五 法第二十五条の二第二項の道路標識等 -
第三条の二第一項第二号の次に次の一号を加える
。 -
三 法第十三条第二項の道路標識等 -
第十三条第一項中第一号の五を第一号の六とし
第一号の四の次に次の一号を加える。 -
公示 -
五 法第五十一条第十項同条第二十二項において準用する場合を含む。)の規定による公示の日付 -
及び内容の公表 -
六 法第五十一条第十二項同条第二十二項において読み替えて準用する場合を含む。)の規定によ -
る車両の売却の決定 -
七 法第五十一条第十三項同条第二十二項において準用する場合を含む。)規定による車両の廃 -
棄の決定 -
八 法第五十一条第十六項同条第二十二項において読み替えて準用する場合を含む。)の規定によ -
る命令 -
九 法第五十一条第十七項同条第二十二項において準用する場合を含む。)規定による督促 -
十 法第五十一条第十八項同条第二十二項において準用する場合を含む。)規定による徴収 -
十一 法第五十一条第二十一項の規定による登録の嘱託 -
第十七条の三を削り第十七条の四を第十七条の三とし第十七条の五から第十七条の八までを一 -
条ずつ繰り上げる。 -
第二十二条第一号中乗車装置以下下にこの条においてを加える。 -
第二十四条の二中第二十六条第二十五条の二に改める。 -
第二十六条を第二十五条の二とし第三章中同条の次に次の一条を加える。 -
普通自転車により歩道を通行することができる者) -
第二十六条 法第六十三条の四第一項第二号の政令で定める者は次に掲げるとおりとする。 -
一 児童及び幼児 -
二 七十歳以上の者 -
三 普通自転車により安全に車道を通行す
ることに支障を生ずる程度の身体の障害として内閣府令 -
で定めるものを有する者 -
第二十六条の三の二第一項第四号中次項第三号次項第四号に改め同項第七号中次項 -
第六号次項第七号に改め同条第二項第七号中の横以外に改同号を同項第八 -
号とし同項第六号中の横以外改め同号を同項第七号とし同項第五号中の横を -
以外に改め同号を同項第六号とし項第四号中の横以外に改同号を同項第五 -
号とし同項第三号中の横以外改め同号を同項第四号とし同項第二号中の横を -
以外に改め同号を同項第三号とし項第一号中の横以外に改同号を同項第二 -
号とし同項に第一号として次の一号を加え。 -
- - - -
Page: 1
- diff --git a/samples/nonfree/kampo.txt.ref b/samples/nonfree/kampo.txt.ref deleted file mode 100644 index 936dc0b..0000000 --- a/samples/nonfree/kampo.txt.ref +++ /dev/null @@ -1,157 +0,0 @@ -平成 ™— 年 › 月 ™œ 日 金曜日 - -官 - -報 - -第 ›Ÿ˜ž 号 - -› - -政令第百四十九号 - -道路交通法施行令の一部を改正する政令 - -内閣は、道路交通法の一部を改正する法律(平成十九年法律第九十号)の一部の施行に伴い、並び -に道路交通法(昭和三十五年法律第百五号)第四条第一項及び第四項、第五条第一項、第三十九条第 -一項、第五十一条第九項(同条第二十二項、同法第七十二条の二第三項及び第七十五条の八第二項に -おいて準用する場合を含む。)、第五十一条の三第一項、第六十三条の四第一項第二号、第七十一条の -三第二項ただし書、第七十一条の六第一項、第九十条第一項ただし書、第百条の二第一項本文及び第 -四号、第百二条の二並びに第百二十五条第一項及び第三項の規定に基づき、この政令を制定する。 - -道路交通法施行令(昭和三十五年政令第二百七十号)の一部を次のように改正する。 -第一条の二第四項第三号中「一・五メートル」を「一メートル」に改め、同条第五項第三号中「第 - -六十三条の四第一項」を「第六十三条の四第一項第一号」に改める。 - -第二条第一項の表の青色の灯火の項第三号中「含む。)」を「含む。青色の灯火の矢印の項を除き、 - -「 - -歩行者は、進行することができること。 - -以下この条において同じ。)を」に改め、同表中 - -歩行者は、道路の横断を始めてはならず、また、道 -横断を終わるか、又は横断をやめて引き返さなけれ - -一の五 医療機関が、傷病者の緊急搬送をしようとする都道府県又は市町村の要請を受けて、当該 -傷病者が医療機関に緊急搬送をされるまでの間における応急の治療を行う医師を当該傷病者の所 -在する場所にまで運搬するために使用する自動車 -第十六条中第二号を削り、第三号を第二号とする。 -第十六条の二及び第十六条の三中「第五十一条第十一項」を「第五十一条第十二項」に改める。 -第十六条の五中「第五十一条第二十項」を「第五十一条第二十一項」に改める。 -第十七条中「第五十一条第二十一項」を「第五十一条第二十二項」に改め、「「前号」とあるのは「前 -号の公示に係る積載物のうち特に貴重と認められるものについては、同号」と、同条第三号中」を削 -る。 - -第十七条の二を次のように改める。 -(委託することのできない事務) - -第十七条の二 法第五十一条の三第一項の政令で定めるものは、次に掲げるとおりとする。 - -一 法第五十一条第五項の規定による車両の移動の決定 -二 法第五十一条第六項(同条第二十二項において準用する場合を含む。)の規定により保管した車 - -両(積載物を含む。以下この条において同じ。)の返還の決定 - -三 法第五十一条第七項(同条第二十二項において読み替えて準用する場合を含む。)又は第八項の - -規定による告知 - -歩行者は、道路を横断してはならないこと。 - -四 法第五十一条第九項(同条第二十二項において読み替えて準用する場合を含む。)の規定による - -「 - -一 歩行者は、進行することができること。 -二 普通自転車(法第六十三条の三に規定す -号において同じ。)は、横断歩道において直 - -路を横断している歩行者は、すみやかに、その -ばならないこと。 - -を - -」 - -一 歩行者は、道路の横断を始めてはならず、 -横断を終わるか、又は横断をやめて引き返 -二 横断歩道を進行しようとする普通自転車 - -一 歩行者は、道路を横断してはならないこ -二 横断歩道を進行しようとする普通自転車 - -る普通自転車をいう。以下この条及び第二十六条第三 -進をし、又は左折することができること。 - -また、道路を横断している歩行者は、速やかに、その -さなければならないこと。 -は、道路の横断を始めてはならないこと。 - -に改め、同条第四項の表の人の形の記号を有 - -と。 -は、道路の横断を始めてはならないこと。 - -」 - -する青色の灯火の項第二号中「直進(右折しようとして右折する地点まで直進し、その地点において -右折することを含む。)し」を「直進をし」に改める。 - -第三条の二第一項中「行なわせる」を「行わせる」に、「次の各号に」を「次に」に、「こえない」を -「超えない」に改め、第十号を第十二号とし、第四号から第九号までを二号ずつ繰り下げ、第三号を -第四号とし、同号の次に次の一号を加える。 -五 法第二十五条の二第二項の道路標識等 -第三条の二第一項第二号の次に次の一号を加える。 -三 法第十三条第二項の道路標識等 -第十三条第一項中第一号の五を第一号の六とし、第一号の四の次に次の一号を加える。 - -公示 - -五 法第五十一条第十項(同条第二十二項において準用する場合を含む。)の規定による公示の日付 - -及び内容の公表 - -六 法第五十一条第十二項(同条第二十二項において読み替えて準用する場合を含む。)の規定によ - -る車両の売却の決定 - -七 法第五十一条第十三項(同条第二十二項において準用する場合を含む。)の規定による車両の廃 - -棄の決定 - -八 法第五十一条第十六項(同条第二十二項において読み替えて準用する場合を含む。)の規定によ - -る命令 - -九 法第五十一条第十七項(同条第二十二項において準用する場合を含む。)の規定による督促 -十 法第五十一条第十八項(同条第二十二項において準用する場合を含む。)の規定による徴収 -十一 法第五十一条第二十一項の規定による登録の嘱託 -第十七条の三を削り、第十七条の四を第十七条の三とし、第十七条の五から第十七条の八までを一 - -条ずつ繰り上げる。 - -第二十二条第一号中「乗車装置(以下」の下に「この条において」を加える。 -第二十四条の二中「第二十六条」を「第二十五条の二」に改める。 -第二十六条を第二十五条の二とし、第三章中同条の次に次の一条を加える。 -(普通自転車により歩道を通行することができる者) - -第二十六条 法第六十三条の四第一項第二号の政令で定める者は、次に掲げるとおりとする。 - -一 児童及び幼児 -二 七十歳以上の者 -三 普通自転車により安全に車道を通行することに支障を生ずる程度の身体の障害として内閣府令 - -で定めるものを有する者 - -第二十六条の三の二第一項第四号中「次項第三号」を「次項第四号」に改め、同項第七号中「次項 -第六号」を「次項第七号」に改め、同条第二項第七号中「の横」を「以外」に改め、同号を同項第八 -号とし、同項第六号中「の横」を「以外」に改め、同号を同項第七号とし、同項第五号中「の横」を -「以外」に改め、同号を同項第六号とし、同項第四号中「の横」を「以外」に改め、同号を同項第五 -号とし、同項第三号中「の横」を「以外」に改め、同号を同項第四号とし、同項第二号中「の横」を -「以外」に改め、同号を同項第三号とし、同項第一号中「の横」を「以外」に改め、同号を同項第二 -号とし、同項に第一号として次の一号を加える。 - - \ No newline at end of file diff --git a/samples/nonfree/kampo.xml.ref b/samples/nonfree/kampo.xml.ref deleted file mode 100644 index 0c8d71a..0000000 --- a/samples/nonfree/kampo.xml.ref +++ /dev/null @@ -1,3356 +0,0 @@ - - - - - - - - - - - - - - - - - - -œ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Ÿ -˜ -ž - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -使 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/nonfree/naacl06-shinyama.html.ref b/samples/nonfree/naacl06-shinyama.html.ref deleted file mode 100644 index 9a7c59b..0000000 --- a/samples/nonfree/naacl06-shinyama.html.ref +++ /dev/null @@ -1,83 +0,0 @@ - - - - - -
Preemptive Information Extraction using Unrestricted Relation Discovery -
Yusuke Shinyama -
Satoshi Sekine -
New York University -
715, Broadway, 7th Floor -
New York, NY, 10003 -
{yusuke,sekine}@cs.nyu.edu -
Abstract -
We are trying to extend the boundary of -
Information Extraction (IE) systems. Ex- -
isting IE systems require a lot of time and -
human effort to tune for a new scenario. -
Preemptive Information Extraction is an -
attempt to automatically create all feasible -
IE systems in advance without human in- -
tervention. We propose a technique called -
Unrestricted Relation Discovery that dis- -
covers all possible relations from texts and -
presents them as tables. We present a pre- -
liminary system that obtains reasonably -
good results. -
1 Background -
Every day, a large number of news articles are cre- -
ated and reported, many of which are unique. But -
certain types of events, such as hurricanes or mur- -
ders, are reported again and again throughout a year. -
The goal of Information Extraction, or IE, is to re- -
trieve a certain type of news event from past articles -
and present the events as a table whose columns are -
filled with a name of a person or company, accord- -
ing to its role in the event. However, existing IE -
techniques require a lot of human labor. First, you -
have to specify the type of information you want and -
collect articles that include this information. Then, -
you have to analyze the articles and manually craft -
a set of patterns to capture these events. Most exist- -
ing IE research focuses on reducing this burden by -
helping people create such patterns. But each time -
you want to extract a different kind of information, -
you need to repeat the whole process: specify arti- -
cles and adjust its patterns, either manually or semi- -
automatically. There is a bit of a dangerous pitfall -
here. First, it is hard to estimate how good the sys- -
tem can be after months of work. Furthermore, you -
might not know if the task is even doable in the first -
place. Knowing what kind of information is easily -
obtained in advance would help reduce this risk. -
An IE task can be defined as finding a relation -
among several entities involved in a certain type of -
event. For example, in the MUC-6 management -
succession scenario, one seeks a relation between -
COMPANY, PERSON and POST involved with hir- -
ing/firing events. For each row of an extracted ta- -
ble, you can always read it as “COMPANY hired -
(or fired) PERSON for POST.” The relation between -
these entities is retained throughout the table. There -
are many existing works on obtaining extraction pat- -
terns for pre-defined relations (Riloff, 1996; Yangar- -
ber et al., 2000; Agichtein and Gravano, 2000; Sudo -
et al., 2003). -
Unrestricted Relation Discovery is a technique to -
automatically discover such relations that repeatedly -
appear in a corpus and present them as a table, with -
absolutely no human intervention. Unlike most ex- -
isting IE research, a user does not specify the type -
of articles or information wanted. Instead, a system -
tries to find all the kinds of relations that are reported -
multiple times and can be reported in tabular form. -
This technique will open up the possibility of try- -
ing new IE scenarios. Furthermore, the system itself -
can be used as an IE system, since an obtained re- -
lation is already presented as a table. If this system -
works to a certain extent, tuning an IE system be- -
comes a search problem: all the tables are already -
built “preemptively.” A user only needs to search -
for a relevant table. -
Page: 1
- diff --git a/samples/nonfree/naacl06-shinyama.txt.ref b/samples/nonfree/naacl06-shinyama.txt.ref deleted file mode 100644 index 79ac39c..0000000 --- a/samples/nonfree/naacl06-shinyama.txt.ref +++ /dev/null @@ -1,91 +0,0 @@ -Preemptive Information Extraction using Unrestricted Relation Discovery - -Yusuke Shinyama - -Satoshi Sekine - -New York University - -715, Broadway, 7th Floor - -New York, NY, 10003 - -{yusuke,sekine}@cs.nyu.edu - -Abstract - -We are trying to extend the boundary of -Information Extraction (IE) systems. Ex- -isting IE systems require a lot of time and -human effort to tune for a new scenario. -Preemptive Information Extraction is an -attempt to automatically create all feasible -IE systems in advance without human in- -tervention. We propose a technique called -Unrestricted Relation Discovery that dis- -covers all possible relations from texts and -presents them as tables. We present a pre- -liminary system that obtains reasonably -good results. - -1 Background - -Every day, a large number of news articles are cre- -ated and reported, many of which are unique. But -certain types of events, such as hurricanes or mur- -ders, are reported again and again throughout a year. -The goal of Information Extraction, or IE, is to re- -trieve a certain type of news event from past articles -and present the events as a table whose columns are -filled with a name of a person or company, accord- -ing to its role in the event. However, existing IE -techniques require a lot of human labor. First, you -have to specify the type of information you want and -collect articles that include this information. Then, -you have to analyze the articles and manually craft -a set of patterns to capture these events. Most exist- -ing IE research focuses on reducing this burden by -helping people create such patterns. But each time -you want to extract a different kind of information, -you need to repeat the whole process: specify arti- - -cles and adjust its patterns, either manually or semi- -automatically. There is a bit of a dangerous pitfall -here. First, it is hard to estimate how good the sys- -tem can be after months of work. Furthermore, you -might not know if the task is even doable in the first -place. Knowing what kind of information is easily -obtained in advance would help reduce this risk. - -An IE task can be defined as finding a relation -among several entities involved in a certain type of -event. For example, in the MUC-6 management -succession scenario, one seeks a relation between -COMPANY, PERSON and POST involved with hir- -ing/firing events. For each row of an extracted ta- -ble, you can always read it as “COMPANY hired -(or fired) PERSON for POST.” The relation between -these entities is retained throughout the table. There -are many existing works on obtaining extraction pat- -terns for pre-defined relations (Riloff, 1996; Yangar- -ber et al., 2000; Agichtein and Gravano, 2000; Sudo -et al., 2003). - -Unrestricted Relation Discovery is a technique to -automatically discover such relations that repeatedly -appear in a corpus and present them as a table, with -absolutely no human intervention. Unlike most ex- -isting IE research, a user does not specify the type -of articles or information wanted. Instead, a system -tries to find all the kinds of relations that are reported -multiple times and can be reported in tabular form. -This technique will open up the possibility of try- -ing new IE scenarios. Furthermore, the system itself -can be used as an IE system, since an obtained re- -lation is already presented as a table. If this system -works to a certain extent, tuning an IE system be- -comes a search problem: all the tables are already -built “preemptively.” A user only needs to search -for a relevant table. - - \ No newline at end of file diff --git a/samples/nonfree/naacl06-shinyama.xml.ref b/samples/nonfree/naacl06-shinyama.xml.ref deleted file mode 100644 index d3b13a1..0000000 --- a/samples/nonfree/naacl06-shinyama.xml.ref +++ /dev/null @@ -1,3763 +0,0 @@ - - - - - -P -r -e -e -m -p -t -i -v -e - -I -n -f -o -r -m -a -t -i -o -n - -E -x -t -r -a -c -t -i -o -n - -u -s -i -n -g - -U -n -r -e -s -t -r -i -c -t -e -d - -R -e -l -a -t -i -o -n - -D -i -s -c -o -v -e -r -y - - - - - - -Y -u -s -u -k -e - -S -h -i -n -y -a -m -a - - - - - - -S -a -t -o -s -h -i - -S -e -k -i -n -e - - - - - - -N -e -w - -Y -o -r -k - -U -n -i -v -e -r -s -i -t -y - - - - - - -7 -1 -5 -, - -B -r -o -a -d -w -a -y -, - -7 -t -h - -F -l -o -o -r - - - - - - -N -e -w - -Y -o -r -k -, - -N -Y -, - -1 -0 -0 -0 -3 - - - - - - -{ -y -u -s -u -k -e -, -s -e -k -i -n -e -} -@ -c -s -. -n -y -u -. -e -d -u - - - - - - -A -b -s -t -r -a -c -t - - - - - - -W -e - -a -r -e - -t -r -y -i -n -g - -t -o - -e -x -t -e -n -d - -t -h -e - -b -o -u -n -d -a -r -y - -o -f - - - - -I -n -f -o -r -m -a -t -i -o -n - -E -x -t -r -a -c -t -i -o -n - -( -I -E -) - -s -y -s -t -e -m -s -. - -E -x -- - - - - -i -s -t -i -n -g - -I -E - -s -y -s -t -e -m -s - -r -e -q -u -i -r -e - -a - -l -o -t - -o -f - -t -i -m -e - -a -n -d - - - - -h -u -m -a -n - -e -f -f -o -r -t - -t -o - -t -u -n -e - -f -o -r - -a - -n -e -w - -s -c -e -n -a -r -i -o -. - - - - -P -r -e -e -m -p -t -i -v -e - -I -n -f -o -r -m -a -t -i -o -n - -E -x -t -r -a -c -t -i -o -n - -i -s - -a -n - - - - -a -t -t -e -m -p -t - -t -o - -a -u -t -o -m -a -t -i -c -a -l -l -y - -c -r -e -a -t -e - -a -l -l - -f -e -a -s -i -b -l -e - - - - -I -E - -s -y -s -t -e -m -s - -i -n - -a -d -v -a -n -c -e - -w -i -t -h -o -u -t - -h -u -m -a -n - -i -n -- - - - - -t -e -r -v -e -n -t -i -o -n -. - -W -e - -p -r -o -p -o -s -e - -a - -t -e -c -h -n -i -q -u -e - -c -a -l -l -e -d - - - - -U -n -r -e -s -t -r -i -c -t -e -d - -R -e -l -a -t -i -o -n - -D -i -s -c -o -v -e -r -y - -t -h -a -t - -d -i -s -- - - - - -c -o -v -e -r -s - -a -l -l - -p -o -s -s -i -b -l -e - -r -e -l -a -t -i -o -n -s - -f -r -o -m - -t -e -x -t -s - -a -n -d - - - - -p -r -e -s -e -n -t -s - -t -h -e -m - -a -s - -t -a -b -l -e -s -. - -W -e - -p -r -e -s -e -n -t - -a - -p -r -e -- - - - - -l -i -m -i -n -a -r -y - -s -y -s -t -e -m - -t -h -a -t - -o -b -t -a -i -n -s - -r -e -a -s -o -n -a -b -l -y - - - - -g -o -o -d - -r -e -s -u -l -t -s -. - - - - - - -1 - -B -a -c -k -g -r -o -u -n -d - - - - - - -E -v -e -r -y - -d -a -y -, - -a - -l -a -r -g -e - -n -u -m -b -e -r - -o -f - -n -e -w -s - -a -r -t -i -c -l -e -s - -a -r -e - -c -r -e -- - - - - -a -t -e -d - -a -n -d - -r -e -p -o -r -t -e -d -, - -m -a -n -y - -o -f - -w -h -i -c -h - -a -r -e - -u -n -i -q -u -e -. - -B -u -t - - - - -c -e -r -t -a -i -n - -t -y -p -e -s - -o -f - -e -v -e -n -t -s -, - -s -u -c -h - -a -s - -h -u -r -r -i -c -a -n -e -s - -o -r - -m -u -r -- - - - - -d -e -r -s -, - -a -r -e - -r -e -p -o -r -t -e -d - -a -g -a -i -n - -a -n -d - -a -g -a -i -n - -t -h -r -o -u -g -h -o -u -t - -a - -y -e -a -r -. - - - - -T -h -e - -g -o -a -l - -o -f - -I -n -f -o -r -m -a -t -i -o -n - -E -x -t -r -a -c -t -i -o -n -, - -o -r - -I -E -, - -i -s - -t -o - -r -e -- - - - - -t -r -i -e -v -e - -a - -c -e -r -t -a -i -n - -t -y -p -e - -o -f - -n -e -w -s - -e -v -e -n -t - -f -r -o -m - -p -a -s -t - -a -r -t -i -c -l -e -s - - - - -a -n -d - -p -r -e -s -e -n -t - -t -h -e - -e -v -e -n -t -s - -a -s - -a - -t -a -b -l -e - -w -h -o -s -e - -c -o -l -u -m -n -s - -a -r -e - - - - - -l -l -e -d - -w -i -t -h - -a - -n -a -m -e - -o -f - -a - -p -e -r -s -o -n - -o -r - -c -o -m -p -a -n -y -, - -a -c -c -o -r -d -- - - - - -i -n -g - -t -o - -i -t -s - -r -o -l -e - -i -n - -t -h -e - -e -v -e -n -t -. - -H -o -w -e -v -e -r -, - -e -x -i -s -t -i -n -g - -I -E - - - - -t -e -c -h -n -i -q -u -e -s - -r -e -q -u -i -r -e - -a - -l -o -t - -o -f - -h -u -m -a -n - -l -a -b -o -r -. - -F -i -r -s -t -, - -y -o -u - - - - -h -a -v -e - -t -o - -s -p -e -c -i -f -y - -t -h -e - -t -y -p -e - -o -f - -i -n -f -o -r -m -a -t -i -o -n - -y -o -u - -w -a -n -t - -a -n -d - - - - -c -o -l -l -e -c -t - -a -r -t -i -c -l -e -s - -t -h -a -t - -i -n -c -l -u -d -e - -t -h -i -s - -i -n -f -o -r -m -a -t -i -o -n -. - -T -h -e -n -, - - - - -y -o -u - -h -a -v -e - -t -o - -a -n -a -l -y -z -e - -t -h -e - -a -r -t -i -c -l -e -s - -a -n -d - -m -a -n -u -a -l -l -y - -c -r -a -f -t - - - - -a - -s -e -t - -o -f - -p -a -t -t -e -r -n -s - -t -o - -c -a -p -t -u -r -e - -t -h -e -s -e - -e -v -e -n -t -s -. - -M -o -s -t - -e -x -i -s -t -- - - - - -i -n -g - -I -E - -r -e -s -e -a -r -c -h - -f -o -c -u -s -e -s - -o -n - -r -e -d -u -c -i -n -g - -t -h -i -s - -b -u -r -d -e -n - -b -y - - - - -h -e -l -p -i -n -g - -p -e -o -p -l -e - -c -r -e -a -t -e - -s -u -c -h - -p -a -t -t -e -r -n -s -. - -B -u -t - -e -a -c -h - -t -i -m -e - - - - -y -o -u - -w -a -n -t - -t -o - -e -x -t -r -a -c -t - -a - -d -i -f -f -e -r -e -n -t - -k -i -n -d - -o -f - -i -n -f -o -r -m -a -t -i -o -n -, - - - - -y -o -u - -n -e -e -d - -t -o - -r -e -p -e -a -t - -t -h -e - -w -h -o -l -e - -p -r -o -c -e -s -s -: - -s -p -e -c -i -f -y - -a -r -t -i -- - - - - - - -c -l -e -s - -a -n -d - -a -d -j -u -s -t - -i -t -s - -p -a -t -t -e -r -n -s -, - -e -i -t -h -e -r - -m -a -n -u -a -l -l -y - -o -r - -s -e -m -i -- - - - - -a -u -t -o -m -a -t -i -c -a -l -l -y -. - -T -h -e -r -e - -i -s - -a - -b -i -t - -o -f - -a - -d -a -n -g -e -r -o -u -s - -p -i -t -f -a -l -l - - - - -h -e -r -e -. - -F -i -r -s -t -, - -i -t - -i -s - -h -a -r -d - -t -o - -e -s -t -i -m -a -t -e - -h -o -w - -g -o -o -d - -t -h -e - -s -y -s -- - - - - -t -e -m - -c -a -n - -b -e - -a -f -t -e -r - -m -o -n -t -h -s - -o -f - -w -o -r -k -. - -F -u -r -t -h -e -r -m -o -r -e -, - -y -o -u - - - - -m -i -g -h -t - -n -o -t - -k -n -o -w - -i -f - -t -h -e - -t -a -s -k - -i -s - -e -v -e -n - -d -o -a -b -l -e - -i -n - -t -h -e - - -r -s -t - - - - -p -l -a -c -e -. - -K -n -o -w -i -n -g - -w -h -a -t - -k -i -n -d - -o -f - -i -n -f -o -r -m -a -t -i -o -n - -i -s - -e -a -s -i -l -y - - - - -o -b -t -a -i -n -e -d - -i -n - -a -d -v -a -n -c -e - -w -o -u -l -d - -h -e -l -p - -r -e -d -u -c -e - -t -h -i -s - -r -i -s -k -. - - - - - - -A -n - -I -E - -t -a -s -k - -c -a -n - -b -e - -d -e - -n -e -d - -a -s - - -n -d -i -n -g - -a - -r -e -l -a -t -i -o -n - - - - -a -m -o -n -g - -s -e -v -e -r -a -l - -e -n -t -i -t -i -e -s - -i -n -v -o -l -v -e -d - -i -n - -a - -c -e -r -t -a -i -n - -t -y -p -e - -o -f - - - - -e -v -e -n -t -. - -F -o -r - -e -x -a -m -p -l -e -, - -i -n - -t -h -e - -M -U -C -- -6 - -m -a -n -a -g -e -m -e -n -t - - - - -s -u -c -c -e -s -s -i -o -n - -s -c -e -n -a -r -i -o -, - -o -n -e - -s -e -e -k -s - -a - -r -e -l -a -t -i -o -n - -b -e -t -w -e -e -n - - - - -C -O -M -P -A -N -Y -, - -P -E -R -S -O -N - -a -n -d - -P -O -S -T - -i -n -v -o -l -v -e -d - -w -i -t -h - -h -i -r -- - - - - -i -n -g -/ - -r -i -n -g - -e -v -e -n -t -s -. - -F -o -r - -e -a -c -h - -r -o -w - -o -f - -a -n - -e -x -t -r -a -c -t -e -d - -t -a -- - - - - -b -l -e -, - -y -o -u - -c -a -n - -a -l -w -a -y -s - -r -e -a -d - -i -t - -a -s - - -C -O -M -P -A -N -Y - -h -i -r -e -d - - - - -( -o -r - - -r -e -d -) - -P -E -R -S -O -N - -f -o -r - -P -O -S -T -. - - -T -h -e - -r -e -l -a -t -i -o -n - -b -e -t -w -e -e -n - - - - -t -h -e -s -e - -e -n -t -i -t -i -e -s - -i -s - -r -e -t -a -i -n -e -d - -t -h -r -o -u -g -h -o -u -t - -t -h -e - -t -a -b -l -e -. - -T -h -e -r -e - - - - -a -r -e - -m -a -n -y - -e -x -i -s -t -i -n -g - -w -o -r -k -s - -o -n - -o -b -t -a -i -n -i -n -g - -e -x -t -r -a -c -t -i -o -n - -p -a -t -- - - - - -t -e -r -n -s - -f -o -r - -p -r -e -- -d -e - -n -e -d - -r -e -l -a -t -i -o -n -s - -( -R -i -l -o -f -f -, - -1 -9 -9 -6 -; - -Y -a -n -g -a -r -- - - - - -b -e -r - -e -t - -a -l -. -, - -2 -0 -0 -0 -; - -A -g -i -c -h -t -e -i -n - -a -n -d - -G -r -a -v -a -n -o -, - -2 -0 -0 -0 -; - -S -u -d -o - - - - -e -t - -a -l -. -, - -2 -0 -0 -3 -) -. - - - - - - -U -n -r -e -s -t -r -i -c -t -e -d - -R -e -l -a -t -i -o -n - -D -i -s -c -o -v -e -r -y - -i -s - -a - -t -e -c -h -n -i -q -u -e - -t -o - - - - -a -u -t -o -m -a -t -i -c -a -l -l -y - -d -i -s -c -o -v -e -r - -s -u -c -h - -r -e -l -a -t -i -o -n -s - -t -h -a -t - -r -e -p -e -a -t -e -d -l -y - - - - -a -p -p -e -a -r - -i -n - -a - -c -o -r -p -u -s - -a -n -d - -p -r -e -s -e -n -t - -t -h -e -m - -a -s - -a - -t -a -b -l -e -, - -w -i -t -h - - - - -a -b -s -o -l -u -t -e -l -y - -n -o - -h -u -m -a -n - -i -n -t -e -r -v -e -n -t -i -o -n -. - -U -n -l -i -k -e - -m -o -s -t - -e -x -- - - - - -i -s -t -i -n -g - -I -E - -r -e -s -e -a -r -c -h -, - -a - -u -s -e -r - -d -o -e -s - -n -o -t - -s -p -e -c -i -f -y - -t -h -e - -t -y -p -e - - - - -o -f - -a -r -t -i -c -l -e -s - -o -r - -i -n -f -o -r -m -a -t -i -o -n - -w -a -n -t -e -d -. - -I -n -s -t -e -a -d -, - -a - -s -y -s -t -e -m - - - - -t -r -i -e -s - -t -o - - -n -d - -a -l -l - -t -h -e - -k -i -n -d -s - -o -f - -r -e -l -a -t -i -o -n -s - -t -h -a -t - -a -r -e - -r -e -p -o -r -t -e -d - - - - -m -u -l -t -i -p -l -e - -t -i -m -e -s - -a -n -d - -c -a -n - -b -e - -r -e -p -o -r -t -e -d - -i -n - -t -a -b -u -l -a -r - -f -o -r -m -. - - - - -T -h -i -s - -t -e -c -h -n -i -q -u -e - -w -i -l -l - -o -p -e -n - -u -p - -t -h -e - -p -o -s -s -i -b -i -l -i -t -y - -o -f - -t -r -y -- - - - - -i -n -g - -n -e -w - -I -E - -s -c -e -n -a -r -i -o -s -. - -F -u -r -t -h -e -r -m -o -r -e -, - -t -h -e - -s -y -s -t -e -m - -i -t -s -e -l -f - - - - -c -a -n - -b -e - -u -s -e -d - -a -s - -a -n - -I -E - -s -y -s -t -e -m -, - -s -i -n -c -e - -a -n - -o -b -t -a -i -n -e -d - -r -e -- - - - - -l -a -t -i -o -n - -i -s - -a -l -r -e -a -d -y - -p -r -e -s -e -n -t -e -d - -a -s - -a - -t -a -b -l -e -. - -I -f - -t -h -i -s - -s -y -s -t -e -m - - - - -w -o -r -k -s - -t -o - -a - -c -e -r -t -a -i -n - -e -x -t -e -n -t -, - -t -u -n -i -n -g - -a -n - -I -E - -s -y -s -t -e -m - -b -e -- - - - - -c -o -m -e -s - -a - -s -e -a -r -c -h - -p -r -o -b -l -e -m -: - -a -l -l - -t -h -e - -t -a -b -l -e -s - -a -r -e - -a -l -r -e -a -d -y - - - - -b -u -i -l -t - - -p -r -e -e -m -p -t -i -v -e -l -y -. - - -A - -u -s -e -r - -o -n -l -y - -n -e -e -d -s - -t -o - -s -e -a -r -c -h - - - - -f -o -r - -a - -r -e -l -e -v -a -n -t - -t -a -b -l -e -. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/nonfree/nlp2004slides.html.ref b/samples/nonfree/nlp2004slides.html.ref deleted file mode 100644 index 6685f6f..0000000 --- a/samples/nonfree/nlp2004slides.html.ref +++ /dev/null @@ -1,15 +0,0 @@ - - - - - -
コンパラブルな新聞記事からの -
固有表現の発見 -
新山 祐介 -
関根 聡 -
Computer Science Department -
New York University -
- -
Page: 1
- diff --git a/samples/nonfree/nlp2004slides.txt.ref b/samples/nonfree/nlp2004slides.txt.ref deleted file mode 100644 index f32a4e7..0000000 --- a/samples/nonfree/nlp2004slides.txt.ref +++ /dev/null @@ -1,9 +0,0 @@ -コンパラブルな新聞記事からの -固有表現の発見 - -新山 祐介 -関根 聡 -Computer Science Department -New York University - - \ No newline at end of file diff --git a/samples/nonfree/nlp2004slides.xml.ref b/samples/nonfree/nlp2004slides.xml.ref deleted file mode 100644 index b8bc761..0000000 --- a/samples/nonfree/nlp2004slides.xml.ref +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -C -o -m -p -u -t -e -r - -S -c -i -e -n -c -e - -D -e -p -a -r -t -m -e -n -t - - - - -N -e -w - -Y -o -r -k - -U -n -i -v -e -r -s -i -t -y - - - - - - -
- -
- - - - - - -
-
diff --git a/samples/simple1.html.ref b/samples/simple1.html.ref deleted file mode 100644 index d6c3384..0000000 --- a/samples/simple1.html.ref +++ /dev/null @@ -1,15 +0,0 @@ - - - - - -
Hello -
World -
Hello -
World -
H e l l o -
W o r l d -
H e l l o -
W o r l d -
Page: 1
- diff --git a/samples/simple1.txt.ref b/samples/simple1.txt.ref deleted file mode 100644 index 8d35370..0000000 --- a/samples/simple1.txt.ref +++ /dev/null @@ -1,17 +0,0 @@ -Hello - -World - -Hello - -World - -H e l l o - -W o r l d - -H e l l o - -W o r l d - - \ No newline at end of file diff --git a/samples/simple1.xml.ref b/samples/simple1.xml.ref deleted file mode 100644 index b309eec..0000000 --- a/samples/simple1.xml.ref +++ /dev/null @@ -1,139 +0,0 @@ - - - - - -H -e -l -l -o - - - - - - - -W -o -r -l -d - - - - - - -H -e -l -l -o - - - - - - - -W -o -r -l -d - - - - - - -H - -e - -l - -l - -o - - - - - - - - -W - -o - -r - -l - -d - - - - - - -H - -e - -l - -l - -o - - - - - - - - -W - -o - -r - -l - -d - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/simple2.html.ref b/samples/simple2.html.ref deleted file mode 100644 index a7a4ad9..0000000 --- a/samples/simple2.html.ref +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - -
Page: 1
- diff --git a/samples/simple2.txt.ref b/samples/simple2.txt.ref deleted file mode 100644 index 8214d0e..0000000 --- a/samples/simple2.txt.ref +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/samples/simple2.xml.ref b/samples/simple2.xml.ref deleted file mode 100644 index 58d703a..0000000 --- a/samples/simple2.xml.ref +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/samples/simple3.html.ref b/samples/simple3.html.ref deleted file mode 100644 index fe78315..0000000 --- a/samples/simple3.html.ref +++ /dev/null @@ -1,11 +0,0 @@ - - - - - -
World -
orld -
あいうえおあいうえお W -
HelloHello -
Page: 1
- diff --git a/samples/simple3.txt.ref b/samples/simple3.txt.ref deleted file mode 100644 index 8063f26..0000000 --- a/samples/simple3.txt.ref +++ /dev/null @@ -1,9 +0,0 @@ -World - -orld - -あいうえおあいうえお W - -HelloHello - - \ No newline at end of file diff --git a/samples/simple3.xml.ref b/samples/simple3.xml.ref deleted file mode 100644 index bd8d5d2..0000000 --- a/samples/simple3.xml.ref +++ /dev/null @@ -1,72 +0,0 @@ - - - - - -W -o -r -l -d - - - - - - -o -r -l -d - - - - - - - - - - - - - - - - - -W - - - - - - -H -e -l -l -o -H -e -l -l -o - - - - - - - - - - - - - - - - - - diff --git a/setup.py b/setup.py index a13e4da..06d8106 100644 --- a/setup.py +++ b/setup.py @@ -13,7 +13,10 @@ setup( 'six', 'sortedcontainers', ], - extras_require={"dev": ["nose", "tox"]}, + extras_require={ + "dev": ["nose", "tox"], + "docs": ["sphinx", "sphinx-argparse"], + }, description='PDF parser and analyzer', long_description=package.__doc__, license='MIT/X', diff --git a/tests/helpers.py b/tests/helpers.py new file mode 100644 index 0000000..b89f1c1 --- /dev/null +++ b/tests/helpers.py @@ -0,0 +1,7 @@ +import os + + +def absolute_sample_path(relative_sample_path): + sample_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), '../samples')) + sample_file = os.path.join(sample_dir, relative_sample_path) + return sample_file diff --git a/tests/test_encodingdb.py b/tests/test_encodingdb.py index 36e4b11..1c1cc48 100644 --- a/tests/test_encodingdb.py +++ b/tests/test_encodingdb.py @@ -1,5 +1,5 @@ -""" -Tests based on the Adobe Glyph List Specification (https://github.com/adobe-type-tools/agl-specification#2-the-mapping) +"""Tests based on the Adobe Glyph List Specification +See: https://github.com/adobe-type-tools/agl-specification#2-the-mapping While not in the specification, lowercase unicode often occurs in pdf's. Therefore lowercase unittest variants are added. diff --git a/tests/test_highlevel_extracttext.py b/tests/test_highlevel_extracttext.py new file mode 100644 index 0000000..7062cd8 --- /dev/null +++ b/tests/test_highlevel_extracttext.py @@ -0,0 +1,38 @@ +import unittest + +from helpers import absolute_sample_path +from pdfminer.high_level import extract_text + + +def run(sample_path): + absolute_path = absolute_sample_path(sample_path) + s = extract_text(absolute_path) + return s + + +test_strings = { + "simple1.pdf": "Hello \n\nWorld\n\nWorld\n\nHello \n\nH e l l o \n\nH e l l o \n\nW o r l d\n\nW o r l d\n\n\f", + "simple2.pdf": "\f", + "simple3.pdf": "HelloHello\n\nWorld\n\nWorld\n\n\f", +} + + +class TestExtractText(unittest.TestCase): + def test_simple1(self): + test_file = "simple1.pdf" + s = run(test_file) + self.assertEqual(s, test_strings[test_file]) + + def test_simple2(self): + test_file = "simple2.pdf" + s = run(test_file) + self.assertEqual(s, test_strings[test_file]) + + def test_simple3(self): + test_file = "simple3.pdf" + s = run(test_file) + self.assertEqual(s, test_strings[test_file]) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_pdfdocument.py b/tests/test_pdfdocument.py new file mode 100644 index 0000000..a6ce45b --- /dev/null +++ b/tests/test_pdfdocument.py @@ -0,0 +1,16 @@ +from nose.tools import raises + +from helpers import absolute_sample_path +from pdfminer.pdfdocument import PDFDocument +from pdfminer.pdfparser import PDFParser +from pdfminer.pdftypes import PDFObjectNotFound + + +class TestPdfDocument(object): + + @raises(PDFObjectNotFound) + def test_get_zero_objid_raises_pdfobjectnotfound(self): + with open(absolute_sample_path('simple1.pdf'), 'rb') as in_file: + parser = PDFParser(in_file) + doc = PDFDocument(parser) + doc.getobj(0) diff --git a/tests/test_pdfencoding.py b/tests/test_pdfencoding.py index 5878eba..2f8c470 100644 --- a/tests/test_pdfencoding.py +++ b/tests/test_pdfencoding.py @@ -2,12 +2,14 @@ # -*- coding: utf-8 -*- -import nose, logging, os +import nose + from pdfminer.cmapdb import IdentityCMap, CMap, IdentityCMapByte from pdfminer.pdffont import PDFCIDFont from pdfminer.pdftypes import PDFStream from pdfminer.psparser import PSLiteral + class TestPDFEncoding(): def test_cmapname_onebyteidentityV(self): @@ -45,25 +47,25 @@ class TestPDFEncoding(): assert isinstance(font.cmap, IdentityCMap) def test_encoding_identityH_as_PSLiteral_stream(self): - stream = PDFStream({'CMapName':PSLiteral('Identity-H')}, '') + stream = PDFStream({'CMapName': PSLiteral('Identity-H')}, '') spec = {'Encoding': stream} font = PDFCIDFont(None, spec) assert isinstance(font.cmap, IdentityCMap) def test_encoding_identityV_as_PSLiteral_stream(self): - stream = PDFStream({'CMapName':PSLiteral('Identity-V')}, '') + stream = PDFStream({'CMapName': PSLiteral('Identity-V')}, '') spec = {'Encoding': stream} font = PDFCIDFont(None, spec) assert isinstance(font.cmap, IdentityCMap) def test_encoding_identityH_as_stream(self): - stream = PDFStream({'CMapName':'Identity-H'}, '') + stream = PDFStream({'CMapName': 'Identity-H'}, '') spec = {'Encoding': stream} font = PDFCIDFont(None, spec) assert isinstance(font.cmap, IdentityCMap) def test_encoding_identityV_as_stream(self): - stream = PDFStream({'CMapName':'Identity-V'}, '') + stream = PDFStream({'CMapName': 'Identity-V'}, '') spec = {'Encoding': stream} font = PDFCIDFont(None, spec) assert isinstance(font.cmap, IdentityCMap) @@ -79,25 +81,25 @@ class TestPDFEncoding(): assert isinstance(font.cmap, IdentityCMap) def test_encoding_DLIdentH_as_PSLiteral_stream(self): - stream = PDFStream({'CMapName':PSLiteral('DLIdent-H')}, '') + stream = PDFStream({'CMapName': PSLiteral('DLIdent-H')}, '') spec = {'Encoding': stream} font = PDFCIDFont(None, spec) assert isinstance(font.cmap, IdentityCMap) def test_encoding_DLIdentH_as_PSLiteral_stream(self): - stream = PDFStream({'CMapName':PSLiteral('DLIdent-V')}, '') + stream = PDFStream({'CMapName': PSLiteral('DLIdent-V')}, '') spec = {'Encoding': stream} font = PDFCIDFont(None, spec) assert isinstance(font.cmap, IdentityCMap) def test_encoding_DLIdentH_as_stream(self): - stream = PDFStream({'CMapName':'DLIdent-H'}, '') + stream = PDFStream({'CMapName': 'DLIdent-H'}, '') spec = {'Encoding': stream} font = PDFCIDFont(None, spec) assert isinstance(font.cmap, IdentityCMap) def test_encoding_DLIdentV_as_stream(self): - stream = PDFStream({'CMapName':'DLIdent-V'}, '') + stream = PDFStream({'CMapName': 'DLIdent-V'}, '') spec = {'Encoding': stream} font = PDFCIDFont(None, spec) assert isinstance(font.cmap, IdentityCMap) diff --git a/tests/test_pdfminer_ccitt.py b/tests/test_pdfminer_ccitt.py index 9f27833..cd3baa5 100644 --- a/tests/test_pdfminer_ccitt.py +++ b/tests/test_pdfminer_ccitt.py @@ -1,19 +1,9 @@ -#!/usr/bin/env python - -# -*- coding: utf-8 -*- - -from nose.tools import assert_equal, assert_true, assert_false -from nose import SkipTest -import nose - -import logging +from nose.tools import assert_equal from pdfminer.ccitt import * -## Test cases -## -class TestCCITTG4Parser(): +class TestCCITTG4Parser(): def get_parser(self, bits): parser = CCITTG4Parser(len(bits)) parser._curline = [int(c) for c in bits] @@ -163,6 +153,3 @@ class TestCCITTG4Parser(): parser._do_vertical(1) assert_equal(parser._get_bits(), '00000001') return - -if __name__ == '__main__': - nose.runmodule() \ No newline at end of file diff --git a/tests/test_pdfminer_crypto.py b/tests/test_pdfminer_crypto.py index fdabd00..258ac6a 100644 --- a/tests/test_pdfminer_crypto.py +++ b/tests/test_pdfminer_crypto.py @@ -1,52 +1,57 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- +"""Test of various compression/encoding modules (previously in doctests) +""" +import binascii from nose.tools import assert_equal -from nose import SkipTest -import nose -#test of various compression/encoding modules (previously in doctests): -from pdfminer.ascii85 import * from pdfminer.arcfour import * +from pdfminer.ascii85 import * from pdfminer.lzw import * -from pdfminer.runlength import * from pdfminer.rijndael import * +from pdfminer.runlength import * + + +def hex(b): + """encode('hex')""" + return binascii.hexlify(b) + + +def dehex(b): + """decode('hex')""" + return binascii.unhexlify(b) -import binascii -def hex(b): return binascii.hexlify(b) #encode('hex') -def dehex(b): return binascii.unhexlify(b) #decode('hex') class TestAscii85(): def test_ascii85decode(self): - #The sample string is taken from: http://en.wikipedia.org/w/index.php?title=Ascii85 - assert_equal(ascii85decode(b'9jqo^BlbD-BleB1DJ+*+F(f,q'),b'Man is distinguished') - assert_equal(ascii85decode(b'E,9)oF*2M7/c~>'),b'pleasure.') - + """The sample string is taken from: http://en.wikipedia.org/w/index.php?title=Ascii85""" + assert_equal(ascii85decode(b'9jqo^BlbD-BleB1DJ+*+F(f,q'), b'Man is distinguished') + assert_equal(ascii85decode(b'E,9)oF*2M7/c~>'), b'pleasure.') + def test_asciihexdecode(self): - assert_equal(asciihexdecode(b'61 62 2e6364 65'),b'ab.cde') - assert_equal(asciihexdecode(b'61 62 2e6364 657>'),b'ab.cdep') - assert_equal(asciihexdecode(b'7>'),b'p') + assert_equal(asciihexdecode(b'61 62 2e6364 65'), b'ab.cde') + assert_equal(asciihexdecode(b'61 62 2e6364 657>'), b'ab.cdep') + assert_equal(asciihexdecode(b'7>'), b'p') + class TestArcfour(): def test(self): + assert_equal(hex(Arcfour(b'Key').process(b'Plaintext')), b'bbf316e8d940af0ad3') + assert_equal(hex(Arcfour(b'Wiki').process(b'pedia')), b'1021bf0420') + assert_equal(hex(Arcfour(b'Secret').process(b'Attack at dawn')), b'45a01f645fc35b383552544b9bf5') + - assert_equal(hex(Arcfour(b'Key').process(b'Plaintext')),b'bbf316e8d940af0ad3') - assert_equal(hex(Arcfour(b'Wiki').process(b'pedia')),b'1021bf0420') - assert_equal(hex(Arcfour(b'Secret').process(b'Attack at dawn')),b'45a01f645fc35b383552544b9bf5') - class TestLzw(): def test_lzwdecode(self): - assert_equal(lzwdecode(b'\x80\x0b\x60\x50\x22\x0c\x0c\x85\x01'),b'\x2d\x2d\x2d\x2d\x2d\x41\x2d\x2d\x2d\x42') - + assert_equal(lzwdecode(b'\x80\x0b\x60\x50\x22\x0c\x0c\x85\x01'), b'\x2d\x2d\x2d\x2d\x2d\x41\x2d\x2d\x2d\x42') + + class TestRunlength(): def test_rldecode(self): - assert_equal(rldecode(b'\x05123456\xfa7\x04abcde\x80junk'),b'1234567777777abcde') - + assert_equal(rldecode(b'\x05123456\xfa7\x04abcde\x80junk'), b'1234567777777abcde') + + class TestRijndaelEncryptor(): def test_RijndaelEncryptor(self): key = dehex(b'00010203050607080a0b0c0d0f101112') plaintext = dehex(b'506812a45f08c889b97f5980038b8359') - assert_equal(hex(RijndaelEncryptor(key, 128).encrypt(plaintext)),b'd8f532538289ef7d06b506a4fd5be9c9') - -if __name__ == '__main__': - nose.runmodule() \ No newline at end of file + assert_equal(hex(RijndaelEncryptor(key, 128).encrypt(plaintext)), b'd8f532538289ef7d06b506a4fd5be9c9') diff --git a/tests/test_pdfminer_psparser.py b/tests/test_pdfminer_psparser.py index 2fbae8e..a2df3bb 100644 --- a/tests/test_pdfminer_psparser.py +++ b/tests/test_pdfminer_psparser.py @@ -1,18 +1,14 @@ -#!/usr/bin/env python - -# -*- coding: utf-8 -*- - -from nose.tools import assert_equal, assert_true, assert_false -from nose import SkipTest -import nose - import logging +from nose.tools import assert_equal + +logger = logging.getLogger(__name__) + from pdfminer.psparser import * -## Simplistic Test cases -## + class TestPSBaseParser: + """Simplistic Test cases""" TESTDATA = br'''%!PS begin end @@ -35,29 +31,29 @@ func/a/b{(c)do*}def ''' TOKENS = [ - (5, KWD(b'begin')), (11, KWD(b'end')), (16, KWD(b'"')), (19, KWD(b'@')), - (21, KWD(b'#')), (23, LIT('a')), (25, LIT('BCD')), (30, LIT('Some_Name')), - (41, LIT('foo_xbaa')), (54, 0), (56, 1), (59, -2), (62, 0.5), - (65, 1.234), (71, b'abc'), (77, b''), (80, b'abc ( def ) ghi'), - (98, b'def \x00 4ghi'), (118, b'bach\\slask'), (132, b'foo\nbaa'), - (143, b'this % is not a comment.'), (170, b'foo\nbaa'), (180, b'foobaa'), - (191, b''), (194, b' '), (199, b'@@ '), (211, b'\xab\xcd\x00\x124\x05'), - (226, KWD(b'func')), (230, LIT('a')), (232, LIT('b')), - (234, KWD(b'{')), (235, b'c'), (238, KWD(b'do*')), (241, KWD(b'}')), - (242, KWD(b'def')), (246, KWD(b'[')), (248, 1), (250, b'z'), (254, KWD(b'!')), - (256, KWD(b']')), (258, KWD(b'<<')), (261, LIT('foo')), (266, b'bar'), - (272, KWD(b'>>')) + (5, KWD(b'begin')), (11, KWD(b'end')), (16, KWD(b'"')), (19, KWD(b'@')), + (21, KWD(b'#')), (23, LIT('a')), (25, LIT('BCD')), (30, LIT('Some_Name')), + (41, LIT('foo_xbaa')), (54, 0), (56, 1), (59, -2), (62, 0.5), + (65, 1.234), (71, b'abc'), (77, b''), (80, b'abc ( def ) ghi'), + (98, b'def \x00 4ghi'), (118, b'bach\\slask'), (132, b'foo\nbaa'), + (143, b'this % is not a comment.'), (170, b'foo\nbaa'), (180, b'foobaa'), + (191, b''), (194, b' '), (199, b'@@ '), (211, b'\xab\xcd\x00\x124\x05'), + (226, KWD(b'func')), (230, LIT('a')), (232, LIT('b')), + (234, KWD(b'{')), (235, b'c'), (238, KWD(b'do*')), (241, KWD(b'}')), + (242, KWD(b'def')), (246, KWD(b'[')), (248, 1), (250, b'z'), (254, KWD(b'!')), + (256, KWD(b']')), (258, KWD(b'<<')), (261, LIT('foo')), (266, b'bar'), + (272, KWD(b'>>')) ] OBJS = [ - (23, LIT('a')), (25, LIT('BCD')), (30, LIT('Some_Name')), - (41, LIT('foo_xbaa')), (54, 0), (56, 1), (59, -2), (62, 0.5), - (65, 1.234), (71, b'abc'), (77, b''), (80, b'abc ( def ) ghi'), - (98, b'def \x00 4ghi'), (118, b'bach\\slask'), (132, b'foo\nbaa'), - (143, b'this % is not a comment.'), (170, b'foo\nbaa'), (180, b'foobaa'), - (191, b''), (194, b' '), (199, b'@@ '), (211, b'\xab\xcd\x00\x124\x05'), - (230, LIT('a')), (232, LIT('b')), (234, [b'c']), (246, [1, b'z']), - (258, {'foo': b'bar'}), + (23, LIT('a')), (25, LIT('BCD')), (30, LIT('Some_Name')), + (41, LIT('foo_xbaa')), (54, 0), (56, 1), (59, -2), (62, 0.5), + (65, 1.234), (71, b'abc'), (77, b''), (80, b'abc ( def ) ghi'), + (98, b'def \x00 4ghi'), (118, b'bach\\slask'), (132, b'foo\nbaa'), + (143, b'this % is not a comment.'), (170, b'foo\nbaa'), (180, b'foobaa'), + (191, b''), (194, b' '), (199, b'@@ '), (211, b'\xab\xcd\x00\x124\x05'), + (230, LIT('a')), (232, LIT('b')), (234, [b'c']), (246, [1, b'z']), + (258, {'foo': b'bar'}), ] def get_tokens(self, s): @@ -66,6 +62,7 @@ func/a/b{(c)do*}def class MyParser(PSBaseParser): def flush(self): self.add_results(*self.popall()) + parser = MyParser(BytesIO(s)) r = [] try: @@ -81,6 +78,7 @@ func/a/b{(c)do*}def class MyParser(PSStackParser): def flush(self): self.add_results(*self.popall()) + parser = MyParser(BytesIO(s)) r = [] try: @@ -92,17 +90,12 @@ func/a/b{(c)do*}def def test_1(self): tokens = self.get_tokens(self.TESTDATA) - logging.info(tokens) + logger.info(tokens) assert_equal(tokens, self.TOKENS) return def test_2(self): objs = self.get_objects(self.TESTDATA) - logging.info(objs) + logger.info(objs) assert_equal(objs, self.OBJS) return - -if __name__ == '__main__': - #import logging,sys,os,six - #logging.basicConfig(level=logging.DEBUG, filename='%s_%d.%d.log'%(os.path.basename(__file__),sys.version_info[0],sys.version_info[1])) - nose.runmodule() \ No newline at end of file diff --git a/tests/test_tools_dumppdf.py b/tests/test_tools_dumppdf.py index 87d74d2..b5febb0 100644 --- a/tests/test_tools_dumppdf.py +++ b/tests/test_tools_dumppdf.py @@ -1,53 +1,37 @@ -#!/usr/bin/env python +from tempfile import NamedTemporaryFile -# -*- coding: utf-8 -*- -import six +from helpers import absolute_sample_path +from tools import dumppdf -import nose, logging, os -if six.PY3: - from tools import dumppdf -elif six.PY2: - import os, sys - sys.path.append(os.path.abspath(os.path.curdir)) - import tools.dumppdf as dumppdf +def run(filename, options=None): + absolute_path = absolute_sample_path(filename) + with NamedTemporaryFile() as output_file: + if options: + s = 'dumppdf -o %s %s %s' % (output_file.name, options, absolute_path) + else: + s = 'dumppdf -o %s %s' % (output_file.name, absolute_path) + dumppdf.main(s.split(' ')[1:]) -path=os.path.dirname(os.path.abspath(__file__))+'/' - -def run(datapath,filename,options=None): - i=path+datapath+filename+'.pdf' - o=path+filename+'.xml' - if options: - s='dumppdf -o%s %s %s'%(o,options,i) - else: - s='dumppdf -o%s %s'%(o,i) - dumppdf.main(s.split(' ')) class TestDumpPDF(): - - def test_1(self): - run('../samples/','jo','-t -a') - run('../samples/','simple1','-t -a') - run('../samples/','simple2','-t -a') - run('../samples/','simple3','-t -a') - + run('jo.pdf', '-t -a') + run('simple1.pdf', '-t -a') + run('simple2.pdf', '-t -a') + run('simple3.pdf', '-t -a') + def test_2(self): - run('../samples/nonfree/','dmca','-t -a') - + run('nonfree/dmca.pdf', '-t -a') + def test_3(self): - run('../samples/nonfree/','f1040nr') + run('nonfree/f1040nr.pdf') def test_4(self): - run('../samples/nonfree/','i1040nr') - - def test_5(self): - run('../samples/nonfree/','kampo','-t -a') - - def test_6(self): - run('../samples/nonfree/','naacl06-shinyama','-t -a') + run('nonfree/i1040nr.pdf') -if __name__ == '__main__': - #import logging,sys,os,six - #logging.basicConfig(level=logging.DEBUG, filename='%s_%d.%d.log'%(os.path.basename(__file__),sys.version_info[0],sys.version_info[1])) - nose.runmodule() + def test_5(self): + run('nonfree/kampo.pdf', '-t -a') + + def test_6(self): + run('nonfree/naacl06-shinyama.pdf', '-t -a') diff --git a/tests/test_tools_pdf2txt.py b/tests/test_tools_pdf2txt.py index 188f652..b7bd978 100644 --- a/tests/test_tools_pdf2txt.py +++ b/tests/test_tools_pdf2txt.py @@ -2,72 +2,71 @@ import os from shutil import rmtree from tempfile import NamedTemporaryFile, mkdtemp -import nose - import tools.pdf2txt as pdf2txt +from helpers import absolute_sample_path -def full_path(relative_path_to_this_file): - this_file_dir = os.path.dirname(os.path.abspath(__file__)) - abspath = os.path.abspath(os.path.join(this_file_dir, relative_path_to_this_file)) - return abspath - - -def run(datapath, filename, options=None): - i = full_path(datapath + filename + '.pdf') - o = full_path(filename + '.txt') - if options: - s = 'pdf2txt -o%s %s %s' % (o, options, i) - else: - s = 'pdf2txt -o%s %s' % (o, i) - pdf2txt.main(s.split(' ')[1:]) +def run(sample_path, options=None): + absolute_path = absolute_sample_path(sample_path) + with NamedTemporaryFile() as output_file: + if options: + s = 'pdf2txt -o %s %s %s' % (output_file.name, options, absolute_path) + else: + s = 'pdf2txt -o %s %s' % (output_file.name, absolute_path) + pdf2txt.main(s.split(' ')[1:]) class TestDumpPDF(): - def test_1(self): - run('../samples/', 'jo') - run('../samples/', 'simple1') - run('../samples/', 'simple2') - run('../samples/', 'simple3') - run('../samples/','sampleOneByteIdentityEncode') + def test_jo(self): + run('jo.pdf') - def test_2(self): - run('../samples/nonfree/', 'dmca') + def test_simple1(self): + run('simple1.pdf') - def test_3(self): - run('../samples/nonfree/', 'f1040nr') + def test_simple2(self): + run('simple2.pdf') - def test_4(self): - run('../samples/nonfree/', 'i1040nr') + def test_simple3(self): + run('simple3.pdf') - def test_5(self): - run('../samples/nonfree/', 'kampo') + def test_sample_one_byte_identity_encode(self): + run('sampleOneByteIdentityEncode.pdf') - def test_6(self): - run('../samples/nonfree/', 'naacl06-shinyama') + def test_nonfree_175(self): + """Regression test for https://github.com/pdfminer/pdfminer.six/issues/65""" + run('nonfree/175.pdf') - # this test works on Windows but on Linux & Travis-CI it says - # PDFSyntaxError: No /Root object! - Is this really a PDF? - # TODO: Find why - """ - def test_7(self): - run('../samples/contrib/','stamp-no') - """ + def test_nonfree_dmca(self): + run('nonfree/dmca.pdf') - def test_8(self): - run('../samples/contrib/', '2b', '-A -t xml') + def test_nonfree_f1040nr(self): + run('nonfree/f1040nr.pdf') - def test_9(self): - run('../samples/nonfree/', '175') # https://github.com/pdfminer/pdfminer.six/issues/65 + def test_nonfree_i1040nr(self): + run('nonfree/i1040nr.pdf') - def test_10(self): - run('../samples/scancode/', 'patchelf') # https://github.com/euske/pdfminer/issues/96 + def test_nonfree_kampo(self): + run('nonfree/kampo.pdf') + + def test_nonfree_naacl06_shinyama(self): + run('nonfree/naacl06-shinyama.pdf') + + def test_nlp2004slides(self): + run('nonfree/nlp2004slides.pdf') + + def test_contrib_2b(self): + run('contrib/2b.pdf', '-A -t xml') + + def test_scancode_patchelf(self): + """Regression test for # https://github.com/euske/pdfminer/issues/96""" + run('scancode/patchelf.pdf') class TestDumpImages(object): - def extract_images(self, input_file): + @staticmethod + def extract_images(input_file): output_dir = mkdtemp() with NamedTemporaryFile() as output_file: commands = ['-o', output_file.name, '--output-dir', output_dir, input_file] @@ -81,13 +80,25 @@ class TestDumpImages(object): Regression test for: https://github.com/pdfminer/pdfminer.six/issues/131 """ - image_files = self.extract_images(full_path('../samples/nonfree/dmca.pdf')) + image_files = self.extract_images(absolute_sample_path('../samples/nonfree/dmca.pdf')) assert image_files[0].endswith('bmp') def test_nonfree_175(self): """Extract images of pdf containing jpg images""" - self.extract_images(full_path('../samples/nonfree/175.pdf')) + self.extract_images(absolute_sample_path('../samples/nonfree/175.pdf')) + def test_jbig2_image_export(self): + """Extract images of pdf containing jbig2 images -if __name__ == '__main__': - nose.runmodule() + Feature test for: https://github.com/pdfminer/pdfminer.six/pull/46 + """ + image_files = self.extract_images(absolute_sample_path('../samples/contrib/pdf-with-jbig2.pdf')) + assert image_files[0].endswith('.jb2') + + def test_contrib_matplotlib(self): + """Test a pdf with Type3 font""" + run('contrib/matplotlib.pdf') + + def test_nonfree_cmp_itext_logo(self): + """Test a pdf with Type3 font""" + run('nonfree/cmp_itext_logo.pdf') diff --git a/tests/test_utils.py b/tests/test_utils.py index e7d9d71..5787ac2 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -1,7 +1,7 @@ from nose.tools import assert_equal from pdfminer.layout import LTComponent -from pdfminer.utils import make_compat_str, Plane +from pdfminer.utils import Plane class TestPlane(object): @@ -37,4 +37,4 @@ class TestPlane(object): plane = Plane(bounding_box, gridsize) obj = LTComponent((0, 0, object_size, object_size)) plane.add(obj) - return plane, obj \ No newline at end of file + return plane, obj diff --git a/tools/dumppdf.py b/tools/dumppdf.py index 110f196..49b29b8 100755 --- a/tools/dumppdf.py +++ b/tools/dumppdf.py @@ -1,32 +1,31 @@ -#!/usr/bin/env python +"""Extract pdf structure in XML format""" +import logging +import os.path +import re +import sys +from argparse import ArgumentParser + +import six -# -# dumppdf.py - dump pdf contents in XML format. -# -# usage: dumppdf.py [options] [files ...] -# options: -# -i objid : object id -# -import sys, os.path, re, logging -from pdfminer.psparser import PSKeyword, PSLiteral, LIT -from pdfminer.pdfparser import PDFParser from pdfminer.pdfdocument import PDFDocument, PDFNoOutlines +from pdfminer.pdfpage import PDFPage +from pdfminer.pdfparser import PDFParser from pdfminer.pdftypes import PDFObjectNotFound, PDFValueError from pdfminer.pdftypes import PDFStream, PDFObjRef, resolve1, stream_value -from pdfminer.pdfpage import PDFPage +from pdfminer.psparser import PSKeyword, PSLiteral, LIT from pdfminer.utils import isnumber +logging.basicConfig() ESC_PAT = re.compile(r'[\000-\037&<>()"\042\047\134\177-\377]') + + def e(s): - if six.PY3 and isinstance(s,six.binary_type): - s=str(s,'latin-1') - return ESC_PAT.sub(lambda m:'&#%d;' % ord(m.group(0)), s) - -import six # Python 2+3 compatibility + if six.PY3 and isinstance(s, six.binary_type): + s = str(s, 'latin-1') + return ESC_PAT.sub(lambda m: '&#%d;' % ord(m.group(0)), s) -# dumpxml def dumpxml(out, obj, codec=None): if obj is None: out.write('') @@ -34,7 +33,7 @@ def dumpxml(out, obj, codec=None): if isinstance(obj, dict): out.write('\n' % len(obj)) - for (k,v) in six.iteritems(obj): + for (k, v) in six.iteritems(obj): out.write('%s\n' % k) out.write('') dumpxml(out, v) @@ -87,7 +86,7 @@ def dumpxml(out, obj, codec=None): raise TypeError(obj) -# dumptrailers + def dumptrailers(out, doc): for xref in doc.xrefs: out.write('\n') @@ -95,7 +94,7 @@ def dumptrailers(out, doc): out.write('\n\n\n') return -# dumpallobjs + def dumpallobjs(out, doc, codec=None): visited = set() out.write('') @@ -110,19 +109,20 @@ def dumpallobjs(out, doc, codec=None): dumpxml(out, obj, codec=codec) out.write('\n\n\n') except PDFObjectNotFound as e: - print >>sys.stderr, 'not found: %r' % e + print('not found: %r' % e) dumptrailers(out, doc) out.write('') return -# dumpoutline + def dumpoutline(outfp, fname, objids, pagenos, password='', dumpall=False, codec=None, extractdir=None): fp = open(fname, 'rb') parser = PDFParser(fp) doc = PDFDocument(parser, password) - pages = dict( (page.pageid, pageno) for (pageno,page) - in enumerate(PDFPage.create_pages(doc), 1) ) + pages = dict((page.pageid, pageno) for (pageno, page) + in enumerate(PDFPage.create_pages(doc), 1)) + def resolve_dest(dest): if isinstance(dest, str): dest = resolve1(doc.get_dest(dest)) @@ -133,10 +133,11 @@ def dumpoutline(outfp, fname, objids, pagenos, password='', if isinstance(dest, PDFObjRef): dest = dest.resolve() return dest + try: outlines = doc.get_outlines() outfp.write('\n') - for (level,title,dest,a,se) in outlines: + for (level, title, dest, a, se) in outlines: pageno = None if dest: dest = resolve_dest(dest) @@ -145,7 +146,8 @@ def dumpoutline(outfp, fname, objids, pagenos, password='', action = a if isinstance(action, dict): subtype = action.get('S') - if subtype and repr(subtype) == '/\'GoTo\'' and action.get('D'): + if subtype and repr(subtype) == '/\'GoTo\'' and action.get( + 'D'): dest = resolve_dest(action['D']) pageno = pages[dest[0].objid] s = e(title).encode('utf-8', 'xmlcharrefreplace') @@ -164,9 +166,11 @@ def dumpoutline(outfp, fname, objids, pagenos, password='', fp.close() return -# extractembedded + LITERAL_FILESPEC = LIT('Filespec') LITERAL_EMBEDDEDFILE = LIT('EmbeddedFile') + + def extractembedded(outfp, fname, objids, pagenos, password='', dumpall=False, codec=None, extractdir=None): def extract1(obj): @@ -184,8 +188,8 @@ def extractembedded(outfp, fname, objids, pagenos, password='', path = os.path.join(extractdir, filename) if os.path.exists(path): raise IOError('file exists: %r' % path) - print >>sys.stderr, 'extracting: %r' % path - out = file(path, 'wb') + print('extracting: %r' % path) + out = open(path, 'wb') out.write(fileobj.get_data()) out.close() return @@ -201,7 +205,7 @@ def extractembedded(outfp, fname, objids, pagenos, password='', fp.close() return -# dumppdf + def dumppdf(outfp, fname, objids, pagenos, password='', dumpall=False, codec=None, extractdir=None): fp = open(fname, 'rb') @@ -212,7 +216,7 @@ def dumppdf(outfp, fname, objids, pagenos, password='', obj = doc.getobj(objid) dumpxml(outfp, obj, codec=codec) if pagenos: - for (pageno,page) in enumerate(PDFPage.create_pages(doc)): + for (pageno, page) in enumerate(PDFPage.create_pages(doc)): if pageno in pagenos: if codec: for obj in page.contents: @@ -225,51 +229,119 @@ def dumppdf(outfp, fname, objids, pagenos, password='', if (not objids) and (not pagenos) and (not dumpall): dumptrailers(outfp, doc) fp.close() - if codec not in ('raw','binary'): + if codec not in ('raw', 'binary'): outfp.write('\n') return -# main -def main(argv): - import getopt - def usage(): - print ('usage: %s [-d] [-a] [-p pageid] [-P password] [-r|-b|-t] [-T] [-E directory] [-i objid] file ...' % argv[0]) - return 100 - try: - (opts, args) = getopt.getopt(argv[1:], 'dap:P:rbtTE:i:o:') - except getopt.GetoptError: - return usage() - if not args: return usage() - objids = [] - pagenos = set() - codec = None - password = '' - dumpall = False - proc = dumppdf - outfp = sys.stdout - extractdir = None - for (k, v) in opts: - if k == '-d': logging.getLogger().setLevel(logging.DEBUG) - elif k == '-o': outfp = open(v, 'w') - elif k == '-i': objids.extend( int(x) for x in v.split(',') ) - elif k == '-p': pagenos.update( int(x)-1 for x in v.split(',') ) - elif k == '-P': password = v - elif k == '-a': dumpall = True - elif k == '-r': codec = 'raw' - elif k == '-b': codec = 'binary' - elif k == '-t': codec = 'text' - elif k == '-T': proc = dumpoutline - elif k == '-E': - extractdir = v - proc = extractembedded +def create_parser(): + parser = ArgumentParser(description=__doc__, add_help=True) + parser.add_argument('files', type=str, default=None, nargs='+', + help='One or more paths to PDF files.') + parser.add_argument( + '--debug', '-d', default=False, action='store_true', + help='Use debug logging level.') + procedure_parser = parser.add_mutually_exclusive_group() + procedure_parser.add_argument( + '--extract-toc', '-T', default=False, action='store_true', + help='Extract structure of outline') + procedure_parser.add_argument( + '--extract-embedded', '-E', type=str, + help='Extract embedded files') + + parse_params = parser.add_argument_group( + 'Parser', description='Used during PDF parsing') + parse_params.add_argument( + '--page-numbers', type=int, default=None, nargs='+', + help='A space-seperated list of page numbers to parse.') + parse_params.add_argument( + '--pagenos', '-p', type=str, + help='A comma-separated list of page numbers to parse. Included for ' + 'legacy applications, use --page-numbers for more idiomatic ' + 'argument entry.') + parse_params.add_argument( + '--objects', '-i', type=str, + help='Comma separated list of object numbers to extract') + parse_params.add_argument( + '--all', '-a', default=False, action='store_true', + help='If the structure of all objects should be extracted') + parse_params.add_argument( + '--password', '-P', type=str, default='', + help='The password to use for decrypting PDF file.') + + output_params = parser.add_argument_group( + 'Output', description='Used during output generation.') + output_params.add_argument( + '--outfile', '-o', type=str, default='-', + help='Path to file where output is written. Or "-" (default) to ' + 'write to stdout.') + codec_parser = output_params.add_mutually_exclusive_group() + codec_parser.add_argument( + '--raw-stream', '-r', default=False, action='store_true', + help='Write stream objects without encoding') + codec_parser.add_argument( + '--binary-stream', '-b', default=False, action='store_true', + help='Write stream objects with binary encoding') + codec_parser.add_argument( + '--text-stream', '-t', default=False, action='store_true', + help='Write stream objects as plain text') + + return parser + + +def main(argv=None): + parser = create_parser() + args = parser.parse_args(args=argv) + + if args.debug: + logging.getLogger().setLevel(logging.DEBUG) + + if args.outfile == '-': + outfp = sys.stdout + else: + outfp = open(args.outfile, 'w') + + if args.objects: + objids = [int(x) for x in args.objects.split(',')] + else: + objids = [] + + if args.page_numbers: + pagenos = {x - 1 for x in args.page_numbers} + elif args.pagenos: + pagenos = {int(x) - 1 for x in args.pagenos.split(',')} + else: + pagenos = set() + + password = args.password if six.PY2 and sys.stdin.encoding: password = password.decode(sys.stdin.encoding) - for fname in args: + if args.raw_stream: + codec = 'raw' + elif args.binary_stream: + codec = 'binary' + elif args.text_stream: + codec = 'text' + else: + codec = None + + if args.extract_toc: + extractdir = None + proc = dumpoutline + elif args.extract_embedded: + extractdir = args.extract_embedded + proc = extractembedded + else: + extractdir = None + proc = dumppdf + + for fname in args.files: proc(outfp, fname, objids, pagenos, password=password, - dumpall=dumpall, codec=codec, extractdir=extractdir) + dumpall=args.all, codec=codec, extractdir=extractdir) outfp.close() -if __name__ == '__main__': sys.exit(main(sys.argv)) + +if __name__ == '__main__': + sys.exit(main()) diff --git a/tools/pdf2html.cgi b/tools/pdf2html.cgi deleted file mode 100755 index e2ea964..0000000 --- a/tools/pdf2html.cgi +++ /dev/null @@ -1,215 +0,0 @@ -#!/usr/bin/env python -O -# -# pdf2html.cgi - Gateway script for converting PDF into HTML. -# -# Security consideration for public access: -# -# Limit the process size and/or maximum cpu time. -# The process should be chrooted. -# The user should be imposed quota. -# -# How to Setup: -# $ mkdir $CGIDIR -# $ mkdir $CGIDIR/var -# $ python setup.py install_lib --install-dir=$CGIDIR -# $ cp pdfminer/tools/pdf2html.cgi $CGIDIR -# - -import sys, os, os.path, re, time -import cgi, logging, traceback, random -# comment out at this at runtime. -#import cgitb; cgitb.enable() -import pdfminer -from pdfminer.pdfdocument import PDFDocument -from pdfminer.pdfpage import PDFPage -from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter -from pdfminer.converter import HTMLConverter, TextConverter -from pdfminer.layout import LAParams - -import six #Python 2+3 compatibility - -# quote HTML metacharacters -def q(x): - return x.replace('&','&').replace('>','>').replace('<','<').replace('"','"') - -# encode parameters as a URL -Q = re.compile(r'[^a-zA-Z0-9_.-=]') -def url(base, **kw): - r = [] - for (k,v) in six.iteritems(kw): - v = Q.sub(lambda m: '%%%02X' % ord(m.group(0)), encoder(q(v), 'replace')[0]) - r.append('%s=%s' % (k, v)) - return base+'&'.join(r) - - -## convert -## -class FileSizeExceeded(ValueError): pass -def convert(infp, outfp, path, codec='utf-8', - maxpages=0, maxfilesize=0, pagenos=None, - html=True): - # save the input file. - src = open(path, 'wb') - nbytes = 0 - while 1: - data = infp.read(4096) - nbytes += len(data) - if maxfilesize and maxfilesize < nbytes: - raise FileSizeExceeded(maxfilesize) - if not data: break - src.write(data) - src.close() - infp.close() - # perform conversion and - # send the results over the network. - rsrcmgr = PDFResourceManager() - laparams = LAParams() - if html: - device = HTMLConverter(rsrcmgr, outfp, codec=codec, laparams=laparams, - layoutmode='exact') - else: - device = TextConverter(rsrcmgr, outfp, codec=codec, laparams=laparams) - fp = open(path, 'rb') - interpreter = PDFPageInterpreter(rsrcmgr, device) - for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages): - interpreter.process_page(page) - fp.close() - device.close() - return - - -## WebApp -## -class WebApp(object): - - TITLE = 'pdf2html demo' - MAXFILESIZE = 10000000 # set to zero if unlimited. - MAXPAGES = 100 # set to zero if unlimited. - - def __init__(self, infp=sys.stdin, outfp=sys.stdout, environ=os.environ, - codec='utf-8', apppath='/'): - self.infp = infp - self.outfp = outfp - self.environ = environ - self.codec = codec - self.apppath = apppath - self.remote_addr = self.environ.get('REMOTE_ADDR') - self.path_info = self.environ.get('PATH_INFO') - self.method = self.environ.get('REQUEST_METHOD', 'GET').upper() - self.server = self.environ.get('SERVER_SOFTWARE', '') - self.tmpdir = self.environ.get('TEMP', './var/') - self.content_type = 'text/html; charset=%s' % codec - self.logger = logging.getLogger() - return - - def put(self, *args): - for x in args: - if isinstance(x, str): - self.outfp.write(x) - elif isinstance(x, unicode): - self.outfp.write(x.encode(self.codec, 'xmlcharrefreplace')) - return - - def response_200(self): - if self.server.startswith('cgi-httpd'): - # required for cgi-httpd - self.outfp.write('HTTP/1.0 200 OK\r\n') - self.outfp.write('Content-type: %s\r\n' % self.content_type) - self.outfp.write('Connection: close\r\n\r\n') - return - - def response_404(self): - if self.server.startswith('cgi-httpd'): - # required for cgi-httpd - self.outfp.write('HTTP/1.0 404 Not Found\r\n') - self.outfp.write('Content-type: text/html\r\n') - self.outfp.write('Connection: close\r\n\r\n') - self.outfp.write('page does not exist\n') - return - - def response_301(self, url): - if self.server.startswith('cgi-httpd'): - # required for cgi-httpd - self.outfp.write('HTTP/1.0 301 Moved\r\n') - self.outfp.write('Location: %s\r\n\r\n' % url) - return - - def coverpage(self): - self.put( - '%s\n' % q(self.TITLE), - '

%s


\n' % q(self.TITLE), - '
\n' % q(self.apppath), - '

Upload PDF File: \n', - '  Page numbers (comma-separated):\n', - '\n', - '

(Text extraction is limited to maximum %d pages.\n' % self.MAXPAGES, - 'Maximum file size for input is %d bytes.)\n' % self.MAXFILESIZE, - '

\n', - '\n', - '\n', - '


\n', - '

Powered by PDFMiner-%s\n' % pdfminer.__version__, - '\n', - ) - return - - def setup(self): - self.run = self.response_404 - status = 404 - if not os.path.isdir(self.tmpdir): - self.logger.error('no tmpdir') - status = 304 - elif self.path_info == self.apppath: - self.run = self.convert - status = 200 - return status - - def convert(self): - form = cgi.FieldStorage(fp=self.infp, environ=self.environ) - if (self.method != 'POST' or - 'c' not in form or - 'f' not in form): - self.response_200() - self.coverpage() - return - item = form['f'] - if not (item.file and item.filename): - self.response_200() - self.coverpage() - return - cmd = form.getvalue('c') - html = (cmd == 'Convert to HTML') - pagenos = [] - if 'p' in form: - for m in re.finditer(r'\d+', form.getvalue('p')): - try: - pagenos.append(int(m.group(0))) - except ValueError: - pass - h = abs(hash((random.random(), self.remote_addr, item.filename))) - tmppath = os.path.join(self.tmpdir, '%08x%08x.pdf' % (time.time(), h)) - self.logger.info('received: host=%s, name=%r, pagenos=%r, tmppath=%r' % - (self.remote_addr, item.filename, pagenos, tmppath)) - try: - if not html: - self.content_type = 'text/plain; charset=%s' % self.codec - self.response_200() - try: - convert(item.file, self.outfp, tmppath, pagenos=pagenos, codec=self.codec, - maxpages=self.MAXPAGES, maxfilesize=self.MAXFILESIZE, html=html) - except Exception as e: - self.put('

Sorry, an error has occurred: %s' % q(repr(e))) - self.logger.error('convert: %r: path=%r: %s' % (e, traceback.format_exc())) - finally: - try: - os.remove(tmppath) - except: - pass - return - - -# main -if __name__ == '__main__': - app = WebApp() - app.setup() - sys.exit(app.run()) diff --git a/tools/pdf2txt.py b/tools/pdf2txt.py index 436cc97..d370a13 100755 --- a/tools/pdf2txt.py +++ b/tools/pdf2txt.py @@ -1,29 +1,30 @@ -#!/usr/bin/env python - -""" -Converts PDF text content (though not images containing text) to plain text, html, xml or "tags". -""" +"""A command line tool for extracting text and images from PDF and output it to plain text, html, xml or tags.""" import argparse import logging -import six import sys -import pdfminer.settings -pdfminer.settings.STRICT = False +import six + import pdfminer.high_level import pdfminer.layout from pdfminer.image import ImageWriter +logging.basicConfig() + def extract_text(files=[], outfile='-', - _py2_no_more_posargs=None, # Bloody Python2 needs a shim no_laparams=False, all_texts=None, detect_vertical=None, # LAParams word_margin=None, char_margin=None, line_margin=None, boxes_flow=None, # LAParams output_type='text', codec='utf-8', strip_control=False, maxpages=0, page_numbers=None, password="", scale=1.0, rotation=0, layoutmode='normal', output_dir=None, debug=False, - disable_caching=False, **other): - if _py2_no_more_posargs is not None: - raise ValueError("Too many positional arguments passed.") + disable_caching=False, **kwargs): + if '_py2_no_more_posargs' in kwargs is not None: + raise DeprecationWarning( + 'The `_py2_no_more_posargs will be removed on January, 2020. At ' + 'that moment pdfminer.six will stop supporting Python 2. Please ' + 'upgrade to Python 3. For more information see ' + 'https://github.com/pdfminer/pdfminer .six/issues/194') + if not files: raise ValueError("Must provide files to work upon!") @@ -66,28 +67,68 @@ def extract_text(files=[], outfile='-', def maketheparser(): parser = argparse.ArgumentParser(description=__doc__, add_help=True) - parser.add_argument("files", type=str, default=None, nargs="+", help="File to process.") - parser.add_argument("-d", "--debug", default=False, action="store_true", help="Debug output.") - parser.add_argument("-p", "--pagenos", type=str, help="Comma-separated list of page numbers to parse. Included for legacy applications, use --page-numbers for more idiomatic argument entry.") - parser.add_argument("--page-numbers", type=int, default=None, nargs="+", help="Alternative to --pagenos with space-separated numbers; supercedes --pagenos where it is used.") - parser.add_argument("-m", "--maxpages", type=int, default=0, help="Maximum pages to parse") - parser.add_argument("-P", "--password", type=str, default="", help="Decryption password for PDF") - parser.add_argument("-o", "--outfile", type=str, default="-", help="Output file (default \"-\" is stdout)") - parser.add_argument("-t", "--output_type", type=str, default="text", help="Output type: text|html|xml|tag (default is text)") - parser.add_argument("-c", "--codec", type=str, default="utf-8", help="Text encoding") - parser.add_argument("-s", "--scale", type=float, default=1.0, help="Scale") - parser.add_argument("-A", "--all-texts", default=None, action="store_true", help="LAParams all texts") - parser.add_argument("-V", "--detect-vertical", default=None, action="store_true", help="LAParams detect vertical") - parser.add_argument("-W", "--word-margin", type=float, default=None, help="LAParams word margin") - parser.add_argument("-M", "--char-margin", type=float, default=None, help="LAParams char margin") - parser.add_argument("-L", "--line-margin", type=float, default=None, help="LAParams line margin") - parser.add_argument("-F", "--boxes-flow", type=float, default=None, help="LAParams boxes flow") - parser.add_argument("-Y", "--layoutmode", default="normal", type=str, help="HTML Layout Mode") - parser.add_argument("-n", "--no-laparams", default=False, action="store_true", help="Pass None as LAParams") - parser.add_argument("-R", "--rotation", default=0, type=int, help="Rotation") - parser.add_argument("-O", "--output-dir", default=None, help="Output directory for images") - parser.add_argument("-C", "--disable-caching", default=False, action="store_true", help="Disable caching") - parser.add_argument("-S", "--strip-control", default=False, action="store_true", help="Strip control in XML mode") + parser.add_argument("files", type=str, default=None, nargs="+", help="One or more paths to PDF files.") + + parser.add_argument("--debug", "-d", default=False, action="store_true", + help="Use debug logging level.") + parser.add_argument("--disable-caching", "-C", default=False, action="store_true", + help="If caching or resources, such as fonts, should be disabled.") + + parse_params = parser.add_argument_group('Parser', description='Used during PDF parsing') + parse_params.add_argument("--page-numbers", type=int, default=None, nargs="+", + help="A space-seperated list of page numbers to parse.") + parse_params.add_argument("--pagenos", "-p", type=str, + help="A comma-separated list of page numbers to parse. Included for legacy applications, " + "use --page-numbers for more idiomatic argument entry.") + parse_params.add_argument("--maxpages", "-m", type=int, default=0, + help="The maximum number of pages to parse.") + parse_params.add_argument("--password", "-P", type=str, default="", + help="The password to use for decrypting PDF file.") + parse_params.add_argument("--rotation", "-R", default=0, type=int, + help="The number of degrees to rotate the PDF before other types of processing.") + + la_params = parser.add_argument_group('Layout analysis', description='Used during layout analysis.') + la_params.add_argument("--no-laparams", "-n", default=False, action="store_true", + help="If layout analysis parameters should be ignored.") + la_params.add_argument("--detect-vertical", "-V", default=False, action="store_true", + help="If vertical text should be considered during layout analysis") + la_params.add_argument("--char-margin", "-M", type=float, default=2.0, + help="If two characters are closer together than this margin they are considered to be part " + "of the same word. The margin is specified relative to the width of the character.") + la_params.add_argument("--word-margin", "-W", type=float, default=0.1, + help="If two words are are closer together than this margin they are considered to be part " + "of the same line. A space is added in between for readability. The margin is " + "specified relative to the width of the word.") + la_params.add_argument("--line-margin", "-L", type=float, default=0.5, + help="If two lines are are close together they are considered to be part of the same " + "paragraph. The margin is specified relative to the height of a line.") + la_params.add_argument("--boxes-flow", "-F", type=float, default=0.5, + help="Specifies how much a horizontal and vertical position of a text matters when " + "determining the order of lines. The value should be within the range of -1.0 (only " + "horizontal position matters) to +1.0 (only vertical position matters).") + la_params.add_argument("--all-texts", "-A", default=True, action="store_true", + help="If layout analysis should be performed on text in figures.") + + output_params = parser.add_argument_group('Output', description='Used during output generation.') + output_params.add_argument("--outfile", "-o", type=str, default="-", + help="Path to file where output is written. Or \"-\" (default) to write to stdout.") + output_params.add_argument("--output_type", "-t", type=str, default="text", + help="Type of output to generate {text,html,xml,tag}.") + output_params.add_argument("--codec", "-c", type=str, default="utf-8", + help="Text encoding to use in output file.") + output_params.add_argument("--output-dir", "-O", default=None, + help="The output directory to put extracted images in. If not given, images are not " + "extracted.") + output_params.add_argument("--layoutmode", "-Y", default="normal", type=str, + help="Type of layout to use when generating html {normal,exact,loose}. If normal, " + "each line is positioned separately in the html. If exact, each character is " + "positioned separately in the html. If loose, same result as normal but with an " + "additional newline after each text line. Only used when output_type is html.") + output_params.add_argument("--scale", "-s", type=float, default=1.0, + help="The amount of zoom to use when generating html file. Only used when output_type " + "is html.") + output_params.add_argument("--strip-control", "-S", default=False, action="store_true", + help="Remove control statement from text. Only used when output_type is xml.") return parser diff --git a/tools/pdf2txt.spec b/tools/pdf2txt.spec deleted file mode 100644 index c0073e6..0000000 --- a/tools/pdf2txt.spec +++ /dev/null @@ -1,30 +0,0 @@ -# -*- mode: python -*- - -block_cipher = None - - -a = Analysis(['pdf2txt.py'], - pathex=['C:\\Dev\\Python\\pdfminer.six\\tools'], - binaries=[], - datas=[], - hiddenimports=[], - hookspath=[], - runtime_hooks=[], - excludes=['django','matplotlib','PIL','numpy','qt5'], - win_no_prefer_redirects=False, - win_private_assemblies=False, - cipher=block_cipher) - -pyz = PYZ(a.pure, a.zipped_data, - cipher=block_cipher) -exe = EXE(pyz, - a.scripts, - a.binaries, - a.zipfiles, - a.datas, - name='pdf2txt', - debug=False, - strip=False, - upx=True, - runtime_tmpdir=None, - console=True ) diff --git a/tools/pdfdiff.py b/tools/pdfdiff.py index f5b8ac4..e738b75 100644 --- a/tools/pdfdiff.py +++ b/tools/pdfdiff.py @@ -11,28 +11,34 @@ pdfminer.settings.STRICT = False import pdfminer.high_level import pdfminer.layout -def compare(file1,file2,**args): - if args.get('_py2_no_more_posargs',None) is not None: - raise ValueError("Too many positional arguments passed.") +logging.basicConfig() +def compare(file1, file2, **kwargs): + if '_py2_no_more_posargs' in kwargs is not None: + raise DeprecationWarning( + 'The `_py2_no_more_posargs will be removed on January, 2020. At ' + 'that moment pdfminer.six will stop supporting Python 2. Please ' + 'upgrade to Python 3. For more information see ' + 'https://github.com/pdfminer/pdfminer .six/issues/194') + # If any LAParams group arguments were passed, create an LAParams object and # populate with given args. Otherwise, set it to None. - if args.get('laparams',None) is None: + if kwargs.get('laparams', None) is None: laparams = pdfminer.layout.LAParams() for param in ("all_texts", "detect_vertical", "word_margin", "char_margin", "line_margin", "boxes_flow"): - paramv = args.get(param, None) + paramv = kwargs.get(param, None) if paramv is not None: laparams[param]=paramv - args['laparams']=laparams + kwargs['laparams']=laparams s1=six.StringIO() with open(file1, "rb") as fp: - pdfminer.high_level.extract_text_to_fp(fp,s1, **args) + pdfminer.high_level.extract_text_to_fp(fp, s1, **kwargs) s2=six.StringIO() with open(file2, "rb") as fp: - pdfminer.high_level.extract_text_to_fp(fp,s2, **args) + pdfminer.high_level.extract_text_to_fp(fp, s2, **kwargs) import difflib s1.seek(0) @@ -41,12 +47,12 @@ def compare(file1,file2,**args): import os.path try: - extension = os.path.splitext(args['outfile'])[1][1:4] + extension = os.path.splitext(kwargs['outfile'])[1][1:4] if extension.lower()=='htm': return difflib.HtmlDiff().make_file(s1,s2) except KeyError: pass - return difflib.unified_diff(s1,s2,n=args['context_lines']) + return difflib.unified_diff(s1, s2, n=kwargs['context_lines']) # main @@ -85,10 +91,12 @@ def main(args=None): P.add_argument("-O", "--output-dir", default=None, help="Output directory for images") P.add_argument("-C", "--disable-caching", default=False, action="store_true", help="Disable caching") P.add_argument("-S", "--strip-control", default=False, action="store_true", help="Strip control in XML mode") - A = P.parse_args(args=args) + if A.debug: + logging.getLogger().setLevel(logging.DEBUG) + if A.page_numbers: A.page_numbers = set([x-1 for x in A.page_numbers]) if A.pagenos: diff --git a/tools/pdfdiff.spec b/tools/pdfdiff.spec deleted file mode 100644 index 6872b32..0000000 --- a/tools/pdfdiff.spec +++ /dev/null @@ -1,29 +0,0 @@ -# -*- mode: python -*- - -block_cipher = None - - -a = Analysis(['pdfdiff.py'], - pathex=['C:\\Dev\\Python\\pdfminer.six\\tools'], - binaries=[], - datas=[], - hiddenimports=[], - hookspath=[], - runtime_hooks=[], - excludes=['django','matplotlib','PIL','numpy','qt5'], - win_no_prefer_redirects=False, - win_private_assemblies=False, - cipher=block_cipher) -pyz = PYZ(a.pure, a.zipped_data, - cipher=block_cipher) -exe = EXE(pyz, - a.scripts, - a.binaries, - a.zipfiles, - a.datas, - name='pdfdiff', - debug=False, - strip=False, - upx=True, - runtime_tmpdir=None, - console=True ) diff --git a/tools/runapp.py b/tools/runapp.py deleted file mode 100755 index 6b953be..0000000 --- a/tools/runapp.py +++ /dev/null @@ -1,114 +0,0 @@ -#!/usr/bin/env python - -## -## WebApp class runner -## -## usage: -## $ runapp.py pdf2html.cgi -## - -import sys -import urllib -from six.moves.http_client import responses -from six.moves.BaseHTTPServer import HTTPServer -from six.moves.SimpleHTTPServer import SimpleHTTPRequestHandler - -## WebAppHandler -## -class WebAppHandler(SimpleHTTPRequestHandler): - - APP_CLASS = None - - def do_POST(self): - return self.run_cgi() - - def send_head(self): - return self.run_cgi() - - def run_cgi(self): - rest = self.path - i = rest.rfind('?') - if i >= 0: - rest, query = rest[:i], rest[i+1:] - else: - query = '' - i = rest.find('/') - if i >= 0: - script, rest = rest[:i], rest[i:] - else: - script, rest = rest, '' - scriptname = '/' + script - scriptfile = self.translate_path(scriptname) - env = {} - env['SERVER_SOFTWARE'] = self.version_string() - env['SERVER_NAME'] = self.server.server_name - env['GATEWAY_INTERFACE'] = 'CGI/1.1' - env['SERVER_PROTOCOL'] = self.protocol_version - env['SERVER_PORT'] = str(self.server.server_port) - env['REQUEST_METHOD'] = self.command - uqrest = urllib.unquote(rest) - env['PATH_INFO'] = uqrest - env['PATH_TRANSLATED'] = self.translate_path(uqrest) - env['SCRIPT_NAME'] = scriptname - if query: - env['QUERY_STRING'] = query - host = self.address_string() - if host != self.client_address[0]: - env['REMOTE_HOST'] = host - env['REMOTE_ADDR'] = self.client_address[0] - if self.headers.typeheader is None: - env['CONTENT_TYPE'] = self.headers.type - else: - env['CONTENT_TYPE'] = self.headers.typeheader - length = self.headers.getheader('content-length') - if length: - env['CONTENT_LENGTH'] = length - accept = [] - for line in self.headers.getallmatchingheaders('accept'): - if line[:1] in "\t\n\r ": - accept.append(line.strip()) - else: - accept = accept + line[7:].split(',') - env['HTTP_ACCEPT'] = ','.join(accept) - ua = self.headers.getheader('user-agent') - if ua: - env['HTTP_USER_AGENT'] = ua - co = filter(None, self.headers.getheaders('cookie')) - if co: - env['HTTP_COOKIE'] = ', '.join(co) - for k in ('QUERY_STRING', 'REMOTE_HOST', 'CONTENT_LENGTH', - 'HTTP_USER_AGENT', 'HTTP_COOKIE'): - env.setdefault(k, "") - app = self.APP_CLASS(infp=self.rfile, outfp=self.wfile, environ=env) - status = app.setup() - self.send_response(status, responses[status]) - app.run() - return - -# main -def main(argv): - import getopt, imp - def usage(): - print ('usage: %s [-h host] [-p port] [-n name] module.class' % argv[0]) - return 100 - try: - (opts, args) = getopt.getopt(argv[1:], 'h:p:n:') - except getopt.GetoptError: - return usage() - host = '' - port = 8080 - name = 'WebApp' - for (k, v) in opts: - if k == '-h': host = v - elif k == '-p': port = int(v) - elif k == '-n': name = v - if not args: return usage() - path = args.pop(0) - module = imp.load_source('app', path) - WebAppHandler.APP_CLASS = getattr(module, name) - print ('Listening %s:%d...' % (host,port)) - httpd = HTTPServer((host,port), WebAppHandler) - httpd.serve_forever() - return - -if __name__ == '__main__': sys.exit(main(sys.argv)) diff --git a/tox.ini b/tox.ini index 09c7f80..8a47713 100644 --- a/tox.ini +++ b/tox.ini @@ -1,6 +1,11 @@ [tox] -envlist = py{26, 27, 34, 35, 36} +envlist = py{27,34,35,36,37,38} [testenv] -extras = dev -commands = nosetests --nologcapture +extras = + dev + docs +commands = + nosetests --nologcapture + python -m sphinx -b html docs/source docs/build/html + python -m sphinx -b doctest docs/source docs/build/doctest